Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
x-nucleo-idb0xa1/bluenrg-hci/bluenrg_l2cap_aci.h@229:9981f62cdb1a, 2016-05-16 (annotated)
- Committer:
 - Andrea Palmieri 
 - Date:
 - Mon May 16 17:22:03 2016 +0200
 - Revision:
 - 229:9981f62cdb1a
 - Parent:
 - 132:51056160fa4a
 
Fix issues and add features
- Fix handles management
- Fix UUIDs management
- Implement API to read random address
- Fix clearing/setting of ADV payload
- Fix scanning behaviour
- Fix scanning while a connection is ongoing
- Implement Char Descriptor discovery
- Implement scanning/advertising filter policy (White List partial management)
- Update underlying BlueNRG stack
- Cosmetics
Signed-off-by: Andrea Palmieri <andrea.palmieri@st.com>
Who changed what in which revision?
| User | Revision | Line number | New contents of line | 
|---|---|---|---|
| Wolfgang Betz  | 
132:51056160fa4a | 1 | /******************** (C) COPYRIGHT 2014 STMicroelectronics ******************** | 
| Wolfgang Betz  | 
132:51056160fa4a | 2 | * File Name : bluenrg_l2cap_aci.h | 
| Wolfgang Betz  | 
132:51056160fa4a | 3 | * Author : AMS - HEA&RF BU | 
| Wolfgang Betz  | 
132:51056160fa4a | 4 | * Version : V1.0.0 | 
| Wolfgang Betz  | 
132:51056160fa4a | 5 | * Date : 26-Jun-2014 | 
| Wolfgang Betz  | 
132:51056160fa4a | 6 | * Description : Header file with L2CAP commands for BlueNRG FW6.3. | 
| Wolfgang Betz  | 
132:51056160fa4a | 7 | ******************************************************************************** | 
| Wolfgang Betz  | 
132:51056160fa4a | 8 | * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS | 
| Wolfgang Betz  | 
132:51056160fa4a | 9 | * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME. | 
| Wolfgang Betz  | 
132:51056160fa4a | 10 | * AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT, | 
| Wolfgang Betz  | 
132:51056160fa4a | 11 | * INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE | 
| Wolfgang Betz  | 
132:51056160fa4a | 12 | * CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING | 
| Wolfgang Betz  | 
132:51056160fa4a | 13 | * INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. | 
| Wolfgang Betz  | 
132:51056160fa4a | 14 | *******************************************************************************/ | 
| Wolfgang Betz  | 
132:51056160fa4a | 15 | |
| Wolfgang Betz  | 
132:51056160fa4a | 16 | #ifndef __BLUENRG_L2CAP_ACI_H__ | 
| Wolfgang Betz  | 
132:51056160fa4a | 17 | #define __BLUENRG_L2CAP_ACI_H__ | 
| Wolfgang Betz  | 
132:51056160fa4a | 18 | |
| Wolfgang Betz  | 
132:51056160fa4a | 19 | /** | 
| Wolfgang Betz  | 
132:51056160fa4a | 20 | *@addtogroup L2CAP L2CAP | 
| Wolfgang Betz  | 
132:51056160fa4a | 21 | *@brief L2CAP layer. | 
| Wolfgang Betz  | 
132:51056160fa4a | 22 | *@{ | 
| Wolfgang Betz  | 
132:51056160fa4a | 23 | */ | 
| Wolfgang Betz  | 
132:51056160fa4a | 24 | |
| Wolfgang Betz  | 
132:51056160fa4a | 25 | /** | 
| Wolfgang Betz  | 
132:51056160fa4a | 26 | *@defgroup L2CAP_Functions L2CAP functions | 
| Wolfgang Betz  | 
132:51056160fa4a | 27 | *@brief API for L2CAP layer. | 
| Wolfgang Betz  | 
132:51056160fa4a | 28 | *@{ | 
| Wolfgang Betz  | 
132:51056160fa4a | 29 | */ | 
| Wolfgang Betz  | 
132:51056160fa4a | 30 | |
| Wolfgang Betz  | 
132:51056160fa4a | 31 | /** | 
| Wolfgang Betz  | 
132:51056160fa4a | 32 | * @brief Send an L2CAP Connection Parameter Update request from the slave to the master. | 
| Wolfgang Betz  | 
132:51056160fa4a | 33 | * @note An @ref EVT_BLUE_L2CAP_CONN_UPD_RESP event will be raised when the master will respond to the request | 
| Wolfgang Betz  | 
132:51056160fa4a | 34 | * (accepts or rejects). | 
| Wolfgang Betz  | 
132:51056160fa4a | 35 | * @param conn_handle Connection handle on which the connection parameter update request has to be sent. | 
| Wolfgang Betz  | 
132:51056160fa4a | 36 | * @param interval_min Defines minimum value for the connection event interval in the following manner: | 
| Wolfgang Betz  | 
132:51056160fa4a | 37 | * connIntervalMin = interval_min x 1.25ms | 
| Wolfgang Betz  | 
132:51056160fa4a | 38 | * @param interval_max Defines maximum value for the connection event interval in the following manner: | 
| Wolfgang Betz  | 
132:51056160fa4a | 39 | * connIntervalMax = interval_max x 1.25ms | 
| Wolfgang Betz  | 
132:51056160fa4a | 40 | * @param slave_latency Defines the slave latency parameter (number of connection events that can be skipped). | 
| Wolfgang Betz  | 
132:51056160fa4a | 41 | * @param timeout_multiplier Defines connection timeout parameter in the following manner: | 
| Wolfgang Betz  | 
132:51056160fa4a | 42 | * timeout_multiplier x 10ms. | 
| Wolfgang Betz  | 
132:51056160fa4a | 43 | * @return Value indicating success or error code. | 
| Wolfgang Betz  | 
132:51056160fa4a | 44 | */ | 
| Wolfgang Betz  | 
132:51056160fa4a | 45 | tBleStatus aci_l2cap_connection_parameter_update_request(uint16_t conn_handle, uint16_t interval_min, | 
| Wolfgang Betz  | 
132:51056160fa4a | 46 | uint16_t interval_max, uint16_t slave_latency, | 
| Wolfgang Betz  | 
132:51056160fa4a | 47 | uint16_t timeout_multiplier); | 
| Wolfgang Betz  | 
132:51056160fa4a | 48 | /** | 
| Wolfgang Betz  | 
132:51056160fa4a | 49 | * @brief Accept or reject a connection update. | 
| Wolfgang Betz  | 
132:51056160fa4a | 50 | * @note This command should be sent in response to a @ref EVT_BLUE_L2CAP_CONN_UPD_REQ event from the controller. | 
| Wolfgang Betz  | 
132:51056160fa4a | 51 | * The accept parameter has to be set if the connection parameters given in the event are acceptable. | 
| Wolfgang Betz  | 
132:51056160fa4a | 52 | * @param conn_handle Handle received in @ref EVT_BLUE_L2CAP_CONN_UPD_REQ event. | 
| Wolfgang Betz  | 
132:51056160fa4a | 53 | * @param interval_min The connection interval parameter as received in the l2cap connection update request event | 
| Wolfgang Betz  | 
132:51056160fa4a | 54 | * @param interval_max The maximum connection interval parameter as received in the l2cap connection update request event. | 
| Wolfgang Betz  | 
132:51056160fa4a | 55 | * @param slave_latency The slave latency parameter as received in the l2cap connection update request event. | 
| Wolfgang Betz  | 
132:51056160fa4a | 56 | * @param timeout_multiplier The supervision connection timeout parameter as received in the l2cap connection update request event. | 
| Wolfgang Betz  | 
132:51056160fa4a | 57 | * @param min_ce_length Minimum length of connection event needed for the LE connection.\n | 
| Wolfgang Betz  | 
132:51056160fa4a | 58 | * Range: 0x0000 - 0xFFFF\n | 
| Wolfgang Betz  | 
132:51056160fa4a | 59 | * Time = N x 0.625 msec. | 
| Wolfgang Betz  | 
132:51056160fa4a | 60 | * @param max_ce_length Maximum length of connection event needed for the LE connection.\n | 
| Wolfgang Betz  | 
132:51056160fa4a | 61 | * Range: 0x0000 - 0xFFFF\n | 
| Wolfgang Betz  | 
132:51056160fa4a | 62 | * Time = N x 0.625 msec. | 
| Wolfgang Betz  | 
132:51056160fa4a | 63 | * @param id Identifier received in @ref EVT_BLUE_L2CAP_CONN_UPD_REQ event. | 
| Wolfgang Betz  | 
132:51056160fa4a | 64 | * @param accept @arg 0x00: The connection update parameters are not acceptable. | 
| Wolfgang Betz  | 
132:51056160fa4a | 65 | * @arg 0x01: The connection update parameters are acceptable. | 
| Wolfgang Betz  | 
132:51056160fa4a | 66 | * @return Value indicating success or error code. | 
| Wolfgang Betz  | 
132:51056160fa4a | 67 | */ | 
| Wolfgang Betz  | 
132:51056160fa4a | 68 | tBleStatus aci_l2cap_connection_parameter_update_response_IDB05A1(uint16_t conn_handle, uint16_t interval_min, | 
| Wolfgang Betz  | 
132:51056160fa4a | 69 | uint16_t interval_max, uint16_t slave_latency, | 
| Wolfgang Betz  | 
132:51056160fa4a | 70 | uint16_t timeout_multiplier, uint16_t min_ce_length, uint16_t max_ce_length, | 
| Wolfgang Betz  | 
132:51056160fa4a | 71 | uint8_t id, uint8_t accept); | 
| Wolfgang Betz  | 
132:51056160fa4a | 72 | /** | 
| Wolfgang Betz  | 
132:51056160fa4a | 73 | * @brief Accept or reject a connection update. | 
| Wolfgang Betz  | 
132:51056160fa4a | 74 | * @note This command should be sent in response to a @ref EVT_BLUE_L2CAP_CONN_UPD_REQ event from the controller. | 
| Wolfgang Betz  | 
132:51056160fa4a | 75 | * The accept parameter has to be set if the connection parameters given in the event are acceptable. | 
| Wolfgang Betz  | 
132:51056160fa4a | 76 | * @param conn_handle Handle received in @ref EVT_BLUE_L2CAP_CONN_UPD_REQ event. | 
| Wolfgang Betz  | 
132:51056160fa4a | 77 | * @param interval_min The connection interval parameter as received in the l2cap connection update request event | 
| Wolfgang Betz  | 
132:51056160fa4a | 78 | * @param interval_max The maximum connection interval parameter as received in the l2cap connection update request event. | 
| Wolfgang Betz  | 
132:51056160fa4a | 79 | * @param slave_latency The slave latency parameter as received in the l2cap connection update request event. | 
| Wolfgang Betz  | 
132:51056160fa4a | 80 | * @param timeout_multiplier The supervision connection timeout parameter as received in the l2cap connection update request event. | 
| Wolfgang Betz  | 
132:51056160fa4a | 81 | * @param id Identifier received in @ref EVT_BLUE_L2CAP_CONN_UPD_REQ event. | 
| Wolfgang Betz  | 
132:51056160fa4a | 82 | * @param accept @arg 0x00: The connection update parameters are not acceptable. | 
| Wolfgang Betz  | 
132:51056160fa4a | 83 | * @arg 0x01: The connection update parameters are acceptable. | 
| Wolfgang Betz  | 
132:51056160fa4a | 84 | * @return Value indicating success or error code. | 
| Wolfgang Betz  | 
132:51056160fa4a | 85 | */ | 
| Wolfgang Betz  | 
132:51056160fa4a | 86 | tBleStatus aci_l2cap_connection_parameter_update_response_IDB04A1(uint16_t conn_handle, uint16_t interval_min, | 
| Wolfgang Betz  | 
132:51056160fa4a | 87 | uint16_t interval_max, uint16_t slave_latency, | 
| Wolfgang Betz  | 
132:51056160fa4a | 88 | uint16_t timeout_multiplier, uint8_t id, uint8_t accept); | 
| Wolfgang Betz  | 
132:51056160fa4a | 89 | |
| Wolfgang Betz  | 
132:51056160fa4a | 90 | /** | 
| Wolfgang Betz  | 
132:51056160fa4a | 91 | * @} | 
| Wolfgang Betz  | 
132:51056160fa4a | 92 | */ | 
| Wolfgang Betz  | 
132:51056160fa4a | 93 | |
| Wolfgang Betz  | 
132:51056160fa4a | 94 | /** | 
| Wolfgang Betz  | 
132:51056160fa4a | 95 | * @defgroup L2CAP_Events L2CAP events | 
| Wolfgang Betz  | 
132:51056160fa4a | 96 | * @{ | 
| Wolfgang Betz  | 
132:51056160fa4a | 97 | */ | 
| Wolfgang Betz  | 
132:51056160fa4a | 98 | |
| Wolfgang Betz  | 
132:51056160fa4a | 99 | /** | 
| Wolfgang Betz  | 
132:51056160fa4a | 100 | * This event is generated when the master responds to the L2CAP connection update request packet. | 
| Wolfgang Betz  | 
132:51056160fa4a | 101 | * For more info see CONNECTION PARAMETER UPDATE RESPONSE and COMMAND REJECT in Bluetooth Core v4.0 spec. | 
| Wolfgang Betz  | 
132:51056160fa4a | 102 | */ | 
| Wolfgang Betz  | 
132:51056160fa4a | 103 | #define EVT_BLUE_L2CAP_CONN_UPD_RESP (0x0800) | 
| Wolfgang Betz  | 
132:51056160fa4a | 104 | typedef __packed struct _evt_l2cap_conn_upd_resp{ | 
| Wolfgang Betz  | 
132:51056160fa4a | 105 | uint16_t conn_handle; /**< The connection handle related to the event. */ | 
| Wolfgang Betz  | 
132:51056160fa4a | 106 | uint8_t event_data_length; /**< Length of following data. */ | 
| Wolfgang Betz  | 
132:51056160fa4a | 107 | /** | 
| Wolfgang Betz  | 
132:51056160fa4a | 108 | * @li 0x13 in case of valid L2CAP Connection Parameter Update Response packet. | 
| Wolfgang Betz  | 
132:51056160fa4a | 109 | * @li 0x01 in case of Command Reject. | 
| Wolfgang Betz  | 
132:51056160fa4a | 110 | */ | 
| Wolfgang Betz  | 
132:51056160fa4a | 111 | uint8_t code; | 
| Wolfgang Betz  | 
132:51056160fa4a | 112 | uint8_t identifier; /**< Identifier of the response. It is equal to the request. */ | 
| Wolfgang Betz  | 
132:51056160fa4a | 113 | uint16_t l2cap_length; /**< Length of following data. It should always be 2 */ | 
| Wolfgang Betz  | 
132:51056160fa4a | 114 | /** | 
| Wolfgang Betz  | 
132:51056160fa4a | 115 | * Result code (parameters accepted or rejected) in case of Connection Parameter Update | 
| Wolfgang Betz  | 
132:51056160fa4a | 116 | * Response (code=0x13) or reason code for rejection in case of Command Reject (code=0x01). | 
| Wolfgang Betz  | 
132:51056160fa4a | 117 | */ | 
| Wolfgang Betz  | 
132:51056160fa4a | 118 | uint16_t result; | 
| Wolfgang Betz  | 
132:51056160fa4a | 119 | } PACKED evt_l2cap_conn_upd_resp; | 
| Wolfgang Betz  | 
132:51056160fa4a | 120 | |
| Wolfgang Betz  | 
132:51056160fa4a | 121 | /** | 
| Wolfgang Betz  | 
132:51056160fa4a | 122 | * This event is generated when the master does not respond to the connection update request | 
| Wolfgang Betz  | 
132:51056160fa4a | 123 | * within 30 seconds. | 
| Wolfgang Betz  | 
132:51056160fa4a | 124 | */ | 
| Wolfgang Betz  | 
132:51056160fa4a | 125 | #define EVT_BLUE_L2CAP_PROCEDURE_TIMEOUT (0x0801) | 
| Andrea Palmieri  | 
229:9981f62cdb1a | 126 | typedef __packed struct _evt_l2cap_procedure_timeout{ | 
| Andrea Palmieri  | 
229:9981f62cdb1a | 127 | uint16_t conn_handle; /**< The connection handle related to the event. */ | 
| Andrea Palmieri  | 
229:9981f62cdb1a | 128 | uint8_t event_data_length; /**< Length of following data. It should be always 0 for this event. */ | 
| Andrea Palmieri  | 
229:9981f62cdb1a | 129 | } PACKED evt_l2cap_procedure_timeout; | 
| Wolfgang Betz  | 
132:51056160fa4a | 130 | |
| Wolfgang Betz  | 
132:51056160fa4a | 131 | /** | 
| Wolfgang Betz  | 
132:51056160fa4a | 132 | * The event is given by the L2CAP layer when a connection update request is received from the slave. | 
| Wolfgang Betz  | 
132:51056160fa4a | 133 | * The application has to respond by calling aci_l2cap_connection_parameter_update_response(). | 
| Wolfgang Betz  | 
132:51056160fa4a | 134 | */ | 
| Wolfgang Betz  | 
132:51056160fa4a | 135 | #define EVT_BLUE_L2CAP_CONN_UPD_REQ (0x0802) | 
| Wolfgang Betz  | 
132:51056160fa4a | 136 | typedef __packed struct _evt_l2cap_conn_upd_req{ | 
| Wolfgang Betz  | 
132:51056160fa4a | 137 | /** | 
| Wolfgang Betz  | 
132:51056160fa4a | 138 | * Handle of the connection for which the connection update request has been received. | 
| Wolfgang Betz  | 
132:51056160fa4a | 139 | * The same handle has to be returned while responding to the event with the command | 
| Wolfgang Betz  | 
132:51056160fa4a | 140 | * aci_l2cap_connection_parameter_update_response(). | 
| Wolfgang Betz  | 
132:51056160fa4a | 141 | */ | 
| Wolfgang Betz  | 
132:51056160fa4a | 142 | uint16_t conn_handle; | 
| Wolfgang Betz  | 
132:51056160fa4a | 143 | uint8_t event_data_length; /**< Length of following data. */ | 
| Wolfgang Betz  | 
132:51056160fa4a | 144 | /** | 
| Wolfgang Betz  | 
132:51056160fa4a | 145 | * This is the identifier which associates the request to the | 
| Wolfgang Betz  | 
132:51056160fa4a | 146 | * response. The same identifier has to be returned by the upper | 
| Wolfgang Betz  | 
132:51056160fa4a | 147 | * layer in the command aci_l2cap_connection_parameter_update_response(). | 
| Wolfgang Betz  | 
132:51056160fa4a | 148 | */ | 
| Wolfgang Betz  | 
132:51056160fa4a | 149 | uint8_t identifier; | 
| Wolfgang Betz  | 
132:51056160fa4a | 150 | uint16_t l2cap_length; /**< Length of the L2CAP connection update request. */ | 
| Wolfgang Betz  | 
132:51056160fa4a | 151 | uint16_t interval_min; /**< Value as defined in Bluetooth 4.0 spec, Volume 3, Part A 4.20. */ | 
| Wolfgang Betz  | 
132:51056160fa4a | 152 | uint16_t interval_max; /**< Value as defined in Bluetooth 4.0 spec, Volume 3, Part A 4.20. */ | 
| Wolfgang Betz  | 
132:51056160fa4a | 153 | uint16_t slave_latency; /**< Value as defined in Bluetooth 4.0 spec, Volume 3, Part A 4.20. */ | 
| Wolfgang Betz  | 
132:51056160fa4a | 154 | uint16_t timeout_mult; /**< Value as defined in Bluetooth 4.0 spec, Volume 3, Part A 4.20. */ | 
| Wolfgang Betz  | 
132:51056160fa4a | 155 | } PACKED evt_l2cap_conn_upd_req; | 
| Wolfgang Betz  | 
132:51056160fa4a | 156 | |
| Wolfgang Betz  | 
132:51056160fa4a | 157 | /** | 
| Wolfgang Betz  | 
132:51056160fa4a | 158 | * @} | 
| Wolfgang Betz  | 
132:51056160fa4a | 159 | */ | 
| Wolfgang Betz  | 
132:51056160fa4a | 160 | |
| Wolfgang Betz  | 
132:51056160fa4a | 161 | /** | 
| Wolfgang Betz  | 
132:51056160fa4a | 162 | * @} | 
| Wolfgang Betz  | 
132:51056160fa4a | 163 | */ | 
| Wolfgang Betz  | 
132:51056160fa4a | 164 | |
| Wolfgang Betz  | 
132:51056160fa4a | 165 | |
| Wolfgang Betz  | 
132:51056160fa4a | 166 | #endif /* __BLUENRG_L2CAP_ACI_H__ */ |