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, CONFIGURE_REQUEST 1887 uint16_t source_cid = l2cap_signaling_responses[0].cid; // CONNECTION_REQUEST, REJECT_SM_PAIRING, DISCONNECT_REQUEST, CONFIGURE_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 CONFIGURE_REQUEST: 1911 little_endian_store_16(buffer, 0, source_cid); 1912 little_endian_store_16(buffer, 2, 0); 1913 l2cap_send_classic_signaling_packet(handle, COMMAND_REJECT, sig_id, result, 4, buffer); 1914 break; 1915 case ECHO_REQUEST: 1916 l2cap_send_classic_signaling_packet(handle, ECHO_RESPONSE, sig_id, 0, NULL); 1917 break; 1918 case INFORMATION_REQUEST: 1919 switch (info_type){ 1920 case L2CAP_INFO_TYPE_CONNECTIONLESS_MTU: { 1921 uint16_t connectionless_mtu = hci_max_acl_data_packet_length(); 1922 l2cap_send_classic_signaling_packet(handle, INFORMATION_RESPONSE, sig_id, info_type, 0, 1923 sizeof(connectionless_mtu), &connectionless_mtu); 1924 } 1925 break; 1926 case L2CAP_INFO_TYPE_EXTENDED_FEATURES_SUPPORTED: { 1927 uint32_t features = l2cap_extended_features_mask(); 1928 l2cap_send_classic_signaling_packet(handle, INFORMATION_RESPONSE, sig_id, info_type, 0, 1929 sizeof(features), &features); 1930 } 1931 break; 1932 case L2CAP_INFO_TYPE_FIXED_CHANNELS_SUPPORTED: { 1933 uint8_t map[8]; 1934 memset(map, 0, 8); 1935 // L2CAP Signaling Channel + Connectionless reception 1936 map[0] = (1 << L2CAP_CID_SIGNALING) | (1 << L2CAP_CID_CONNECTIONLESS_CHANNEL); 1937 #if defined (ENABLE_EXPLICIT_BR_EDR_SECURITY_MANAGER) || (defined(ENABLE_BLE) && defined(ENABLE_CROSS_TRANSPORT_KEY_DERIVATION)) 1938 // BR/EDR Security Manager (bit 7) if BR/EDR Secure Connections possible 1939 if (gap_secure_connections_active()){ 1940 map[0] |= (1 << L2CAP_CID_BR_EDR_SECURITY_MANAGER); 1941 } 1942 #endif 1943 l2cap_send_classic_signaling_packet(handle, INFORMATION_RESPONSE, sig_id, info_type, 0, 1944 sizeof(map), &map); 1945 } 1946 break; 1947 default: 1948 // all other types are not supported 1949 l2cap_send_classic_signaling_packet(handle, INFORMATION_RESPONSE, sig_id, info_type, 1, 0, NULL); 1950 break; 1951 } 1952 break; 1953 case COMMAND_REJECT: 1954 l2cap_send_classic_signaling_packet(handle, COMMAND_REJECT, sig_id, result, 0, NULL); 1955 break; 1956 #endif 1957 #ifdef ENABLE_BLE 1958 case LE_CREDIT_BASED_CONNECTION_REQUEST: 1959 l2cap_send_le_signaling_packet(handle, LE_CREDIT_BASED_CONNECTION_RESPONSE, sig_id, 0, 0, 0, 0, result); 1960 break; 1961 case DISCONNECTION_REQUEST: 1962 // Invalid CID, local cid, remote cid 1963 little_endian_store_16(buffer, 0, result); 1964 little_endian_store_16(buffer, 2, source_cid); 1965 l2cap_send_le_signaling_packet(handle, COMMAND_REJECT, sig_id, 0x0002, 4, buffer); 1966 break; 1967 case COMMAND_REJECT_LE: 1968 l2cap_send_le_signaling_packet(handle, COMMAND_REJECT, sig_id, result, 0, NULL); 1969 break; 1970 #endif 1971 #ifdef ENABLE_L2CAP_ENHANCED_CREDIT_BASED_FLOW_CONTROL_MODE 1972 case L2CAP_CREDIT_BASED_CONNECTION_REQUEST: { 1973 // send variable size array or cids with each cid being zero 1974 uint16_t cids[6]; 1975 (void) memset(cids, 0xff, sizeof(cids)); 1976 (void) memset(cids, 0x00, num_channels * sizeof(uint16_t)); 1977 l2cap_send_general_signaling_packet(handle, signaling_cid, L2CAP_CREDIT_BASED_CONNECTION_RESPONSE, 1978 sig_id, 0, 0, 0, result, cids); 1979 break; 1980 } 1981 1982 case L2CAP_CREDIT_BASED_RECONFIGURE_REQUEST: 1983 l2cap_send_general_signaling_packet(handle, signaling_cid, L2CAP_CREDIT_BASED_RECONFIGURE_RESPONSE, 1984 sig_id, result); 1985 break; 1986 #endif 1987 case SM_PAIRING_FAILED: 1988 buffer[0] = SM_CODE_PAIRING_FAILED; 1989 buffer[1] = (uint8_t) result; 1990 l2cap_send_connectionless(handle, source_cid, buffer, 2); 1991 break; 1992 default: 1993 // should not happen 1994 break; 1995 } 1996 } 1997 } 1998 1999 #ifdef ENABLE_CLASSIC 2000 static bool l2ap_run_information_requests(void){ 2001 // send l2cap information request if requested 2002 btstack_linked_list_iterator_t it; 2003 hci_connections_get_iterator(&it); 2004 uint8_t info_type; 2005 l2cap_information_state_t new_state; 2006 while(btstack_linked_list_iterator_has_next(&it)){ 2007 hci_connection_t * connection = (hci_connection_t *) btstack_linked_list_iterator_next(&it); 2008 switch (connection->l2cap_state.information_state){ 2009 case L2CAP_INFORMATION_STATE_W2_SEND_EXTENDED_FEATURE_REQUEST: 2010 info_type = L2CAP_INFO_TYPE_EXTENDED_FEATURES_SUPPORTED; 2011 new_state = L2CAP_INFORMATION_STATE_W4_EXTENDED_FEATURE_RESPONSE; 2012 break; 2013 case L2CAP_INFORMATION_STATE_W2_SEND_FIXED_CHANNELS_REQUEST: 2014 info_type = L2CAP_INFO_TYPE_FIXED_CHANNELS_SUPPORTED; 2015 new_state = L2CAP_INFORMATION_STATE_W4_FIXED_CHANNELS_RESPONSE; 2016 break; 2017 default: 2018 continue; 2019 } 2020 if (!hci_can_send_acl_packet_now(connection->con_handle)) break; 2021 2022 connection->l2cap_state.information_state = new_state; 2023 uint8_t sig_id = l2cap_next_sig_id(); 2024 l2cap_send_classic_signaling_packet(connection->con_handle, INFORMATION_REQUEST, sig_id, info_type); 2025 } 2026 return false; 2027 } 2028 #endif 2029 2030 #ifdef ENABLE_L2CAP_LE_CREDIT_BASED_FLOW_CONTROL_MODE 2031 // returns true if channel has been closed 2032 static bool l2cap_cbm_run_channel(l2cap_channel_t * channel) { 2033 uint16_t mps; 2034 bool channel_closed = false; 2035 // log_info("l2cap_run: channel %p, state %u, var 0x%02x", channel, channel->state, channel->state_var); 2036 switch (channel->state){ 2037 case L2CAP_STATE_WILL_SEND_LE_CONNECTION_REQUEST: 2038 channel->state = L2CAP_STATE_WAIT_LE_CONNECTION_RESPONSE; 2039 // le psm, source cid, mtu, mps, initial credits 2040 channel->local_sig_id = l2cap_next_sig_id(); 2041 channel->credits_incoming = channel->new_credits_incoming; 2042 channel->new_credits_incoming = 0; 2043 channel->local_mps = btstack_min(l2cap_max_le_mtu(), channel->local_mtu); 2044 l2cap_send_le_signaling_packet( channel->con_handle, LE_CREDIT_BASED_CONNECTION_REQUEST, 2045 channel->local_sig_id, channel->psm, channel->local_cid, channel->local_mtu, 2046 channel->local_mps, channel->credits_incoming); 2047 break; 2048 case L2CAP_STATE_WILL_SEND_LE_CONNECTION_RESPONSE_ACCEPT: 2049 // TODO: support larger MPS 2050 channel->state = L2CAP_STATE_OPEN; 2051 channel->credits_incoming = channel->new_credits_incoming; 2052 channel->new_credits_incoming = 0; 2053 mps = btstack_min(l2cap_max_le_mtu(), channel->local_mtu); 2054 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); 2055 // notify client 2056 l2cap_cbm_emit_channel_opened(channel, ERROR_CODE_SUCCESS); 2057 break; 2058 case L2CAP_STATE_WILL_SEND_LE_CONNECTION_RESPONSE_DECLINE: 2059 channel->state = L2CAP_STATE_INVALID; 2060 l2cap_send_le_signaling_packet(channel->con_handle, LE_CREDIT_BASED_CONNECTION_RESPONSE, channel->remote_sig_id, 0, 0, 0, 0, channel->reason); 2061 channel_closed = true; 2062 break; 2063 case L2CAP_STATE_OPEN: 2064 if (channel->new_credits_incoming){ 2065 l2cap_credit_based_send_credits(channel); 2066 } 2067 break; 2068 case L2CAP_STATE_WILL_SEND_DISCONNECT_REQUEST: 2069 channel->local_sig_id = l2cap_next_sig_id(); 2070 channel->state = L2CAP_STATE_WAIT_DISCONNECT; 2071 l2cap_send_le_signaling_packet( channel->con_handle, DISCONNECTION_REQUEST, channel->local_sig_id, channel->remote_cid, channel->local_cid); 2072 break; 2073 case L2CAP_STATE_WILL_SEND_DISCONNECT_RESPONSE: 2074 channel->state = L2CAP_STATE_INVALID; 2075 l2cap_send_le_signaling_packet( channel->con_handle, DISCONNECTION_RESPONSE, channel->remote_sig_id, channel->local_cid, channel->remote_cid); 2076 l2cap_cbm_finialize_channel_close(channel); // -- remove from list 2077 break; 2078 default: 2079 break; 2080 } 2081 return channel_closed; 2082 } 2083 2084 static void l2cap_cbm_run_channels(void){ 2085 btstack_linked_list_iterator_t it; 2086 btstack_linked_list_iterator_init(&it, &l2cap_channels); 2087 while (btstack_linked_list_iterator_has_next(&it)){ 2088 l2cap_channel_t * channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it); 2089 2090 if (channel->channel_type != L2CAP_CHANNEL_TYPE_CHANNEL_CBM) continue; 2091 if (!hci_can_send_acl_packet_now(channel->con_handle)) continue; 2092 2093 bool channel_closed = l2cap_cbm_run_channel(channel); 2094 if (channel_closed) { 2095 // discard channel - l2cap_finialize_channel_close without sending l2cap close event 2096 btstack_linked_list_iterator_remove(&it); 2097 l2cap_free_channel_entry(channel); 2098 } 2099 } 2100 } 2101 2102 static inline uint8_t l2cap_cbm_status_for_result(uint16_t result) { 2103 switch (result) { 2104 case L2CAP_CBM_CONNECTION_RESULT_SUCCESS: 2105 return ERROR_CODE_SUCCESS; 2106 case L2CAP_CBM_CONNECTION_RESULT_SPSM_NOT_SUPPORTED: 2107 return L2CAP_CONNECTION_RESPONSE_RESULT_REFUSED_PSM; 2108 case L2CAP_CBM_CONNECTION_RESULT_NO_RESOURCES_AVAILABLE: 2109 return L2CAP_CONNECTION_RESPONSE_RESULT_REFUSED_RESOURCES; 2110 case L2CAP_CBM_CONNECTION_RESULT_INSUFFICIENT_AUTHENTICATION: 2111 case L2CAP_CBM_CONNECTION_RESULT_INSUFFICIENT_AUTHORIZATION: 2112 case L2CAP_CBM_CONNECTION_RESULT_ENCYRPTION_KEY_SIZE_TOO_SHORT: 2113 case L2CAP_CBM_CONNECTION_RESULT_INSUFFICIENT_ENCRYPTION: 2114 return L2CAP_CONNECTION_RESPONSE_RESULT_REFUSED_SECURITY; 2115 default: 2116 // invalid Source CID, Source CID already allocated, unacceptable parameters 2117 return L2CAP_CONNECTION_RESPONSE_UNKNOWN_ERROR; 2118 } 2119 } 2120 2121 #endif 2122 2123 #ifdef ENABLE_L2CAP_ENHANCED_CREDIT_BASED_FLOW_CONTROL_MODE 2124 2125 static void l2cap_run_trigger_callback(void * context){ 2126 UNUSED(context); 2127 l2cap_run(); 2128 } 2129 2130 static void l2cap_run_trigger(void){ 2131 btstack_run_loop_execute_on_main_thread(&l2cap_trigger_run_registration); 2132 } 2133 2134 // 11BH22222 2135 static void l2cap_ecbm_emit_channel_opened(l2cap_channel_t *channel, uint8_t status) { 2136 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", 2137 status, channel->address_type, bd_addr_to_str(channel->address), channel->con_handle, channel->psm, 2138 channel->local_cid, channel->remote_cid, channel->local_mtu, channel->remote_mtu); 2139 uint8_t event[23]; 2140 event[0] = L2CAP_EVENT_ECBM_CHANNEL_OPENED; 2141 event[1] = sizeof(event) - 2u; 2142 event[2] = status; 2143 event[3] = channel->address_type; 2144 reverse_bd_addr(channel->address, &event[4]); 2145 little_endian_store_16(event, 10, channel->con_handle); 2146 event[12] = (channel->state_var & L2CAP_CHANNEL_STATE_VAR_INCOMING) ? 1 : 0; 2147 little_endian_store_16(event, 13, channel->psm); 2148 little_endian_store_16(event, 15, channel->local_cid); 2149 little_endian_store_16(event, 17, channel->remote_cid); 2150 little_endian_store_16(event, 19, channel->local_mtu); 2151 little_endian_store_16(event, 21, channel->remote_mtu); 2152 hci_dump_packet(HCI_EVENT_PACKET, 1, event, sizeof(event)); 2153 l2cap_dispatch_to_channel(channel, HCI_EVENT_PACKET, event, sizeof(event)); 2154 } 2155 2156 static void l2cap_ecbm_emit_reconfigure_complete(l2cap_channel_t *channel, uint16_t result) { 2157 // emit event 2158 uint8_t event[6]; 2159 event[0] = L2CAP_EVENT_ECBM_RECONFIGURATION_COMPLETE; 2160 event[1] = sizeof(event) - 2; 2161 little_endian_store_16(event, 2, channel->local_cid); 2162 little_endian_store_16(event, 4, result); 2163 l2cap_dispatch_to_channel(channel, HCI_EVENT_PACKET, event, sizeof(event)); 2164 } 2165 2166 static void l2cap_ecbm_run_channels(void) { 2167 hci_con_handle_t con_handle = HCI_CON_HANDLE_INVALID; 2168 // num max channels + 1 for signaling pdu generator 2169 uint16_t cids[L2CAP_ECBM_MAX_CID_ARRAY_SIZE + 1]; 2170 uint8_t num_cids = 0; 2171 uint8_t sig_id; 2172 uint16_t spsm; 2173 L2CAP_STATE matching_state; 2174 bool match_remote_sig_cid; 2175 uint8_t result = 0; 2176 uint16_t local_mtu; 2177 uint16_t initial_credits; 2178 uint16_t signaling_cid; 2179 L2CAP_STATE new_state; 2180 uint16_t local_mps; 2181 2182 // pick first channel that needs to send a combined signaling pdu and setup collection via break 2183 // then collect all others that belong to the same pdu 2184 btstack_linked_list_iterator_t it; 2185 btstack_linked_list_iterator_init(&it, &l2cap_channels); 2186 while (btstack_linked_list_iterator_has_next(&it)) { 2187 l2cap_channel_t *channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it); 2188 if (channel->channel_type != L2CAP_CHANNEL_TYPE_CHANNEL_ECBM) continue; 2189 if (con_handle == HCI_CON_HANDLE_INVALID) { 2190 switch (channel->state) { 2191 case L2CAP_STATE_WILL_SEND_ENHANCED_CONNECTION_REQUEST: 2192 if (!hci_can_send_acl_packet_now(channel->con_handle)) continue; 2193 local_mtu = channel->local_mtu; 2194 local_mps = channel->local_mps; 2195 spsm = channel->psm; 2196 result = channel->reason; 2197 initial_credits = channel->credits_incoming; 2198 sig_id = channel->local_sig_id; 2199 new_state = L2CAP_STATE_WAIT_ENHANCED_CONNECTION_RESPONSE; 2200 match_remote_sig_cid = false; 2201 break; 2202 case L2CAP_STATE_WILL_SEND_ENHANCED_CONNECTION_RESPONSE: 2203 if (!hci_can_send_acl_packet_now(channel->con_handle)) continue; 2204 local_mtu = channel->local_mtu; 2205 local_mps = channel->local_mps; 2206 initial_credits = channel->credits_incoming; 2207 sig_id = channel->remote_sig_id; 2208 new_state = L2CAP_STATE_OPEN; 2209 match_remote_sig_cid = true; 2210 break; 2211 case L2CAP_STATE_WILL_SEND_EHNANCED_RENEGOTIATION_REQUEST: 2212 if (!hci_can_send_acl_packet_now(channel->con_handle)) continue; 2213 sig_id = channel->local_sig_id; 2214 local_mtu = channel->renegotiate_mtu; 2215 local_mps = channel->local_mps; 2216 new_state = L2CAP_STATE_WAIT_ENHANCED_RENEGOTIATION_RESPONSE; 2217 match_remote_sig_cid = false; 2218 break; 2219 case L2CAP_STATE_OPEN: 2220 if (!hci_can_send_acl_packet_now(channel->con_handle)) continue; 2221 if (channel->new_credits_incoming) { 2222 l2cap_credit_based_send_credits(channel); 2223 } 2224 continue; 2225 case L2CAP_STATE_WILL_SEND_DISCONNECT_REQUEST: 2226 if (!hci_can_send_acl_packet_now(channel->con_handle)) continue; 2227 channel->local_sig_id = l2cap_next_sig_id(); 2228 channel->state = L2CAP_STATE_WAIT_DISCONNECT; 2229 signaling_cid = channel->address_type == BD_ADDR_TYPE_ACL ? L2CAP_CID_SIGNALING : L2CAP_CID_SIGNALING_LE; 2230 l2cap_send_general_signaling_packet(channel->con_handle, signaling_cid, DISCONNECTION_REQUEST, 2231 channel->local_sig_id, channel->remote_cid, channel->local_cid); 2232 continue; 2233 case L2CAP_STATE_WILL_SEND_DISCONNECT_RESPONSE: 2234 if (!hci_can_send_acl_packet_now(channel->con_handle)) continue; 2235 channel->state = L2CAP_STATE_INVALID; 2236 signaling_cid = channel->address_type == BD_ADDR_TYPE_ACL ? L2CAP_CID_SIGNALING : L2CAP_CID_SIGNALING_LE; 2237 l2cap_send_general_signaling_packet(channel->con_handle, signaling_cid, DISCONNECTION_RESPONSE, 2238 channel->remote_sig_id, channel->local_cid, 2239 channel->remote_cid); 2240 l2cap_cbm_finialize_channel_close(channel); // -- remove from list 2241 continue; 2242 default: 2243 continue; 2244 } 2245 2246 // channel picked - setup cid array and collect info 2247 (void) memset(cids, 0xff, sizeof(cids)); 2248 (void) memset(cids, 0, channel->num_cids * sizeof(uint16_t)); 2249 matching_state = channel->state; 2250 con_handle = channel->con_handle; 2251 signaling_cid = channel->address_type == BD_ADDR_TYPE_ACL ? L2CAP_CID_SIGNALING : L2CAP_CID_SIGNALING_LE; 2252 num_cids = channel->num_cids; 2253 2254 } else { 2255 // check if it matches first channel by state, con_handle, and signaling id 2256 if (matching_state != channel->state) continue; 2257 if (channel->con_handle != con_handle) continue; 2258 if (match_remote_sig_cid) { 2259 if (channel->remote_sig_id != sig_id) continue; 2260 } else { 2261 if (channel->local_sig_id != sig_id) continue; 2262 } 2263 } 2264 2265 // add this cid 2266 cids[channel->cid_index] = channel->local_cid; 2267 2268 // set new state 2269 channel->state = new_state; 2270 2271 // handle open for L2CAP_STATE_WILL_SEND_ENHANCED_CONNECTION_RESPONSE 2272 if (matching_state == L2CAP_STATE_WILL_SEND_ENHANCED_CONNECTION_RESPONSE) { 2273 if (channel->reason == L2CAP_ECBM_CONNECTION_RESULT_ALL_SUCCESS) { 2274 l2cap_ecbm_emit_channel_opened(channel, ERROR_CODE_SUCCESS); 2275 } else { 2276 result = channel->reason; 2277 btstack_linked_list_iterator_remove(&it); 2278 btstack_memory_l2cap_channel_free(channel); 2279 } 2280 } 2281 } 2282 2283 if (con_handle != HCI_CON_HANDLE_INVALID) { 2284 switch (matching_state) { 2285 case L2CAP_STATE_WILL_SEND_ENHANCED_CONNECTION_REQUEST: 2286 log_info("send combined connection request for %u cids", num_cids); 2287 l2cap_send_general_signaling_packet(con_handle, signaling_cid, L2CAP_CREDIT_BASED_CONNECTION_REQUEST, 2288 sig_id, spsm, local_mtu, local_mps, initial_credits, cids); 2289 break; 2290 case L2CAP_STATE_WILL_SEND_ENHANCED_CONNECTION_RESPONSE: 2291 log_info("send combined connection response for %u cids", num_cids); 2292 l2cap_send_general_signaling_packet(con_handle, signaling_cid, L2CAP_CREDIT_BASED_CONNECTION_RESPONSE, 2293 sig_id, local_mtu, local_mps, initial_credits, result, cids); 2294 break; 2295 case L2CAP_STATE_WILL_SEND_EHNANCED_RENEGOTIATION_REQUEST: 2296 log_info("send combined renegotiation request for %u cids", num_cids); 2297 l2cap_send_general_signaling_packet(con_handle, signaling_cid, L2CAP_CREDIT_BASED_RECONFIGURE_REQUEST, 2298 sig_id, local_mtu, local_mps, cids); 2299 break; 2300 default: 2301 break; 2302 } 2303 } 2304 } 2305 #endif 2306 2307 // MARK: L2CAP_RUN 2308 // process outstanding signaling tasks 2309 static void l2cap_run(void){ 2310 2311 // log_info("l2cap_run: entered"); 2312 l2cap_run_signaling_response(); 2313 2314 #ifdef ENABLE_CLASSIC 2315 bool done = l2ap_run_information_requests(); 2316 if (done) return; 2317 #endif 2318 2319 #if defined(ENABLE_CLASSIC) || defined(ENABLE_BLE) 2320 btstack_linked_list_iterator_t it; 2321 #endif 2322 2323 #ifdef ENABLE_CLASSIC 2324 btstack_linked_list_iterator_init(&it, &l2cap_channels); 2325 while (btstack_linked_list_iterator_has_next(&it)){ 2326 2327 l2cap_channel_t * channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it); 2328 2329 if (channel->channel_type != L2CAP_CHANNEL_TYPE_CLASSIC) continue; 2330 2331 // log_info("l2cap_run: channel %p, state %u, var 0x%02x", channel, channel->state, channel->state_var); 2332 bool finalized = l2cap_run_for_classic_channel(channel); 2333 2334 if (!finalized) { 2335 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE 2336 l2cap_run_for_classic_channel_ertm(channel); 2337 #endif 2338 } 2339 } 2340 #endif 2341 2342 #ifdef ENABLE_L2CAP_LE_CREDIT_BASED_FLOW_CONTROL_MODE 2343 l2cap_cbm_run_channels(); 2344 #endif 2345 2346 #ifdef ENABLE_L2CAP_ENHANCED_CREDIT_BASED_FLOW_CONTROL_MODE 2347 l2cap_ecbm_run_channels(); 2348 #endif 2349 2350 #ifdef ENABLE_BLE 2351 // send l2cap con paramter update if necessary 2352 hci_connections_get_iterator(&it); 2353 while(btstack_linked_list_iterator_has_next(&it)){ 2354 hci_connection_t * connection = (hci_connection_t *) btstack_linked_list_iterator_next(&it); 2355 if ((connection->address_type != BD_ADDR_TYPE_LE_PUBLIC) && (connection->address_type != BD_ADDR_TYPE_LE_RANDOM)) continue; 2356 if (!hci_can_send_acl_packet_now(connection->con_handle)) continue; 2357 switch (connection->le_con_parameter_update_state){ 2358 case CON_PARAMETER_UPDATE_SEND_REQUEST: 2359 connection->le_con_parameter_update_state = CON_PARAMETER_UPDATE_NONE; 2360 l2cap_send_le_signaling_packet(connection->con_handle, CONNECTION_PARAMETER_UPDATE_REQUEST, l2cap_next_sig_id(), 2361 connection->le_conn_interval_min, connection->le_conn_interval_max, connection->le_conn_latency, connection->le_supervision_timeout); 2362 break; 2363 case CON_PARAMETER_UPDATE_SEND_RESPONSE: 2364 connection->le_con_parameter_update_state = CON_PARAMETER_UPDATE_CHANGE_HCI_CON_PARAMETERS; 2365 l2cap_send_le_signaling_packet(connection->con_handle, CONNECTION_PARAMETER_UPDATE_RESPONSE, connection->le_con_param_update_identifier, 0); 2366 break; 2367 case CON_PARAMETER_UPDATE_DENY: 2368 connection->le_con_parameter_update_state = CON_PARAMETER_UPDATE_NONE; 2369 l2cap_send_le_signaling_packet(connection->con_handle, CONNECTION_PARAMETER_UPDATE_RESPONSE, connection->le_con_param_update_identifier, 1); 2370 break; 2371 default: 2372 break; 2373 } 2374 } 2375 #endif 2376 2377 if (l2cap_call_notify_channel_in_run){ 2378 l2cap_call_notify_channel_in_run = false; 2379 l2cap_notify_channel_can_send(); 2380 } 2381 2382 // log_info("l2cap_run: exit"); 2383 } 2384 2385 #ifdef ENABLE_CLASSIC 2386 static void l2cap_ready_to_connect(l2cap_channel_t * channel){ 2387 2388 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE 2389 // assumption: outgoing connection 2390 if (channel->mode == L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION){ 2391 // ERTM requested: trigger information request if not already started then wait for response 2392 hci_connection_t * connection = hci_connection_for_handle(channel->con_handle); 2393 switch (connection->l2cap_state.information_state){ 2394 case L2CAP_INFORMATION_STATE_DONE: 2395 break; 2396 case L2CAP_INFORMATION_STATE_IDLE: 2397 connection->l2cap_state.information_state = L2CAP_INFORMATION_STATE_W2_SEND_EXTENDED_FEATURE_REQUEST; 2398 /* fall through */ 2399 default: 2400 channel->state = L2CAP_STATE_WAIT_OUTGOING_EXTENDED_FEATURES; 2401 return; 2402 } 2403 } 2404 #endif 2405 2406 // fine, go ahead 2407 channel->state = L2CAP_STATE_WILL_SEND_CONNECTION_REQUEST; 2408 } 2409 2410 static void l2cap_handle_connection_complete(hci_con_handle_t con_handle, l2cap_channel_t * channel){ 2411 if ((channel->state == L2CAP_STATE_WAIT_CONNECTION_COMPLETE) || (channel->state == L2CAP_STATE_WILL_SEND_CREATE_CONNECTION)) { 2412 log_info("connection complete con_handle %04x - for channel %p cid 0x%04x", (int) con_handle, channel, channel->local_cid); 2413 channel->con_handle = con_handle; 2414 // query remote features if pairing is required 2415 if (channel->required_security_level > LEVEL_0){ 2416 channel->state = L2CAP_STATE_WAIT_REMOTE_SUPPORTED_FEATURES; 2417 hci_remote_features_query(con_handle); 2418 } else { 2419 l2cap_ready_to_connect(channel); 2420 } 2421 } 2422 } 2423 2424 static void l2cap_handle_remote_supported_features_received(l2cap_channel_t * channel){ 2425 if (channel->state != L2CAP_STATE_WAIT_REMOTE_SUPPORTED_FEATURES) return; 2426 2427 bool security_required = channel->required_security_level > LEVEL_0; 2428 2429 if ((channel->state_var & L2CAP_CHANNEL_STATE_VAR_INCOMING) != 0){ 2430 2431 // Core V5.2, Vol 3, Part C, 5.2.2.2 - Security Mode 4 2432 // When a remote device attempts to access a service offered by a Bluetooth device that is in security mode 4 2433 // and a sufficient link key exists and authentication has not been performed the local device shall authenticate 2434 // the remote device and enable encryption after the channel establishment request is received but before a channel 2435 // establishment confirmation (L2CAP_ConnectRsp with result code of 0x0000 or a higher-level channel establishment 2436 // confirmation such as that of RFCOMM) is sent. 2437 2438 // If the remote device has indicated support for Secure Simple Pairing, a channel establishment request is 2439 // received for a service other than SDP, and encryption has not yet been enabled, then the local device shall 2440 // disconnect the ACL link with error code 0x05 - Authentication Failure. 2441 2442 // => Disconnect if l2cap request received in mode 4 and ssp supported, non-sdp psm, not encrypted, no link key available 2443 if ((gap_get_security_mode() == GAP_SECURITY_MODE_4) 2444 && gap_ssp_supported_on_both_sides(channel->con_handle) 2445 && (channel->psm != PSM_SDP) 2446 && (gap_encryption_key_size(channel->con_handle) == 0)){ 2447 hci_disconnect_security_block(channel->con_handle); 2448 return; 2449 } 2450 2451 // incoming: assert security requirements 2452 channel->state = L2CAP_STATE_WAIT_INCOMING_SECURITY_LEVEL_UPDATE; 2453 if (channel->required_security_level <= gap_security_level(channel->con_handle)){ 2454 l2cap_handle_security_level_incoming_sufficient(channel); 2455 } else { 2456 // send connection pending if not already done 2457 if ((channel->state_var & L2CAP_CHANNEL_STATE_VAR_SENT_CONN_RESP_PEND) == 0){ 2458 channel->state_var |= L2CAP_CHANNEL_STATE_VAR_SEND_CONN_RESP_PEND; 2459 } 2460 gap_request_security_level(channel->con_handle, channel->required_security_level); 2461 } 2462 } else { 2463 // outgoing: we have been waiting for remote supported features 2464 if (security_required){ 2465 // request security level 2466 channel->state = L2CAP_STATE_WAIT_OUTGOING_SECURITY_LEVEL_UPDATE; 2467 gap_request_security_level(channel->con_handle, channel->required_security_level); 2468 } else { 2469 l2cap_ready_to_connect(channel); 2470 } 2471 } 2472 } 2473 #endif 2474 2475 #ifdef L2CAP_USES_CHANNELS 2476 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, 2477 uint16_t psm, uint16_t local_mtu, gap_security_level_t security_level){ 2478 2479 l2cap_channel_t * channel = btstack_memory_l2cap_channel_get(); 2480 if (!channel) { 2481 return NULL; 2482 } 2483 2484 // fill in 2485 channel->packet_handler = packet_handler; 2486 channel->channel_type = channel_type; 2487 bd_addr_copy(channel->address, address); 2488 channel->address_type = address_type; 2489 channel->psm = psm; 2490 channel->local_mtu = local_mtu; 2491 channel->remote_mtu = L2CAP_DEFAULT_MTU; 2492 channel->required_security_level = security_level; 2493 2494 // 2495 channel->local_cid = l2cap_next_local_cid(); 2496 channel->con_handle = HCI_CON_HANDLE_INVALID; 2497 2498 // set initial state 2499 channel->state = L2CAP_STATE_WILL_SEND_CREATE_CONNECTION; 2500 channel->state_var = L2CAP_CHANNEL_STATE_VAR_NONE; 2501 channel->remote_sig_id = L2CAP_SIG_ID_INVALID; 2502 channel->local_sig_id = L2CAP_SIG_ID_INVALID; 2503 2504 log_info("create channel %p, local_cid 0x%04x", channel, channel->local_cid); 2505 2506 return channel; 2507 } 2508 2509 static void l2cap_free_channel_entry(l2cap_channel_t * channel){ 2510 log_info("free channel %p, local_cid 0x%04x", channel, channel->local_cid); 2511 // assert all timers are stopped 2512 l2cap_stop_rtx(channel); 2513 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE 2514 l2cap_ertm_stop_retransmission_timer(channel); 2515 l2cap_ertm_stop_monitor_timer(channel); 2516 #endif 2517 // free memory 2518 btstack_memory_l2cap_channel_free(channel); 2519 } 2520 #endif 2521 2522 #ifdef ENABLE_CLASSIC 2523 2524 /** 2525 * @brief Creates L2CAP channel to the PSM of a remote device with baseband address. A new baseband connection will be initiated if necessary. 2526 * @param packet_handler 2527 * @param address 2528 * @param psm 2529 * @param mtu 2530 * @param local_cid 2531 */ 2532 2533 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){ 2534 // limit MTU to the size of our outgoing HCI buffer 2535 uint16_t local_mtu = btstack_min(mtu, l2cap_max_mtu()); 2536 2537 // determine security level based on psm 2538 const gap_security_level_t security_level = l2cap_security_level_0_allowed_for_PSM(psm) ? LEVEL_0 : gap_get_security_level(); 2539 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); 2540 2541 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); 2542 if (!channel) { 2543 return BTSTACK_MEMORY_ALLOC_FAILED; 2544 } 2545 2546 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE 2547 channel->mode = L2CAP_CHANNEL_MODE_BASIC; 2548 #endif 2549 2550 // add to connections list 2551 btstack_linked_list_add_tail(&l2cap_channels, (btstack_linked_item_t *) channel); 2552 2553 // store local_cid 2554 if (out_local_cid){ 2555 *out_local_cid = channel->local_cid; 2556 } 2557 2558 // state: L2CAP_STATE_WILL_SEND_CREATE_CONNECTION 2559 2560 // check if hci connection is already usable, 2561 hci_connection_t * conn = hci_connection_for_bd_addr_and_type(address, BD_ADDR_TYPE_ACL); 2562 if (conn && conn->state == OPEN){ 2563 // simulate connection complete 2564 l2cap_handle_connection_complete(conn->con_handle, channel); 2565 2566 // state: L2CAP_STATE_WAIT_REMOTE_SUPPORTED_FEATURES or L2CAP_STATE_WILL_SEND_CONNECTION_REQUEST 2567 2568 // simulate if remote supported features if requested and already received 2569 if ((channel->state == L2CAP_STATE_WAIT_REMOTE_SUPPORTED_FEATURES) && hci_remote_features_available(conn->con_handle)) { 2570 // simulate remote features received 2571 l2cap_handle_remote_supported_features_received(channel); 2572 } 2573 } 2574 2575 l2cap_run(); 2576 2577 return ERROR_CODE_SUCCESS; 2578 } 2579 2580 static void l2cap_handle_connection_failed_for_addr(bd_addr_t address, uint8_t status){ 2581 // mark all channels before emitting open events as these could trigger new connetion requests to the same device 2582 btstack_linked_list_iterator_t it; 2583 btstack_linked_list_iterator_init(&it, &l2cap_channels); 2584 while (btstack_linked_list_iterator_has_next(&it)){ 2585 l2cap_channel_t * channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it); 2586 if (!l2cap_is_dynamic_channel_type(channel->channel_type)) continue; 2587 if (bd_addr_cmp( channel->address, address) != 0) continue; 2588 // channel for this address found 2589 switch (channel->state){ 2590 case L2CAP_STATE_WAIT_CONNECTION_COMPLETE: 2591 case L2CAP_STATE_WILL_SEND_CREATE_CONNECTION: 2592 channel->state = L2CAP_STATE_EMIT_OPEN_FAILED_AND_DISCARD; 2593 break; 2594 default: 2595 break; 2596 } 2597 } 2598 // emit and free marked entries. restart loop to deal with list changes 2599 int done = 0; 2600 while (!done) { 2601 done = 1; 2602 btstack_linked_list_iterator_init(&it, &l2cap_channels); 2603 while (btstack_linked_list_iterator_has_next(&it)){ 2604 l2cap_channel_t * channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it); 2605 if (!l2cap_is_dynamic_channel_type(channel->channel_type)) continue; 2606 if (channel->state == L2CAP_STATE_EMIT_OPEN_FAILED_AND_DISCARD){ 2607 done = 0; 2608 // failure, forward error code 2609 l2cap_handle_channel_open_failed(channel, status); 2610 // discard channel 2611 btstack_linked_list_remove(&l2cap_channels, (btstack_linked_item_t *) channel); 2612 l2cap_free_channel_entry(channel); 2613 break; 2614 } 2615 } 2616 } 2617 2618 } 2619 2620 static void l2cap_handle_connection_success_for_addr(bd_addr_t address, hci_con_handle_t handle){ 2621 btstack_linked_list_iterator_t it; 2622 btstack_linked_list_iterator_init(&it, &l2cap_channels); 2623 while (btstack_linked_list_iterator_has_next(&it)){ 2624 l2cap_channel_t * channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it); 2625 if (!l2cap_is_dynamic_channel_type(channel->channel_type)) continue; 2626 if ( ! bd_addr_cmp( channel->address, address) ){ 2627 l2cap_handle_connection_complete(handle, channel); 2628 } 2629 } 2630 2631 #ifdef ENABLE_L2CAP_INFORMATION_REQUESTS_ON_CONNECT 2632 // trigger query of extended features and fixed channels right away (instead of later) 2633 hci_connection_t * hci_connection = hci_connection_for_handle(handle); 2634 btstack_assert(hci_connection != NULL); 2635 hci_connection->l2cap_state.information_state = L2CAP_INFORMATION_STATE_W2_SEND_EXTENDED_FEATURE_REQUEST; 2636 #endif 2637 2638 // process 2639 l2cap_run(); 2640 } 2641 #endif 2642 2643 static bool l2cap_channel_ready_to_send(l2cap_channel_t * channel){ 2644 switch (channel->channel_type){ 2645 #ifdef ENABLE_CLASSIC 2646 case L2CAP_CHANNEL_TYPE_CLASSIC: 2647 if (channel->state != L2CAP_STATE_OPEN) return false; 2648 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE 2649 // send if we have more data and remote windows isn't full yet 2650 if (channel->mode == L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION) { 2651 if (channel->unacked_frames >= btstack_min(channel->num_stored_tx_frames, channel->remote_tx_window_size)) return false; 2652 return hci_can_send_acl_packet_now(channel->con_handle); 2653 } 2654 #endif 2655 if (!channel->waiting_for_can_send_now) return false; 2656 return hci_can_send_acl_packet_now(channel->con_handle); 2657 case L2CAP_CHANNEL_TYPE_FIXED_CLASSIC: 2658 case L2CAP_CHANNEL_TYPE_CONNECTIONLESS: 2659 if (!channel->waiting_for_can_send_now) return false; 2660 return hci_can_send_acl_classic_packet_now(); 2661 #endif 2662 #ifdef ENABLE_BLE 2663 case L2CAP_CHANNEL_TYPE_FIXED_LE: 2664 if (!channel->waiting_for_can_send_now) return false; 2665 return hci_can_send_acl_le_packet_now(); 2666 #ifdef ENABLE_L2CAP_LE_CREDIT_BASED_FLOW_CONTROL_MODE 2667 case L2CAP_CHANNEL_TYPE_CHANNEL_CBM: 2668 if (channel->state != L2CAP_STATE_OPEN) return false; 2669 if (channel->send_sdu_buffer == NULL) return false; 2670 if (channel->credits_outgoing == 0u) return false; 2671 return hci_can_send_acl_packet_now(channel->con_handle); 2672 #endif 2673 #endif 2674 #ifdef ENABLE_L2CAP_ENHANCED_CREDIT_BASED_FLOW_CONTROL_MODE 2675 case L2CAP_CHANNEL_TYPE_CHANNEL_ECBM: 2676 if (channel->state != L2CAP_STATE_OPEN) return false; 2677 if (channel->send_sdu_buffer == NULL) return false; 2678 if (channel->credits_outgoing == 0u) return false; 2679 return hci_can_send_acl_packet_now(channel->con_handle); 2680 #endif 2681 default: 2682 return false; 2683 } 2684 } 2685 2686 static void l2cap_channel_trigger_send(l2cap_channel_t * channel){ 2687 switch (channel->channel_type){ 2688 #ifdef ENABLE_CLASSIC 2689 case L2CAP_CHANNEL_TYPE_CLASSIC: 2690 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE 2691 if (channel->mode == L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION) { 2692 l2cap_ertm_channel_send_information_frame(channel); 2693 return; 2694 } 2695 #endif 2696 channel->waiting_for_can_send_now = 0; 2697 l2cap_emit_can_send_now(channel->packet_handler, channel->local_cid); 2698 break; 2699 case L2CAP_CHANNEL_TYPE_CONNECTIONLESS: 2700 case L2CAP_CHANNEL_TYPE_FIXED_CLASSIC: 2701 channel->waiting_for_can_send_now = 0; 2702 l2cap_emit_can_send_now(channel->packet_handler, channel->local_cid); 2703 break; 2704 #endif 2705 #ifdef ENABLE_BLE 2706 case L2CAP_CHANNEL_TYPE_FIXED_LE: 2707 channel->waiting_for_can_send_now = 0; 2708 l2cap_emit_can_send_now(channel->packet_handler, channel->local_cid); 2709 break; 2710 #endif 2711 #ifdef ENABLE_L2CAP_LE_CREDIT_BASED_FLOW_CONTROL_MODE 2712 case L2CAP_CHANNEL_TYPE_CHANNEL_CBM: 2713 l2cap_credit_based_send_pdu(channel); 2714 break; 2715 #endif 2716 #ifdef ENABLE_L2CAP_ENHANCED_CREDIT_BASED_FLOW_CONTROL_MODE 2717 case L2CAP_CHANNEL_TYPE_CHANNEL_ECBM: 2718 l2cap_credit_based_send_pdu(channel); 2719 break; 2720 #endif 2721 default: 2722 btstack_unreachable(); 2723 break; 2724 } 2725 } 2726 2727 static void l2cap_notify_channel_can_send(void){ 2728 bool done = false; 2729 while (!done){ 2730 done = true; 2731 btstack_linked_list_iterator_t it; 2732 btstack_linked_list_iterator_init(&it, &l2cap_channels); 2733 while (btstack_linked_list_iterator_has_next(&it)){ 2734 l2cap_channel_t * channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it); 2735 bool ready = l2cap_channel_ready_to_send(channel); 2736 if (!ready) continue; 2737 2738 // requeue channel for fairness 2739 btstack_linked_list_remove(&l2cap_channels, (btstack_linked_item_t *) channel); 2740 btstack_linked_list_add_tail(&l2cap_channels, (btstack_linked_item_t *) channel); 2741 2742 // trigger sending 2743 l2cap_channel_trigger_send(channel); 2744 2745 // exit inner loop as we just broke the iterator, but try again 2746 done = false; 2747 break; 2748 } 2749 } 2750 } 2751 2752 #ifdef L2CAP_USES_CHANNELS 2753 2754 uint8_t l2cap_disconnect(uint16_t local_cid){ 2755 l2cap_channel_t * channel = l2cap_get_channel_for_local_cid(local_cid); 2756 if (!channel) { 2757 return L2CAP_LOCAL_CID_DOES_NOT_EXIST; 2758 } 2759 channel->state = L2CAP_STATE_WILL_SEND_DISCONNECT_REQUEST; 2760 l2cap_run(); 2761 return ERROR_CODE_SUCCESS; 2762 } 2763 2764 static int l2cap_send_open_failed_on_hci_disconnect(l2cap_channel_t * channel){ 2765 // open cannot fail for for incoming connections 2766 if (channel->state_var & L2CAP_CHANNEL_STATE_VAR_INCOMING) return 0; 2767 2768 // check state 2769 switch (channel->state){ 2770 case L2CAP_STATE_WILL_SEND_CREATE_CONNECTION: 2771 case L2CAP_STATE_WAIT_CONNECTION_COMPLETE: 2772 case L2CAP_STATE_WAIT_REMOTE_SUPPORTED_FEATURES: 2773 case L2CAP_STATE_WAIT_OUTGOING_SECURITY_LEVEL_UPDATE: 2774 case L2CAP_STATE_WAIT_CLIENT_ACCEPT_OR_REJECT: 2775 case L2CAP_STATE_WAIT_OUTGOING_EXTENDED_FEATURES: 2776 case L2CAP_STATE_WAIT_CONNECT_RSP: 2777 case L2CAP_STATE_CONFIG: 2778 case L2CAP_STATE_WILL_SEND_CONNECTION_REQUEST: 2779 case L2CAP_STATE_WILL_SEND_LE_CONNECTION_REQUEST: 2780 case L2CAP_STATE_WAIT_LE_CONNECTION_RESPONSE: 2781 case L2CAP_STATE_EMIT_OPEN_FAILED_AND_DISCARD: 2782 return 1; 2783 2784 case L2CAP_STATE_OPEN: 2785 case L2CAP_STATE_CLOSED: 2786 case L2CAP_STATE_WAIT_INCOMING_EXTENDED_FEATURES: 2787 case L2CAP_STATE_WAIT_DISCONNECT: 2788 case L2CAP_STATE_WILL_SEND_CONNECTION_RESPONSE_INSUFFICIENT_SECURITY: 2789 case L2CAP_STATE_WILL_SEND_CONNECTION_RESPONSE_DECLINE: 2790 case L2CAP_STATE_WILL_SEND_CONNECTION_RESPONSE_ACCEPT: 2791 case L2CAP_STATE_WILL_SEND_DISCONNECT_REQUEST: 2792 case L2CAP_STATE_WILL_SEND_DISCONNECT_RESPONSE: 2793 case L2CAP_STATE_WILL_SEND_LE_CONNECTION_RESPONSE_DECLINE: 2794 case L2CAP_STATE_WILL_SEND_LE_CONNECTION_RESPONSE_ACCEPT: 2795 case L2CAP_STATE_INVALID: 2796 case L2CAP_STATE_WAIT_INCOMING_SECURITY_LEVEL_UPDATE: 2797 return 0; 2798 2799 default: 2800 // get a "warning" about new states 2801 btstack_assert(false); 2802 return 0; 2803 } 2804 } 2805 #endif 2806 2807 #ifdef ENABLE_CLASSIC 2808 static void l2cap_handle_hci_disconnect_event(l2cap_channel_t * channel){ 2809 if (l2cap_send_open_failed_on_hci_disconnect(channel)){ 2810 l2cap_handle_channel_open_failed(channel, L2CAP_CONNECTION_BASEBAND_DISCONNECT); 2811 } else { 2812 l2cap_handle_channel_closed(channel); 2813 } 2814 l2cap_free_channel_entry(channel); 2815 } 2816 #endif 2817 2818 #ifdef ENABLE_L2CAP_LE_CREDIT_BASED_FLOW_CONTROL_MODE 2819 static void l2cap_handle_hci_le_disconnect_event(l2cap_channel_t * channel){ 2820 if (l2cap_send_open_failed_on_hci_disconnect(channel)){ 2821 l2cap_cbm_emit_channel_opened(channel, L2CAP_CONNECTION_BASEBAND_DISCONNECT); 2822 } else { 2823 l2cap_emit_channel_closed(channel); 2824 } 2825 l2cap_free_channel_entry(channel); 2826 } 2827 #endif 2828 2829 #ifdef ENABLE_CLASSIC 2830 static void l2cap_check_classic_timeout(hci_con_handle_t handle){ 2831 if (gap_get_connection_type(handle) != GAP_CONNECTION_ACL) { 2832 return; 2833 } 2834 if (hci_authentication_active_for_handle(handle)) { 2835 return; 2836 } 2837 bool hci_con_used = false; 2838 btstack_linked_list_iterator_t it; 2839 btstack_linked_list_iterator_init(&it, &l2cap_channels); 2840 while (btstack_linked_list_iterator_has_next(&it)){ 2841 l2cap_channel_t * channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it); 2842 if (!l2cap_is_dynamic_channel_type(channel->channel_type)) continue; 2843 if (channel->con_handle != handle) continue; 2844 hci_con_used = true; 2845 break; 2846 } 2847 if (hci_con_used) { 2848 return; 2849 } 2850 if (!hci_can_send_command_packet_now()) { 2851 return; 2852 } 2853 hci_send_cmd(&hci_disconnect, handle, 0x13); // remote closed connection 2854 } 2855 2856 static void l2cap_handle_features_complete(hci_con_handle_t handle){ 2857 if (hci_remote_features_available(handle) == false){ 2858 return; 2859 } 2860 btstack_linked_list_iterator_t it; 2861 btstack_linked_list_iterator_init(&it, &l2cap_channels); 2862 while (btstack_linked_list_iterator_has_next(&it)){ 2863 l2cap_channel_t * channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it); 2864 if (!l2cap_is_dynamic_channel_type(channel->channel_type)) continue; 2865 if (channel->con_handle != handle) continue; 2866 log_info("remote supported features, channel %p, cid %04x - state %u", channel, channel->local_cid, channel->state); 2867 l2cap_handle_remote_supported_features_received(channel); 2868 } 2869 } 2870 2871 static void l2cap_handle_security_level_incoming_sufficient(l2cap_channel_t * channel){ 2872 channel->state = L2CAP_STATE_WAIT_CLIENT_ACCEPT_OR_REJECT; 2873 l2cap_emit_incoming_connection(channel); 2874 } 2875 2876 static void l2cap_handle_security_level(hci_con_handle_t handle, gap_security_level_t actual_level){ 2877 log_info("security level update for handle 0x%04x", handle); 2878 2879 // trigger l2cap information requests 2880 if (actual_level > LEVEL_0){ 2881 hci_connection_t * hci_connection = hci_connection_for_handle(handle); 2882 btstack_assert(hci_connection != NULL); 2883 if (hci_connection->l2cap_state.information_state == L2CAP_INFORMATION_STATE_IDLE){ 2884 hci_connection->l2cap_state.information_state = L2CAP_INFORMATION_STATE_W2_SEND_EXTENDED_FEATURE_REQUEST; 2885 } 2886 } 2887 2888 bool done = false; 2889 while (!done){ 2890 done = true; 2891 btstack_linked_list_iterator_t it; 2892 btstack_linked_list_iterator_init(&it, &l2cap_channels); 2893 while (btstack_linked_list_iterator_has_next(&it)){ 2894 l2cap_channel_t * channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it); 2895 if (!l2cap_is_dynamic_channel_type(channel->channel_type)) continue; 2896 if (channel->con_handle != handle) continue; 2897 2898 gap_security_level_t required_level = channel->required_security_level; 2899 2900 log_info("channel %p, cid %04x - state %u: actual %u >= required %u?", channel, channel->local_cid, channel->state, actual_level, required_level); 2901 2902 switch (channel->state){ 2903 case L2CAP_STATE_WAIT_INCOMING_SECURITY_LEVEL_UPDATE: 2904 if (actual_level >= required_level){ 2905 l2cap_handle_security_level_incoming_sufficient(channel); 2906 } else { 2907 channel->reason = L2CAP_CONNECTION_RESULT_SECURITY_BLOCK; 2908 channel->state = L2CAP_STATE_WILL_SEND_CONNECTION_RESPONSE_DECLINE; 2909 } 2910 break; 2911 2912 case L2CAP_STATE_WAIT_OUTGOING_SECURITY_LEVEL_UPDATE: 2913 if (actual_level >= required_level){ 2914 l2cap_ready_to_connect(channel); 2915 } else { 2916 // security level insufficient, report error and free channel 2917 l2cap_handle_channel_open_failed(channel, L2CAP_CONNECTION_RESPONSE_RESULT_REFUSED_SECURITY); 2918 btstack_linked_list_remove(&l2cap_channels, (btstack_linked_item_t *) channel); 2919 l2cap_free_channel_entry(channel); 2920 } 2921 break; 2922 2923 default: 2924 break; 2925 } 2926 } 2927 } 2928 } 2929 #endif 2930 2931 #ifdef L2CAP_USES_CHANNELS 2932 static void l2cap_handle_disconnection_complete(hci_con_handle_t handle){ 2933 // collect channels to close 2934 btstack_linked_list_t channels_to_close = NULL; 2935 btstack_linked_list_iterator_t it; 2936 btstack_linked_list_iterator_init(&it, &l2cap_channels); 2937 while (btstack_linked_list_iterator_has_next(&it)) { 2938 l2cap_channel_t *channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it); 2939 if (!l2cap_is_dynamic_channel_type(channel->channel_type)) continue; 2940 if (channel->con_handle != handle) continue; 2941 btstack_linked_list_iterator_remove(&it); 2942 btstack_linked_list_add(&channels_to_close, (btstack_linked_item_t *) channel); 2943 } 2944 // send l2cap open failed or closed events for all channels on this handle and free them 2945 btstack_linked_list_iterator_init(&it, &channels_to_close); 2946 while (btstack_linked_list_iterator_has_next(&it)) { 2947 l2cap_channel_t *channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it); 2948 btstack_linked_list_iterator_remove(&it); 2949 switch(channel->channel_type){ 2950 #ifdef ENABLE_CLASSIC 2951 case L2CAP_CHANNEL_TYPE_CLASSIC: 2952 l2cap_handle_hci_disconnect_event(channel); 2953 break; 2954 #endif 2955 #ifdef ENABLE_L2CAP_LE_CREDIT_BASED_FLOW_CONTROL_MODE 2956 case L2CAP_CHANNEL_TYPE_CHANNEL_CBM: 2957 l2cap_handle_hci_le_disconnect_event(channel); 2958 break; 2959 #endif 2960 #ifdef ENABLE_L2CAP_ENHANCED_CREDIT_BASED_FLOW_CONTROL_MODE 2961 case L2CAP_CHANNEL_TYPE_CHANNEL_ECBM: 2962 switch (channel->state) { 2963 case L2CAP_STATE_WILL_SEND_ENHANCED_CONNECTION_REQUEST: 2964 case L2CAP_STATE_WAIT_ENHANCED_CONNECTION_RESPONSE: 2965 // emit open failed if disconnected before connection complete 2966 l2cap_ecbm_emit_channel_opened(channel, L2CAP_CONNECTION_BASEBAND_DISCONNECT); 2967 break; 2968 case L2CAP_STATE_WILL_SEND_EHNANCED_RENEGOTIATION_REQUEST: 2969 case L2CAP_STATE_WAIT_ENHANCED_RENEGOTIATION_RESPONSE: 2970 // emit reconfigure failure - result = 0xffff 2971 l2cap_ecbm_emit_reconfigure_complete(channel, 0xffff); 2972 break; 2973 default: 2974 l2cap_emit_simple_event_with_cid(channel, L2CAP_EVENT_CHANNEL_CLOSED); 2975 break; 2976 } 2977 l2cap_free_channel_entry(channel); 2978 break; 2979 #endif 2980 default: 2981 break; 2982 } 2983 } 2984 } 2985 #endif 2986 2987 static void l2cap_hci_event_handler(uint8_t packet_type, uint16_t cid, uint8_t *packet, uint16_t size){ 2988 2989 UNUSED(packet_type); // ok: registered with hci_event_callback_registration 2990 UNUSED(cid); // ok: there is no channel 2991 UNUSED(size); // ok: fixed format events read from HCI buffer 2992 2993 #ifdef ENABLE_CLASSIC 2994 bd_addr_t address; 2995 gap_security_level_t security_level; 2996 #endif 2997 #ifdef L2CAP_USES_CHANNELS 2998 hci_con_handle_t handle; 2999 #endif 3000 3001 switch(hci_event_packet_get_type(packet)){ 3002 3003 // Notify channel packet handler if they can send now 3004 case HCI_EVENT_TRANSPORT_PACKET_SENT: 3005 case HCI_EVENT_NUMBER_OF_COMPLETED_PACKETS: 3006 case BTSTACK_EVENT_NR_CONNECTIONS_CHANGED: 3007 #ifdef ENABLE_TESTING_SUPPORT 3008 case HCI_EVENT_NOP: 3009 #endif 3010 l2cap_call_notify_channel_in_run = true; 3011 break; 3012 3013 case HCI_EVENT_COMMAND_STATUS: 3014 #ifdef ENABLE_CLASSIC 3015 // check command status for create connection for errors 3016 if (hci_event_command_status_get_command_opcode(packet) == HCI_OPCODE_HCI_CREATE_CONNECTION){ 3017 // cache outgoing address and reset 3018 (void)memcpy(address, l2cap_outgoing_classic_addr, 6); 3019 memset(l2cap_outgoing_classic_addr, 0, 6); 3020 // error => outgoing connection failed 3021 uint8_t status = hci_event_command_status_get_status(packet); 3022 if (status){ 3023 l2cap_handle_connection_failed_for_addr(address, status); 3024 } 3025 } 3026 #endif 3027 l2cap_run(); // try sending signaling packets first 3028 break; 3029 3030 #ifdef ENABLE_CLASSIC 3031 // handle connection complete events 3032 case HCI_EVENT_CONNECTION_COMPLETE: 3033 reverse_bd_addr(&packet[5], address); 3034 if (packet[2] == 0){ 3035 handle = little_endian_read_16(packet, 3); 3036 l2cap_handle_connection_success_for_addr(address, handle); 3037 } else { 3038 l2cap_handle_connection_failed_for_addr(address, packet[2]); 3039 } 3040 break; 3041 3042 // handle successful create connection cancel command 3043 case HCI_EVENT_COMMAND_COMPLETE: 3044 if (hci_event_command_complete_get_command_opcode(packet) == HCI_OPCODE_HCI_CREATE_CONNECTION_CANCEL) { 3045 if (packet[5] == 0){ 3046 reverse_bd_addr(&packet[6], address); 3047 // CONNECTION TERMINATED BY LOCAL HOST (0X16) 3048 l2cap_handle_connection_failed_for_addr(address, 0x16); 3049 } 3050 } 3051 l2cap_run(); // try sending signaling packets first 3052 break; 3053 #endif 3054 3055 #ifdef L2CAP_USES_CHANNELS 3056 // handle disconnection complete events 3057 case HCI_EVENT_DISCONNECTION_COMPLETE: 3058 handle = little_endian_read_16(packet, 3); 3059 l2cap_handle_disconnection_complete(handle); 3060 break; 3061 #endif 3062 3063 // HCI Connection Timeouts 3064 #ifdef ENABLE_CLASSIC 3065 case L2CAP_EVENT_TIMEOUT_CHECK: 3066 handle = little_endian_read_16(packet, 2); 3067 l2cap_check_classic_timeout(handle); 3068 break; 3069 3070 case HCI_EVENT_READ_REMOTE_SUPPORTED_FEATURES_COMPLETE: 3071 case HCI_EVENT_READ_REMOTE_EXTENDED_FEATURES_COMPLETE: 3072 handle = little_endian_read_16(packet, 3); 3073 l2cap_handle_features_complete(handle); 3074 break; 3075 3076 case GAP_EVENT_SECURITY_LEVEL: 3077 handle = little_endian_read_16(packet, 2); 3078 security_level = (gap_security_level_t) packet[4]; 3079 l2cap_handle_security_level(handle, security_level); 3080 break; 3081 #endif 3082 default: 3083 break; 3084 } 3085 3086 l2cap_run(); 3087 } 3088 3089 static void l2cap_register_signaling_response(hci_con_handle_t handle, uint8_t code, uint8_t sig_id, uint16_t cid, uint16_t data){ 3090 // Vol 3, Part A, 4.3: "The DCID and SCID fields shall be ignored when the result field indicates the connection was refused." 3091 if (l2cap_signaling_responses_pending < NR_PENDING_SIGNALING_RESPONSES) { 3092 l2cap_signaling_responses[l2cap_signaling_responses_pending].handle = handle; 3093 l2cap_signaling_responses[l2cap_signaling_responses_pending].code = code; 3094 l2cap_signaling_responses[l2cap_signaling_responses_pending].sig_id = sig_id; 3095 l2cap_signaling_responses[l2cap_signaling_responses_pending].cid = cid; 3096 l2cap_signaling_responses[l2cap_signaling_responses_pending].data = data; 3097 l2cap_signaling_responses_pending++; 3098 l2cap_run(); 3099 } 3100 } 3101 3102 #ifdef ENABLE_CLASSIC 3103 static void l2cap_handle_disconnect_request(l2cap_channel_t *channel, uint8_t identifier){ 3104 switch (channel->state){ 3105 case L2CAP_STATE_CONFIG: 3106 case L2CAP_STATE_OPEN: 3107 case L2CAP_STATE_WILL_SEND_DISCONNECT_REQUEST: 3108 case L2CAP_STATE_WAIT_DISCONNECT: 3109 break; 3110 default: 3111 // ignore in other states 3112 return; 3113 } 3114 3115 channel->remote_sig_id = identifier; 3116 channel->state = L2CAP_STATE_WILL_SEND_DISCONNECT_RESPONSE; 3117 l2cap_run(); 3118 } 3119 3120 static void l2cap_handle_connection_request(hci_con_handle_t handle, uint8_t sig_id, uint16_t psm, uint16_t source_cid){ 3121 3122 // log_info("l2cap_handle_connection_request for handle %u, psm %u cid 0x%02x", handle, psm, source_cid); 3123 l2cap_service_t *service = l2cap_get_service(psm); 3124 if (!service) { 3125 l2cap_register_signaling_response(handle, CONNECTION_REQUEST, sig_id, source_cid, L2CAP_CONNECTION_RESULT_PSM_NOT_SUPPORTED); 3126 return; 3127 } 3128 3129 hci_connection_t * hci_connection = hci_connection_for_handle( handle ); 3130 if (!hci_connection) { 3131 // 3132 log_error("no hci_connection for handle %u", handle); 3133 return; 3134 } 3135 3136 // if SC only mode is active and service requires encryption, reject connection if SC not active or use security level 3137 gap_security_level_t required_level = service->required_security_level; 3138 if (gap_get_secure_connections_only_mode() && (required_level != LEVEL_0)){ 3139 if (gap_secure_connection(handle)){ 3140 required_level = LEVEL_4; 3141 } else { 3142 l2cap_register_signaling_response(handle, CONNECTION_REQUEST, sig_id, source_cid, L2CAP_CONNECTION_RESULT_SECURITY_BLOCK); 3143 return; 3144 } 3145 } 3146 3147 // alloc structure 3148 l2cap_channel_t * channel = l2cap_create_channel_entry(service->packet_handler, L2CAP_CHANNEL_TYPE_CLASSIC, hci_connection->address, BD_ADDR_TYPE_ACL, 3149 psm, service->mtu, required_level); 3150 if (!channel){ 3151 l2cap_register_signaling_response(handle, CONNECTION_REQUEST, sig_id, source_cid, L2CAP_CONNECTION_RESULT_NO_RESOURCES_AVAILABLE); 3152 return; 3153 } 3154 3155 channel->con_handle = handle; 3156 channel->remote_cid = source_cid; 3157 channel->remote_sig_id = sig_id; 3158 3159 // limit local mtu to max acl packet length - l2cap header 3160 if (channel->local_mtu > l2cap_max_mtu()) { 3161 channel->local_mtu = l2cap_max_mtu(); 3162 } 3163 3164 // set initial state 3165 channel->state = L2CAP_STATE_WAIT_REMOTE_SUPPORTED_FEATURES; 3166 channel->state_var = L2CAP_CHANNEL_STATE_VAR_INCOMING; 3167 3168 // add to connections list 3169 btstack_linked_list_add_tail(&l2cap_channels, (btstack_linked_item_t *) channel); 3170 3171 // 3172 if (required_level > LEVEL_0){ 3173 // send conn resp pending if remote supported features have not been received yet 3174 if (hci_remote_features_available(handle)) { 3175 l2cap_handle_remote_supported_features_received(channel); 3176 } else { 3177 channel->state_var |= L2CAP_CHANNEL_STATE_VAR_SEND_CONN_RESP_PEND; 3178 hci_remote_features_query(handle); 3179 } 3180 } else { 3181 l2cap_handle_security_level_incoming_sufficient(channel); 3182 } 3183 } 3184 3185 void l2cap_accept_connection(uint16_t local_cid){ 3186 log_info("L2CAP_ACCEPT_CONNECTION local_cid 0x%x", local_cid); 3187 l2cap_channel_t * channel = l2cap_get_channel_for_local_cid(local_cid); 3188 if (!channel) { 3189 log_error("accept called but local_cid 0x%x not found", local_cid); 3190 return; 3191 } 3192 3193 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE 3194 // configure L2CAP Basic mode 3195 channel->mode = L2CAP_CHANNEL_MODE_BASIC; 3196 #endif 3197 3198 channel->state = L2CAP_STATE_WILL_SEND_CONNECTION_RESPONSE_ACCEPT; 3199 3200 // process 3201 l2cap_run(); 3202 } 3203 3204 void l2cap_decline_connection(uint16_t local_cid){ 3205 log_info("decline local_cid 0x%x", local_cid); 3206 l2cap_channel_t * channel = l2cap_get_channel_for_local_cid( local_cid); 3207 if (!channel) { 3208 log_error( "l2cap_decline_connection called but local_cid 0x%x not found", local_cid); 3209 return; 3210 } 3211 channel->state = L2CAP_STATE_WILL_SEND_CONNECTION_RESPONSE_DECLINE; 3212 channel->reason = L2CAP_CONNECTION_RESULT_NO_RESOURCES_AVAILABLE; 3213 l2cap_run(); 3214 } 3215 3216 // @pre command len is valid, see check in l2cap_signaling_handler_channel 3217 static void l2cap_signaling_handle_configure_request(l2cap_channel_t *channel, uint8_t *command){ 3218 3219 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE 3220 uint8_t use_fcs = 1; 3221 #endif 3222 3223 channel->remote_sig_id = command[L2CAP_SIGNALING_COMMAND_SIGID_OFFSET]; 3224 3225 uint16_t flags = little_endian_read_16(command, 6); 3226 if (flags & 1) { 3227 channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_CONT); 3228 } 3229 3230 // accept the other's configuration options 3231 uint16_t end_pos = 4 + little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_LENGTH_OFFSET); 3232 uint16_t pos = 8; 3233 while (pos < end_pos){ 3234 uint8_t option_hint = command[pos] >> 7; 3235 uint8_t option_type = command[pos] & 0x7f; 3236 // log_info("l2cap cid %u, hint %u, type %u", channel->local_cid, option_hint, option_type); 3237 pos++; 3238 uint8_t length = command[pos++]; 3239 // MTU { type(8): 1, len(8):2, MTU(16) } 3240 if ((option_type == L2CAP_CONFIG_OPTION_TYPE_MAX_TRANSMISSION_UNIT) && (length == 2)){ 3241 channel->remote_mtu = little_endian_read_16(command, pos); 3242 log_info("Remote MTU %u", channel->remote_mtu); 3243 if (channel->remote_mtu > l2cap_max_mtu()){ 3244 log_info("Remote MTU %u larger than outgoing buffer, only using MTU = %u", channel->remote_mtu, l2cap_max_mtu()); 3245 channel->remote_mtu = l2cap_max_mtu(); 3246 } 3247 channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_MTU); 3248 } 3249 // Flush timeout { type(8):2, len(8): 2, Flush Timeout(16)} 3250 if ((option_type == L2CAP_CONFIG_OPTION_TYPE_FLUSH_TIMEOUT) && (length == 2)){ 3251 channel->flush_timeout = little_endian_read_16(command, pos); 3252 log_info("Flush timeout: %u ms", channel->flush_timeout); 3253 } 3254 3255 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE 3256 // Retransmission and Flow Control Option 3257 if (option_type == L2CAP_CONFIG_OPTION_TYPE_RETRANSMISSION_AND_FLOW_CONTROL && length == 9){ 3258 l2cap_channel_mode_t mode = (l2cap_channel_mode_t) command[pos]; 3259 switch(channel->mode){ 3260 case L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION: 3261 // Store remote config 3262 channel->remote_tx_window_size = command[pos+1]; 3263 channel->remote_max_transmit = command[pos+2]; 3264 channel->remote_retransmission_timeout_ms = little_endian_read_16(command, pos + 3); 3265 channel->remote_monitor_timeout_ms = little_endian_read_16(command, pos + 5); 3266 { 3267 uint16_t remote_mps = little_endian_read_16(command, pos + 7); 3268 // optimize our tx buffer configuration based on actual remote mps if remote mps is smaller than planned 3269 if (remote_mps < channel->remote_mps){ 3270 // get current tx storage 3271 uint16_t num_bytes_per_tx_buffer_before = sizeof(l2cap_ertm_tx_packet_state_t) + channel->remote_mps; 3272 uint16_t tx_storage = channel->num_tx_buffers * num_bytes_per_tx_buffer_before; 3273 3274 channel->remote_mps = remote_mps; 3275 uint16_t num_bytes_per_tx_buffer_now = sizeof(l2cap_ertm_tx_packet_state_t) + channel->remote_mps; 3276 channel->num_tx_buffers = tx_storage / num_bytes_per_tx_buffer_now; 3277 uint32_t total_storage = (sizeof(l2cap_ertm_rx_packet_state_t) + channel->local_mps) * channel->num_rx_buffers + tx_storage + channel->local_mtu; 3278 l2cap_ertm_setup_buffers(channel, (uint8_t *) channel->rx_packets_state, total_storage); 3279 } 3280 // limit remote mtu by our tx buffers. Include 2 bytes SDU Length 3281 uint16_t effective_mtu = channel->remote_mps * channel->num_tx_buffers - 2; 3282 channel->remote_mtu = btstack_min( effective_mtu, channel->remote_mtu); 3283 } 3284 log_info("FC&C config: tx window: %u, max transmit %u, retrans timeout %u, monitor timeout %u, mps %u", 3285 channel->remote_tx_window_size, 3286 channel->remote_max_transmit, 3287 channel->remote_retransmission_timeout_ms, 3288 channel->remote_monitor_timeout_ms, 3289 channel->remote_mps); 3290 // If ERTM mandatory, but remote doens't offer ERTM -> disconnect 3291 if (channel->ertm_mandatory && mode != L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION){ 3292 channel->state = L2CAP_STATE_WILL_SEND_DISCONNECT_REQUEST; 3293 } else { 3294 channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_ERTM); 3295 } 3296 break; 3297 case L2CAP_CHANNEL_MODE_BASIC: 3298 switch (mode){ 3299 case L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION: 3300 // remote asks for ERTM, but we want basic mode. disconnect if this happens a second time 3301 if (channel->state_var & L2CAP_CHANNEL_STATE_VAR_BASIC_FALLBACK_TRIED){ 3302 channel->state = L2CAP_STATE_WILL_SEND_DISCONNECT_REQUEST; 3303 } 3304 channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_BASIC_FALLBACK_TRIED); 3305 channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_REJECTED); 3306 break; 3307 default: // case L2CAP_CHANNEL_MODE_BASIC: 3308 // TODO store and evaluate configuration 3309 channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_ERTM); 3310 break; 3311 } 3312 break; 3313 default: 3314 break; 3315 } 3316 } 3317 if (option_type == L2CAP_CONFIG_OPTION_TYPE_FRAME_CHECK_SEQUENCE && length == 1){ 3318 use_fcs = command[pos]; 3319 } 3320 #endif 3321 // check for unknown options 3322 if ((option_hint == 0) && ((option_type < L2CAP_CONFIG_OPTION_TYPE_MAX_TRANSMISSION_UNIT) || (option_type > L2CAP_CONFIG_OPTION_TYPE_EXTENDED_WINDOW_SIZE))){ 3323 log_info("l2cap cid %u, unknown option 0x%02x", channel->local_cid, option_type); 3324 channel->unknown_option = option_type; 3325 channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_INVALID); 3326 } 3327 pos += length; 3328 } 3329 3330 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE 3331 // "FCS" has precedence over "No FCS" 3332 uint8_t update = channel->fcs_option || use_fcs; 3333 log_info("local fcs: %u, remote fcs: %u -> %u", channel->fcs_option, use_fcs, update); 3334 channel->fcs_option = update; 3335 // If ERTM mandatory, but remote didn't send Retransmission and Flowcontrol options -> disconnect 3336 if (((channel->state_var & L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_ERTM) == 0) & (channel->ertm_mandatory)){ 3337 channel->state = L2CAP_STATE_WILL_SEND_DISCONNECT_REQUEST; 3338 } 3339 #endif 3340 } 3341 3342 // @pre command len is valid, see check in l2cap_signaling_handler_channel 3343 static void l2cap_signaling_handle_configure_response(l2cap_channel_t *channel, uint16_t result, uint8_t *command){ 3344 log_info("l2cap_signaling_handle_configure_response"); 3345 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE 3346 uint16_t end_pos = 4 + little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_LENGTH_OFFSET); 3347 uint16_t pos = 10; 3348 while (pos < end_pos){ 3349 uint8_t option_hint = command[pos] >> 7; 3350 uint8_t option_type = command[pos] & 0x7f; 3351 // log_info("l2cap cid %u, hint %u, type %u", channel->local_cid, option_hint, option_type); 3352 pos++; 3353 uint8_t length = command[pos++]; 3354 3355 // Retransmission and Flow Control Option 3356 if (option_type == L2CAP_CONFIG_OPTION_TYPE_RETRANSMISSION_AND_FLOW_CONTROL && length == 9){ 3357 switch (channel->mode){ 3358 case L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION: 3359 if (channel->ertm_mandatory){ 3360 // ?? 3361 } else { 3362 // On 'Reject - Unacceptable Parameters' to our optional ERTM request, fall back to BASIC mode 3363 if (result == L2CAP_CONF_RESULT_UNACCEPTABLE_PARAMETERS){ 3364 l2cap_emit_simple_event_with_cid(channel, L2CAP_EVENT_ERTM_BUFFER_RELEASED); 3365 channel->mode = L2CAP_CHANNEL_MODE_BASIC; 3366 } 3367 } 3368 break; 3369 case L2CAP_CHANNEL_MODE_BASIC: 3370 if (result == L2CAP_CONF_RESULT_UNACCEPTABLE_PARAMETERS){ 3371 // On 'Reject - Unacceptable Parameters' to our Basic mode request, disconnect 3372 channel->state = L2CAP_STATE_WILL_SEND_DISCONNECT_REQUEST; 3373 } 3374 break; 3375 default: 3376 break; 3377 } 3378 } 3379 3380 // check for unknown options 3381 if (option_hint == 0 && (option_type < L2CAP_CONFIG_OPTION_TYPE_MAX_TRANSMISSION_UNIT || option_type > L2CAP_CONFIG_OPTION_TYPE_EXTENDED_WINDOW_SIZE)){ 3382 log_info("l2cap cid %u, unknown option 0x%02x", channel->local_cid, option_type); 3383 channel->unknown_option = option_type; 3384 channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_INVALID); 3385 } 3386 3387 pos += length; 3388 } 3389 #else 3390 UNUSED(channel); // ok: no code 3391 UNUSED(result); // ok: no code 3392 UNUSED(command); // ok: no code 3393 #endif 3394 } 3395 3396 static int l2cap_channel_ready_for_open(l2cap_channel_t *channel){ 3397 // log_info("l2cap_channel_ready_for_open 0x%02x", channel->state_var); 3398 if ((channel->state_var & L2CAP_CHANNEL_STATE_VAR_RCVD_CONF_RSP) == 0) return 0; 3399 if ((channel->state_var & L2CAP_CHANNEL_STATE_VAR_SENT_CONF_RSP) == 0) return 0; 3400 // addition check that fixes re-entrance issue causing l2cap event channel opened twice 3401 if (channel->state == L2CAP_STATE_OPEN) return 0; 3402 return 1; 3403 } 3404 3405 3406 // @pre command len is valid, see check in l2cap_signaling_handler_dispatch 3407 static void l2cap_signaling_handler_channel(l2cap_channel_t *channel, uint8_t *command){ 3408 3409 uint8_t code = command[L2CAP_SIGNALING_COMMAND_CODE_OFFSET]; 3410 uint8_t identifier = command[L2CAP_SIGNALING_COMMAND_SIGID_OFFSET]; 3411 uint16_t cmd_len = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_LENGTH_OFFSET); 3412 uint16_t result = 0; 3413 3414 log_info("L2CAP signaling handler code %u, state %u", code, channel->state); 3415 3416 // handle DISCONNECT REQUESTS seperately 3417 if (code == DISCONNECTION_REQUEST){ 3418 l2cap_handle_disconnect_request(channel, identifier); 3419 return; 3420 } 3421 3422 // @STATEMACHINE(l2cap) 3423 switch (channel->state) { 3424 3425 case L2CAP_STATE_WAIT_CONNECT_RSP: 3426 switch (code){ 3427 case CONNECTION_RESPONSE: 3428 if (cmd_len < 8){ 3429 // command imcomplete 3430 l2cap_register_signaling_response(channel->con_handle, COMMAND_REJECT, identifier, 0, L2CAP_REJ_CMD_UNKNOWN); 3431 break; 3432 } 3433 l2cap_stop_rtx(channel); 3434 result = little_endian_read_16 (command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET+4); 3435 switch (result) { 3436 case 0: 3437 // successful connection 3438 channel->remote_cid = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET); 3439 channel->state = L2CAP_STATE_CONFIG; 3440 channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_REQ); 3441 break; 3442 case 1: 3443 // connection pending. get some coffee, but start the ERTX 3444 l2cap_start_ertx(channel); 3445 break; 3446 default: 3447 // channel closed 3448 channel->state = L2CAP_STATE_CLOSED; 3449 // map l2cap connection response result to BTstack status enumeration 3450 l2cap_handle_channel_open_failed(channel, L2CAP_CONNECTION_RESPONSE_RESULT_SUCCESSFUL + result); 3451 3452 // drop link key if security block 3453 if ((L2CAP_CONNECTION_RESPONSE_RESULT_SUCCESSFUL + result) == L2CAP_CONNECTION_RESPONSE_RESULT_REFUSED_SECURITY){ 3454 gap_drop_link_key_for_bd_addr(channel->address); 3455 } 3456 3457 // discard channel 3458 btstack_linked_list_remove(&l2cap_channels, (btstack_linked_item_t *) channel); 3459 l2cap_free_channel_entry(channel); 3460 break; 3461 } 3462 break; 3463 3464 default: 3465 //@TODO: implement other signaling packets 3466 break; 3467 } 3468 break; 3469 3470 case L2CAP_STATE_CONFIG: 3471 switch (code) { 3472 case CONFIGURE_REQUEST: 3473 if (cmd_len < 4){ 3474 // command incomplete 3475 l2cap_register_signaling_response(channel->con_handle, COMMAND_REJECT, identifier, 0, L2CAP_REJ_CMD_UNKNOWN); 3476 break; 3477 } 3478 channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP); 3479 l2cap_signaling_handle_configure_request(channel, command); 3480 if (!(channel->state_var & L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_CONT)){ 3481 // only done if continuation not set 3482 channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_RCVD_CONF_REQ); 3483 } 3484 break; 3485 case CONFIGURE_RESPONSE: 3486 if (cmd_len < 6){ 3487 // command incomplete 3488 l2cap_register_signaling_response(channel->con_handle, COMMAND_REJECT, identifier, 0, L2CAP_REJ_CMD_UNKNOWN); 3489 break; 3490 } 3491 result = little_endian_read_16 (command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET+4); 3492 l2cap_stop_rtx(channel); 3493 l2cap_signaling_handle_configure_response(channel, result, command); 3494 switch (result){ 3495 case 0: // success 3496 channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_RCVD_CONF_RSP); 3497 break; 3498 case 4: // pending 3499 l2cap_start_ertx(channel); 3500 break; 3501 default: 3502 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE 3503 if (channel->mode == L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION && channel->ertm_mandatory){ 3504 // remote does not offer ertm but it's required 3505 channel->state = L2CAP_STATE_WILL_SEND_DISCONNECT_REQUEST; 3506 break; 3507 } 3508 #endif 3509 // retry on negative result 3510 channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_REQ); 3511 break; 3512 } 3513 break; 3514 default: 3515 break; 3516 } 3517 if (l2cap_channel_ready_for_open(channel)){ 3518 3519 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE 3520 // assert that packet can be stored in fragment buffers in ertm 3521 if (channel->mode == L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION){ 3522 uint16_t effective_mps = btstack_min(channel->remote_mps, channel->local_mps); 3523 uint16_t usable_mtu = channel->num_tx_buffers == 1 ? effective_mps : channel->num_tx_buffers * effective_mps - 2; 3524 if (usable_mtu < channel->remote_mtu){ 3525 log_info("Remote MTU %u > max storable ERTM packet, only using MTU = %u", channel->remote_mtu, usable_mtu); 3526 channel->remote_mtu = usable_mtu; 3527 } 3528 } 3529 #endif 3530 // for open: 3531 channel->state = L2CAP_STATE_OPEN; 3532 l2cap_emit_channel_opened(channel, 0); 3533 } 3534 break; 3535 3536 case L2CAP_STATE_WAIT_DISCONNECT: 3537 switch (code) { 3538 case DISCONNECTION_RESPONSE: 3539 l2cap_finalize_channel_close(channel); 3540 break; 3541 default: 3542 //@TODO: implement other signaling packets 3543 break; 3544 } 3545 break; 3546 3547 case L2CAP_STATE_CLOSED: 3548 // @TODO handle incoming requests 3549 break; 3550 3551 case L2CAP_STATE_OPEN: 3552 //@TODO: implement other signaling packets, e.g. re-configure 3553 break; 3554 default: 3555 break; 3556 } 3557 // log_info("new state %u", channel->state); 3558 } 3559 3560 #ifdef ENABLE_CLASSIC 3561 static void l2cap_handle_information_request_complete(hci_connection_t * connection){ 3562 3563 connection->l2cap_state.information_state = L2CAP_INFORMATION_STATE_DONE; 3564 3565 // emit event 3566 uint8_t event[8]; 3567 event[0] = L2CAP_EVENT_INFORMATION_RESPONSE; 3568 event[1] = sizeof(event) - 2; 3569 little_endian_store_16(event, 2, connection->con_handle); 3570 little_endian_store_16(event, 4, connection->l2cap_state.extended_feature_mask); 3571 little_endian_store_16(event, 6, connection->l2cap_state.fixed_channels_supported); 3572 l2cap_emit_event(event, sizeof(event)); 3573 3574 // trigger connection request 3575 btstack_linked_list_iterator_t it; 3576 btstack_linked_list_iterator_init(&it, &l2cap_channels); 3577 while (btstack_linked_list_iterator_has_next(&it)){ 3578 l2cap_channel_t * channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it); 3579 if (!l2cap_is_dynamic_channel_type(channel->channel_type)) continue; 3580 if (channel->con_handle != connection->con_handle) continue; 3581 3582 // incoming connection: information request was triggered after user has accepted connection, 3583 // now: verify channel configuration, esp. if ertm will be mandatory 3584 if (channel->state == L2CAP_STATE_WAIT_INCOMING_EXTENDED_FEATURES){ 3585 // default: continue 3586 channel->state = L2CAP_STATE_WILL_SEND_CONNECTION_RESPONSE_ACCEPT; 3587 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE 3588 if ((channel->mode == L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION) && ((connection->l2cap_state.extended_feature_mask & 0x08) == 0)){ 3589 // ERTM not possible, select basic mode and release buffer 3590 channel->mode = L2CAP_CHANNEL_MODE_BASIC; 3591 l2cap_emit_simple_event_with_cid(channel, L2CAP_EVENT_ERTM_BUFFER_RELEASED); 3592 3593 // bail if ERTM is mandatory 3594 if (channel->ertm_mandatory){ 3595 // We chose 'no resources available' for "ERTM mandatory but you don't even know ERTM exists" 3596 log_info("ERTM mandatory -> reject connection"); 3597 channel->state = L2CAP_STATE_WILL_SEND_CONNECTION_RESPONSE_DECLINE; 3598 channel->reason = L2CAP_CONNECTION_RESULT_NO_RESOURCES_AVAILABLE; 3599 } else { 3600 log_info("ERTM not supported by remote -> use Basic mode"); 3601 } 3602 } 3603 #endif 3604 continue; 3605 } 3606 3607 // outgoing connection: information request is triggered before connection request 3608 if (channel->state == L2CAP_STATE_WAIT_OUTGOING_EXTENDED_FEATURES){ 3609 3610 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE 3611 // if ERTM was requested, but is not listed in extended feature mask: 3612 if ((channel->mode == L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION) && ((connection->l2cap_state.extended_feature_mask & 0x08) == 0)){ 3613 3614 if (channel->ertm_mandatory){ 3615 // bail if ERTM is mandatory 3616 channel->state = L2CAP_STATE_CLOSED; 3617 // map l2cap connection response result to BTstack status enumeration 3618 l2cap_handle_channel_open_failed(channel, L2CAP_CONNECTION_RESPONSE_RESULT_ERTM_NOT_SUPPORTED); 3619 // discard channel 3620 btstack_linked_list_remove(&l2cap_channels, (btstack_linked_item_t *) channel); 3621 l2cap_free_channel_entry(channel); 3622 continue; 3623 3624 } else { 3625 // fallback to Basic mode 3626 l2cap_emit_simple_event_with_cid(channel, L2CAP_EVENT_ERTM_BUFFER_RELEASED); 3627 channel->mode = L2CAP_CHANNEL_MODE_BASIC; 3628 } 3629 } 3630 #endif 3631 3632 // respond to connection request 3633 channel->state = L2CAP_STATE_WILL_SEND_CONNECTION_REQUEST; 3634 continue; 3635 } 3636 } 3637 } 3638 #endif 3639 3640 // @pre command len is valid, see check in l2cap_acl_classic_handler 3641 static void l2cap_signaling_handler_dispatch(hci_con_handle_t handle, uint8_t * command){ 3642 3643 hci_connection_t * connection; 3644 btstack_linked_list_iterator_t it; 3645 3646 // get code, signal identifier and command len 3647 uint8_t code = command[L2CAP_SIGNALING_COMMAND_CODE_OFFSET]; 3648 uint8_t sig_id = command[L2CAP_SIGNALING_COMMAND_SIGID_OFFSET]; 3649 uint16_t cmd_len = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_LENGTH_OFFSET); 3650 3651 // general commands without an assigned channel 3652 switch(code) { 3653 3654 case CONNECTION_REQUEST: 3655 if (cmd_len == 4){ 3656 uint16_t psm = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET); 3657 uint16_t source_cid = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET+2); 3658 l2cap_handle_connection_request(handle, sig_id, psm, source_cid); 3659 } else { 3660 l2cap_register_signaling_response(handle, COMMAND_REJECT, sig_id, 0, L2CAP_REJ_CMD_UNKNOWN); 3661 } 3662 return; 3663 3664 case ECHO_REQUEST: 3665 l2cap_register_signaling_response(handle, code, sig_id, 0, 0); 3666 return; 3667 3668 case INFORMATION_REQUEST: 3669 if (cmd_len == 2) { 3670 uint16_t info_type = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET); 3671 l2cap_register_signaling_response(handle, code, sig_id, 0, info_type); 3672 return; 3673 } 3674 break; 3675 3676 case INFORMATION_RESPONSE: 3677 connection = hci_connection_for_handle(handle); 3678 if (!connection) return; 3679 switch (connection->l2cap_state.information_state){ 3680 case L2CAP_INFORMATION_STATE_W4_EXTENDED_FEATURE_RESPONSE: 3681 // get extended features from response if valid 3682 if (cmd_len >= 6) { 3683 uint16_t info_type = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET); 3684 uint16_t result = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET+2); 3685 if (result == 0 && info_type == L2CAP_INFO_TYPE_EXTENDED_FEATURES_SUPPORTED) { 3686 connection->l2cap_state.extended_feature_mask = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET+4); 3687 } 3688 log_info("extended features mask 0x%02x", connection->l2cap_state.extended_feature_mask); 3689 if ((connection->l2cap_state.extended_feature_mask & 0x80) != 0){ 3690 connection->l2cap_state.information_state = L2CAP_INFORMATION_STATE_W2_SEND_FIXED_CHANNELS_REQUEST; 3691 } else { 3692 // information request complete 3693 l2cap_handle_information_request_complete(connection); 3694 } 3695 } 3696 break; 3697 case L2CAP_INFORMATION_STATE_W4_FIXED_CHANNELS_RESPONSE: 3698 if (cmd_len >= 12) { 3699 uint16_t info_type = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET); 3700 uint16_t result = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET+2); 3701 if (result == 0 && info_type == L2CAP_INFO_TYPE_FIXED_CHANNELS_SUPPORTED) { 3702 connection->l2cap_state.fixed_channels_supported = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET + 4); 3703 } 3704 log_info("fixed channels mask 0x%02x", connection->l2cap_state.fixed_channels_supported); 3705 // information request complete 3706 l2cap_handle_information_request_complete(connection); 3707 } 3708 break; 3709 default: 3710 break; 3711 } 3712 return; 3713 3714 #ifdef ENABLE_L2CAP_ENHANCED_CREDIT_BASED_FLOW_CONTROL_MODE 3715 case L2CAP_CREDIT_BASED_CONNECTION_REQUEST: 3716 case L2CAP_CREDIT_BASED_CONNECTION_RESPONSE: 3717 case L2CAP_CREDIT_BASED_RECONFIGURE_REQUEST: 3718 case L2CAP_CREDIT_BASED_RECONFIGURE_RESPONSE: 3719 l2cap_ecbm_signaling_handler_dispatch(handle, L2CAP_CID_SIGNALING, command, sig_id); 3720 return; 3721 case L2CAP_FLOW_CONTROL_CREDIT_INDICATION: 3722 // return if valid 3723 if (l2cap_credit_based_handle_credit_indication(handle, command, cmd_len)) return; 3724 break; 3725 3726 case COMMAND_REJECT: 3727 btstack_linked_list_iterator_init(&it, &l2cap_channels); 3728 while (btstack_linked_list_iterator_has_next(&it)) { 3729 l2cap_channel_t *channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it); 3730 if (!l2cap_is_dynamic_channel_type(channel->channel_type)) continue; 3731 if (channel->con_handle != handle) continue; 3732 if (channel->local_sig_id != sig_id) continue; 3733 if (channel->state != L2CAP_STATE_WAIT_ENHANCED_CONNECTION_RESPONSE) continue; 3734 3735 // open failed 3736 channel->state = L2CAP_STATE_CLOSED; 3737 l2cap_ecbm_emit_channel_opened(channel, 3738 ERROR_CODE_CONNECTION_REJECTED_DUE_TO_LIMITED_RESOURCES); 3739 // drop failed channel 3740 btstack_linked_list_iterator_remove(&it); 3741 l2cap_free_channel_entry(channel); 3742 } 3743 break; 3744 #endif 3745 3746 default: 3747 break; 3748 } 3749 3750 if (cmd_len >= 2){ 3751 // Get potential destination CID 3752 uint16_t dest_cid = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET); 3753 3754 // Find channel for this sig_id and connection handle 3755 btstack_linked_list_iterator_init(&it, &l2cap_channels); 3756 while (btstack_linked_list_iterator_has_next(&it)){ 3757 l2cap_channel_t * channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it); 3758 if (!l2cap_is_dynamic_channel_type(channel->channel_type)) continue; 3759 if (channel->con_handle != handle) continue; 3760 if (code & 1) { 3761 // match odd commands (responses) by previous signaling identifier 3762 if (channel->local_sig_id == sig_id) { 3763 l2cap_signaling_handler_channel(channel, command); 3764 return; 3765 } 3766 } else { 3767 // match even commands (requests) by local channel id 3768 if (channel->local_cid == dest_cid) { 3769 l2cap_signaling_handler_channel(channel, command); 3770 return; 3771 } 3772 } 3773 } 3774 } 3775 3776 // If dynamic channel cannot be found, either never set-up or already finalized, assume state CLOSED 3777 // Handle events as described in Core 5.4, Vol 3. Host, 6.1.1 CLOSED state 3778 switch (code){ 3779 case CONNECTION_RESPONSE: 3780 case CONFIGURE_RESPONSE: 3781 case DISCONNECTION_RESPONSE: 3782 // Ignore request 3783 return; 3784 case CONFIGURE_REQUEST: 3785 if (cmd_len >= 2){ 3786 uint16_t dest_cid = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET); 3787 // send command reject with reason invalid cid 3788 l2cap_register_signaling_response(handle, CONFIGURE_REQUEST, sig_id, dest_cid, L2CAP_REJ_INVALID_CID); 3789 return; 3790 } 3791 break; 3792 default: 3793 break; 3794 } 3795 // otherwise send command reject with reason unknown command 3796 l2cap_register_signaling_response(handle, COMMAND_REJECT, sig_id, 0, L2CAP_REJ_CMD_UNKNOWN); 3797 } 3798 #endif 3799 3800 #ifdef L2CAP_USES_CHANNELS 3801 static l2cap_service_t * l2cap_get_service_internal(btstack_linked_list_t * services, uint16_t psm){ 3802 btstack_linked_list_iterator_t it; 3803 btstack_linked_list_iterator_init(&it, services); 3804 while (btstack_linked_list_iterator_has_next(&it)){ 3805 l2cap_service_t * service = (l2cap_service_t *) btstack_linked_list_iterator_next(&it); 3806 if ( service->psm == psm){ 3807 return service; 3808 }; 3809 } 3810 return NULL; 3811 } 3812 #endif 3813 3814 #ifdef ENABLE_L2CAP_ENHANCED_CREDIT_BASED_FLOW_CONTROL_MODE 3815 3816 static uint8_t l2cap_ecbm_setup_channels(btstack_linked_list_t * channels, 3817 btstack_packet_handler_t packet_handler, uint8_t num_channels, 3818 hci_connection_t * connection, uint16_t psm, uint16_t mtu, gap_security_level_t security_level){ 3819 uint8_t i; 3820 uint8_t status = ERROR_CODE_SUCCESS; 3821 for (i=0;i<num_channels;i++){ 3822 l2cap_channel_t * channel = l2cap_create_channel_entry(packet_handler, L2CAP_CHANNEL_TYPE_CHANNEL_ECBM, connection->address, connection->address_type, psm, mtu, security_level); 3823 if (!channel) { 3824 status = BTSTACK_MEMORY_ALLOC_FAILED; 3825 break; 3826 } 3827 channel->con_handle = connection->con_handle; 3828 btstack_linked_list_add_tail(channels, (btstack_linked_item_t *) channel); 3829 } 3830 3831 // free channels if not all allocated 3832 if (status != ERROR_CODE_SUCCESS){ 3833 while (true) { 3834 l2cap_channel_t * channel = (l2cap_channel_t *) btstack_linked_list_pop(channels); 3835 if (channel == NULL) break; 3836 l2cap_free_channel_entry(channel); 3837 } 3838 } 3839 3840 return status; 3841 } 3842 3843 static inline l2cap_service_t * l2cap_ecbm_get_service(uint16_t spsm){ 3844 return l2cap_get_service_internal(&l2cap_enhanced_services, spsm); 3845 } 3846 3847 static inline uint8_t l2cap_ecbm_status_for_result(uint16_t result) { 3848 switch (result) { 3849 case L2CAP_ECBM_CONNECTION_RESULT_ALL_SUCCESS: 3850 return ERROR_CODE_SUCCESS; 3851 case L2CAP_ECBM_CONNECTION_RESULT_ALL_REFUSED_SPSM_NOT_SUPPORTED: 3852 return L2CAP_CONNECTION_RESPONSE_RESULT_REFUSED_PSM; 3853 case L2CAP_ECBM_CONNECTION_RESULT_SOME_REFUSED_INSUFFICIENT_RESOURCES_AVAILABLE: 3854 return L2CAP_CONNECTION_RESPONSE_RESULT_REFUSED_RESOURCES; 3855 case L2CAP_ECBM_CONNECTION_RESULT_ALL_REFUSED_INSUFFICIENT_AUTHENTICATION: 3856 case L2CAP_ECBM_CONNECTION_RESULT_ALL_REFUSED_INSUFFICIENT_AUTHORIZATION: 3857 case L2CAP_ECBM_CONNECTION_RESULT_ALL_REFUSED_ENCYRPTION_KEY_SIZE_TOO_SHORT: 3858 case L2CAP_ECBM_CONNECTION_RESULT_ALL_REFUSED_INSUFFICIENT_ENCRYPTION: 3859 return L2CAP_CONNECTION_RESPONSE_RESULT_REFUSED_SECURITY; 3860 default: 3861 // invalid Source CID, Source CID already allocated, unacceptable parameters 3862 return L2CAP_CONNECTION_RESPONSE_UNKNOWN_ERROR; 3863 } 3864 } 3865 3866 static void 3867 l2cap_ecbm_emit_incoming_connection(l2cap_channel_t *channel, uint8_t num_channels) { 3868 uint8_t event[16]; 3869 event[0] = L2CAP_EVENT_ECBM_INCOMING_CONNECTION; 3870 event[1] = sizeof(event) - 2; 3871 event[2] = channel->address_type; 3872 reverse_bd_addr(channel->address, &event[3]); 3873 little_endian_store_16(event, 9, channel->con_handle); 3874 little_endian_store_16(event, 11, channel->psm); 3875 event[13] = num_channels; 3876 little_endian_store_16(event, 14, channel->local_cid); 3877 hci_dump_packet(HCI_EVENT_PACKET, 1, event, sizeof(event)); 3878 (*channel->packet_handler)(HCI_EVENT_PACKET, 0, event, sizeof(event)); 3879 } 3880 3881 static uint8_t 3882 l2cap_ecbm_security_status_for_connection_request(hci_con_handle_t handle, gap_security_level_t required_security_level, 3883 bool requires_authorization) { 3884 // check security in increasing error priority 3885 uint8_t security_status = L2CAP_ECBM_CONNECTION_RESULT_ALL_SUCCESS; 3886 3887 // security: check encryption 3888 if (required_security_level >= LEVEL_2) { 3889 if (gap_encryption_key_size(handle) < 16) { 3890 security_status = L2CAP_ECBM_CONNECTION_RESULT_ALL_REFUSED_ENCYRPTION_KEY_SIZE_TOO_SHORT; 3891 } 3892 if (gap_encryption_key_size(handle) == 0){ 3893 security_status = L2CAP_ECBM_CONNECTION_RESULT_ALL_REFUSED_INSUFFICIENT_ENCRYPTION; 3894 } 3895 } 3896 3897 // security: check authentication 3898 if (required_security_level >= LEVEL_3) { 3899 if (!gap_authenticated(handle)) { 3900 security_status = requires_authorization ? 3901 L2CAP_ECBM_CONNECTION_RESULT_ALL_REFUSED_INSUFFICIENT_AUTHORIZATION : 3902 L2CAP_ECBM_CONNECTION_RESULT_ALL_REFUSED_INSUFFICIENT_AUTHENTICATION; 3903 } 3904 } 3905 return security_status; 3906 } 3907 3908 static void l2cap_ecbm_handle_security_level_incoming(l2cap_channel_t * channel){ 3909 // count number of l2cap_channels in state L2CAP_STATE_WAIT_INCOMING_SECURITY_LEVEL_UPDATE with same remote_sig_id 3910 uint8_t sig_id = channel->remote_sig_id; 3911 hci_con_handle_t con_handle = channel->con_handle; 3912 3913 uint8_t security_status = l2cap_ecbm_security_status_for_connection_request(channel->con_handle, 3914 channel->required_security_level, 3915 false); 3916 bool security_sufficient = security_status == L2CAP_ECBM_CONNECTION_RESULT_ALL_SUCCESS; 3917 3918 uint8_t num_channels = 0; 3919 btstack_linked_list_iterator_t it; 3920 btstack_linked_list_iterator_init(&it, &l2cap_channels); 3921 while (btstack_linked_list_iterator_has_next(&it)) { 3922 l2cap_channel_t *channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it); 3923 if (!l2cap_is_dynamic_channel_type(channel->channel_type)) continue; 3924 if (channel->con_handle != con_handle) continue; 3925 if (channel->remote_sig_id != sig_id) continue; 3926 if (channel->state != L2CAP_STATE_WAIT_INCOMING_SECURITY_LEVEL_UPDATE) continue; 3927 num_channels++; 3928 3929 if (security_sufficient){ 3930 channel->state = L2CAP_STATE_WAIT_CLIENT_ACCEPT_OR_REJECT; 3931 } else { 3932 btstack_linked_list_iterator_remove(&it); 3933 btstack_memory_l2cap_channel_free(channel); 3934 } 3935 } 3936 3937 if (security_sufficient){ 3938 l2cap_ecbm_emit_incoming_connection(channel, num_channels); 3939 } else { 3940 // combine signaling cid and number channels for l2cap_register_signaling_response 3941 uint16_t signaling_cid = L2CAP_CID_SIGNALING; 3942 uint16_t num_channels_and_signaling_cid = (num_channels << 8) | signaling_cid; 3943 l2cap_register_signaling_response(con_handle, L2CAP_CREDIT_BASED_CONNECTION_REQUEST, sig_id, 3944 num_channels_and_signaling_cid, security_status); 3945 } 3946 } 3947 3948 void l2cap_ecbm_trigger_pending_connection_responses(hci_con_handle_t con_handle){ 3949 bool done = false; 3950 while (!done) { 3951 done = true; 3952 btstack_linked_list_iterator_t it; 3953 btstack_linked_list_iterator_init(&it, &l2cap_channels); 3954 while (btstack_linked_list_iterator_has_next(&it)) { 3955 l2cap_channel_t *channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it); 3956 if (channel->channel_type != L2CAP_CHANNEL_TYPE_CHANNEL_ECBM) continue; 3957 if (channel->con_handle != con_handle) continue; 3958 if (channel->state == L2CAP_STATE_WAIT_INCOMING_SECURITY_LEVEL_UPDATE) { 3959 l2cap_ecbm_handle_security_level_incoming(channel); 3960 done = false; 3961 }; 3962 } 3963 } 3964 } 3965 3966 static int l2cap_ecbm_signaling_handler_dispatch(hci_con_handle_t handle, uint16_t signaling_cid, uint8_t *command, 3967 uint8_t sig_id) { 3968 3969 hci_connection_t *connection; 3970 btstack_linked_list_iterator_t it; 3971 l2cap_service_t *service; 3972 uint16_t spsm; 3973 uint8_t num_channels; 3974 uint16_t num_channels_and_signaling_cid; 3975 uint8_t i; 3976 uint16_t new_mtu; 3977 uint16_t new_mps; 3978 uint16_t initial_credits; 3979 uint16_t result; 3980 uint8_t status; 3981 3982 uint8_t code = command[L2CAP_SIGNALING_COMMAND_CODE_OFFSET]; 3983 uint16_t len = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_LENGTH_OFFSET); 3984 log_info("enhanced dispatch: command 0x%02x, sig id %u, len %u", code, sig_id, len); 3985 3986 switch (code) { 3987 case L2CAP_CREDIT_BASED_CONNECTION_REQUEST: 3988 // check size 3989 if (len < 10u) return 0u; 3990 3991 // get hci connection, bail if not found (must not happen) 3992 connection = hci_connection_for_handle(handle); 3993 btstack_assert(connection != NULL); 3994 3995 // get num channels to establish 3996 num_channels = (len - 8) / sizeof(uint16_t); 3997 3998 // combine signaling cid and number channels for l2cap_register_signaling_response 3999 num_channels_and_signaling_cid = (num_channels << 8) | signaling_cid; 4000 4001 // check if service registered 4002 spsm = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET); 4003 service = l2cap_ecbm_get_service(spsm); 4004 4005 if (service) { 4006 4007 uint16_t remote_mtu = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET + 2); 4008 uint16_t remote_mps = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET + 4); 4009 uint16_t credits_outgoing = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET + 6); 4010 4011 // param: check remote mtu 4012 if (service->mtu > remote_mtu) { 4013 l2cap_register_signaling_response(handle, L2CAP_CREDIT_BASED_CONNECTION_REQUEST, sig_id, 4014 num_channels_and_signaling_cid, L2CAP_ECBM_CONNECTION_RESULT_ALL_REFUSED_INVALID_PARAMETERS); 4015 return 1; 4016 } 4017 4018 // check if authentication is required and possible 4019 bool send_pending = false; 4020 uint8_t security_status = l2cap_ecbm_security_status_for_connection_request(handle, 4021 service->required_security_level, 4022 service->requires_authorization); 4023 if (security_status != L2CAP_ECBM_CONNECTION_RESULT_ALL_SUCCESS) { 4024 if (gap_get_bondable_mode() != 0) { 4025 // if possible, send pending and continue 4026 send_pending = true; 4027 } else { 4028 // otherwise, send refused and abort 4029 l2cap_register_signaling_response(handle, L2CAP_CREDIT_BASED_CONNECTION_REQUEST, sig_id, 4030 num_channels_and_signaling_cid, security_status); 4031 return 1; 4032 } 4033 } 4034 4035 // report the last result code != 0 4036 result = 0; 4037 // store one of the local channels for the event 4038 l2cap_channel_t * a_channel = NULL; 4039 for (i = 0; i < num_channels; i++) { 4040 4041 // check source cids 4042 uint16_t source_cid = little_endian_read_16(command, 12 + (i * 2)); 4043 if (source_cid < 0x40u) { 4044 result = L2CAP_ECBM_CONNECTION_RESULT_SOME_REFUSED_INVALID_SOURCE_CID; 4045 continue; 4046 } 4047 4048 // go through list of channels for this ACL connection and check if we get a match 4049 btstack_linked_list_iterator_init(&it, &l2cap_channels); 4050 bool source_cid_allocated = false; 4051 while (btstack_linked_list_iterator_has_next(&it)) { 4052 l2cap_channel_t *channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it); 4053 if (!l2cap_is_dynamic_channel_type(channel->channel_type)) continue; 4054 if (channel->con_handle != handle) continue; 4055 if (channel->remote_cid != source_cid) continue; 4056 source_cid_allocated = true; 4057 break; 4058 } 4059 if (source_cid_allocated) { 4060 result = 0x00a; 4061 continue; 4062 } 4063 4064 // setup channel 4065 l2cap_channel_t *channel = l2cap_create_channel_entry(service->packet_handler, 4066 L2CAP_CHANNEL_TYPE_CHANNEL_ECBM, 4067 connection->address, 4068 connection->address_type, spsm, 4069 service->mtu, 4070 service->required_security_level); 4071 4072 if (channel == NULL) { 4073 // Some connections refused – insufficient resources available 4074 result = 0x004; 4075 continue; 4076 } 4077 4078 // setup state 4079 channel->state = L2CAP_STATE_WAIT_INCOMING_SECURITY_LEVEL_UPDATE; 4080 channel->state_var |= L2CAP_CHANNEL_STATE_VAR_INCOMING; 4081 channel->con_handle = connection->con_handle; 4082 channel->remote_sig_id = sig_id; 4083 channel->remote_cid = source_cid; 4084 channel->remote_mtu = remote_mtu; 4085 channel->remote_mps = remote_mps; 4086 channel->credits_outgoing = credits_outgoing; 4087 channel->cid_index = i; 4088 channel->num_cids = num_channels; 4089 4090 // if more than one error, we can report any of them 4091 channel->reason = result; 4092 4093 btstack_linked_list_add_tail(&l2cap_channels, (btstack_linked_item_t *) channel); 4094 4095 a_channel = channel; 4096 } 4097 4098 // if no channels have been created, all have been refused, and we can respond right away 4099 if (a_channel == NULL) { 4100 l2cap_register_signaling_response(handle, L2CAP_CREDIT_BASED_CONNECTION_REQUEST, sig_id, 4101 num_channels_and_signaling_cid, result); 4102 return 1; 4103 } 4104 4105 // if security is pending, send intermediate response, otherwise, ask user 4106 if (send_pending){ 4107 l2cap_register_signaling_response(handle, L2CAP_CREDIT_BASED_CONNECTION_REQUEST, sig_id, 4108 num_channels_and_signaling_cid, L2CAP_ECBM_CONNECTION_RESULT_ALL_PENDING_AUTHENTICATION); 4109 } else { 4110 // if security is ok but authorization is required, send intermediate response and ask user 4111 if (service->requires_authorization){ 4112 l2cap_register_signaling_response(handle, L2CAP_CREDIT_BASED_CONNECTION_REQUEST, sig_id, 4113 num_channels_and_signaling_cid, L2CAP_ECBM_CONNECTION_RESULT_ALL_PENDING_AUTHORIZATION); 4114 } 4115 l2cap_ecbm_handle_security_level_incoming(a_channel); 4116 } 4117 4118 } else { 4119 l2cap_register_signaling_response(handle, L2CAP_CREDIT_BASED_CONNECTION_REQUEST, sig_id, 4120 num_channels_and_signaling_cid, L2CAP_ECBM_CONNECTION_RESULT_ALL_REFUSED_SPSM_NOT_SUPPORTED); 4121 } 4122 return 1; 4123 4124 case L2CAP_CREDIT_BASED_CONNECTION_RESPONSE: 4125 // check size 4126 if (len < 10u) return 0u; 4127 4128 // get hci connection, ignore if not found 4129 connection = hci_connection_for_handle(handle); 4130 if (connection == NULL) return 0; 4131 4132 // get channel config: mtu, mps, initial credits, result 4133 new_mtu = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET + 0); 4134 new_mps = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET + 2); 4135 initial_credits = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET + 4); 4136 result = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET + 6); 4137 status = l2cap_ecbm_status_for_result(result); 4138 4139 // get num channels to modify 4140 num_channels = (len - 8) / sizeof(uint16_t); 4141 btstack_linked_list_iterator_init(&it, &l2cap_channels); 4142 while (btstack_linked_list_iterator_has_next(&it)) { 4143 uint8_t channel_status = status; 4144 l2cap_channel_t *channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it); 4145 if (!l2cap_is_dynamic_channel_type(channel->channel_type)) continue; 4146 if (channel->con_handle != handle) continue; 4147 if (channel->local_sig_id != sig_id) continue; 4148 if (channel->state != L2CAP_STATE_WAIT_ENHANCED_CONNECTION_RESPONSE) continue; 4149 if (channel->cid_index < num_channels) { 4150 uint16_t remote_cid = little_endian_read_16(command, 12 + channel->cid_index * sizeof(uint16_t)); 4151 if (remote_cid != 0) { 4152 // check for duplicate remote CIDs 4153 l2cap_channel_t * original_channel = l2cap_get_channel_for_remote_handle_and_cid(handle, remote_cid); 4154 if (original_channel == NULL){ 4155 channel->state = L2CAP_STATE_OPEN; 4156 channel->remote_cid = remote_cid; 4157 channel->remote_mtu = new_mtu; 4158 channel->remote_mps = new_mps; 4159 channel->credits_outgoing = initial_credits; 4160 l2cap_ecbm_emit_channel_opened(channel, ERROR_CODE_SUCCESS); 4161 continue; 4162 } 4163 // close original channel 4164 original_channel->state = L2CAP_STATE_WILL_SEND_DISCONNECT_REQUEST; 4165 channel_status = ERROR_CODE_ACL_CONNECTION_ALREADY_EXISTS; 4166 } 4167 } 4168 // open failed 4169 l2cap_ecbm_emit_channel_opened(channel, channel_status); 4170 // drop failed channel 4171 btstack_linked_list_iterator_remove(&it); 4172 btstack_memory_l2cap_channel_free(channel); 4173 } 4174 return 1; 4175 4176 case L2CAP_CREDIT_BASED_RECONFIGURE_REQUEST: 4177 // check minimal size 4178 if (len < 6) return 0u; 4179 4180 // get hci connection, bail if not found (must not happen) 4181 connection = hci_connection_for_handle(handle); 4182 btstack_assert(connection != NULL); 4183 4184 // get num channels to modify 4185 num_channels = (len - 4) / sizeof(uint16_t); 4186 4187 // get new mtu and mps 4188 new_mtu = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET + 0); 4189 new_mps = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET + 2); 4190 4191 // validate request 4192 result = 0; 4193 for (i = 0; i < num_channels; i++) { 4194 // check cid 4195 uint16_t remote_cid = little_endian_read_16(command, 8 + (i * sizeof(uint16_t))); 4196 l2cap_channel_t *channel = l2cap_get_channel_for_remote_handle_and_cid(handle, remote_cid); 4197 if (channel == NULL) { 4198 result = L2CAP_ECBM_RECONFIGURE_FAILED_DESTINATION_CID_INVALID; 4199 break; 4200 } 4201 // check MTU is not reduced 4202 if (channel->remote_mtu > new_mtu) { 4203 result = L2CAP_ECBM_RECONFIGURE_FAILED_MTU_REDUCTION_NOT_ALLOWED; 4204 break; 4205 } 4206 // check MPS reduction 4207 if ((num_channels > 1) && (channel->remote_mps > new_mps)) { 4208 result = L2CAP_ECBM_RECONFIGURE_FAILED_MPS_REDUCTION_MULTIPLE_CHANNELS; 4209 break; 4210 } 4211 // check MPS valid 4212 if (new_mps < l2cap_enhanced_mps_min) { 4213 result = L2CAP_ECBM_RECONFIGURE_FAILED_UNACCEPTABLE_PARAMETERS; 4214 break; 4215 } 4216 } 4217 4218 // send reject 4219 if (result != 0) { 4220 l2cap_register_signaling_response(handle, L2CAP_CREDIT_BASED_RECONFIGURE_REQUEST, sig_id, signaling_cid, 4221 result); 4222 return 1; 4223 } 4224 4225 // update channels 4226 for (i = 0; i < num_channels; i++) { 4227 uint16_t remote_cid = little_endian_read_16(command, 8 + (i * sizeof(uint16_t))); 4228 l2cap_channel_t *channel = l2cap_get_channel_for_remote_handle_and_cid(handle, remote_cid); 4229 channel->remote_mps = new_mps; 4230 channel->remote_mtu = new_mtu; 4231 // emit event 4232 uint8_t event[8]; 4233 event[0] = L2CAP_EVENT_ECBM_RECONFIGURED; 4234 event[1] = sizeof(event) - 2; 4235 little_endian_store_16(event, 2, channel->local_cid); 4236 little_endian_store_16(event, 4, new_mtu); 4237 little_endian_store_16(event, 6, new_mps); 4238 l2cap_dispatch_to_channel(channel, HCI_EVENT_PACKET, event, sizeof(event)); 4239 } 4240 4241 // send accept 4242 l2cap_register_signaling_response(handle, L2CAP_CREDIT_BASED_RECONFIGURE_REQUEST, sig_id, signaling_cid, 0); 4243 return 1; 4244 4245 case L2CAP_CREDIT_BASED_RECONFIGURE_RESPONSE: 4246 // check size 4247 if (len < 2u) return 0u; 4248 4249 result = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET + 0); 4250 btstack_linked_list_iterator_init(&it, &l2cap_channels); 4251 while (btstack_linked_list_iterator_has_next(&it)) { 4252 l2cap_channel_t *channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it); 4253 if (!l2cap_is_dynamic_channel_type(channel->channel_type)) continue; 4254 if (channel->con_handle != handle) continue; 4255 if (channel->local_sig_id != sig_id) continue; 4256 if (channel->state != L2CAP_STATE_WAIT_ENHANCED_RENEGOTIATION_RESPONSE) continue; 4257 // complete request 4258 if (result == 0) { 4259 channel->receive_sdu_buffer = channel->renegotiate_sdu_buffer; 4260 channel->local_mtu = channel->renegotiate_mtu; 4261 } 4262 channel->state = L2CAP_STATE_OPEN; 4263 // emit event 4264 l2cap_ecbm_emit_reconfigure_complete(channel, result); 4265 } 4266 break; 4267 4268 default: 4269 btstack_unreachable(); 4270 break; 4271 } 4272 return 0; 4273 } 4274 4275 #endif 4276 4277 #ifdef ENABLE_BLE 4278 4279 static void l2cap_emit_connection_parameter_update_response(hci_con_handle_t con_handle, uint16_t result){ 4280 uint8_t event[6]; 4281 event[0] = L2CAP_EVENT_CONNECTION_PARAMETER_UPDATE_RESPONSE; 4282 event[1] = 4; 4283 little_endian_store_16(event, 2, con_handle); 4284 little_endian_store_16(event, 4, result); 4285 l2cap_emit_event(event, sizeof(event)); 4286 } 4287 4288 // @return valid 4289 static int l2cap_le_signaling_handler_dispatch(hci_con_handle_t handle, uint8_t * command, uint8_t sig_id){ 4290 hci_connection_t * connection; 4291 uint16_t result; 4292 uint8_t event[12]; 4293 4294 #ifdef L2CAP_USES_CREDIT_BASED_CHANNELS 4295 l2cap_channel_t * channel; 4296 btstack_linked_list_iterator_t it; 4297 #endif 4298 #ifdef ENABLE_L2CAP_LE_CREDIT_BASED_FLOW_CONTROL_MODE 4299 uint16_t local_cid; 4300 uint16_t le_psm; 4301 l2cap_service_t * service; 4302 uint16_t source_cid; 4303 #endif 4304 4305 uint8_t code = command[L2CAP_SIGNALING_COMMAND_CODE_OFFSET]; 4306 uint16_t len = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_LENGTH_OFFSET); 4307 log_info("le dispatch: command 0x%02x, sig id %u, len %u", code, sig_id, len); 4308 4309 switch (code){ 4310 4311 case CONNECTION_PARAMETER_UPDATE_REQUEST: 4312 // check size 4313 if (len < 8u) return 0u; 4314 connection = hci_connection_for_handle(handle); 4315 if (connection != NULL){ 4316 if (connection->role != HCI_ROLE_MASTER){ 4317 // reject command without notifying upper layer when not in master role 4318 return 0; 4319 } 4320 le_connection_parameter_range_t existing_range; 4321 gap_get_connection_parameter_range(&existing_range); 4322 uint16_t le_conn_interval_min = little_endian_read_16(command,L2CAP_SIGNALING_COMMAND_DATA_OFFSET); 4323 uint16_t le_conn_interval_max = little_endian_read_16(command,L2CAP_SIGNALING_COMMAND_DATA_OFFSET+2); 4324 uint16_t le_conn_latency = little_endian_read_16(command,L2CAP_SIGNALING_COMMAND_DATA_OFFSET+4); 4325 uint16_t le_supervision_timeout = little_endian_read_16(command,L2CAP_SIGNALING_COMMAND_DATA_OFFSET+6); 4326 4327 int update_parameter = gap_connection_parameter_range_included(&existing_range, le_conn_interval_min, le_conn_interval_max, le_conn_latency, le_supervision_timeout); 4328 if (update_parameter){ 4329 connection->le_con_parameter_update_state = CON_PARAMETER_UPDATE_SEND_RESPONSE; 4330 connection->le_conn_interval_min = le_conn_interval_min; 4331 connection->le_conn_interval_max = le_conn_interval_max; 4332 connection->le_conn_latency = le_conn_latency; 4333 connection->le_supervision_timeout = le_supervision_timeout; 4334 } else { 4335 connection->le_con_parameter_update_state = CON_PARAMETER_UPDATE_DENY; 4336 } 4337 connection->le_con_param_update_identifier = sig_id; 4338 } 4339 4340 event[0] = L2CAP_EVENT_CONNECTION_PARAMETER_UPDATE_REQUEST; 4341 event[1] = 10; 4342 little_endian_store_16(event, 2, handle); 4343 (void)memcpy(&event[4], &command[4], 8); 4344 l2cap_emit_event(event, sizeof(event)); 4345 break; 4346 4347 case CONNECTION_PARAMETER_UPDATE_RESPONSE: 4348 // check size 4349 if (len < 2u) return 0u; 4350 result = little_endian_read_16(command, 4); 4351 l2cap_emit_connection_parameter_update_response(handle, result); 4352 break; 4353 4354 #ifdef ENABLE_L2CAP_ENHANCED_CREDIT_BASED_FLOW_CONTROL_MODE 4355 case L2CAP_CREDIT_BASED_CONNECTION_REQUEST: 4356 case L2CAP_CREDIT_BASED_CONNECTION_RESPONSE: 4357 case L2CAP_CREDIT_BASED_RECONFIGURE_REQUEST: 4358 case L2CAP_CREDIT_BASED_RECONFIGURE_RESPONSE: 4359 return l2cap_ecbm_signaling_handler_dispatch(handle, L2CAP_CID_SIGNALING_LE, command, sig_id); 4360 #endif 4361 4362 #ifdef L2CAP_USES_CREDIT_BASED_CHANNELS 4363 case COMMAND_REJECT: 4364 btstack_linked_list_iterator_init(&it, &l2cap_channels); 4365 while (btstack_linked_list_iterator_has_next(&it)){ 4366 channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it); 4367 if (!l2cap_is_dynamic_channel_type(channel->channel_type)) continue; 4368 if (channel->con_handle != handle) continue; 4369 if (channel->local_sig_id != sig_id) continue; 4370 #ifdef ENABLE_L2CAP_LE_CREDIT_BASED_FLOW_CONTROL_MODE 4371 // if received while waiting for le connection response, assume legacy device 4372 if (channel->state == L2CAP_STATE_WAIT_LE_CONNECTION_RESPONSE){ 4373 channel->state = L2CAP_STATE_CLOSED; 4374 // no official value for this, use: Connection refused – LE_PSM not supported 4375 l2cap_cbm_emit_channel_opened(channel, L2CAP_CBM_CONNECTION_RESULT_SPSM_NOT_SUPPORTED); 4376 4377 // discard channel 4378 btstack_linked_list_remove(&l2cap_channels, (btstack_linked_item_t *) channel); 4379 l2cap_free_channel_entry(channel); 4380 continue; 4381 } 4382 #endif 4383 #ifdef ENABLE_L2CAP_ENHANCED_CREDIT_BASED_FLOW_CONTROL_MODE 4384 // if received while waiting for le connection response, assume legacy device 4385 if (channel->state == L2CAP_STATE_WAIT_ENHANCED_CONNECTION_RESPONSE){ 4386 channel->state = L2CAP_STATE_CLOSED; 4387 // treat as SPSM not supported 4388 l2cap_ecbm_emit_channel_opened(channel, L2CAP_CONNECTION_RESPONSE_RESULT_REFUSED_PSM); 4389 4390 // discard channel 4391 btstack_linked_list_remove(&l2cap_channels, (btstack_linked_item_t *) channel); 4392 l2cap_free_channel_entry(channel); 4393 continue; 4394 } 4395 #endif 4396 } 4397 break; 4398 #endif 4399 4400 #ifdef ENABLE_L2CAP_LE_CREDIT_BASED_FLOW_CONTROL_MODE 4401 case LE_CREDIT_BASED_CONNECTION_REQUEST: 4402 // check size 4403 if (len < 10u) return 0u; 4404 4405 // get hci connection, bail if not found (must not happen) 4406 connection = hci_connection_for_handle(handle); 4407 if (!connection) return 0; 4408 4409 // check if service registered 4410 le_psm = little_endian_read_16(command, 4); 4411 service = l2cap_cbm_get_service(le_psm); 4412 source_cid = little_endian_read_16(command, 6); 4413 4414 if (service){ 4415 if (source_cid < 0x40u){ 4416 l2cap_register_signaling_response(handle, LE_CREDIT_BASED_CONNECTION_REQUEST, sig_id, source_cid, L2CAP_CBM_CONNECTION_RESULT_INVALID_SOURCE_CID); 4417 return 1; 4418 } 4419 4420 // go through list of channels for this ACL connection and check if we get a match 4421 btstack_linked_list_iterator_init(&it, &l2cap_channels); 4422 while (btstack_linked_list_iterator_has_next(&it)){ 4423 l2cap_channel_t * a_channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it); 4424 if (!l2cap_is_dynamic_channel_type(a_channel->channel_type)) continue; 4425 if (a_channel->con_handle != handle) continue; 4426 if (a_channel->remote_cid != source_cid) continue; 4427 l2cap_register_signaling_response(handle, LE_CREDIT_BASED_CONNECTION_REQUEST, sig_id, source_cid, L2CAP_CBM_CONNECTION_RESULT_SOURCE_CID_ALREADY_ALLOCATED); 4428 return 1; 4429 } 4430 4431 // security: check encryption 4432 if (service->required_security_level >= LEVEL_2){ 4433 if (gap_encryption_key_size(handle) == 0){ 4434 l2cap_register_signaling_response(handle, LE_CREDIT_BASED_CONNECTION_REQUEST, sig_id, source_cid, L2CAP_CBM_CONNECTION_RESULT_INSUFFICIENT_ENCRYPTION); 4435 return 1; 4436 } 4437 // anything less than 16 byte key size is insufficient 4438 if (gap_encryption_key_size(handle) < 16){ 4439 l2cap_register_signaling_response(handle, LE_CREDIT_BASED_CONNECTION_REQUEST, sig_id, source_cid, L2CAP_CBM_CONNECTION_RESULT_ENCYRPTION_KEY_SIZE_TOO_SHORT); 4440 return 1; 4441 } 4442 } 4443 4444 // security: check authentication 4445 if (service->required_security_level >= LEVEL_3){ 4446 if (!gap_authenticated(handle)){ 4447 l2cap_register_signaling_response(handle, LE_CREDIT_BASED_CONNECTION_REQUEST, sig_id, source_cid, L2CAP_CBM_CONNECTION_RESULT_INSUFFICIENT_AUTHENTICATION); 4448 return 1; 4449 } 4450 } 4451 4452 // security: check authorization 4453 if (service->required_security_level >= LEVEL_4){ 4454 if (gap_authorization_state(handle) != AUTHORIZATION_GRANTED){ 4455 l2cap_register_signaling_response(handle, LE_CREDIT_BASED_CONNECTION_REQUEST, sig_id, source_cid, L2CAP_CBM_CONNECTION_RESULT_INSUFFICIENT_AUTHORIZATION); 4456 return 1; 4457 } 4458 } 4459 4460 // allocate channel 4461 channel = l2cap_create_channel_entry(service->packet_handler, L2CAP_CHANNEL_TYPE_CHANNEL_CBM, connection->address, 4462 BD_ADDR_TYPE_LE_RANDOM, le_psm, service->mtu, service->required_security_level); 4463 if (!channel){ 4464 l2cap_register_signaling_response(handle, LE_CREDIT_BASED_CONNECTION_REQUEST, sig_id, source_cid, L2CAP_CBM_CONNECTION_RESULT_NO_RESOURCES_AVAILABLE); 4465 return 1; 4466 } 4467 4468 channel->con_handle = handle; 4469 channel->remote_cid = source_cid; 4470 channel->remote_sig_id = sig_id; 4471 channel->remote_mtu = little_endian_read_16(command, 8); 4472 channel->remote_mps = little_endian_read_16(command, 10); 4473 channel->credits_outgoing = little_endian_read_16(command, 12); 4474 4475 // set initial state 4476 channel->state = L2CAP_STATE_WAIT_CLIENT_ACCEPT_OR_REJECT; 4477 channel->state_var |= L2CAP_CHANNEL_STATE_VAR_INCOMING; 4478 4479 // add to connections list 4480 btstack_linked_list_add_tail(&l2cap_channels, (btstack_linked_item_t *) channel); 4481 4482 // post connection request event 4483 l2cap_cbm_emit_incoming_connection(channel); 4484 4485 } else { 4486 l2cap_register_signaling_response(handle, LE_CREDIT_BASED_CONNECTION_REQUEST, sig_id, source_cid, L2CAP_CBM_CONNECTION_RESULT_SPSM_NOT_SUPPORTED); 4487 } 4488 break; 4489 4490 case LE_CREDIT_BASED_CONNECTION_RESPONSE: 4491 // check size 4492 if (len < 10u) return 0u; 4493 4494 // Find channel for this sig_id and connection handle 4495 channel = NULL; 4496 btstack_linked_list_iterator_init(&it, &l2cap_channels); 4497 while (btstack_linked_list_iterator_has_next(&it)){ 4498 l2cap_channel_t * a_channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it); 4499 if (!l2cap_is_dynamic_channel_type(a_channel->channel_type)) continue; 4500 if (a_channel->con_handle != handle) continue; 4501 if (a_channel->local_sig_id != sig_id) continue; 4502 channel = a_channel; 4503 break; 4504 } 4505 if (!channel) break; 4506 4507 // cid + 0 4508 result = little_endian_read_16 (command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET+8); 4509 if (result){ 4510 channel->state = L2CAP_STATE_CLOSED; 4511 uint8_t status = l2cap_cbm_status_for_result(result); 4512 l2cap_cbm_emit_channel_opened(channel, status); 4513 4514 // discard channel 4515 btstack_linked_list_remove(&l2cap_channels, (btstack_linked_item_t *) channel); 4516 l2cap_free_channel_entry(channel); 4517 break; 4518 } 4519 4520 // success 4521 channel->remote_cid = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET + 0); 4522 channel->remote_mtu = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET + 2); 4523 channel->remote_mps = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET + 4); 4524 channel->credits_outgoing = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET + 6); 4525 channel->state = L2CAP_STATE_OPEN; 4526 l2cap_cbm_emit_channel_opened(channel, ERROR_CODE_SUCCESS); 4527 break; 4528 #endif 4529 4530 #ifdef L2CAP_USES_CREDIT_BASED_CHANNELS 4531 case L2CAP_FLOW_CONTROL_CREDIT_INDICATION: 4532 return l2cap_credit_based_handle_credit_indication(handle, command, len) ? 1 : 0; 4533 4534 case DISCONNECTION_REQUEST: 4535 // check size 4536 if (len < 4u) return 0u; 4537 4538 // find channel 4539 local_cid = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET + 0); 4540 channel = l2cap_get_channel_for_local_cid_and_handle(local_cid, handle); 4541 if (!channel) { 4542 l2cap_register_signaling_response(handle, DISCONNECTION_REQUEST, sig_id, 4543 little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET + 2), local_cid); 4544 break; 4545 } 4546 channel->remote_sig_id = sig_id; 4547 channel->state = L2CAP_STATE_WILL_SEND_DISCONNECT_RESPONSE; 4548 break; 4549 4550 case DISCONNECTION_RESPONSE: 4551 // check size 4552 if (len < 4u) return 0u; 4553 4554 // find channel 4555 local_cid = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET + 0); 4556 channel = l2cap_get_channel_for_local_cid_and_handle(local_cid, handle); 4557 if (!channel) break; 4558 if (channel->local_sig_id == sig_id) { 4559 if (channel->state == L2CAP_STATE_WAIT_DISCONNECT){ 4560 l2cap_finalize_channel_close(channel); 4561 } 4562 } 4563 break; 4564 #endif 4565 4566 default: 4567 // command unknown -> reject command 4568 return 0; 4569 } 4570 return 1; 4571 } 4572 #endif 4573 4574 #ifdef ENABLE_CLASSIC 4575 static void l2cap_acl_classic_handler_for_channel(l2cap_channel_t * l2cap_channel, uint8_t * packet, uint16_t size){ 4576 4577 // forward data only in OPEN state 4578 if (l2cap_channel->state != L2CAP_STATE_OPEN) return; 4579 4580 #ifdef L2CAP_USES_CREDIT_BASED_CHANNELS 4581 if (l2cap_channel->channel_type == L2CAP_CHANNEL_TYPE_CHANNEL_ECBM){ 4582 l2cap_credit_based_handle_pdu(l2cap_channel, packet, size); 4583 return; 4584 } 4585 #endif 4586 4587 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE 4588 if (l2cap_channel->mode == L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION){ 4589 4590 int fcs_size = l2cap_channel->fcs_option ? 2 : 0; 4591 4592 // assert control + FCS fields are inside 4593 if (size < COMPLETE_L2CAP_HEADER+2+fcs_size) return; 4594 4595 if (l2cap_channel->fcs_option){ 4596 // verify FCS (required if one side requested it) 4597 uint16_t fcs_calculated = crc16_calc(&packet[4], size - (4+2)); 4598 uint16_t fcs_packet = little_endian_read_16(packet, size-2); 4599 4600 #ifdef L2CAP_ERTM_SIMULATE_FCS_ERROR_INTERVAL 4601 // simulate fcs error 4602 static int counter = 0; 4603 if (++counter == L2CAP_ERTM_SIMULATE_FCS_ERROR_INTERVAL) { 4604 log_info("Simulate fcs error"); 4605 fcs_calculated++; 4606 counter = 0; 4607 } 4608 #endif 4609 4610 if (fcs_calculated == fcs_packet){ 4611 log_info("Packet FCS 0x%04x verified", fcs_packet); 4612 } else { 4613 log_error("FCS mismatch! Packet 0x%04x, calculated 0x%04x", fcs_packet, fcs_calculated); 4614 // ERTM State Machine in Bluetooth Spec does not handle 'I-Frame with invalid FCS' 4615 return; 4616 } 4617 } 4618 4619 // switch on packet type 4620 uint16_t control = little_endian_read_16(packet, COMPLETE_L2CAP_HEADER); 4621 uint8_t req_seq = (control >> 8) & 0x3f; 4622 int final = (control >> 7) & 0x01; 4623 if (control & 1){ 4624 // S-Frame 4625 int poll = (control >> 4) & 0x01; 4626 l2cap_supervisory_function_t s = (l2cap_supervisory_function_t) ((control >> 2) & 0x03); 4627 log_info("Control: 0x%04x => Supervisory function %u, ReqSeq %02u", control, (int) s, req_seq); 4628 l2cap_ertm_tx_packet_state_t * tx_state; 4629 switch (s){ 4630 case L2CAP_SUPERVISORY_FUNCTION_RR_RECEIVER_READY: 4631 log_info("L2CAP_SUPERVISORY_FUNCTION_RR_RECEIVER_READY"); 4632 l2cap_ertm_process_req_seq(l2cap_channel, req_seq); 4633 if (poll && final){ 4634 // S-frames shall not be transmitted with both the F-bit and the P-bit set to 1 at the same time. 4635 log_error("P=F=1 in S-Frame"); 4636 break; 4637 } 4638 if (poll){ 4639 // check if we did request selective retransmission before <==> we have stored SDU segments 4640 int i; 4641 int num_stored_out_of_order_packets = 0; 4642 for (i=0;i<l2cap_channel->num_rx_buffers;i++){ 4643 int index = l2cap_channel->rx_store_index + i; 4644 if (index >= l2cap_channel->num_rx_buffers){ 4645 index -= l2cap_channel->num_rx_buffers; 4646 } 4647 l2cap_ertm_rx_packet_state_t * rx_state = &l2cap_channel->rx_packets_state[index]; 4648 if (!rx_state->valid) continue; 4649 num_stored_out_of_order_packets++; 4650 } 4651 if (num_stored_out_of_order_packets){ 4652 l2cap_channel->send_supervisor_frame_selective_reject = 1; 4653 } else { 4654 l2cap_channel->send_supervisor_frame_receiver_ready = 1; 4655 } 4656 l2cap_channel->set_final_bit_after_packet_with_poll_bit_set = 1; 4657 } 4658 if (final){ 4659 // Stop-MonitorTimer 4660 l2cap_ertm_stop_monitor_timer(l2cap_channel); 4661 // If UnackedFrames > 0 then Start-RetransTimer 4662 if (l2cap_channel->unacked_frames){ 4663 l2cap_ertm_start_retransmission_timer(l2cap_channel); 4664 } 4665 // final bit set <- response to RR with poll bit set. All not acknowledged packets need to be retransmitted 4666 l2cap_ertm_retransmit_unacknowleded_frames(l2cap_channel); 4667 } 4668 break; 4669 case L2CAP_SUPERVISORY_FUNCTION_REJ_REJECT: 4670 log_info("L2CAP_SUPERVISORY_FUNCTION_REJ_REJECT"); 4671 l2cap_ertm_process_req_seq(l2cap_channel, req_seq); 4672 // restart transmittion from last unacknowledted packet (earlier packets already freed in l2cap_ertm_process_req_seq) 4673 l2cap_ertm_retransmit_unacknowleded_frames(l2cap_channel); 4674 break; 4675 case L2CAP_SUPERVISORY_FUNCTION_RNR_RECEIVER_NOT_READY: 4676 log_error("L2CAP_SUPERVISORY_FUNCTION_RNR_RECEIVER_NOT_READY"); 4677 break; 4678 case L2CAP_SUPERVISORY_FUNCTION_SREJ_SELECTIVE_REJECT: 4679 log_info("L2CAP_SUPERVISORY_FUNCTION_SREJ_SELECTIVE_REJECT"); 4680 if (poll){ 4681 l2cap_ertm_process_req_seq(l2cap_channel, req_seq); 4682 } 4683 // find requested i-frame 4684 tx_state = l2cap_ertm_get_tx_state(l2cap_channel, req_seq); 4685 if (tx_state){ 4686 log_info("Retransmission for tx_seq %u requested", req_seq); 4687 l2cap_channel->set_final_bit_after_packet_with_poll_bit_set = poll; 4688 tx_state->retransmission_requested = 1; 4689 l2cap_channel->srej_active = 1; 4690 } 4691 break; 4692 default: 4693 break; 4694 } 4695 } else { 4696 // I-Frame 4697 // get control 4698 l2cap_segmentation_and_reassembly_t sar = (l2cap_segmentation_and_reassembly_t) (control >> 14); 4699 uint8_t tx_seq = (control >> 1) & 0x3f; 4700 log_info("Control: 0x%04x => SAR %u, ReqSeq %02u, R?, TxSeq %02u", control, (int) sar, req_seq, tx_seq); 4701 log_info("SAR: pos %u", l2cap_channel->reassembly_pos); 4702 log_info("State: expected_tx_seq %02u, req_seq %02u", l2cap_channel->expected_tx_seq, l2cap_channel->req_seq); 4703 l2cap_ertm_process_req_seq(l2cap_channel, req_seq); 4704 if (final){ 4705 // final bit set <- response to RR with poll bit set. All not acknowledged packets need to be retransmitted 4706 l2cap_ertm_retransmit_unacknowleded_frames(l2cap_channel); 4707 } 4708 4709 // get SDU 4710 const uint8_t * payload_data = &packet[COMPLETE_L2CAP_HEADER+2]; 4711 uint16_t payload_len = size-(COMPLETE_L2CAP_HEADER+2+fcs_size); 4712 4713 // assert SDU size is smaller or equal to our buffers 4714 uint16_t max_payload_size = 0; 4715 switch (sar){ 4716 case L2CAP_SEGMENTATION_AND_REASSEMBLY_UNSEGMENTED_L2CAP_SDU: 4717 case L2CAP_SEGMENTATION_AND_REASSEMBLY_START_OF_L2CAP_SDU: 4718 // SDU Length + MPS 4719 max_payload_size = l2cap_channel->local_mps + 2; 4720 break; 4721 case L2CAP_SEGMENTATION_AND_REASSEMBLY_CONTINUATION_OF_L2CAP_SDU: 4722 case L2CAP_SEGMENTATION_AND_REASSEMBLY_END_OF_L2CAP_SDU: 4723 max_payload_size = l2cap_channel->local_mps; 4724 break; 4725 default: 4726 btstack_assert(false); 4727 break; 4728 } 4729 if (payload_len > max_payload_size){ 4730 log_info("payload len %u > max payload %u -> drop packet", payload_len, max_payload_size); 4731 return; 4732 } 4733 4734 // check ordering 4735 if (l2cap_channel->expected_tx_seq == tx_seq){ 4736 log_info("Received expected frame with TxSeq == ExpectedTxSeq == %02u", tx_seq); 4737 l2cap_channel->expected_tx_seq = l2cap_next_ertm_seq_nr(l2cap_channel->expected_tx_seq); 4738 l2cap_channel->req_seq = l2cap_channel->expected_tx_seq; 4739 4740 // process SDU 4741 l2cap_ertm_handle_in_sequence_sdu(l2cap_channel, sar, payload_data, payload_len); 4742 4743 // process stored segments 4744 while (true){ 4745 int index = l2cap_channel->rx_store_index; 4746 l2cap_ertm_rx_packet_state_t * rx_state = &l2cap_channel->rx_packets_state[index]; 4747 if (!rx_state->valid) break; 4748 4749 log_info("Processing stored frame with TxSeq == ExpectedTxSeq == %02u", l2cap_channel->expected_tx_seq); 4750 l2cap_channel->expected_tx_seq = l2cap_next_ertm_seq_nr(l2cap_channel->expected_tx_seq); 4751 l2cap_channel->req_seq = l2cap_channel->expected_tx_seq; 4752 4753 rx_state->valid = 0; 4754 l2cap_ertm_handle_in_sequence_sdu(l2cap_channel, rx_state->sar, &l2cap_channel->rx_packets_data[index], rx_state->len); 4755 4756 // update rx store index 4757 index++; 4758 if (index >= l2cap_channel->num_rx_buffers){ 4759 index = 0; 4760 } 4761 l2cap_channel->rx_store_index = index; 4762 } 4763 4764 // 4765 l2cap_channel->send_supervisor_frame_receiver_ready = 1; 4766 4767 } else { 4768 int delta = (tx_seq - l2cap_channel->expected_tx_seq) & 0x3f; 4769 if (delta < 2){ 4770 // store segment 4771 l2cap_ertm_handle_out_of_sequence_sdu(l2cap_channel, sar, delta, payload_data, payload_len); 4772 4773 log_info("Received unexpected frame TxSeq %u but expected %u -> send S-SREJ", tx_seq, l2cap_channel->expected_tx_seq); 4774 l2cap_channel->send_supervisor_frame_selective_reject = 1; 4775 } else { 4776 log_info("Received unexpected frame TxSeq %u but expected %u -> send S-REJ", tx_seq, l2cap_channel->expected_tx_seq); 4777 l2cap_channel->send_supervisor_frame_reject = 1; 4778 } 4779 } 4780 } 4781 return; 4782 } 4783 #endif 4784 4785 // check size 4786 uint16_t payload_size = size - COMPLETE_L2CAP_HEADER; 4787 if (l2cap_channel->local_mtu < payload_size) return; 4788 4789 l2cap_dispatch_to_channel(l2cap_channel, L2CAP_DATA_PACKET, &packet[COMPLETE_L2CAP_HEADER], payload_size); 4790 } 4791 #endif 4792 4793 static void l2cap_acl_classic_handler(hci_con_handle_t handle, uint8_t *packet, uint16_t size){ 4794 #ifdef ENABLE_CLASSIC 4795 l2cap_channel_t * l2cap_channel; 4796 l2cap_fixed_channel_t * l2cap_fixed_channel; 4797 4798 uint16_t channel_id = READ_L2CAP_CHANNEL_ID(packet); 4799 uint8_t broadcast_flag = READ_ACL_FLAGS(packet) >> 2; 4800 switch (channel_id) { 4801 4802 case L2CAP_CID_SIGNALING: { 4803 if (broadcast_flag != 0) break; 4804 uint32_t command_offset = 8; 4805 while ((command_offset + L2CAP_SIGNALING_COMMAND_DATA_OFFSET) < size) { 4806 // assert signaling command is fully inside packet 4807 uint16_t data_len = little_endian_read_16(packet, command_offset + L2CAP_SIGNALING_COMMAND_LENGTH_OFFSET); 4808 uint32_t next_command_offset = command_offset + L2CAP_SIGNALING_COMMAND_DATA_OFFSET + data_len; 4809 if (next_command_offset > size){ 4810 log_error("l2cap signaling command len invalid -> drop"); 4811 break; 4812 } 4813 // handle signaling command 4814 l2cap_signaling_handler_dispatch(handle, &packet[command_offset]); 4815 // go to next command 4816 command_offset = next_command_offset; 4817 } 4818 break; 4819 } 4820 4821 case L2CAP_CID_CONNECTIONLESS_CHANNEL: 4822 if (broadcast_flag == 0) break; 4823 l2cap_fixed_channel = l2cap_fixed_channel_for_channel_id(L2CAP_CID_CONNECTIONLESS_CHANNEL); 4824 if (!l2cap_fixed_channel) break; 4825 if (!l2cap_fixed_channel->packet_handler) break; 4826 (*l2cap_fixed_channel->packet_handler)(UCD_DATA_PACKET, handle, &packet[COMPLETE_L2CAP_HEADER], size-COMPLETE_L2CAP_HEADER); 4827 break; 4828 4829 #ifdef ENABLE_BLE 4830 case L2CAP_CID_BR_EDR_SECURITY_MANAGER: 4831 l2cap_fixed_channel = l2cap_fixed_channel_for_channel_id(L2CAP_CID_BR_EDR_SECURITY_MANAGER); 4832 if ((l2cap_fixed_channel == NULL) || (l2cap_fixed_channel->packet_handler == NULL)){ 4833 // Pairing Failed 4834 l2cap_register_signaling_response(handle, (uint8_t) SM_PAIRING_FAILED, 0, L2CAP_CID_BR_EDR_SECURITY_MANAGER, SM_REASON_PAIRING_NOT_SUPPORTED); 4835 } else { 4836 (*l2cap_fixed_channel->packet_handler)(SM_DATA_PACKET, handle, &packet[COMPLETE_L2CAP_HEADER], size-COMPLETE_L2CAP_HEADER); 4837 } 4838 break; 4839 #endif 4840 4841 default: 4842 if (broadcast_flag != 0) break; 4843 // Find channel for this channel_id and connection handle 4844 l2cap_channel = l2cap_get_channel_for_local_cid_and_handle(channel_id, handle); 4845 if (l2cap_channel != NULL){ 4846 l2cap_acl_classic_handler_for_channel(l2cap_channel, packet, size); 4847 } 4848 break; 4849 } 4850 #else 4851 UNUSED(handle); // ok: no code 4852 UNUSED(packet); // ok: no code 4853 UNUSED(size); // ok: no code 4854 #endif 4855 } 4856 4857 static void l2cap_acl_le_handler(hci_con_handle_t handle, uint8_t *packet, uint16_t size){ 4858 #ifdef ENABLE_BLE 4859 4860 l2cap_fixed_channel_t * l2cap_fixed_channel; 4861 4862 #ifdef ENABLE_L2CAP_LE_CREDIT_BASED_FLOW_CONTROL_MODE 4863 l2cap_channel_t * l2cap_channel; 4864 #endif 4865 uint16_t channel_id = READ_L2CAP_CHANNEL_ID(packet); 4866 switch (channel_id) { 4867 4868 case L2CAP_CID_SIGNALING_LE: { 4869 uint8_t sig_id = packet[COMPLETE_L2CAP_HEADER + 1]; 4870 uint16_t len = little_endian_read_16(packet, COMPLETE_L2CAP_HEADER + 2); 4871 if ((COMPLETE_L2CAP_HEADER + 4u + len) > size) break; 4872 int valid = l2cap_le_signaling_handler_dispatch(handle, &packet[COMPLETE_L2CAP_HEADER], sig_id); 4873 if (!valid){ 4874 l2cap_register_signaling_response(handle, COMMAND_REJECT_LE, sig_id, 0, L2CAP_REJ_CMD_UNKNOWN); 4875 } 4876 break; 4877 } 4878 4879 case L2CAP_CID_ATTRIBUTE_PROTOCOL: 4880 l2cap_fixed_channel = l2cap_fixed_channel_for_channel_id(L2CAP_CID_ATTRIBUTE_PROTOCOL); 4881 if (!l2cap_fixed_channel) break; 4882 if (!l2cap_fixed_channel->packet_handler) break; 4883 (*l2cap_fixed_channel->packet_handler)(ATT_DATA_PACKET, handle, &packet[COMPLETE_L2CAP_HEADER], size-COMPLETE_L2CAP_HEADER); 4884 break; 4885 4886 case L2CAP_CID_SECURITY_MANAGER_PROTOCOL: 4887 l2cap_fixed_channel = l2cap_fixed_channel_for_channel_id(L2CAP_CID_SECURITY_MANAGER_PROTOCOL); 4888 if ((l2cap_fixed_channel == NULL) || (l2cap_fixed_channel->packet_handler == NULL)){ 4889 // Pairing Failed 4890 l2cap_register_signaling_response(handle, (uint8_t) SM_PAIRING_FAILED, 0, L2CAP_CID_SECURITY_MANAGER_PROTOCOL, SM_REASON_PAIRING_NOT_SUPPORTED); 4891 } else { 4892 (*l2cap_fixed_channel->packet_handler)(SM_DATA_PACKET, handle, &packet[COMPLETE_L2CAP_HEADER], size-COMPLETE_L2CAP_HEADER); 4893 } 4894 break; 4895 4896 default: 4897 4898 #ifdef ENABLE_L2CAP_LE_CREDIT_BASED_FLOW_CONTROL_MODE 4899 l2cap_channel = l2cap_get_channel_for_local_cid_and_handle(channel_id, handle); 4900 if (l2cap_channel != NULL) { 4901 l2cap_credit_based_handle_pdu(l2cap_channel, packet, size); 4902 } 4903 #endif 4904 break; 4905 } 4906 #else 4907 UNUSED(handle); // ok: no code 4908 UNUSED(packet); // ok: no code 4909 UNUSED(size); // ok: no code 4910 #endif 4911 } 4912 4913 static void l2cap_acl_handler(uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size){ 4914 UNUSED(packet_type); // ok: registered with hci_register_acl_packet_handler 4915 UNUSED(channel); // ok: there is no channel 4916 4917 // Assert full L2CAP header present 4918 if (size < COMPLETE_L2CAP_HEADER) return; 4919 4920 // Dispatch to Classic or LE handler (SCO packets are not dispatched to L2CAP) 4921 hci_con_handle_t handle = READ_ACL_CONNECTION_HANDLE(packet); 4922 hci_connection_t *conn = hci_connection_for_handle(handle); 4923 if (!conn) return; 4924 if (conn->address_type == BD_ADDR_TYPE_ACL){ 4925 l2cap_acl_classic_handler(handle, packet, size); 4926 } else { 4927 l2cap_acl_le_handler(handle, packet, size); 4928 } 4929 4930 l2cap_run(); 4931 } 4932 4933 // Bluetooth 4.0 - allows to register handler for Attribute Protocol and Security Manager Protocol 4934 void l2cap_register_fixed_channel(btstack_packet_handler_t packet_handler, uint16_t channel_id) { 4935 l2cap_fixed_channel_t * channel = l2cap_fixed_channel_for_channel_id(channel_id); 4936 if (!channel) return; 4937 channel->packet_handler = packet_handler; 4938 } 4939 4940 #ifdef L2CAP_USES_CHANNELS 4941 // finalize closed channel - l2cap_handle_disconnect_request & DISCONNECTION_RESPONSE 4942 void l2cap_finalize_channel_close(l2cap_channel_t * channel){ 4943 channel->state = L2CAP_STATE_CLOSED; 4944 l2cap_handle_channel_closed(channel); 4945 // discard channel 4946 btstack_linked_list_remove(&l2cap_channels, (btstack_linked_item_t *) channel); 4947 l2cap_free_channel_entry(channel); 4948 } 4949 #endif 4950 4951 #ifdef ENABLE_CLASSIC 4952 static inline l2cap_service_t * l2cap_get_service(uint16_t psm){ 4953 return l2cap_get_service_internal(&l2cap_services, psm); 4954 } 4955 4956 static void l2cap_update_minimal_security_level(void){ 4957 // update minimal service security level 4958 gap_security_level_t minimal_level = LEVEL_1; 4959 btstack_linked_list_iterator_t it; 4960 btstack_linked_list_iterator_init(&it, &l2cap_services); 4961 while (btstack_linked_list_iterator_has_next(&it)){ 4962 l2cap_service_t * service = (l2cap_service_t *) btstack_linked_list_iterator_next(&it); 4963 if (service->required_security_level > minimal_level){ 4964 minimal_level = service->required_security_level; 4965 }; 4966 } 4967 gap_set_minimal_service_security_level(minimal_level); 4968 } 4969 4970 uint8_t l2cap_register_service(btstack_packet_handler_t service_packet_handler, uint16_t psm, uint16_t mtu, gap_security_level_t security_level){ 4971 4972 log_info("L2CAP_REGISTER_SERVICE psm 0x%x mtu %u", psm, mtu); 4973 4974 // check for alread registered psm 4975 l2cap_service_t *service = l2cap_get_service(psm); 4976 if (service) { 4977 log_error("register: PSM %u already registered", psm); 4978 return L2CAP_SERVICE_ALREADY_REGISTERED; 4979 } 4980 4981 // alloc structure 4982 service = btstack_memory_l2cap_service_get(); 4983 if (!service) { 4984 log_error("register: no memory for l2cap_service_t"); 4985 return BTSTACK_MEMORY_ALLOC_FAILED; 4986 } 4987 4988 // fill in 4989 service->psm = psm; 4990 service->mtu = mtu; 4991 service->packet_handler = service_packet_handler; 4992 service->required_security_level = security_level; 4993 4994 // add to services list 4995 btstack_linked_list_add(&l2cap_services, (btstack_linked_item_t *) service); 4996 4997 l2cap_update_minimal_security_level(); 4998 4999 #ifndef ENABLE_EXPLICIT_CONNECTABLE_MODE_CONTROL 5000 // enable page scan 5001 gap_connectable_control(1); 5002 #endif 5003 5004 5005 return ERROR_CODE_SUCCESS; 5006 } 5007 5008 uint8_t l2cap_unregister_service(uint16_t psm){ 5009 5010 log_info("unregister psm 0x%x", psm); 5011 5012 l2cap_service_t *service = l2cap_get_service(psm); 5013 if (!service) return L2CAP_SERVICE_DOES_NOT_EXIST; 5014 btstack_linked_list_remove(&l2cap_services, (btstack_linked_item_t *) service); 5015 btstack_memory_l2cap_service_free(service); 5016 5017 l2cap_update_minimal_security_level(); 5018 5019 #ifndef ENABLE_EXPLICIT_CONNECTABLE_MODE_CONTROL 5020 // disable page scan when no services registered 5021 if (btstack_linked_list_empty(&l2cap_services)) { 5022 gap_connectable_control(0); 5023 } 5024 #endif 5025 5026 return ERROR_CODE_SUCCESS; 5027 } 5028 #endif 5029 5030 5031 #ifdef L2CAP_USES_CREDIT_BASED_CHANNELS 5032 5033 static void l2cap_credit_based_send_pdu(l2cap_channel_t *channel) { 5034 btstack_assert(channel != NULL); 5035 btstack_assert(channel->send_sdu_buffer != NULL); 5036 btstack_assert(channel->credits_outgoing > 0); 5037 5038 // send part of SDU 5039 hci_reserve_packet_buffer(); 5040 uint8_t *acl_buffer = hci_get_outgoing_packet_buffer(); 5041 uint8_t *l2cap_payload = acl_buffer + 8; 5042 uint16_t pos = 0; 5043 if (!channel->send_sdu_pos) { 5044 // store SDU len 5045 channel->send_sdu_pos += 2u; 5046 little_endian_store_16(l2cap_payload, pos, channel->send_sdu_len); 5047 pos += 2u; 5048 } 5049 uint16_t payload_size = btstack_min(channel->send_sdu_len + 2u - channel->send_sdu_pos, channel->remote_mps - pos); 5050 log_info("len %u, pos %u => payload %u, credits %u", channel->send_sdu_len, channel->send_sdu_pos, payload_size, 5051 channel->credits_outgoing); 5052 (void) memcpy(&l2cap_payload[pos], 5053 &channel->send_sdu_buffer[channel->send_sdu_pos - 2u], 5054 payload_size); // -2 for virtual SDU len 5055 pos += payload_size; 5056 channel->send_sdu_pos += payload_size; 5057 l2cap_setup_header(acl_buffer, channel->con_handle, 0, channel->remote_cid, pos); 5058 5059 channel->credits_outgoing--; 5060 5061 // update state (mark SDU as done) before calling hci_send_acl_packet_buffer (trigger l2cap_le_send_pdu again) 5062 bool done = channel->send_sdu_pos >= (channel->send_sdu_len + 2u); 5063 if (done) { 5064 channel->send_sdu_buffer = NULL; 5065 } 5066 5067 hci_send_acl_packet_buffer(8u + pos); 5068 5069 if (done) { 5070 // send done event 5071 l2cap_emit_simple_event_with_cid(channel, L2CAP_EVENT_PACKET_SENT); 5072 // inform about can send now 5073 l2cap_credit_based_notify_channel_can_send(channel); 5074 } 5075 } 5076 5077 static uint8_t l2cap_credit_based_send_data(l2cap_channel_t * channel, const uint8_t * data, uint16_t size){ 5078 5079 if (size > channel->remote_mtu){ 5080 log_error("l2cap send, cid 0x%02x, data length exceeds remote MTU.", channel->local_cid); 5081 return L2CAP_DATA_LEN_EXCEEDS_REMOTE_MTU; 5082 } 5083 5084 if (channel->send_sdu_buffer){ 5085 log_info("l2cap send, cid 0x%02x, cannot send", channel->local_cid); 5086 return BTSTACK_ACL_BUFFERS_FULL; 5087 } 5088 5089 channel->send_sdu_buffer = data; 5090 channel->send_sdu_len = size; 5091 channel->send_sdu_pos = 0; 5092 5093 l2cap_notify_channel_can_send(); 5094 return ERROR_CODE_SUCCESS; 5095 } 5096 5097 static uint8_t l2cap_credit_based_provide_credits(uint16_t local_cid, uint16_t credits){ 5098 l2cap_channel_t * channel = l2cap_get_channel_for_local_cid(local_cid); 5099 if (!channel) { 5100 log_error("le credits no channel for cid 0x%02x", local_cid); 5101 return L2CAP_LOCAL_CID_DOES_NOT_EXIST; 5102 } 5103 5104 // check state 5105 if (channel->state != L2CAP_STATE_OPEN){ 5106 log_error("le credits but channel 0x%02x not open yet", local_cid); 5107 } 5108 5109 // ignore if set to automatic credits 5110 if (channel->automatic_credits) return ERROR_CODE_SUCCESS; 5111 5112 // assert incoming credits + credits <= 0xffff 5113 uint32_t total_credits = channel->credits_incoming; 5114 total_credits += channel->new_credits_incoming; 5115 total_credits += credits; 5116 if (total_credits > 0xffffu){ 5117 log_error("le credits overrun: current %u, scheduled %u, additional %u", channel->credits_incoming, 5118 channel->new_credits_incoming, credits); 5119 } 5120 5121 // set credits_granted 5122 channel->new_credits_incoming += credits; 5123 5124 // go 5125 l2cap_run(); 5126 return ERROR_CODE_SUCCESS; 5127 } 5128 5129 static void l2cap_credit_based_send_credits(l2cap_channel_t *channel) { 5130 log_info("l2cap: sending %u credits", channel->new_credits_incoming); 5131 channel->local_sig_id = l2cap_next_sig_id(); 5132 uint16_t new_credits = channel->new_credits_incoming; 5133 channel->new_credits_incoming = 0; 5134 channel->credits_incoming += new_credits; 5135 uint16_t signaling_cid = channel->address_type == BD_ADDR_TYPE_ACL ? L2CAP_CID_SIGNALING : L2CAP_CID_SIGNALING_LE; 5136 l2cap_send_general_signaling_packet(channel->con_handle, signaling_cid, L2CAP_FLOW_CONTROL_CREDIT_INDICATION, channel->local_sig_id, channel->local_cid, new_credits); 5137 } 5138 5139 // @return valid 5140 static bool l2cap_credit_based_handle_credit_indication(hci_con_handle_t handle, const uint8_t * command, uint16_t len){ 5141 // check size 5142 if (len < 4u) return false; 5143 5144 // find channel 5145 uint16_t remote_cid = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET + 0); 5146 l2cap_channel_t * channel = l2cap_get_channel_for_remote_handle_and_cid(handle, remote_cid); 5147 if (!channel) { 5148 log_error("credit: no channel for handle 0x%04x/cid 0x%02x", handle, remote_cid); 5149 return true; 5150 } 5151 uint16_t new_credits = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET + 2); 5152 uint16_t credits_before = channel->credits_outgoing; 5153 channel->credits_outgoing += new_credits; 5154 // check for credit overrun 5155 if (credits_before > channel->credits_outgoing) { 5156 log_error("credit: new credits caused overrrun for cid 0x%02x, disconnecting", channel->local_cid); 5157 channel->state = L2CAP_STATE_WILL_SEND_DISCONNECT_REQUEST; 5158 return true; 5159 } 5160 log_info("credit: %u credits for 0x%02x, now %u", new_credits, channel->local_cid, channel->credits_outgoing); 5161 l2cap_call_notify_channel_in_run = true; 5162 return true; 5163 } 5164 5165 static void l2cap_credit_based_handle_pdu(l2cap_channel_t * l2cap_channel, const uint8_t * packet, uint16_t size){ 5166 // ignore empty packets 5167 if (size == COMPLETE_L2CAP_HEADER) return; 5168 5169 // credit counting 5170 if (l2cap_channel->credits_incoming == 0u){ 5171 log_info("(e)CBM: packet received but no incoming credits"); 5172 l2cap_channel->state = L2CAP_STATE_WILL_SEND_DISCONNECT_REQUEST; 5173 return; 5174 } 5175 l2cap_channel->credits_incoming--; 5176 5177 // automatic credits 5178 if ((l2cap_channel->credits_incoming < L2CAP_CREDIT_BASED_FLOW_CONTROL_MODE_AUTOMATIC_CREDITS_WATERMARK) && l2cap_channel->automatic_credits){ 5179 l2cap_channel->new_credits_incoming = L2CAP_CREDIT_BASED_FLOW_CONTROL_MODE_AUTOMATIC_CREDITS_INCREMENT; 5180 } 5181 5182 // first fragment 5183 uint16_t pos = 0; 5184 if (!l2cap_channel->receive_sdu_len){ 5185 if (size < (COMPLETE_L2CAP_HEADER + 2)) return; 5186 uint16_t sdu_len = little_endian_read_16(packet, COMPLETE_L2CAP_HEADER); 5187 if (sdu_len > l2cap_channel->local_mtu) { 5188 log_info("(e)CBM: packet received larger than MTU"); 5189 l2cap_channel->state = L2CAP_STATE_WILL_SEND_DISCONNECT_REQUEST; 5190 return; 5191 } 5192 l2cap_channel->receive_sdu_len = sdu_len; 5193 l2cap_channel->receive_sdu_pos = 0; 5194 pos += 2u; 5195 size -= 2u; 5196 } 5197 5198 uint16_t fragment_size = size-COMPLETE_L2CAP_HEADER; 5199 5200 // check fragment_size 5201 if (fragment_size > l2cap_channel->local_mps) { 5202 log_info("(e)CBM: fragment larger than local MPS"); 5203 l2cap_channel->state = L2CAP_STATE_WILL_SEND_DISCONNECT_REQUEST; 5204 return; 5205 } 5206 5207 // check sdu overrun 5208 if ((l2cap_channel->receive_sdu_pos + fragment_size) > l2cap_channel->receive_sdu_len){ 5209 log_info("(e)CBM: fragments larger than SDU"); 5210 l2cap_channel->state = L2CAP_STATE_WILL_SEND_DISCONNECT_REQUEST; 5211 return; 5212 } 5213 5214 (void)memcpy(&l2cap_channel->receive_sdu_buffer[l2cap_channel->receive_sdu_pos], 5215 &packet[COMPLETE_L2CAP_HEADER + pos], 5216 fragment_size); 5217 l2cap_channel->receive_sdu_pos += fragment_size; 5218 5219 // done? 5220 log_debug("le packet pos %u, len %u", l2cap_channel->receive_sdu_pos, l2cap_channel->receive_sdu_len); 5221 if (l2cap_channel->receive_sdu_pos >= l2cap_channel->receive_sdu_len){ 5222 l2cap_dispatch_to_channel(l2cap_channel, L2CAP_DATA_PACKET, l2cap_channel->receive_sdu_buffer, l2cap_channel->receive_sdu_len); 5223 l2cap_channel->receive_sdu_len = 0; 5224 } 5225 } 5226 5227 static void l2cap_credit_based_notify_channel_can_send(l2cap_channel_t *channel){ 5228 if (!channel->waiting_for_can_send_now) return; 5229 if (channel->send_sdu_buffer) return; 5230 channel->waiting_for_can_send_now = 0; 5231 log_debug("le can send now, local_cid 0x%x", channel->local_cid); 5232 l2cap_emit_simple_event_with_cid(channel, L2CAP_EVENT_CAN_SEND_NOW); 5233 } 5234 #endif 5235 5236 #ifdef ENABLE_L2CAP_LE_CREDIT_BASED_FLOW_CONTROL_MODE 5237 // 1BH2222 5238 static void l2cap_cbm_emit_incoming_connection(l2cap_channel_t *channel) { 5239 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", 5240 channel->address_type, bd_addr_to_str(channel->address), channel->con_handle, channel->psm, channel->local_cid, channel->remote_cid, channel->remote_mtu); 5241 uint8_t event[19]; 5242 event[0] = L2CAP_EVENT_CBM_INCOMING_CONNECTION; 5243 event[1] = sizeof(event) - 2u; 5244 event[2] = channel->address_type; 5245 reverse_bd_addr(channel->address, &event[3]); 5246 little_endian_store_16(event, 9, channel->con_handle); 5247 little_endian_store_16(event, 11, channel->psm); 5248 little_endian_store_16(event, 13, channel->local_cid); 5249 little_endian_store_16(event, 15, channel->remote_cid); 5250 little_endian_store_16(event, 17, channel->remote_mtu); 5251 hci_dump_packet( HCI_EVENT_PACKET, 1, event, sizeof(event)); 5252 l2cap_dispatch_to_channel(channel, HCI_EVENT_PACKET, event, sizeof(event)); 5253 } 5254 // 11BH22222 5255 static void l2cap_cbm_emit_channel_opened(l2cap_channel_t *channel, uint8_t status) { 5256 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", 5257 status, channel->address_type, bd_addr_to_str(channel->address), channel->con_handle, channel->psm, 5258 channel->local_cid, channel->remote_cid, channel->local_mtu, channel->remote_mtu); 5259 uint8_t event[23]; 5260 event[0] = L2CAP_EVENT_CBM_CHANNEL_OPENED; 5261 event[1] = sizeof(event) - 2u; 5262 event[2] = status; 5263 event[3] = channel->address_type; 5264 reverse_bd_addr(channel->address, &event[4]); 5265 little_endian_store_16(event, 10, channel->con_handle); 5266 event[12] = (channel->state_var & L2CAP_CHANNEL_STATE_VAR_INCOMING) ? 1 : 0; 5267 little_endian_store_16(event, 13, channel->psm); 5268 little_endian_store_16(event, 15, channel->local_cid); 5269 little_endian_store_16(event, 17, channel->remote_cid); 5270 little_endian_store_16(event, 19, channel->local_mtu); 5271 little_endian_store_16(event, 21, channel->remote_mtu); 5272 hci_dump_packet( HCI_EVENT_PACKET, 1, event, sizeof(event)); 5273 l2cap_dispatch_to_channel(channel, HCI_EVENT_PACKET, event, sizeof(event)); 5274 } 5275 5276 // finalize closed channel - l2cap_handle_disconnect_request & DISCONNECTION_RESPONSE 5277 void l2cap_cbm_finialize_channel_close(l2cap_channel_t * channel){ 5278 channel->state = L2CAP_STATE_CLOSED; 5279 l2cap_emit_simple_event_with_cid(channel, L2CAP_EVENT_CHANNEL_CLOSED); 5280 // discard channel 5281 btstack_linked_list_remove(&l2cap_channels, (btstack_linked_item_t *) channel); 5282 l2cap_free_channel_entry(channel); 5283 } 5284 5285 static inline l2cap_service_t * l2cap_cbm_get_service(uint16_t le_psm){ 5286 return l2cap_get_service_internal(&l2cap_le_services, le_psm); 5287 } 5288 5289 uint8_t l2cap_cbm_register_service(btstack_packet_handler_t packet_handler, uint16_t psm, gap_security_level_t security_level){ 5290 5291 log_info("l2cap_cbm_register_service psm 0x%x", psm); 5292 5293 // check for alread registered psm 5294 l2cap_service_t *service = l2cap_cbm_get_service(psm); 5295 if (service) { 5296 return L2CAP_SERVICE_ALREADY_REGISTERED; 5297 } 5298 5299 // alloc structure 5300 service = btstack_memory_l2cap_service_get(); 5301 if (!service) { 5302 log_error("register: no memory for l2cap_service_t"); 5303 return BTSTACK_MEMORY_ALLOC_FAILED; 5304 } 5305 5306 // fill in 5307 service->psm = psm; 5308 service->mtu = 0; 5309 service->packet_handler = packet_handler; 5310 service->required_security_level = security_level; 5311 service->requires_authorization = false; 5312 5313 // add to services list 5314 btstack_linked_list_add(&l2cap_le_services, (btstack_linked_item_t *) service); 5315 5316 // done 5317 return ERROR_CODE_SUCCESS; 5318 } 5319 5320 uint8_t l2cap_cbm_unregister_service(uint16_t psm) { 5321 log_info("l2cap_cbm_unregister_service psm 0x%x", psm); 5322 l2cap_service_t *service = l2cap_cbm_get_service(psm); 5323 if (!service) return L2CAP_SERVICE_DOES_NOT_EXIST; 5324 5325 btstack_linked_list_remove(&l2cap_le_services, (btstack_linked_item_t *) service); 5326 btstack_memory_l2cap_service_free(service); 5327 return ERROR_CODE_SUCCESS; 5328 } 5329 5330 uint8_t l2cap_cbm_accept_connection(uint16_t local_cid, uint8_t * receive_sdu_buffer, uint16_t mtu, uint16_t initial_credits){ 5331 // get channel 5332 l2cap_channel_t * channel = l2cap_get_channel_for_local_cid(local_cid); 5333 if (!channel) return L2CAP_LOCAL_CID_DOES_NOT_EXIST; 5334 5335 // validate state 5336 if (channel->state != L2CAP_STATE_WAIT_CLIENT_ACCEPT_OR_REJECT){ 5337 return ERROR_CODE_COMMAND_DISALLOWED; 5338 } 5339 5340 // set state accept connection 5341 channel->state = L2CAP_STATE_WILL_SEND_LE_CONNECTION_RESPONSE_ACCEPT; 5342 channel->receive_sdu_buffer = receive_sdu_buffer; 5343 channel->local_mtu = mtu; 5344 channel->new_credits_incoming = initial_credits; 5345 channel->automatic_credits = initial_credits == L2CAP_LE_AUTOMATIC_CREDITS; 5346 5347 // go 5348 l2cap_run(); 5349 return ERROR_CODE_SUCCESS; 5350 } 5351 5352 uint8_t l2cap_cbm_decline_connection(uint16_t local_cid, uint16_t result) { 5353 // get channel 5354 l2cap_channel_t * channel = l2cap_get_channel_for_local_cid(local_cid); 5355 if (!channel) return L2CAP_LOCAL_CID_DOES_NOT_EXIST; 5356 5357 // validate state 5358 if (channel->state != L2CAP_STATE_WAIT_CLIENT_ACCEPT_OR_REJECT){ 5359 return ERROR_CODE_COMMAND_DISALLOWED; 5360 } 5361 5362 // set state decline connection 5363 channel->state = L2CAP_STATE_WILL_SEND_LE_CONNECTION_RESPONSE_DECLINE; 5364 channel->reason = result; 5365 l2cap_run(); 5366 return ERROR_CODE_SUCCESS; 5367 } 5368 5369 static gap_security_level_t l2cap_cbm_security_level_for_connection(hci_con_handle_t con_handle){ 5370 uint8_t encryption_key_size = gap_encryption_key_size(con_handle); 5371 if (encryption_key_size == 0) return LEVEL_0; 5372 5373 bool authenticated = gap_authenticated(con_handle); 5374 if (!authenticated) return LEVEL_2; 5375 5376 return encryption_key_size == 16 ? LEVEL_4 : LEVEL_3; 5377 } 5378 5379 // used to handle pairing complete after triggering to increase 5380 static void l2cap_cbm_sm_packet_handler(uint8_t packet_type, uint16_t channel_nr, uint8_t *packet, uint16_t size) { 5381 UNUSED(channel_nr); 5382 UNUSED(size); 5383 UNUSED(packet_type); 5384 btstack_assert(packet_type == HCI_EVENT_PACKET); 5385 if (hci_event_packet_get_type(packet) != SM_EVENT_PAIRING_COMPLETE) return; 5386 hci_con_handle_t con_handle = sm_event_pairing_complete_get_handle(packet); 5387 btstack_linked_list_iterator_t it; 5388 btstack_linked_list_iterator_init(&it, &l2cap_channels); 5389 while (btstack_linked_list_iterator_has_next(&it)) { 5390 l2cap_channel_t *channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it); 5391 if (!l2cap_is_dynamic_channel_type(channel->channel_type)) continue; 5392 if (channel->con_handle != con_handle) continue; 5393 if (channel->state != L2CAP_STATE_WAIT_OUTGOING_SECURITY_LEVEL_UPDATE) continue; 5394 5395 // found channel, check security level 5396 if (l2cap_cbm_security_level_for_connection(con_handle) < channel->required_security_level){ 5397 // pairing failed or wasn't good enough, inform user 5398 l2cap_cbm_emit_channel_opened(channel, ERROR_CODE_INSUFFICIENT_SECURITY); 5399 // discard channel 5400 btstack_linked_list_remove(&l2cap_channels, (btstack_linked_item_t *) channel); 5401 l2cap_free_channel_entry(channel); 5402 } else { 5403 // send conn request now 5404 channel->state = L2CAP_STATE_WILL_SEND_LE_CONNECTION_REQUEST; 5405 l2cap_run(); 5406 } 5407 } 5408 } 5409 5410 uint8_t l2cap_cbm_create_channel(btstack_packet_handler_t packet_handler, hci_con_handle_t con_handle, 5411 uint16_t psm, uint8_t * receive_sdu_buffer, uint16_t mtu, uint16_t initial_credits, gap_security_level_t security_level, 5412 uint16_t * out_local_cid) { 5413 5414 static btstack_packet_callback_registration_t sm_event_callback_registration; 5415 static bool sm_callback_registered = false; 5416 5417 log_info("create, handle 0x%04x psm 0x%x mtu %u", con_handle, psm, mtu); 5418 5419 hci_connection_t * connection = hci_connection_for_handle(con_handle); 5420 if (!connection) { 5421 log_error("no hci_connection for handle 0x%04x", con_handle); 5422 return ERROR_CODE_UNKNOWN_CONNECTION_IDENTIFIER; 5423 } 5424 5425 l2cap_channel_t * channel = l2cap_create_channel_entry(packet_handler, L2CAP_CHANNEL_TYPE_CHANNEL_CBM, connection->address, connection->address_type, psm, mtu, security_level); 5426 if (!channel) { 5427 return BTSTACK_MEMORY_ALLOC_FAILED; 5428 } 5429 log_info("created %p", channel); 5430 5431 // store local_cid 5432 if (out_local_cid){ 5433 *out_local_cid = channel->local_cid; 5434 } 5435 5436 // setup channel entry 5437 channel->con_handle = con_handle; 5438 channel->receive_sdu_buffer = receive_sdu_buffer; 5439 channel->new_credits_incoming = initial_credits; 5440 channel->automatic_credits = initial_credits == L2CAP_LE_AUTOMATIC_CREDITS; 5441 5442 // add to connections list 5443 btstack_linked_list_add_tail(&l2cap_channels, (btstack_linked_item_t *) channel); 5444 5445 // check security level 5446 if (l2cap_cbm_security_level_for_connection(con_handle) < channel->required_security_level){ 5447 if (!sm_callback_registered){ 5448 sm_callback_registered = true; 5449 // lazy registration for SM events 5450 sm_event_callback_registration.callback = &l2cap_cbm_sm_packet_handler; 5451 sm_add_event_handler(&sm_event_callback_registration); 5452 } 5453 5454 // start pairing 5455 channel->state = L2CAP_STATE_WAIT_OUTGOING_SECURITY_LEVEL_UPDATE; 5456 sm_request_pairing(con_handle); 5457 } else { 5458 // send conn request right away 5459 channel->state = L2CAP_STATE_WILL_SEND_LE_CONNECTION_REQUEST; 5460 l2cap_run(); 5461 } 5462 5463 return ERROR_CODE_SUCCESS; 5464 } 5465 5466 uint8_t l2cap_cbm_provide_credits(uint16_t local_cid, uint16_t credits){ 5467 return l2cap_credit_based_provide_credits(local_cid, credits); 5468 } 5469 #endif 5470 5471 #ifdef ENABLE_L2CAP_ENHANCED_CREDIT_BASED_FLOW_CONTROL_MODE 5472 5473 uint8_t l2cap_ecbm_register_service(btstack_packet_handler_t packet_handler, uint16_t psm, uint16_t min_remote_mtu, 5474 gap_security_level_t security_level, bool authorization_required) { 5475 5476 // check for already registered psm 5477 l2cap_service_t *service = l2cap_ecbm_get_service(psm); 5478 if (service) { 5479 return L2CAP_SERVICE_ALREADY_REGISTERED; 5480 } 5481 5482 // alloc structure 5483 service = btstack_memory_l2cap_service_get(); 5484 if (!service) { 5485 log_error("register: no memory for l2cap_service_t"); 5486 return BTSTACK_MEMORY_ALLOC_FAILED; 5487 } 5488 5489 // fill in 5490 service->psm = psm; 5491 service->mtu = min_remote_mtu; 5492 service->packet_handler = packet_handler; 5493 service->required_security_level = security_level; 5494 service->requires_authorization = authorization_required; 5495 5496 // add to services list 5497 btstack_linked_list_add(&l2cap_enhanced_services, (btstack_linked_item_t *) service); 5498 5499 // done 5500 return ERROR_CODE_SUCCESS; 5501 } 5502 5503 uint8_t l2cap_ecbm_unregister_service(uint16_t psm) { 5504 l2cap_service_t *service = l2cap_ecbm_get_service(psm); 5505 if (!service) return L2CAP_SERVICE_DOES_NOT_EXIST; 5506 5507 btstack_linked_list_remove(&l2cap_enhanced_services, (btstack_linked_item_t *) service); 5508 btstack_memory_l2cap_service_free(service); 5509 return ERROR_CODE_SUCCESS; 5510 } 5511 5512 void l2cap_ecbm_mps_set_min(uint16_t mps_min){ 5513 l2cap_enhanced_mps_min = mps_min; 5514 } 5515 5516 void l2cap_ecbm_mps_set_max(uint16_t mps_max){ 5517 l2cap_enhanced_mps_max = mps_max; 5518 } 5519 5520 uint8_t l2cap_ecbm_create_channels(btstack_packet_handler_t packet_handler, hci_con_handle_t con_handle, 5521 gap_security_level_t security_level, 5522 uint16_t psm, uint8_t num_channels, uint16_t initial_credits, uint16_t mtu, 5523 uint8_t ** receive_sdu_buffers, uint16_t * out_local_cid){ 5524 5525 log_info("create enhanced, handle 0x%04x psm 0x%x mtu %u", con_handle, psm, mtu); 5526 5527 hci_connection_t * connection = hci_connection_for_handle(con_handle); 5528 if (!connection) { 5529 log_error("no hci_connection for handle 0x%04x", con_handle); 5530 return ERROR_CODE_UNKNOWN_CONNECTION_IDENTIFIER; 5531 } 5532 5533 // setup all channels 5534 btstack_linked_list_t channels = NULL; 5535 uint8_t status = l2cap_ecbm_setup_channels(&channels, packet_handler, num_channels, connection, psm, mtu, 5536 security_level); 5537 uint16_t local_mps = btstack_min(l2cap_enhanced_mps_max, btstack_min(l2cap_max_le_mtu(), mtu)); 5538 5539 // add to connections list and set state + local_sig_id 5540 l2cap_channel_t * channel; 5541 uint8_t i = 0; 5542 uint8_t local_sig_id = l2cap_next_sig_id(); 5543 while (true) { 5544 channel = (l2cap_channel_t *) btstack_linked_list_pop(&channels); 5545 if (channel == NULL) break; 5546 channel->state = L2CAP_STATE_WILL_SEND_ENHANCED_CONNECTION_REQUEST; 5547 channel->local_sig_id = local_sig_id; 5548 channel->local_mps = local_mps; 5549 channel->cid_index = i; 5550 channel->num_cids = num_channels; 5551 channel->credits_incoming = initial_credits; 5552 channel->automatic_credits = initial_credits == L2CAP_LE_AUTOMATIC_CREDITS; 5553 channel->receive_sdu_buffer = receive_sdu_buffers[i]; 5554 // store local_cid 5555 if (out_local_cid){ 5556 out_local_cid[i] = channel->local_cid; 5557 } 5558 btstack_linked_list_add_tail(&l2cap_channels, (btstack_linked_item_t *) channel); 5559 i++; 5560 } 5561 5562 #if 0 5563 // check security level 5564 if (l2cap_le_security_level_for_connection(con_handle) < channel->required_security_level){ 5565 if (!sm_callback_registered){ 5566 sm_callback_registered = true; 5567 // lazy registration for SM events 5568 sm_event_callback_registration.callback = &l2cap_sm_packet_handler; 5569 sm_add_event_handler(&sm_event_callback_registration); 5570 } 5571 5572 // start pairing 5573 channel->state = L2CAP_STATE_WAIT_OUTGOING_SECURITY_LEVEL_UPDATE; 5574 sm_request_pairing(con_handle); 5575 } else { 5576 // send conn request right away 5577 channel->state = L2CAP_STATE_WILL_SEND_LE_CONNECTION_REQUEST; 5578 l2cap_run(); 5579 } 5580 #endif 5581 5582 l2cap_run(); 5583 5584 return status; 5585 } 5586 5587 uint8_t l2cap_ecbm_accept_channels(uint16_t local_cid, uint8_t num_channels, uint16_t initial_credits, 5588 uint16_t receive_buffer_size, uint8_t ** receive_buffers, uint16_t * out_local_cids){ 5589 5590 l2cap_channel_t * channel = l2cap_get_channel_for_local_cid(local_cid); 5591 if (!channel) { 5592 5593 return L2CAP_LOCAL_CID_DOES_NOT_EXIST; 5594 } 5595 5596 uint16_t local_mps = btstack_min(l2cap_enhanced_mps_max, btstack_min(l2cap_max_le_mtu(), receive_buffer_size)); 5597 5598 // 5599 hci_con_handle_t con_handle = channel->con_handle; 5600 uint8_t local_sig_id = channel->local_sig_id; 5601 uint8_t channel_index = 0; 5602 btstack_linked_list_iterator_t it; 5603 btstack_linked_list_iterator_init(&it, &l2cap_channels); 5604 while (btstack_linked_list_iterator_has_next(&it)) { 5605 channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it); 5606 if (!l2cap_is_dynamic_channel_type(channel->channel_type)) continue; 5607 if (channel->con_handle != con_handle) continue; 5608 if (channel->local_sig_id != local_sig_id) continue; 5609 if (channel->state != L2CAP_STATE_WAIT_CLIENT_ACCEPT_OR_REJECT) continue; 5610 5611 if (channel_index < num_channels){ 5612 // assign buffer and cid 5613 out_local_cids[channel_index] = channel->local_cid; 5614 channel->receive_sdu_buffer = receive_buffers[channel_index]; 5615 channel->local_mtu = receive_buffer_size; 5616 channel->local_mps = local_mps; 5617 channel->credits_incoming = initial_credits; 5618 channel->automatic_credits = initial_credits == L2CAP_LE_AUTOMATIC_CREDITS; 5619 channel_index++; 5620 } else { 5621 // clear local cid for response packet 5622 channel->local_cid = 0; 5623 channel->reason = L2CAP_ECBM_CONNECTION_RESULT_SOME_REFUSED_INSUFFICIENT_RESOURCES_AVAILABLE; 5624 } 5625 // update state 5626 channel->state = L2CAP_STATE_WILL_SEND_ENHANCED_CONNECTION_RESPONSE; 5627 } 5628 l2cap_run_trigger(); 5629 return ERROR_CODE_SUCCESS; 5630 } 5631 5632 uint8_t l2cap_ecbm_decline_channels(uint16_t local_cid, uint16_t result){ 5633 l2cap_channel_t * channel = l2cap_get_channel_for_local_cid(local_cid); 5634 if (!channel) { 5635 return L2CAP_LOCAL_CID_DOES_NOT_EXIST; 5636 } 5637 // 5638 hci_con_handle_t con_handle = channel->con_handle; 5639 uint8_t local_sig_id = channel->local_sig_id; 5640 btstack_linked_list_iterator_t it; 5641 btstack_linked_list_iterator_init(&it, &l2cap_channels); 5642 while (btstack_linked_list_iterator_has_next(&it)) { 5643 channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it); 5644 if (!l2cap_is_dynamic_channel_type(channel->channel_type)) continue; 5645 if (channel->con_handle != con_handle) continue; 5646 if (channel->local_sig_id != local_sig_id) continue; 5647 if (channel->state != L2CAP_STATE_WAIT_CLIENT_ACCEPT_OR_REJECT) continue; 5648 5649 // prepare response 5650 channel->local_cid = 0; 5651 channel->reason = result; 5652 channel->state = L2CAP_STATE_WILL_SEND_ENHANCED_CONNECTION_RESPONSE; 5653 } 5654 l2cap_run_trigger(); 5655 return ERROR_CODE_SUCCESS; 5656 } 5657 5658 uint8_t l2cap_ecbm_reconfigure_channels(uint8_t num_cids, uint16_t * local_cids, int16_t receive_buffer_size, uint8_t ** receive_buffers){ 5659 btstack_assert(receive_buffers != NULL); 5660 btstack_assert(local_cids != NULL); 5661 5662 if (num_cids > L2CAP_ECBM_MAX_CID_ARRAY_SIZE){ 5663 return ERROR_CODE_UNACCEPTABLE_CONNECTION_PARAMETERS; 5664 } 5665 5666 // check if all cids exist and have the same con handle 5667 uint8_t i; 5668 hci_con_handle_t con_handle = HCI_CON_HANDLE_INVALID; 5669 for (i = 0 ; i < num_cids ; i++){ 5670 l2cap_channel_t * channel = l2cap_get_channel_for_local_cid(local_cids[i]); 5671 if (!channel) { 5672 return L2CAP_LOCAL_CID_DOES_NOT_EXIST; 5673 } 5674 if (channel->state != L2CAP_STATE_OPEN){ 5675 return ERROR_CODE_COMMAND_DISALLOWED; 5676 } 5677 if (con_handle == HCI_CON_HANDLE_INVALID){ 5678 con_handle = channel->con_handle; 5679 } else if (con_handle != channel->con_handle){ 5680 return ERROR_CODE_UNACCEPTABLE_CONNECTION_PARAMETERS; 5681 } 5682 } 5683 // set renegotiation data and state 5684 uint8_t sig_id = l2cap_next_sig_id(); 5685 for (i = 0 ; i < num_cids ; i++){ 5686 l2cap_channel_t * channel = l2cap_get_channel_for_local_cid(local_cids[i]); 5687 channel->cid_index = i; 5688 channel->num_cids = num_cids; 5689 channel->local_sig_id = sig_id; 5690 channel->renegotiate_mtu = receive_buffer_size; 5691 channel->renegotiate_sdu_buffer = receive_buffers[i]; 5692 channel->state = L2CAP_STATE_WILL_SEND_EHNANCED_RENEGOTIATION_REQUEST; 5693 } 5694 5695 5696 l2cap_run(); 5697 return ERROR_CODE_SUCCESS; 5698 } 5699 5700 uint8_t l2cap_ecbm_provide_credits(uint16_t local_cid, uint16_t credits){ 5701 return l2cap_credit_based_provide_credits(local_cid, credits); 5702 } 5703 #endif 5704 5705 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE 5706 // @deprecated - please use l2cap_ertm_create_channel 5707 uint8_t l2cap_create_ertm_channel(btstack_packet_handler_t packet_handler, bd_addr_t address, uint16_t psm, 5708 l2cap_ertm_config_t * ertm_contig, uint8_t * buffer, uint32_t size, uint16_t * out_local_cid){ 5709 log_error("deprecated - please use l2cap_ertm_create_channel"); 5710 return l2cap_ertm_create_channel(packet_handler, address, psm, ertm_contig, buffer, size, out_local_cid); 5711 }; 5712 5713 // @deprecated - please use l2cap_ertm_accept_connection 5714 uint8_t l2cap_accept_ertm_connection(uint16_t local_cid, l2cap_ertm_config_t * ertm_contig, uint8_t * buffer, uint32_t size){ 5715 log_error("deprecated - please use l2cap_ertm_accept_connection"); 5716 return l2cap_ertm_accept_connection(local_cid, ertm_contig, buffer, size); 5717 } 5718 #endif 5719 5720 #ifdef ENABLE_L2CAP_LE_CREDIT_BASED_FLOW_CONTROL_MODE 5721 // @deprecated - please use l2cap_cbm_register_service 5722 uint8_t l2cap_le_register_service(btstack_packet_handler_t packet_handler, uint16_t psm, gap_security_level_t security_level){ 5723 log_error("deprecated - please use l2cap_cbm_register_service"); 5724 return l2cap_cbm_register_service(packet_handler, psm, security_level); 5725 } 5726 5727 // @deprecated - please use l2cap_cbm_unregister_service 5728 uint8_t l2cap_le_unregister_service(uint16_t psm){ 5729 log_error("deprecated - please use l2cap_cbm_unregister_service"); 5730 return l2cap_cbm_unregister_service(psm); 5731 } 5732 5733 // @deprecated - please use l2cap_cbm_accept_connection 5734 uint8_t l2cap_le_accept_connection(uint16_t local_cid, uint8_t * receive_sdu_buffer, uint16_t mtu, uint16_t initial_credits){ 5735 log_error("deprecated - please use l2cap_cbm_accept_connection"); 5736 return l2cap_cbm_accept_connection(local_cid, receive_sdu_buffer, mtu, initial_credits); 5737 } 5738 5739 // @deprecated - please use l2cap_cbm_decline_connection 5740 uint8_t l2cap_le_decline_connection(uint16_t local_cid){ 5741 log_error("deprecated - please use l2cap_cbm_decline_connection"); 5742 return l2cap_cbm_decline_connection(local_cid, L2CAP_CBM_CONNECTION_RESULT_NO_RESOURCES_AVAILABLE); 5743 } 5744 5745 // @deprecated - please use l2cap_cbm_create_channel 5746 uint8_t l2cap_le_create_channel(btstack_packet_handler_t packet_handler, hci_con_handle_t con_handle, 5747 uint16_t psm, uint8_t * receive_sdu_buffer, uint16_t mtu, uint16_t initial_credits, gap_security_level_t security_level, 5748 uint16_t * out_local_cid){ 5749 log_error("deprecated - please use l2cap_cbm_create_channel"); 5750 return l2cap_cbm_create_channel(packet_handler, con_handle, psm, receive_sdu_buffer, mtu, initial_credits, security_level, out_local_cid); 5751 } 5752 5753 // @deprecated - please use l2cap_cbm_provide_credits 5754 uint8_t l2cap_le_provide_credits(uint16_t local_cid, uint16_t credits){ 5755 log_error("deprecated - please use l2cap_cbm_provide_credits"); 5756 return l2cap_cbm_provide_credits(local_cid, credits); 5757 } 5758 5759 // @deprecated - please use l2cap_can_send_packet_now 5760 bool l2cap_le_can_send_now(uint16_t local_cid){ 5761 log_error("deprecated - please use l2cap_can_send_packet_now"); 5762 return l2cap_can_send_packet_now(local_cid); 5763 } 5764 5765 // @deprecated - please use l2cap_request_can_send_now_event 5766 uint8_t l2cap_le_request_can_send_now_event(uint16_t local_cid){ 5767 log_error("deprecated - please use l2cap_request_can_send_now_event"); 5768 return l2cap_request_can_send_now_event(local_cid); 5769 } 5770 5771 // @deprecated - please use l2cap_cbm_send_data 5772 uint8_t l2cap_le_send_data(uint16_t local_cid, const uint8_t * data, uint16_t size){ 5773 log_error("deprecated - please use l2cap_cbm_send_data"); 5774 return l2cap_send(local_cid, data, size); 5775 } 5776 5777 // @deprecated - please use l2cap_disconnect 5778 uint8_t l2cap_le_disconnect(uint16_t local_cid){ 5779 log_error("deprecated - please use l2cap_disconnect"); 5780 return l2cap_disconnect(local_cid); 5781 } 5782 #endif 5783