ref: 81ad89d6bc980da20ce2f249f6d87cab3a369623
src/libs/mynewt-nimble/nimble/host/include/host/ble_l2cap.h
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 |
/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ #ifndef H_BLE_L2CAP_ #define H_BLE_L2CAP_ #include "nimble/nimble_opt.h" #ifdef __cplusplus extern "C" { #endif struct ble_l2cap_sig_update_req; struct ble_hs_conn; #define BLE_L2CAP_CID_ATT 4 #define BLE_L2CAP_CID_SIG 5 #define BLE_L2CAP_CID_SM 6 #define BLE_L2CAP_SIG_OP_REJECT 0x01 #define BLE_L2CAP_SIG_OP_CONNECT_REQ 0x02 #define BLE_L2CAP_SIG_OP_CONNECT_RSP 0x03 #define BLE_L2CAP_SIG_OP_CONFIG_REQ 0x04 #define BLE_L2CAP_SIG_OP_CONFIG_RSP 0x05 #define BLE_L2CAP_SIG_OP_DISCONN_REQ 0x06 #define BLE_L2CAP_SIG_OP_DISCONN_RSP 0x07 #define BLE_L2CAP_SIG_OP_ECHO_REQ 0x08 #define BLE_L2CAP_SIG_OP_ECHO_RSP 0x09 #define BLE_L2CAP_SIG_OP_INFO_REQ 0x0a #define BLE_L2CAP_SIG_OP_INFO_RSP 0x0b #define BLE_L2CAP_SIG_OP_CREATE_CHAN_REQ 0x0c #define BLE_L2CAP_SIG_OP_CREATE_CHAN_RSP 0x0d #define BLE_L2CAP_SIG_OP_MOVE_CHAN_REQ 0x0e #define BLE_L2CAP_SIG_OP_MOVE_CHAN_RSP 0x0f #define BLE_L2CAP_SIG_OP_MOVE_CHAN_CONF_REQ 0x10 #define BLE_L2CAP_SIG_OP_MOVE_CHAN_CONF_RSP 0x11 #define BLE_L2CAP_SIG_OP_UPDATE_REQ 0x12 #define BLE_L2CAP_SIG_OP_UPDATE_RSP 0x13 #define BLE_L2CAP_SIG_OP_LE_CREDIT_CONNECT_REQ 0x14 #define BLE_L2CAP_SIG_OP_LE_CREDIT_CONNECT_RSP 0x15 #define BLE_L2CAP_SIG_OP_FLOW_CTRL_CREDIT 0x16 #define BLE_L2CAP_SIG_OP_CREDIT_CONNECT_REQ 0x17 #define BLE_L2CAP_SIG_OP_CREDIT_CONNECT_RSP 0x18 #define BLE_L2CAP_SIG_OP_CREDIT_RECONFIG_REQ 0x19 #define BLE_L2CAP_SIG_OP_CREDIT_RECONFIG_RSP 0x1A #define BLE_L2CAP_SIG_OP_MAX 0x1B #define BLE_L2CAP_SIG_ERR_CMD_NOT_UNDERSTOOD 0x0000 #define BLE_L2CAP_SIG_ERR_MTU_EXCEEDED 0x0001 #define BLE_L2CAP_SIG_ERR_INVALID_CID 0x0002 #define BLE_L2CAP_COC_ERR_CONNECTION_SUCCESS 0x0000 #define BLE_L2CAP_COC_ERR_UNKNOWN_LE_PSM 0x0002 #define BLE_L2CAP_COC_ERR_NO_RESOURCES 0x0004 #define BLE_L2CAP_COC_ERR_INSUFFICIENT_AUTHEN 0x0005 #define BLE_L2CAP_COC_ERR_INSUFFICIENT_AUTHOR 0x0006 #define BLE_L2CAP_COC_ERR_INSUFFICIENT_KEY_SZ 0x0007 #define BLE_L2CAP_COC_ERR_INSUFFICIENT_ENC 0x0008 #define BLE_L2CAP_COC_ERR_INVALID_SOURCE_CID 0x0009 #define BLE_L2CAP_COC_ERR_SOURCE_CID_ALREADY_USED 0x000A #define BLE_L2CAP_COC_ERR_UNACCEPTABLE_PARAMETERS 0x000B #define BLE_L2CAP_COC_ERR_INVALID_PARAMETERS 0x000C #define BLE_L2CAP_ERR_RECONFIG_SUCCEED 0x0000 #define BLE_L2CAP_ERR_RECONFIG_REDUCTION_MTU_NOT_ALLOWED 0x0001 #define BLE_L2CAP_ERR_RECONFIG_REDUCTION_MPS_NOT_ALLOWED 0x0002 #define BLE_L2CAP_ERR_RECONFIG_INVALID_DCID 0x0003 #define BLE_L2CAP_ERR_RECONFIG_UNACCAPTED_PARAM 0x0004 #define BLE_L2CAP_EVENT_COC_CONNECTED 0 #define BLE_L2CAP_EVENT_COC_DISCONNECTED 1 #define BLE_L2CAP_EVENT_COC_ACCEPT 2 #define BLE_L2CAP_EVENT_COC_DATA_RECEIVED 3 #define BLE_L2CAP_EVENT_COC_TX_UNSTALLED 4 #define BLE_L2CAP_EVENT_COC_RECONFIG_COMPLETED 5 #define BLE_L2CAP_EVENT_COC_PEER_RECONFIGURED 6 typedef void ble_l2cap_sig_update_fn(uint16_t conn_handle, int status, void *arg); struct ble_l2cap_sig_update_params { uint16_t itvl_min; uint16_t itvl_max; uint16_t slave_latency; uint16_t timeout_multiplier; }; int ble_l2cap_sig_update(uint16_t conn_handle, struct ble_l2cap_sig_update_params *params, ble_l2cap_sig_update_fn *cb, void *cb_arg); struct ble_l2cap_chan; /** * Represents a L2CAP-related event. * When such an event occurs, the host notifies the application by passing an * instance of this structure to an application-specified callback. */ struct ble_l2cap_event { /** * Indicates the type of L2CAP event that occurred. This is one of the * BLE_L2CAP_EVENT codes. */ uint8_t type; /** * A discriminated union containing additional details concerning the L2CAP * event. The 'type' field indicates which member of the union is valid. */ union { /** * Represents a connection attempt. Valid for the following event * types: * o BLE_L2CAP_EVENT_COC_CONNECTED */ struct { /** * The status of the connection attempt; * o 0: the connection was successfully established. * o BLE host error code: the connection attempt failed for * the specified reason. */ int status; /** Connection handle of the relevant connection */ uint16_t conn_handle; /** The L2CAP channel of the relevant L2CAP connection. */ struct ble_l2cap_chan *chan; } connect; /** * Represents a terminated connection. Valid for the following event * types: * o BLE_L2CAP_EVENT_COC_DISCONNECTED */ struct { /** Connection handle of the relevant connection */ uint16_t conn_handle; /** Information about the L2CAP connection prior to termination. */ struct ble_l2cap_chan *chan; } disconnect; /** * Represents connection accept. Valid for the following event * types: * o BLE_L2CAP_EVENT_COC_ACCEPT */ struct { /** Connection handle of the relevant connection */ uint16_t conn_handle; /** MTU supported by peer device on the channel */ uint16_t peer_sdu_size; /** The L2CAP channel of the relevant L2CAP connection. */ struct ble_l2cap_chan *chan; } accept; /** * Represents received data. Valid for the following event * types: * o BLE_L2CAP_EVENT_COC_DATA_RECEIVED */ struct { /** Connection handle of the relevant connection */ uint16_t conn_handle; /** The L2CAP channel of the relevant L2CAP connection. */ struct ble_l2cap_chan *chan; /** The mbuf with received SDU. */ struct os_mbuf *sdu_rx; } receive; /** * Represents tx_unstalled data. Valid for the following event * types: * o BLE_L2CAP_EVENT_COC_TX_UNSTALLED */ struct { /** Connection handle of the relevant connection */ uint16_t conn_handle; /** The L2CAP channel of the relevant L2CAP connection. */ struct ble_l2cap_chan *chan; /** * The status of the send attempt which was stalled due to * lack of credits; This can be non zero only if there * is an issue with memory allocation for following SDU fragments. * In such a case last SDU has been partially sent to peer device * and it is up to application to decide how to handle it. */ int status; } tx_unstalled; /** * Represents reconfiguration done. Valid for the following event * types: * o BLE_L2CAP_EVENT_COC_RECONFIG_COMPLETED * o BLE_L2CAP_EVENT_COC_PEER_RECONFIGURED */ struct { /** * The status of the reconfiguration attempt; * o 0: the reconfiguration was successfully done. * o BLE host error code: the reconfiguration attempt failed for * the specified reason. */ int status; /** Connection handle of the relevant connection */ uint16_t conn_handle; /** The L2CAP channel of the relevant L2CAP connection. */ struct ble_l2cap_chan *chan; } reconfigured; }; }; struct ble_l2cap_chan_info { uint16_t scid; uint16_t dcid; uint16_t our_l2cap_mtu; uint16_t peer_l2cap_mtu; uint16_t psm; uint16_t our_coc_mtu; uint16_t peer_coc_mtu; }; typedef int ble_l2cap_event_fn(struct ble_l2cap_event *event, void *arg); uint16_t ble_l2cap_get_conn_handle(struct ble_l2cap_chan *chan); int ble_l2cap_create_server(uint16_t psm, uint16_t mtu, ble_l2cap_event_fn *cb, void *cb_arg); int ble_l2cap_connect(uint16_t conn_handle, uint16_t psm, uint16_t mtu, struct os_mbuf *sdu_rx, ble_l2cap_event_fn *cb, void *cb_arg); int ble_l2cap_disconnect(struct ble_l2cap_chan *chan); int ble_l2cap_send(struct ble_l2cap_chan *chan, struct os_mbuf *sdu_tx); int ble_l2cap_recv_ready(struct ble_l2cap_chan *chan, struct os_mbuf *sdu_rx); int ble_l2cap_get_chan_info(struct ble_l2cap_chan *chan, struct ble_l2cap_chan_info *chan_info); #ifdef __cplusplus } #endif #endif |