cvb

Fork of nrf51-sdk by Lancaster University

Committer:
tb942
Date:
Tue Aug 14 18:27:20 2018 +0000
Revision:
9:d3dd910b0f4b
Parent:
0:bc2961fa1ef0

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Jonathan Austin 0:bc2961fa1ef0 1 /*
Jonathan Austin 0:bc2961fa1ef0 2 * Copyright (c) Nordic Semiconductor ASA
Jonathan Austin 0:bc2961fa1ef0 3 * All rights reserved.
Jonathan Austin 0:bc2961fa1ef0 4 *
Jonathan Austin 0:bc2961fa1ef0 5 * Redistribution and use in source and binary forms, with or without modification,
Jonathan Austin 0:bc2961fa1ef0 6 * are permitted provided that the following conditions are met:
Jonathan Austin 0:bc2961fa1ef0 7 *
Jonathan Austin 0:bc2961fa1ef0 8 * 1. Redistributions of source code must retain the above copyright notice, this
Jonathan Austin 0:bc2961fa1ef0 9 * list of conditions and the following disclaimer.
Jonathan Austin 0:bc2961fa1ef0 10 *
Jonathan Austin 0:bc2961fa1ef0 11 * 2. Redistributions in binary form must reproduce the above copyright notice, this
Jonathan Austin 0:bc2961fa1ef0 12 * list of conditions and the following disclaimer in the documentation and/or
Jonathan Austin 0:bc2961fa1ef0 13 * other materials provided with the distribution.
Jonathan Austin 0:bc2961fa1ef0 14 *
Jonathan Austin 0:bc2961fa1ef0 15 * 3. Neither the name of Nordic Semiconductor ASA nor the names of other
Jonathan Austin 0:bc2961fa1ef0 16 * contributors to this software may be used to endorse or promote products
Jonathan Austin 0:bc2961fa1ef0 17 * derived from this software without specific prior written permission.
Jonathan Austin 0:bc2961fa1ef0 18 *
Jonathan Austin 0:bc2961fa1ef0 19 *
Jonathan Austin 0:bc2961fa1ef0 20 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
Jonathan Austin 0:bc2961fa1ef0 21 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
Jonathan Austin 0:bc2961fa1ef0 22 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
Jonathan Austin 0:bc2961fa1ef0 23 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
Jonathan Austin 0:bc2961fa1ef0 24 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
Jonathan Austin 0:bc2961fa1ef0 25 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
Jonathan Austin 0:bc2961fa1ef0 26 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
Jonathan Austin 0:bc2961fa1ef0 27 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
Jonathan Austin 0:bc2961fa1ef0 28 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
Jonathan Austin 0:bc2961fa1ef0 29 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Jonathan Austin 0:bc2961fa1ef0 30 *
Jonathan Austin 0:bc2961fa1ef0 31 */
Jonathan Austin 0:bc2961fa1ef0 32
Jonathan Austin 0:bc2961fa1ef0 33 /**
Jonathan Austin 0:bc2961fa1ef0 34 * @file device_manager.h
Jonathan Austin 0:bc2961fa1ef0 35 *
Jonathan Austin 0:bc2961fa1ef0 36 * @defgroup device_manager Device Manager
Jonathan Austin 0:bc2961fa1ef0 37 * @ingroup ble_sdk_lib
Jonathan Austin 0:bc2961fa1ef0 38 * @{
Jonathan Austin 0:bc2961fa1ef0 39 * @brief Device Manager Application Interface Abstraction.
Jonathan Austin 0:bc2961fa1ef0 40 *
Jonathan Austin 0:bc2961fa1ef0 41 * @details The Device Manager module manages Active and Bonded Peers. Management of peer includes
Jonathan Austin 0:bc2961fa1ef0 42 * book keeping of contextual information like the Security Keys, GATT
Jonathan Austin 0:bc2961fa1ef0 43 * configuration and any application specific information.
Jonathan Austin 0:bc2961fa1ef0 44 *
Jonathan Austin 0:bc2961fa1ef0 45 * Active Peers are devices which are connected, and may or may not be bonded.
Jonathan Austin 0:bc2961fa1ef0 46 * Bonded Peers are devices which are bonded, and may or may not be Active (Connected).
Jonathan Austin 0:bc2961fa1ef0 47 * Active Bonded Peer refers to a device which is connected and bonded.
Jonathan Austin 0:bc2961fa1ef0 48 *
Jonathan Austin 0:bc2961fa1ef0 49 * Paired Devices refers to peer devices that are connected and have necessary context
Jonathan Austin 0:bc2961fa1ef0 50 * establishment/exchange for the current connection session. On disconnect,
Jonathan Austin 0:bc2961fa1ef0 51 * all contextual information is flushed. For example, SMP Information Exchanged during
Jonathan Austin 0:bc2961fa1ef0 52 * pairing and GATT Configuration is not retained on disconnection.
Jonathan Austin 0:bc2961fa1ef0 53 *
Jonathan Austin 0:bc2961fa1ef0 54 * Note that this module allows management of contextual information but
Jonathan Austin 0:bc2961fa1ef0 55 * does not provide an interface for connection management. Therefore, entering connectible
Jonathan Austin 0:bc2961fa1ef0 56 * mode, connection establishment, or disconnection of a link with peer is not in scope
Jonathan Austin 0:bc2961fa1ef0 57 * of this module.
Jonathan Austin 0:bc2961fa1ef0 58 *
Jonathan Austin 0:bc2961fa1ef0 59 * For bonded peers, the contextual information is required to be retained on disconnection
Jonathan Austin 0:bc2961fa1ef0 60 * and power cycling. Persistent storage of contextual information is handled by the
Jonathan Austin 0:bc2961fa1ef0 61 * module. This module categorizes the contextual information into 3 categories:
Jonathan Austin 0:bc2961fa1ef0 62 * - <b>Bonding Information</b>
Jonathan Austin 0:bc2961fa1ef0 63 * Bond information is the information exchanged between local and peer device to
Jonathan Austin 0:bc2961fa1ef0 64 * establish a bond. It also includes peer identification information,
Jonathan Austin 0:bc2961fa1ef0 65 * like the peer address or the IRK or both. From here on this category of information
Jonathan Austin 0:bc2961fa1ef0 66 * is referred to as Device Context.
Jonathan Austin 0:bc2961fa1ef0 67 * - <b>Service/Protocol Information</b>
Jonathan Austin 0:bc2961fa1ef0 68 * Service/Protocol information is the information retained for the peer to save on one-time
Jonathan Austin 0:bc2961fa1ef0 69 * procedures like the GATT Service Discovery procedures and Service Configurations.
Jonathan Austin 0:bc2961fa1ef0 70 * It allows devices to resume data exchange on subsequent reconnection without having
Jonathan Austin 0:bc2961fa1ef0 71 * to perform initial set-up procedures each time. From here on this category is
Jonathan Austin 0:bc2961fa1ef0 72 * referred to as Service Context.
Jonathan Austin 0:bc2961fa1ef0 73 * - <b>Application Information</b>
Jonathan Austin 0:bc2961fa1ef0 74 * Application information is the context that the application would like to associate with
Jonathan Austin 0:bc2961fa1ef0 75 * each of the bonded device. For example, if the application chooses to rank its peers
Jonathan Austin 0:bc2961fa1ef0 76 * in order to manage them better, the rank information could be treated as
Jonathan Austin 0:bc2961fa1ef0 77 * Application Information. This storage space is provided to save the application from
Jonathan Austin 0:bc2961fa1ef0 78 * maintaining a mapping table with each Device Instance and Application Information.
Jonathan Austin 0:bc2961fa1ef0 79 * However, if the application have no use for this, it is possible to not
Jonathan Austin 0:bc2961fa1ef0 80 * use or employ this at compile time. From here on this category of information is
Jonathan Austin 0:bc2961fa1ef0 81 * referred to as Application Context.
Jonathan Austin 0:bc2961fa1ef0 82 */
Jonathan Austin 0:bc2961fa1ef0 83
Jonathan Austin 0:bc2961fa1ef0 84
Jonathan Austin 0:bc2961fa1ef0 85 #ifndef DEVICE_MANAGER_H__
Jonathan Austin 0:bc2961fa1ef0 86 #define DEVICE_MANAGER_H__
Jonathan Austin 0:bc2961fa1ef0 87
Jonathan Austin 0:bc2961fa1ef0 88 #include <stdint.h>
Jonathan Austin 0:bc2961fa1ef0 89 #include <stdbool.h>
Jonathan Austin 0:bc2961fa1ef0 90 #include "sdk_common.h"
Jonathan Austin 0:bc2961fa1ef0 91 #include "ble.h"
Jonathan Austin 0:bc2961fa1ef0 92 #include "ble_gap.h"
Jonathan Austin 0:bc2961fa1ef0 93 #include "device_manager_cnfg.h"
Jonathan Austin 0:bc2961fa1ef0 94
Jonathan Austin 0:bc2961fa1ef0 95 /**
Jonathan Austin 0:bc2961fa1ef0 96 * @defgroup dm_service_cntext_types Service/Protocol Types
Jonathan Austin 0:bc2961fa1ef0 97 *
Jonathan Austin 0:bc2961fa1ef0 98 * @brief Describes the possible types of Service/Protocol Contexts for a bonded/peer device.
Jonathan Austin 0:bc2961fa1ef0 99 *
Jonathan Austin 0:bc2961fa1ef0 100 * @details Possible Service/Protocol context per peer device. The Device Manager provides the
Jonathan Austin 0:bc2961fa1ef0 101 * functionality of persistently storing the Service/Protocol context and can automatically
Jonathan Austin 0:bc2961fa1ef0 102 * load them when needed.
Jonathan Austin 0:bc2961fa1ef0 103 * For example system attributes for a GATT Server. Based on the nature of the application,
Jonathan Austin 0:bc2961fa1ef0 104 * not all service types may be needed. The application can specify
Jonathan Austin 0:bc2961fa1ef0 105 * only the service/protocol context it wants to use at the time of registration.
Jonathan Austin 0:bc2961fa1ef0 106 * @{
Jonathan Austin 0:bc2961fa1ef0 107 */
Jonathan Austin 0:bc2961fa1ef0 108 #define DM_PROTOCOL_CNTXT_NONE 0x00 /**< No Service Context, this implies the application does not want to associate any service/protocol context with the peer device */
Jonathan Austin 0:bc2961fa1ef0 109 #define DM_PROTOCOL_CNTXT_GATT_SRVR_ID 0x01 /**< GATT Server Service Context, this implies the application does associate GATT Server with the peer device and this information will be loaded when needed for a bonded device */
Jonathan Austin 0:bc2961fa1ef0 110 #define DM_PROTOCOL_CNTXT_GATT_CLI_ID 0x02 /**< GATT Client Service Context, this implies the application does associate GATT Client with the peer device and this information will be loaded when needed for a bonded device */
Jonathan Austin 0:bc2961fa1ef0 111 #define DM_PROTOCOL_CNTXT_ALL \
Jonathan Austin 0:bc2961fa1ef0 112 (DM_PROTOCOL_CNTXT_GATT_SRVR_ID | DM_PROTOCOL_CNTXT_GATT_CLI_ID) /**< All Service/Protocol Context, this implies that the application wants to associate all Service/Protocol Information with the bonded device. This is configurable based on system requirements. If the application has only one type of service, this define could be altered to reflect the same. */
Jonathan Austin 0:bc2961fa1ef0 113 /** @} */
Jonathan Austin 0:bc2961fa1ef0 114
Jonathan Austin 0:bc2961fa1ef0 115
Jonathan Austin 0:bc2961fa1ef0 116 /**
Jonathan Austin 0:bc2961fa1ef0 117 * @defgroup dm_events Device Manager Events
Jonathan Austin 0:bc2961fa1ef0 118 *
Jonathan Austin 0:bc2961fa1ef0 119 * @brief This section describes the device manager events that are notified to the application.
Jonathan Austin 0:bc2961fa1ef0 120 *
Jonathan Austin 0:bc2961fa1ef0 121 * @details The Device Manager notifies the application of various asynchronous events using the
Jonathan Austin 0:bc2961fa1ef0 122 * asynchronous event notification callback. All events has been categorized into:
Jonathan Austin 0:bc2961fa1ef0 123 * a. General.
Jonathan Austin 0:bc2961fa1ef0 124 * b. Link Status.
Jonathan Austin 0:bc2961fa1ef0 125 * c. Context Management.
Jonathan Austin 0:bc2961fa1ef0 126 *
Jonathan Austin 0:bc2961fa1ef0 127 * In the callback, these events are notified along with handle that uniquely identifies:
Jonathan Austin 0:bc2961fa1ef0 128 * application instance, active instance (if applicable), device instance
Jonathan Austin 0:bc2961fa1ef0 129 * bonding instance, (if applicable) and service instance.
Jonathan Austin 0:bc2961fa1ef0 130 * Not all events are pertaining to an active connection, for example a context deletion event could occur even if the peer
Jonathan Austin 0:bc2961fa1ef0 131 * is not connected. Also, general category of events may not be pertaining to any specific peer.
Jonathan Austin 0:bc2961fa1ef0 132 * See also \ref dm_event_cb_t and \ref dm_register.
Jonathan Austin 0:bc2961fa1ef0 133 * @{
Jonathan Austin 0:bc2961fa1ef0 134 */
Jonathan Austin 0:bc2961fa1ef0 135 /**
Jonathan Austin 0:bc2961fa1ef0 136 * @defgroup general_events General Events
Jonathan Austin 0:bc2961fa1ef0 137 *
Jonathan Austin 0:bc2961fa1ef0 138 * @brief General or miscellaneous events.
Jonathan Austin 0:bc2961fa1ef0 139 *
Jonathan Austin 0:bc2961fa1ef0 140 * @details This category of events are general events not pertaining to a peer or context.
Jonathan Austin 0:bc2961fa1ef0 141 *
Jonathan Austin 0:bc2961fa1ef0 142 * @{
Jonathan Austin 0:bc2961fa1ef0 143 */
Jonathan Austin 0:bc2961fa1ef0 144 #define DM_EVT_RFU 0x00 /**< Reserved for future use, is never notified. */
Jonathan Austin 0:bc2961fa1ef0 145 #define DM_EVT_ERROR 0x01 /**< Device Manager Event Error. */
Jonathan Austin 0:bc2961fa1ef0 146 /** @} */
Jonathan Austin 0:bc2961fa1ef0 147
Jonathan Austin 0:bc2961fa1ef0 148 /**
Jonathan Austin 0:bc2961fa1ef0 149 * @defgroup link_status_events Link Status Events
Jonathan Austin 0:bc2961fa1ef0 150 *
Jonathan Austin 0:bc2961fa1ef0 151 * @brief Link Status Events.
Jonathan Austin 0:bc2961fa1ef0 152 *
Jonathan Austin 0:bc2961fa1ef0 153 * @details This category of events notify the application of the link status. Event result associated
Jonathan Austin 0:bc2961fa1ef0 154 * with the event is provided along with the event in the callback to provide more details of
Jonathan Austin 0:bc2961fa1ef0 155 * whether a procedure succeeded or failed and assist the application in decision making of
Jonathan Austin 0:bc2961fa1ef0 156 * how to proceed. For example if a DM_DEVICE_CONNECT_IND is indicated with NRF_SUCCESS
Jonathan Austin 0:bc2961fa1ef0 157 * result, the application may want to proceed with discovering and association with
Jonathan Austin 0:bc2961fa1ef0 158 * service of the peer. However, if indicated with a failure result, the application may
Jonathan Austin 0:bc2961fa1ef0 159 * want to take an alternate action such as reattempting to connect or go into a
Jonathan Austin 0:bc2961fa1ef0 160 * sleep mode.
Jonathan Austin 0:bc2961fa1ef0 161 *
Jonathan Austin 0:bc2961fa1ef0 162 * @{
Jonathan Austin 0:bc2961fa1ef0 163 */
Jonathan Austin 0:bc2961fa1ef0 164 #define DM_EVT_CONNECTION 0x11 /**< Indicates that link with the peer is established. */
Jonathan Austin 0:bc2961fa1ef0 165 #define DM_EVT_DISCONNECTION 0x12 /**< Indicates that link with peer is torn down. */
Jonathan Austin 0:bc2961fa1ef0 166 #define DM_EVT_SECURITY_SETUP 0x13 /**< Security procedure for link started indication */
Jonathan Austin 0:bc2961fa1ef0 167 #define DM_EVT_SECURITY_SETUP_COMPLETE 0x14 /**< Security procedure for link completion indication. */
Jonathan Austin 0:bc2961fa1ef0 168 #define DM_EVT_LINK_SECURED 0x15 /**< Indicates that link with the peer is secured. For bonded devices, subsequent reconnections with bonded peer will result only in this event when the link is secured and setup procedures will not occur unless the bonding information is either lost or deleted on either or both sides. */
Jonathan Austin 0:bc2961fa1ef0 169 #define DM_EVT_SECURITY_SETUP_REFRESH 0x16 /**< Indicates that the security on the link was re-established. */
Jonathan Austin 0:bc2961fa1ef0 170 /** @} */
Jonathan Austin 0:bc2961fa1ef0 171
Jonathan Austin 0:bc2961fa1ef0 172 /**
Jonathan Austin 0:bc2961fa1ef0 173 * @defgroup context_mgmt_events Context Management Events
Jonathan Austin 0:bc2961fa1ef0 174 *
Jonathan Austin 0:bc2961fa1ef0 175 * @brief Context Management Events.
Jonathan Austin 0:bc2961fa1ef0 176 *
Jonathan Austin 0:bc2961fa1ef0 177 * @details These events notify the application of the status of context loading and storing.
Jonathan Austin 0:bc2961fa1ef0 178 *
Jonathan Austin 0:bc2961fa1ef0 179 * @{
Jonathan Austin 0:bc2961fa1ef0 180 */
Jonathan Austin 0:bc2961fa1ef0 181 #define DM_EVT_DEVICE_CONTEXT_LOADED 0x21 /**< Indicates that device context for a peer is loaded. */
Jonathan Austin 0:bc2961fa1ef0 182 #define DM_EVT_DEVICE_CONTEXT_STORED 0x22 /**< Indicates that device context is stored persistently. */
Jonathan Austin 0:bc2961fa1ef0 183 #define DM_EVT_DEVICE_CONTEXT_DELETED 0x23 /**< Indicates that device context is deleted. */
Jonathan Austin 0:bc2961fa1ef0 184 #define DM_EVT_SERVICE_CONTEXT_LOADED 0x31 /**< Indicates that service context for a peer is loaded. */
Jonathan Austin 0:bc2961fa1ef0 185 #define DM_EVT_SERVICE_CONTEXT_STORED 0x32 /**< Indicates that service context is stored persistently. */
Jonathan Austin 0:bc2961fa1ef0 186 #define DM_EVT_SERVICE_CONTEXT_DELETED 0x33 /**< Indicates that service context is deleted. */
Jonathan Austin 0:bc2961fa1ef0 187 #define DM_EVT_APPL_CONTEXT_LOADED 0x41 /**< Indicates that application context for a peer is loaded. */
Jonathan Austin 0:bc2961fa1ef0 188 #define DM_EVT_APPL_CONTEXT_STORED 0x42 /**< Indicates that application context is stored persistently. */
Jonathan Austin 0:bc2961fa1ef0 189 #define DM_EVT_APPL_CONTEXT_DELETED 0x43 /**< Indicates that application context is deleted. */
Jonathan Austin 0:bc2961fa1ef0 190 /** @} */
Jonathan Austin 0:bc2961fa1ef0 191 /** @} */
Jonathan Austin 0:bc2961fa1ef0 192
Jonathan Austin 0:bc2961fa1ef0 193 #define DM_INVALID_ID 0xFF /**< Invalid instance idenitifer. */
Jonathan Austin 0:bc2961fa1ef0 194
Jonathan Austin 0:bc2961fa1ef0 195 /**
Jonathan Austin 0:bc2961fa1ef0 196 * @defgroup dm_data_structure Device Manager Data Types
Jonathan Austin 0:bc2961fa1ef0 197 *
Jonathan Austin 0:bc2961fa1ef0 198 * @brief This section describes all the data types exposed by the module to the application.
Jonathan Austin 0:bc2961fa1ef0 199 * @{
Jonathan Austin 0:bc2961fa1ef0 200 */
Jonathan Austin 0:bc2961fa1ef0 201
Jonathan Austin 0:bc2961fa1ef0 202 /**
Jonathan Austin 0:bc2961fa1ef0 203 * @brief Application Instance.
Jonathan Austin 0:bc2961fa1ef0 204 *
Jonathan Austin 0:bc2961fa1ef0 205 * @details Application instance uniquely identifies an application. The identifier is allocated by
Jonathan Austin 0:bc2961fa1ef0 206 * the device manager when application registers with the module. The application is
Jonathan Austin 0:bc2961fa1ef0 207 * expected to identify itself with this instance identifier when initiating subsequent
Jonathan Austin 0:bc2961fa1ef0 208 * requests. Application should use the utility API \ref dm_application_instance_set in
Jonathan Austin 0:bc2961fa1ef0 209 * order to set its application instance in dm_handle_t needed for all subsequent APIs.
Jonathan Austin 0:bc2961fa1ef0 210 * See also \ref dm_register.
Jonathan Austin 0:bc2961fa1ef0 211 */
Jonathan Austin 0:bc2961fa1ef0 212 typedef uint8_t dm_application_instance_t;
Jonathan Austin 0:bc2961fa1ef0 213
Jonathan Austin 0:bc2961fa1ef0 214 /**
Jonathan Austin 0:bc2961fa1ef0 215 * @brief Connection Instance.
Jonathan Austin 0:bc2961fa1ef0 216 *
Jonathan Austin 0:bc2961fa1ef0 217 * @details Identifies connection instance for an active device. This instance is allocated by the
Jonathan Austin 0:bc2961fa1ef0 218 * device manager when a connection is established and is notified with DM_EVT_CONNECTION
Jonathan Austin 0:bc2961fa1ef0 219 * with the event result NRF_SUCCESS.
Jonathan Austin 0:bc2961fa1ef0 220 */
Jonathan Austin 0:bc2961fa1ef0 221 typedef uint8_t dm_connection_instance_t;
Jonathan Austin 0:bc2961fa1ef0 222
Jonathan Austin 0:bc2961fa1ef0 223 /**
Jonathan Austin 0:bc2961fa1ef0 224 * @brief Device Instance.
Jonathan Austin 0:bc2961fa1ef0 225 *
Jonathan Austin 0:bc2961fa1ef0 226 * @details Uniquely identifies a bonded peer device. The peer device may or may not be connected.
Jonathan Austin 0:bc2961fa1ef0 227 * In case of the central: The bonded device instance to identify the peer is allocated when bonding procedure is initiated by the central using dm_security_setup_req.
Jonathan Austin 0:bc2961fa1ef0 228 * In case of the peripheral: When the bonding procedure is successful, the DM_EVT_SECURITY_SETUP_COMPLETE event with success event result, is received.
Jonathan Austin 0:bc2961fa1ef0 229 * In case the module cannot add more bonded devices, no instance is allocated, this is indicated by an appropriate error code for the API/event as the case may be. Application can choose to disconnect the link.
Jonathan Austin 0:bc2961fa1ef0 230 */
Jonathan Austin 0:bc2961fa1ef0 231 typedef uint8_t dm_device_instance_t;
Jonathan Austin 0:bc2961fa1ef0 232
Jonathan Austin 0:bc2961fa1ef0 233 /**
Jonathan Austin 0:bc2961fa1ef0 234 * @brief Service Instance.
Jonathan Austin 0:bc2961fa1ef0 235 *
Jonathan Austin 0:bc2961fa1ef0 236 * @details Uniquely identifies a peer device. The peer device may or may not be connected. This
Jonathan Austin 0:bc2961fa1ef0 237 * instance is allocated by the device manager when a device is bonded and is notified
Jonathan Austin 0:bc2961fa1ef0 238 * when security procedures have been initiated.
Jonathan Austin 0:bc2961fa1ef0 239 * Security Procedures initiation is notified with DM_SECURITY_SETUP_IND with
Jonathan Austin 0:bc2961fa1ef0 240 * success event result. In case the event result indicates that the module cannot add more
Jonathan Austin 0:bc2961fa1ef0 241 * bonded devices, no instance is allocated. Application can chose to disconnect the link.
Jonathan Austin 0:bc2961fa1ef0 242 */
Jonathan Austin 0:bc2961fa1ef0 243 typedef uint8_t dm_service_instance_t;
Jonathan Austin 0:bc2961fa1ef0 244
Jonathan Austin 0:bc2961fa1ef0 245 /**
Jonathan Austin 0:bc2961fa1ef0 246 * @brief Service/Protocol Type Identifier.
Jonathan Austin 0:bc2961fa1ef0 247 *
Jonathan Austin 0:bc2961fa1ef0 248 * @details Uniquely identifies a service or a protocol type. Service/Protocol Type identification
Jonathan Austin 0:bc2961fa1ef0 249 * is needed as each service/protocol can have its own contextual data.
Jonathan Austin 0:bc2961fa1ef0 250 * This allows the peer to access more than one service at a time. \ref dm_service_cntext_types describes the
Jonathan Austin 0:bc2961fa1ef0 251 * list of services/protocols supported.
Jonathan Austin 0:bc2961fa1ef0 252 */
Jonathan Austin 0:bc2961fa1ef0 253 typedef uint8_t service_type_t;
Jonathan Austin 0:bc2961fa1ef0 254
Jonathan Austin 0:bc2961fa1ef0 255 /**@brief Device Manager Master identification and encryption information. */
Jonathan Austin 0:bc2961fa1ef0 256 typedef struct dm_enc_key
Jonathan Austin 0:bc2961fa1ef0 257 {
Jonathan Austin 0:bc2961fa1ef0 258 ble_gap_enc_info_t enc_info; /**< GAP encryption information. */
Jonathan Austin 0:bc2961fa1ef0 259 ble_gap_master_id_t master_id; /**< Master identification. */
Jonathan Austin 0:bc2961fa1ef0 260 } dm_enc_key_t;
Jonathan Austin 0:bc2961fa1ef0 261
Jonathan Austin 0:bc2961fa1ef0 262 /** @brief Device Manager identity and address information. */
Jonathan Austin 0:bc2961fa1ef0 263 typedef struct dm_id_key
Jonathan Austin 0:bc2961fa1ef0 264 {
Jonathan Austin 0:bc2961fa1ef0 265 ble_gap_irk_t id_info; /**< Identity information. */
Jonathan Austin 0:bc2961fa1ef0 266 ble_gap_addr_t id_addr_info; /**< Identity address information. */
Jonathan Austin 0:bc2961fa1ef0 267 } dm_id_key_t;
Jonathan Austin 0:bc2961fa1ef0 268
Jonathan Austin 0:bc2961fa1ef0 269 /** @brief Device Manager signing information. */
Jonathan Austin 0:bc2961fa1ef0 270 typedef struct dm_sign_key
Jonathan Austin 0:bc2961fa1ef0 271 {
Jonathan Austin 0:bc2961fa1ef0 272 ble_gap_sign_info_t sign_key; /**< GAP signing information. */
Jonathan Austin 0:bc2961fa1ef0 273 } dm_sign_key_t;
Jonathan Austin 0:bc2961fa1ef0 274
Jonathan Austin 0:bc2961fa1ef0 275 /** @brief Security keys. */
Jonathan Austin 0:bc2961fa1ef0 276 typedef struct dm_sec_keyset
Jonathan Austin 0:bc2961fa1ef0 277 {
Jonathan Austin 0:bc2961fa1ef0 278 union
Jonathan Austin 0:bc2961fa1ef0 279 {
Jonathan Austin 0:bc2961fa1ef0 280 dm_enc_key_t * p_enc_key; /**< Pointer to Device Manager encryption information structure. */
Jonathan Austin 0:bc2961fa1ef0 281 } enc_key;
Jonathan Austin 0:bc2961fa1ef0 282 dm_id_key_t * p_id_key; /**< Identity key, or NULL. */
Jonathan Austin 0:bc2961fa1ef0 283 dm_sign_key_t * p_sign_key; /**< Signing key, or NULL. */
Jonathan Austin 0:bc2961fa1ef0 284 } dm_sec_keys_t;
Jonathan Austin 0:bc2961fa1ef0 285
Jonathan Austin 0:bc2961fa1ef0 286 /** @brief Device Manager security key set. */
Jonathan Austin 0:bc2961fa1ef0 287 typedef struct
Jonathan Austin 0:bc2961fa1ef0 288 {
Jonathan Austin 0:bc2961fa1ef0 289 dm_sec_keys_t keys_periph; /**< Keys distributed by the device in the Peripheral role. */
Jonathan Austin 0:bc2961fa1ef0 290 dm_sec_keys_t keys_central; /**< Keys distributed by the device in the Central role. */
Jonathan Austin 0:bc2961fa1ef0 291 } dm_sec_keyset_t;
Jonathan Austin 0:bc2961fa1ef0 292
Jonathan Austin 0:bc2961fa1ef0 293 /**
Jonathan Austin 0:bc2961fa1ef0 294 * @brief Device Handle used for unique identification of each peer.
Jonathan Austin 0:bc2961fa1ef0 295 *
Jonathan Austin 0:bc2961fa1ef0 296 * @details This data type is used to uniquely identify each peer device. A peer device could be
Jonathan Austin 0:bc2961fa1ef0 297 * active and/or bonded. Therefore an instance for active and bonded is provided.
Jonathan Austin 0:bc2961fa1ef0 298 * However, the application is expected to treat this is an opaque structure and use this for
Jonathan Austin 0:bc2961fa1ef0 299 * all API interactions once stored on appropriate events.
Jonathan Austin 0:bc2961fa1ef0 300 * See \ref dm_events.
Jonathan Austin 0:bc2961fa1ef0 301 */
Jonathan Austin 0:bc2961fa1ef0 302 typedef struct device_handle
Jonathan Austin 0:bc2961fa1ef0 303 {
Jonathan Austin 0:bc2961fa1ef0 304 dm_application_instance_t appl_id; /**< Identifies the application instances for the device that is being managed. */
Jonathan Austin 0:bc2961fa1ef0 305 dm_connection_instance_t connection_id; /**< Identifies the active connection instance. */
Jonathan Austin 0:bc2961fa1ef0 306 dm_device_instance_t device_id; /**< Identifies peer instance in the data base. */
Jonathan Austin 0:bc2961fa1ef0 307 dm_service_instance_t service_id; /**< Service instance identifier. */
Jonathan Austin 0:bc2961fa1ef0 308 } dm_handle_t;
Jonathan Austin 0:bc2961fa1ef0 309
Jonathan Austin 0:bc2961fa1ef0 310 /**
Jonathan Austin 0:bc2961fa1ef0 311 * @brief Definition of Data Context.
Jonathan Austin 0:bc2961fa1ef0 312 *
Jonathan Austin 0:bc2961fa1ef0 313 * @details Defines contextual data format, it consists of context data length and pointer to data.
Jonathan Austin 0:bc2961fa1ef0 314 */
Jonathan Austin 0:bc2961fa1ef0 315 typedef struct
Jonathan Austin 0:bc2961fa1ef0 316 {
Jonathan Austin 0:bc2961fa1ef0 317 uint32_t flags; /**< Additional flags identifying data. */
Jonathan Austin 0:bc2961fa1ef0 318 uint32_t len; /**< Length of data. */
Jonathan Austin 0:bc2961fa1ef0 319 uint8_t * p_data; /**< Pointer to contextual data, a copy is made of the data. */
Jonathan Austin 0:bc2961fa1ef0 320 } dm_context_t;
Jonathan Austin 0:bc2961fa1ef0 321
Jonathan Austin 0:bc2961fa1ef0 322
Jonathan Austin 0:bc2961fa1ef0 323 /**
Jonathan Austin 0:bc2961fa1ef0 324 * @brief Device Context.
Jonathan Austin 0:bc2961fa1ef0 325 *
Jonathan Austin 0:bc2961fa1ef0 326 * @details Defines "device context" type for a device managed by device manager.
Jonathan Austin 0:bc2961fa1ef0 327 */
Jonathan Austin 0:bc2961fa1ef0 328 typedef dm_context_t dm_device_context_t;
Jonathan Austin 0:bc2961fa1ef0 329
Jonathan Austin 0:bc2961fa1ef0 330 /**
Jonathan Austin 0:bc2961fa1ef0 331 * @brief Service Context.
Jonathan Austin 0:bc2961fa1ef0 332 *
Jonathan Austin 0:bc2961fa1ef0 333 * @details Service context data for a service identified by the 'service_type' field.
Jonathan Austin 0:bc2961fa1ef0 334 */
Jonathan Austin 0:bc2961fa1ef0 335 typedef struct
Jonathan Austin 0:bc2961fa1ef0 336 {
Jonathan Austin 0:bc2961fa1ef0 337 service_type_t service_type; /**< Identifies the service/protocol to which the context data is related. */
Jonathan Austin 0:bc2961fa1ef0 338 dm_context_t context_data; /**< Contains length and pointer to context data */
Jonathan Austin 0:bc2961fa1ef0 339 } dm_service_context_t;
Jonathan Austin 0:bc2961fa1ef0 340
Jonathan Austin 0:bc2961fa1ef0 341 /**
Jonathan Austin 0:bc2961fa1ef0 342 * @brief Application context.
Jonathan Austin 0:bc2961fa1ef0 343 *
Jonathan Austin 0:bc2961fa1ef0 344 * @details The application context can be used by the application to map any application level
Jonathan Austin 0:bc2961fa1ef0 345 * information that is to be mapped with a particular peer.
Jonathan Austin 0:bc2961fa1ef0 346 * For bonded peers, this information will be stored by the bond manager persistently.
Jonathan Austin 0:bc2961fa1ef0 347 * Note that the device manager treats this information as an
Jonathan Austin 0:bc2961fa1ef0 348 * opaque block of bytes.
Jonathan Austin 0:bc2961fa1ef0 349 * Necessary APIs to get and set this context for a peer have been provided.
Jonathan Austin 0:bc2961fa1ef0 350 */
Jonathan Austin 0:bc2961fa1ef0 351 typedef dm_context_t dm_application_context_t;
Jonathan Austin 0:bc2961fa1ef0 352
Jonathan Austin 0:bc2961fa1ef0 353 /**
Jonathan Austin 0:bc2961fa1ef0 354 * @brief Event parameters.
Jonathan Austin 0:bc2961fa1ef0 355 *
Jonathan Austin 0:bc2961fa1ef0 356 * @details Defines event parameters for each of the events notified by the module.
Jonathan Austin 0:bc2961fa1ef0 357 */
Jonathan Austin 0:bc2961fa1ef0 358 typedef union
Jonathan Austin 0:bc2961fa1ef0 359 {
Jonathan Austin 0:bc2961fa1ef0 360 ble_gap_evt_t * p_gap_param; /**< All events that are triggered in device manager as a result of GAP events, like connection, disconnection and security procedures are accompanied with GAP parameters. */
Jonathan Austin 0:bc2961fa1ef0 361 dm_application_context_t * p_app_context; /**< All events that are associated with application context procedures of store, load, and deletion have this as event parameter. */
Jonathan Austin 0:bc2961fa1ef0 362 dm_service_context_t * p_service_context; /**< All events that are associated with service context procedures of store, load and deletion have this as event parameter. */
Jonathan Austin 0:bc2961fa1ef0 363 dm_device_context_t * p_device_context; /**< All events that are associated with device context procedures of store, load and deletion have this as event parameter. */
Jonathan Austin 0:bc2961fa1ef0 364 } dm_event_param_t;
Jonathan Austin 0:bc2961fa1ef0 365
Jonathan Austin 0:bc2961fa1ef0 366 /**
Jonathan Austin 0:bc2961fa1ef0 367 * @brief Asynchronous events details notified to the application by the module.
Jonathan Austin 0:bc2961fa1ef0 368 *
Jonathan Austin 0:bc2961fa1ef0 369 * @details Defines event type along with event parameters notified to the application by the
Jonathan Austin 0:bc2961fa1ef0 370 * module.
Jonathan Austin 0:bc2961fa1ef0 371 */
Jonathan Austin 0:bc2961fa1ef0 372 typedef struct
Jonathan Austin 0:bc2961fa1ef0 373 {
Jonathan Austin 0:bc2961fa1ef0 374 uint8_t event_id; /**< Identifies the event. See \ref dm_events for details on event types and their significance. */
Jonathan Austin 0:bc2961fa1ef0 375 dm_event_param_t event_param; /**< Event parameters. Can be NULL if the event does not have any parameters. */
Jonathan Austin 0:bc2961fa1ef0 376 uint16_t event_paramlen; /**< Length of the event parameters, is zero if the event does not have any parameters. */
Jonathan Austin 0:bc2961fa1ef0 377 } dm_event_t;
Jonathan Austin 0:bc2961fa1ef0 378
Jonathan Austin 0:bc2961fa1ef0 379 /**
Jonathan Austin 0:bc2961fa1ef0 380 * @brief Event notification callback registered by application with the module.
Jonathan Austin 0:bc2961fa1ef0 381 *
Jonathan Austin 0:bc2961fa1ef0 382 * @details Event notification callback registered by application with the module when registering
Jonathan Austin 0:bc2961fa1ef0 383 * the module using \ref dm_register API.
Jonathan Austin 0:bc2961fa1ef0 384 *
Jonathan Austin 0:bc2961fa1ef0 385 * @param[in] p_handle Identifies the peer for which the event is being notified.
Jonathan Austin 0:bc2961fa1ef0 386 * @param[in] p_event Identifies the event, any associated parameters and parameter length.
Jonathan Austin 0:bc2961fa1ef0 387 * See \ref dm_events for details on event types and their significance.
Jonathan Austin 0:bc2961fa1ef0 388 * @param[in,out] event_result Provide additional information on the event.
Jonathan Austin 0:bc2961fa1ef0 389 * In addition to SDK error codes there is also a return value
Jonathan Austin 0:bc2961fa1ef0 390 * indicating if maximum number of connections has been reached when connecting or bonding.
Jonathan Austin 0:bc2961fa1ef0 391 *
Jonathan Austin 0:bc2961fa1ef0 392 * @retval NRF_SUCCESS on success, or a failure to indicate if it could handle the event
Jonathan Austin 0:bc2961fa1ef0 393 * successfully. There is no action taken in case application returns a failure.
Jonathan Austin 0:bc2961fa1ef0 394 */
Jonathan Austin 0:bc2961fa1ef0 395 typedef ret_code_t (*dm_event_cb_t)(dm_handle_t const * p_handle,
Jonathan Austin 0:bc2961fa1ef0 396 dm_event_t const * p_event,
Jonathan Austin 0:bc2961fa1ef0 397 ret_code_t event_result);
Jonathan Austin 0:bc2961fa1ef0 398
Jonathan Austin 0:bc2961fa1ef0 399 /**
Jonathan Austin 0:bc2961fa1ef0 400 * @brief Initialization Parameters.
Jonathan Austin 0:bc2961fa1ef0 401 *
Jonathan Austin 0:bc2961fa1ef0 402 * @details Indicates the application parameters. Currently this only encompasses clearing
Jonathan Austin 0:bc2961fa1ef0 403 * all persistent data.
Jonathan Austin 0:bc2961fa1ef0 404 */
Jonathan Austin 0:bc2961fa1ef0 405 typedef struct
Jonathan Austin 0:bc2961fa1ef0 406 {
Jonathan Austin 0:bc2961fa1ef0 407 bool clear_persistent_data; /**< Set to true in case the module should clear all persistent data. */
Jonathan Austin 0:bc2961fa1ef0 408 } dm_init_param_t;
Jonathan Austin 0:bc2961fa1ef0 409
Jonathan Austin 0:bc2961fa1ef0 410 /**
Jonathan Austin 0:bc2961fa1ef0 411 * @brief Application Registration Parameters.
Jonathan Austin 0:bc2961fa1ef0 412 *
Jonathan Austin 0:bc2961fa1ef0 413 * @details Parameters needed by the module when registering with it.
Jonathan Austin 0:bc2961fa1ef0 414 */
Jonathan Austin 0:bc2961fa1ef0 415 typedef struct
Jonathan Austin 0:bc2961fa1ef0 416 {
Jonathan Austin 0:bc2961fa1ef0 417 dm_event_cb_t evt_handler; /**< Event Handler to be registered. It will receive asynchronous notification from the module, see \ref dm_events for asynchronous events. */
Jonathan Austin 0:bc2961fa1ef0 418 uint8_t service_type; /**< Bit mask identifying services that the application intends to support for all peers. */
Jonathan Austin 0:bc2961fa1ef0 419 ble_gap_sec_params_t sec_param; /**< Security parameters to be used for the application. */
Jonathan Austin 0:bc2961fa1ef0 420 } dm_application_param_t;
Jonathan Austin 0:bc2961fa1ef0 421
Jonathan Austin 0:bc2961fa1ef0 422 /**
Jonathan Austin 0:bc2961fa1ef0 423 * @brief Defines possible security status/states.
Jonathan Austin 0:bc2961fa1ef0 424 *
Jonathan Austin 0:bc2961fa1ef0 425 * @details Defines possible security status/states of a link when requested by application using
Jonathan Austin 0:bc2961fa1ef0 426 * the \ref dm_security_status_req.
Jonathan Austin 0:bc2961fa1ef0 427 */
Jonathan Austin 0:bc2961fa1ef0 428 typedef enum
Jonathan Austin 0:bc2961fa1ef0 429 {
Jonathan Austin 0:bc2961fa1ef0 430 NOT_ENCRYPTED, /**< The link is not secured. */
Jonathan Austin 0:bc2961fa1ef0 431 ENCRYPTION_IN_PROGRESS, /**< Link security is being established.*/
Jonathan Austin 0:bc2961fa1ef0 432 ENCRYPTED /**< The link is secure.*/
Jonathan Austin 0:bc2961fa1ef0 433 } dm_security_status_t;
Jonathan Austin 0:bc2961fa1ef0 434 /** @} */
Jonathan Austin 0:bc2961fa1ef0 435
Jonathan Austin 0:bc2961fa1ef0 436 /**
Jonathan Austin 0:bc2961fa1ef0 437 * @defgroup dm_api Device Module APIs
Jonathan Austin 0:bc2961fa1ef0 438 *
Jonathan Austin 0:bc2961fa1ef0 439 * @brief This section describes APIs exposed by the module.
Jonathan Austin 0:bc2961fa1ef0 440 *
Jonathan Austin 0:bc2961fa1ef0 441 * @details This section describes APIs exposed by the module. The APIs have been categorized to provide
Jonathan Austin 0:bc2961fa1ef0 442 * better and specific look up for developers. Categories are:
Jonathan Austin 0:bc2961fa1ef0 443 * - Set up APIs.
Jonathan Austin 0:bc2961fa1ef0 444 * - Context Management APIs.
Jonathan Austin 0:bc2961fa1ef0 445 * - Utility APIs.
Jonathan Austin 0:bc2961fa1ef0 446 *
Jonathan Austin 0:bc2961fa1ef0 447 * MSCs describe usage of these APIs.
Jonathan Austin 0:bc2961fa1ef0 448 * See @ref dm_msc.
Jonathan Austin 0:bc2961fa1ef0 449 * @{
Jonathan Austin 0:bc2961fa1ef0 450 */
Jonathan Austin 0:bc2961fa1ef0 451 /**
Jonathan Austin 0:bc2961fa1ef0 452 * @defgroup dm_setup_api Device Module Set-up APIs
Jonathan Austin 0:bc2961fa1ef0 453 *
Jonathan Austin 0:bc2961fa1ef0 454 * @brief Initialization & registration APIs that are pre-requisite for all other module procedures.
Jonathan Austin 0:bc2961fa1ef0 455 * @details This section describes the Module Initialization and Registration APIs needed to be set up by
Jonathan Austin 0:bc2961fa1ef0 456 * the application before device manager can start managing devices and device contexts
Jonathan Austin 0:bc2961fa1ef0 457 * for the application.
Jonathan Austin 0:bc2961fa1ef0 458 *
Jonathan Austin 0:bc2961fa1ef0 459 * @{
Jonathan Austin 0:bc2961fa1ef0 460 */
Jonathan Austin 0:bc2961fa1ef0 461
Jonathan Austin 0:bc2961fa1ef0 462 /**
Jonathan Austin 0:bc2961fa1ef0 463 * @brief Module Initialization Routine.
Jonathan Austin 0:bc2961fa1ef0 464 *
Jonathan Austin 0:bc2961fa1ef0 465 * @details Function for initializing the module. Must called before any other APIs of the module are used.
Jonathan Austin 0:bc2961fa1ef0 466 *
Jonathan Austin 0:bc2961fa1ef0 467 * @param[in] p_init_param Initialization parameters.
Jonathan Austin 0:bc2961fa1ef0 468 *
Jonathan Austin 0:bc2961fa1ef0 469 * @retval NRF_SUCCESS On success, else an error code indicating reason for failure.
Jonathan Austin 0:bc2961fa1ef0 470 *
Jonathan Austin 0:bc2961fa1ef0 471 * @note It is mandatory that pstorage is initialized before initializing this module.
Jonathan Austin 0:bc2961fa1ef0 472 */
Jonathan Austin 0:bc2961fa1ef0 473 ret_code_t dm_init(dm_init_param_t const * p_init_param);
Jonathan Austin 0:bc2961fa1ef0 474
Jonathan Austin 0:bc2961fa1ef0 475 /**
Jonathan Austin 0:bc2961fa1ef0 476 * @brief Function for registering the application.
Jonathan Austin 0:bc2961fa1ef0 477 *
Jonathan Austin 0:bc2961fa1ef0 478 * @details This routine is used by the application to register for asynchronous events with the
Jonathan Austin 0:bc2961fa1ef0 479 * device manager. During registration the application also indicates the services that it
Jonathan Austin 0:bc2961fa1ef0 480 * intends to support on this instance. It is possible to register multiple times with the
Jonathan Austin 0:bc2961fa1ef0 481 * device manager. At least one instance shall be registered with the device manager after
Jonathan Austin 0:bc2961fa1ef0 482 * the module has been initialized.
Jonathan Austin 0:bc2961fa1ef0 483 * Maximum number of application instances device manager can support is determined
Jonathan Austin 0:bc2961fa1ef0 484 * by DM_MAX_APPLICATIONS.
Jonathan Austin 0:bc2961fa1ef0 485 *
Jonathan Austin 0:bc2961fa1ef0 486 * All applications must be registered before initiating or accepting connections from the peer.
Jonathan Austin 0:bc2961fa1ef0 487 *
Jonathan Austin 0:bc2961fa1ef0 488 * @param[in] p_appl_param Application parameters.
Jonathan Austin 0:bc2961fa1ef0 489 * @param[out] p_appl_instance Application Instance Identifier in case registration is successful.
Jonathan Austin 0:bc2961fa1ef0 490 *
Jonathan Austin 0:bc2961fa1ef0 491 * @retval NRF_SUCCESS On success, else an error code indicating reason for failure.
Jonathan Austin 0:bc2961fa1ef0 492 * @retval NRF_ERROR_INVALID_STATE If the API is called without module initialization.
Jonathan Austin 0:bc2961fa1ef0 493 * @retval NRF_ERROR_NO_MEM If module cannot support more applications.
Jonathan Austin 0:bc2961fa1ef0 494 *
Jonathan Austin 0:bc2961fa1ef0 495 * @note Currently only one application instance is supported by the module.
Jonathan Austin 0:bc2961fa1ef0 496 */
Jonathan Austin 0:bc2961fa1ef0 497 ret_code_t dm_register(dm_application_instance_t * p_appl_instance,
Jonathan Austin 0:bc2961fa1ef0 498 dm_application_param_t const * p_appl_param);
Jonathan Austin 0:bc2961fa1ef0 499
Jonathan Austin 0:bc2961fa1ef0 500 /**
Jonathan Austin 0:bc2961fa1ef0 501 * @brief Function for handling BLE events.
Jonathan Austin 0:bc2961fa1ef0 502 *
Jonathan Austin 0:bc2961fa1ef0 503 * @details BLE Event Handler for the module. This routine should be called from BLE stack event
Jonathan Austin 0:bc2961fa1ef0 504 * dispatcher for the module to work as expected.
Jonathan Austin 0:bc2961fa1ef0 505 *
Jonathan Austin 0:bc2961fa1ef0 506 * @param[in] p_ble_evt BLE stack event being dispatched to the function.
Jonathan Austin 0:bc2961fa1ef0 507 *
Jonathan Austin 0:bc2961fa1ef0 508 */
Jonathan Austin 0:bc2961fa1ef0 509 void dm_ble_evt_handler(ble_evt_t * p_ble_evt);
Jonathan Austin 0:bc2961fa1ef0 510
Jonathan Austin 0:bc2961fa1ef0 511 /** @} */
Jonathan Austin 0:bc2961fa1ef0 512
Jonathan Austin 0:bc2961fa1ef0 513
Jonathan Austin 0:bc2961fa1ef0 514 /**
Jonathan Austin 0:bc2961fa1ef0 515 * @defgroup dm_security_api APIs to set up or read status of security on a link.
Jonathan Austin 0:bc2961fa1ef0 516 *
Jonathan Austin 0:bc2961fa1ef0 517 * @brief This section describes APIs to set up Security. These APIs require that the peer is
Jonathan Austin 0:bc2961fa1ef0 518 * connected before the procedures can be requested.
Jonathan Austin 0:bc2961fa1ef0 519 *
Jonathan Austin 0:bc2961fa1ef0 520 * @details This group allows application to request security procedures
Jonathan Austin 0:bc2961fa1ef0 521 * or get the status of the security on a link.
Jonathan Austin 0:bc2961fa1ef0 522 * @{
Jonathan Austin 0:bc2961fa1ef0 523 */
Jonathan Austin 0:bc2961fa1ef0 524 /**
Jonathan Austin 0:bc2961fa1ef0 525 * @brief Function for requesting setting up security on a link.
Jonathan Austin 0:bc2961fa1ef0 526 *
Jonathan Austin 0:bc2961fa1ef0 527 * @details This API initiates security procedures with a peer device.
Jonathan Austin 0:bc2961fa1ef0 528 * @note For the GAP Central role, in case peer is not bonded, request to bond/pair is
Jonathan Austin 0:bc2961fa1ef0 529 * initiated. If it is bonded, the link is re-encrypted using the existing bond information.
Jonathan Austin 0:bc2961fa1ef0 530 * For the GAP peripheral role, a Slave security request is sent.
Jonathan Austin 0:bc2961fa1ef0 531 * @details If a pairing procedure is initiated successfully, application is notified of
Jonathan Austin 0:bc2961fa1ef0 532 * @ref DM_EVT_SECURITY_SETUP_COMPLETE. A result indicating success or failure is notified along with the event.
Jonathan Austin 0:bc2961fa1ef0 533 * In case the link is re-encrypted using existing bond information, @ref DM_EVT_LINK_SECURED is
Jonathan Austin 0:bc2961fa1ef0 534 * notified to the application.
Jonathan Austin 0:bc2961fa1ef0 535 *
Jonathan Austin 0:bc2961fa1ef0 536 * @param[in] p_handle Identifies the link on which security is desired.
Jonathan Austin 0:bc2961fa1ef0 537 *
Jonathan Austin 0:bc2961fa1ef0 538 * @retval NRF_SUCCESS On success, else an error code indicating reason for failure.
Jonathan Austin 0:bc2961fa1ef0 539 * @retval NRF_ERROR_INVALID_STATE If the API is called without module initialization and/or
Jonathan Austin 0:bc2961fa1ef0 540 * application registration.
Jonathan Austin 0:bc2961fa1ef0 541 * @retval NRF_ERROR_NULL If p_handle is NULL.
Jonathan Austin 0:bc2961fa1ef0 542 * @retval NRF_ERROR_INVALID_ADDR If the peer is not identified by the handle provided by the application
Jonathan Austin 0:bc2961fa1ef0 543 * or if the peer is not connected when this procedure is requested.
Jonathan Austin 0:bc2961fa1ef0 544 */
Jonathan Austin 0:bc2961fa1ef0 545 ret_code_t dm_security_setup_req(dm_handle_t * p_handle);
Jonathan Austin 0:bc2961fa1ef0 546
Jonathan Austin 0:bc2961fa1ef0 547 /**
Jonathan Austin 0:bc2961fa1ef0 548 * @brief Function for reading the status of the security on a link.
Jonathan Austin 0:bc2961fa1ef0 549 *
Jonathan Austin 0:bc2961fa1ef0 550 * @details This API allows application to query status of security on a link.
Jonathan Austin 0:bc2961fa1ef0 551 *
Jonathan Austin 0:bc2961fa1ef0 552 * @param[in] p_handle Identifies the link on which security is desired.
Jonathan Austin 0:bc2961fa1ef0 553 * @param[out] p_status Pointer where security status is provided to the application.
Jonathan Austin 0:bc2961fa1ef0 554 * See \ref dm_security_status_t for possible statuses that can be expected.
Jonathan Austin 0:bc2961fa1ef0 555 *
Jonathan Austin 0:bc2961fa1ef0 556 * @retval NRF_SUCCESS Or appropriate error code indicating reason for failure.
Jonathan Austin 0:bc2961fa1ef0 557 * @retval NRF_ERROR_INVALID_STATE If the API is called without module initialization and/or
Jonathan Austin 0:bc2961fa1ef0 558 * application registration.
Jonathan Austin 0:bc2961fa1ef0 559 * @retval NRF_ERROR_NULL If p_handle or p_status is NULL.
Jonathan Austin 0:bc2961fa1ef0 560 * @retval NRF_ERROR_INVALID_ADDR If peer is not identified by the handle provided by the application
Jonathan Austin 0:bc2961fa1ef0 561 * or if peer is not connected when this procedure is requested.
Jonathan Austin 0:bc2961fa1ef0 562 */
Jonathan Austin 0:bc2961fa1ef0 563 ret_code_t dm_security_status_req(dm_handle_t const * p_handle, dm_security_status_t * p_status);
Jonathan Austin 0:bc2961fa1ef0 564
Jonathan Austin 0:bc2961fa1ef0 565 /**
Jonathan Austin 0:bc2961fa1ef0 566 * @brief Function for creating the whitelist.
Jonathan Austin 0:bc2961fa1ef0 567 *
Jonathan Austin 0:bc2961fa1ef0 568 * @details This API allows application to create whitelist based on bonded peer devices in module
Jonathan Austin 0:bc2961fa1ef0 569 * data base.
Jonathan Austin 0:bc2961fa1ef0 570 *
Jonathan Austin 0:bc2961fa1ef0 571 * @param[in] p_handle Identifies the application requesting whitelist creation.
Jonathan Austin 0:bc2961fa1ef0 572 * @param[in,out] p_whitelist Pointer where created whitelist is provided to the application.
Jonathan Austin 0:bc2961fa1ef0 573 *
Jonathan Austin 0:bc2961fa1ef0 574 * @note 'addr_count' and 'irk_count' fields of the structure should be populated with the maximum
Jonathan Austin 0:bc2961fa1ef0 575 * number of devices that the application wishes to request in the whitelist.
Jonathan Austin 0:bc2961fa1ef0 576 * If the number of bonded devices is less than requested, the fields are updated with that number of devices.
Jonathan Austin 0:bc2961fa1ef0 577 * If the number of devices are more than requested, the module will populate the list
Jonathan Austin 0:bc2961fa1ef0 578 * with devices in the order the bond was established with the peer devices. Also, if this routine is
Jonathan Austin 0:bc2961fa1ef0 579 * called when a connection exists with one or more peer devices,
Jonathan Austin 0:bc2961fa1ef0 580 * those connected devices are not added to the whitelist.
Jonathan Austin 0:bc2961fa1ef0 581 *
Jonathan Austin 0:bc2961fa1ef0 582 * @retval NRF_SUCCESS On success, else an error code indicating reason for failure.
Jonathan Austin 0:bc2961fa1ef0 583 * @retval NRF_ERROR_INVALID_STATE If the API is called without module initialization and/or
Jonathan Austin 0:bc2961fa1ef0 584 * application registration.
Jonathan Austin 0:bc2961fa1ef0 585 * @retval NRF_ERROR_NULL If p_handle or p_whitelist is NULL.
Jonathan Austin 0:bc2961fa1ef0 586 */
Jonathan Austin 0:bc2961fa1ef0 587 ret_code_t dm_whitelist_create(dm_application_instance_t const * p_handle,
Jonathan Austin 0:bc2961fa1ef0 588 ble_gap_whitelist_t * p_whitelist);
Jonathan Austin 0:bc2961fa1ef0 589
Jonathan Austin 0:bc2961fa1ef0 590 /** @} */
Jonathan Austin 0:bc2961fa1ef0 591
Jonathan Austin 0:bc2961fa1ef0 592
Jonathan Austin 0:bc2961fa1ef0 593 /**
Jonathan Austin 0:bc2961fa1ef0 594 * @defgroup dm_cntxt_mgmt_api Context Management APIs
Jonathan Austin 0:bc2961fa1ef0 595 *
Jonathan Austin 0:bc2961fa1ef0 596 * @brief Utility APIs offered by the device manager to get information about the peer if and
Jonathan Austin 0:bc2961fa1ef0 597 * when needed.
Jonathan Austin 0:bc2961fa1ef0 598 *
Jonathan Austin 0:bc2961fa1ef0 599 * @details This group of API allow the application to access information that is not required to be
Jonathan Austin 0:bc2961fa1ef0 600 * maintained by the application but may be needed. Hence it is possible to get the
Jonathan Austin 0:bc2961fa1ef0 601 * information from the module instead of mapping all the information with a device
Jonathan Austin 0:bc2961fa1ef0 602 * context.
Jonathan Austin 0:bc2961fa1ef0 603 * @{
Jonathan Austin 0:bc2961fa1ef0 604 */
Jonathan Austin 0:bc2961fa1ef0 605
Jonathan Austin 0:bc2961fa1ef0 606 ret_code_t dm_device_add(dm_handle_t * p_handle,
Jonathan Austin 0:bc2961fa1ef0 607 dm_device_context_t const * p_context);
Jonathan Austin 0:bc2961fa1ef0 608
Jonathan Austin 0:bc2961fa1ef0 609 /**
Jonathan Austin 0:bc2961fa1ef0 610 * @brief Function for deleting a peer device context and all related information from the database.
Jonathan Austin 0:bc2961fa1ef0 611 *
Jonathan Austin 0:bc2961fa1ef0 612 * @details Delete peer device context and all related information from database. If
Jonathan Austin 0:bc2961fa1ef0 613 * this API returns NRF_SUCCESS, DM_EVT_DEVICE_CONTEXT_DELETED event is notified to the
Jonathan Austin 0:bc2961fa1ef0 614 * application. Event result notified along with the event indicates success or failure
Jonathan Austin 0:bc2961fa1ef0 615 * of this procedure.
Jonathan Austin 0:bc2961fa1ef0 616 *
Jonathan Austin 0:bc2961fa1ef0 617 * @param[in] p_handle Identifies the peer device to be deleted.
Jonathan Austin 0:bc2961fa1ef0 618 *
Jonathan Austin 0:bc2961fa1ef0 619 * @retval NRF_SUCCESS on success, else an error code indicating reason for failure.
Jonathan Austin 0:bc2961fa1ef0 620 * @retval NRF_ERROR_INVALID_STATE In the API is called without module initialization and/or
Jonathan Austin 0:bc2961fa1ef0 621 * application registration.
Jonathan Austin 0:bc2961fa1ef0 622 * @retval NRF_ERROR_NULL If p_handle is NULL.
Jonathan Austin 0:bc2961fa1ef0 623 * @retval NRF_ERROR_INVALID_ADDR If peer is not identified the handle provided by the application.
Jonathan Austin 0:bc2961fa1ef0 624 *
Jonathan Austin 0:bc2961fa1ef0 625 * @note Deleting device context results in deleting service and application context for the
Jonathan Austin 0:bc2961fa1ef0 626 * bonded device. The respective events DM_EVT_SERVICE_CONTEXT_DELETED and
Jonathan Austin 0:bc2961fa1ef0 627 * DM_EVT_APPL_CONTEXT_DELETED are not notified to the application.
Jonathan Austin 0:bc2961fa1ef0 628 */
Jonathan Austin 0:bc2961fa1ef0 629 ret_code_t dm_device_delete(dm_handle_t const * p_handle);
Jonathan Austin 0:bc2961fa1ef0 630
Jonathan Austin 0:bc2961fa1ef0 631 /**
Jonathan Austin 0:bc2961fa1ef0 632 * @brief Function for deleting all peer device context and all related information from the database.
Jonathan Austin 0:bc2961fa1ef0 633 *
Jonathan Austin 0:bc2961fa1ef0 634 * @details Delete peer device context and all related information from database. If
Jonathan Austin 0:bc2961fa1ef0 635 * this API returns NRF_SUCCESS, DM_EVT_DEVICE_CONTEXT_DELETED event is notified to the
Jonathan Austin 0:bc2961fa1ef0 636 * application for each device that is deleted from the data base. Event result
Jonathan Austin 0:bc2961fa1ef0 637 * notified along with the event indicates success or failure of this procedure.
Jonathan Austin 0:bc2961fa1ef0 638 *
Jonathan Austin 0:bc2961fa1ef0 639 * @param[in] p_handle Identifies application instance that is requesting
Jonathan Austin 0:bc2961fa1ef0 640 * the deletion of all bonded devices.
Jonathan Austin 0:bc2961fa1ef0 641 *
Jonathan Austin 0:bc2961fa1ef0 642 * @retval NRF_SUCCESS On success, else an error code indicating reason for failure.
Jonathan Austin 0:bc2961fa1ef0 643 * @retval NRF_ERROR_INVALID_STATE If the API is called without module initialization and/or
Jonathan Austin 0:bc2961fa1ef0 644 * application registration.
Jonathan Austin 0:bc2961fa1ef0 645 * @retval NRF_ERROR_NULL If p_handle is NULL.
Jonathan Austin 0:bc2961fa1ef0 646 * @retval NRF_ERROR_INVALID_ADDR If peer is not identified the handle provided by the application.
Jonathan Austin 0:bc2961fa1ef0 647 *
Jonathan Austin 0:bc2961fa1ef0 648 * @note Deleting device context results in deleting both service and application context for the
Jonathan Austin 0:bc2961fa1ef0 649 * bonded device. The respective events DM_EVT_SERVICE_CONTEXT_DELETED and
Jonathan Austin 0:bc2961fa1ef0 650 * DM_EVT_APPL_CONTEXT_DELETED are not notified to the application.
Jonathan Austin 0:bc2961fa1ef0 651 */
Jonathan Austin 0:bc2961fa1ef0 652 ret_code_t dm_device_delete_all(dm_application_instance_t const * p_handle);
Jonathan Austin 0:bc2961fa1ef0 653
Jonathan Austin 0:bc2961fa1ef0 654 /**
Jonathan Austin 0:bc2961fa1ef0 655 * @brief Function for setting Service Context for a peer device identified by 'p_handle' parameter.
Jonathan Austin 0:bc2961fa1ef0 656 *
Jonathan Austin 0:bc2961fa1ef0 657 * @details This API allows application to Set Service Context for a peer device identified by the
Jonathan Austin 0:bc2961fa1ef0 658 * 'p_handle' parameter. This API is useful when the Service Context cannot be requested
Jonathan Austin 0:bc2961fa1ef0 659 * from the SoftDevice, but needs to be assembled by the application or an another module.
Jonathan Austin 0:bc2961fa1ef0 660 * (or when service context is exchanged in an out of band way.)
Jonathan Austin 0:bc2961fa1ef0 661 * This API could also be used to trigger a storing of service context into persistent
Jonathan Austin 0:bc2961fa1ef0 662 * memory. If this is desired, a NULL pointer could be passed to the p_context.
Jonathan Austin 0:bc2961fa1ef0 663 *
Jonathan Austin 0:bc2961fa1ef0 664 * @param[in] p_handle Identifies peer device for which the procedure is requested.
Jonathan Austin 0:bc2961fa1ef0 665 * @param[in] p_context Service context being set. The context information includes length of
Jonathan Austin 0:bc2961fa1ef0 666 * data and pointer to the contextual data being set. The memory pointed to by
Jonathan Austin 0:bc2961fa1ef0 667 * the pointer to data is assumed to be resident when API is being called and
Jonathan Austin 0:bc2961fa1ef0 668 * can be freed or reused once the set procedure is complete. Set procedure
Jonathan Austin 0:bc2961fa1ef0 669 * completion is indicated by the event \ref DM_EVT_SERVICE_CONTEXT_STORED.
Jonathan Austin 0:bc2961fa1ef0 670 * The Event result is notified along with the event and indicates success or failure of
Jonathan Austin 0:bc2961fa1ef0 671 * this procedure.
Jonathan Austin 0:bc2961fa1ef0 672 *
Jonathan Austin 0:bc2961fa1ef0 673 * @retval NRF_SUCCESS On success, else an error code indicating reason for failure.
Jonathan Austin 0:bc2961fa1ef0 674 * @retval NRF_ERROR_INVALID_STATE If the API is called without module initialization and/or
Jonathan Austin 0:bc2961fa1ef0 675 * application registration.
Jonathan Austin 0:bc2961fa1ef0 676 * @retval NRF_ERROR_NULL If p_handle is NULL.
Jonathan Austin 0:bc2961fa1ef0 677 * @retval NRF_ERROR_INVALID_ADDR If the peer is not identified by the handle provided by the application.
Jonathan Austin 0:bc2961fa1ef0 678 */
Jonathan Austin 0:bc2961fa1ef0 679 ret_code_t dm_service_context_set(dm_handle_t const * p_handle,
Jonathan Austin 0:bc2961fa1ef0 680 dm_service_context_t const * p_context);
Jonathan Austin 0:bc2961fa1ef0 681
Jonathan Austin 0:bc2961fa1ef0 682 /**
Jonathan Austin 0:bc2961fa1ef0 683 * @brief Function for getting Service Context for a peer device identified by 'p_handle' parameter.
Jonathan Austin 0:bc2961fa1ef0 684 *
Jonathan Austin 0:bc2961fa1ef0 685 * @details Get Service Context for a peer device identified by the 'p_handle' parameter. If
Jonathan Austin 0:bc2961fa1ef0 686 * this API returns NRF_SUCCESS, DM_EVT_SERVICE_CONTEXT_LOADED event is notified to the
Jonathan Austin 0:bc2961fa1ef0 687 * application. The event result is notified along with the event indicates success or failure
Jonathan Austin 0:bc2961fa1ef0 688 * of this procedure.
Jonathan Austin 0:bc2961fa1ef0 689 *
Jonathan Austin 0:bc2961fa1ef0 690 * @param[in] p_handle Identifies peer device for which procedure is requested.
Jonathan Austin 0:bc2961fa1ef0 691 * @param[in] p_context Application context being requested. The context information includes length
Jonathan Austin 0:bc2961fa1ef0 692 * of the data and a pointer to the data. Note that requesting a 'get'
Jonathan Austin 0:bc2961fa1ef0 693 * of application does not need to provide memory, the pointer to data will be
Jonathan Austin 0:bc2961fa1ef0 694 * pointing to service data and hence no data movement is involved.
Jonathan Austin 0:bc2961fa1ef0 695 *
Jonathan Austin 0:bc2961fa1ef0 696 * @retval NRF_SUCCESS On success, else an error code indicating reason for failure.
Jonathan Austin 0:bc2961fa1ef0 697 * @retval NRF_ERROR_INVALID_STATE In case API is called without module initialization and/or
Jonathan Austin 0:bc2961fa1ef0 698 * application registration.
Jonathan Austin 0:bc2961fa1ef0 699 * @retval NRF_ERROR_NULL If p_handle is NULL.
Jonathan Austin 0:bc2961fa1ef0 700 * @retval NRF_ERROR_INVALID_ADDR If the peer is not identified by the handle provided by the application.
Jonathan Austin 0:bc2961fa1ef0 701 */
Jonathan Austin 0:bc2961fa1ef0 702 ret_code_t dm_service_context_get(dm_handle_t const * p_handle,
Jonathan Austin 0:bc2961fa1ef0 703 dm_service_context_t * p_context);
Jonathan Austin 0:bc2961fa1ef0 704
Jonathan Austin 0:bc2961fa1ef0 705 /**
Jonathan Austin 0:bc2961fa1ef0 706 * @brief Function for deleting a Service Context for a peer device identified by the 'p_handle' parameter.
Jonathan Austin 0:bc2961fa1ef0 707 *
Jonathan Austin 0:bc2961fa1ef0 708 * @details This API allows application to delete a Service Context identified for a peer device
Jonathan Austin 0:bc2961fa1ef0 709 * identified by the 'p_handle' parameter. If this API returns NRF_SUCCESS,
Jonathan Austin 0:bc2961fa1ef0 710 * DM_EVT_SERVICE_CONTEXT_DELETED event is notified to the application.
Jonathan Austin 0:bc2961fa1ef0 711 * Event result is notified along with the event and indicates success or failure of this
Jonathan Austin 0:bc2961fa1ef0 712 * procedure.
Jonathan Austin 0:bc2961fa1ef0 713 *
Jonathan Austin 0:bc2961fa1ef0 714 * @param[in] p_handle Identifies peer device for which procedure is requested.
Jonathan Austin 0:bc2961fa1ef0 715 *
Jonathan Austin 0:bc2961fa1ef0 716 * @retval NRF_SUCCESS On success, else an error code indicating reason for failure.
Jonathan Austin 0:bc2961fa1ef0 717 * @retval NRF_ERROR_INVALID_STATE If the API is called without module initialization and/or
Jonathan Austin 0:bc2961fa1ef0 718 * application registration.
Jonathan Austin 0:bc2961fa1ef0 719 * @retval NRF_ERROR_NULL If p_handle is NULL.
Jonathan Austin 0:bc2961fa1ef0 720 * @retval NRF_ERROR_INVALID_ADDR If the peer is not identified by the handle provided by the application.
Jonathan Austin 0:bc2961fa1ef0 721 */
Jonathan Austin 0:bc2961fa1ef0 722 ret_code_t dm_service_context_delete(dm_handle_t const * p_handle);
Jonathan Austin 0:bc2961fa1ef0 723
Jonathan Austin 0:bc2961fa1ef0 724 /**
Jonathan Austin 0:bc2961fa1ef0 725 * @brief Function for setting Application Context for a peer device identified by the 'p_handle' parameter.
Jonathan Austin 0:bc2961fa1ef0 726 *
Jonathan Austin 0:bc2961fa1ef0 727 * @details This application allows the setting of the application context for the peer device identified by
Jonathan Austin 0:bc2961fa1ef0 728 * the 'p_handle'. Application context is stored persistently by the module and can be
Jonathan Austin 0:bc2961fa1ef0 729 * requested by the application at any time using the \ref dm_application_context_get
Jonathan Austin 0:bc2961fa1ef0 730 * API. Note that this procedure is permitted only for bonded devices. If the
Jonathan Austin 0:bc2961fa1ef0 731 * device is not bonded, application context cannot be set. However, it is not mandatory
Jonathan Austin 0:bc2961fa1ef0 732 * that the bonded device is connected when requesting this procedure.
Jonathan Austin 0:bc2961fa1ef0 733 *
Jonathan Austin 0:bc2961fa1ef0 734 * @param[in] p_handle Identifies peer device for which procedure is requested.
Jonathan Austin 0:bc2961fa1ef0 735 *
Jonathan Austin 0:bc2961fa1ef0 736 * @param[in] p_context Application context being set. The context information includes length of the
Jonathan Austin 0:bc2961fa1ef0 737 * data and pointer to the contextual data being set. The memory pointed to by
Jonathan Austin 0:bc2961fa1ef0 738 * the data pointer is assumed to be resident when API is being called and
Jonathan Austin 0:bc2961fa1ef0 739 * can be freed or reused once the set procedure is complete. Set procedure
Jonathan Austin 0:bc2961fa1ef0 740 * completion is notified by the event \ref DM_EVT_APPL_CONTEXT_STORED.
Jonathan Austin 0:bc2961fa1ef0 741 * The event result is notified along with the event and indicates success or
Jonathan Austin 0:bc2961fa1ef0 742 * failure of this procedure.
Jonathan Austin 0:bc2961fa1ef0 743 *
Jonathan Austin 0:bc2961fa1ef0 744 * @retval NRF_SUCCESS On success, else an error code indicating reason for failure.
Jonathan Austin 0:bc2961fa1ef0 745 * @retval NRF_ERROR_INVALID_STATE If the API is called without module initialization and/or
Jonathan Austin 0:bc2961fa1ef0 746 * application registration.
Jonathan Austin 0:bc2961fa1ef0 747 * @retval NRF_ERROR_NULL If p_handle and/or p_context is NULL.
Jonathan Austin 0:bc2961fa1ef0 748 * @retval NRF_ERROR_INVALID_ADDR If peer is not identified the handle provided by the application.
Jonathan Austin 0:bc2961fa1ef0 749 *
Jonathan Austin 0:bc2961fa1ef0 750 * @note The API returns FEATURE_NOT_ENABLED in case DEVICE_MANAGER_APP_CONTEXT_SIZE is set to zero.
Jonathan Austin 0:bc2961fa1ef0 751 */
Jonathan Austin 0:bc2961fa1ef0 752 ret_code_t dm_application_context_set(dm_handle_t const * p_handle,
Jonathan Austin 0:bc2961fa1ef0 753 dm_application_context_t const * p_context);
Jonathan Austin 0:bc2961fa1ef0 754
Jonathan Austin 0:bc2961fa1ef0 755 /**
Jonathan Austin 0:bc2961fa1ef0 756 * @brief Function for getting Application Context for a peer device identified by the 'p_handle' parameter.
Jonathan Austin 0:bc2961fa1ef0 757 *
Jonathan Austin 0:bc2961fa1ef0 758 * @details Get Application Context for a peer device identified by the 'p_handle' parameter. If
Jonathan Austin 0:bc2961fa1ef0 759 * this API returns NRF_SUCCESS, DM_EVT_APPL_CONTEXT_LOADED event is notified to the
Jonathan Austin 0:bc2961fa1ef0 760 * application. Event result notified along with the event indicates success or failure
Jonathan Austin 0:bc2961fa1ef0 761 * of this procedure.
Jonathan Austin 0:bc2961fa1ef0 762 *
Jonathan Austin 0:bc2961fa1ef0 763 * @param[in] p_handle Identifies peer device for which procedure is requested.
Jonathan Austin 0:bc2961fa1ef0 764 * @param[in] p_context Application context being requested. The context information includes
Jonathan Austin 0:bc2961fa1ef0 765 * length of data and pointer to the contextual data is provided.
Jonathan Austin 0:bc2961fa1ef0 766 *
Jonathan Austin 0:bc2961fa1ef0 767 * @retval NRF_SUCCESS On success, else an error code indicating reason for failure.
Jonathan Austin 0:bc2961fa1ef0 768 * @retval NRF_ERROR_INVALID_STATE If the API is called without module initialization and/or
Jonathan Austin 0:bc2961fa1ef0 769 * application registration.
Jonathan Austin 0:bc2961fa1ef0 770 * @retval NRF_ERROR_NULL If p_handle and/or p_context is NULL.
Jonathan Austin 0:bc2961fa1ef0 771 * @retval NRF_ERROR_INVALID_ADDR If the peer is not identified by the handle provided by the application.
Jonathan Austin 0:bc2961fa1ef0 772 * @retval DM_NO_APP_CONTEXT If no application context was set that can be fetched.
Jonathan Austin 0:bc2961fa1ef0 773 *
Jonathan Austin 0:bc2961fa1ef0 774 * @note The API returns FEATURE_NOT_ENABLED in case DEVICE_MANAGER_APP_CONTEXT_SIZE is set to
Jonathan Austin 0:bc2961fa1ef0 775 * zero.
Jonathan Austin 0:bc2961fa1ef0 776 */
Jonathan Austin 0:bc2961fa1ef0 777 ret_code_t dm_application_context_get(dm_handle_t const * p_handle,
Jonathan Austin 0:bc2961fa1ef0 778 dm_application_context_t * p_context);
Jonathan Austin 0:bc2961fa1ef0 779
Jonathan Austin 0:bc2961fa1ef0 780 /**
Jonathan Austin 0:bc2961fa1ef0 781 * @brief Function for deleting Application Context for a peer device identified by the 'p_handle' parameter.
Jonathan Austin 0:bc2961fa1ef0 782 *
Jonathan Austin 0:bc2961fa1ef0 783 * @details Delete Application Context for a peer device identified by the 'p_handle' parameter. If
Jonathan Austin 0:bc2961fa1ef0 784 * this API returns NRF_SUCCESS, DM_EVT_APPL_CONTEXT_DELETED event is notified to the
Jonathan Austin 0:bc2961fa1ef0 785 * application. The event result notified along with the event and indicates success or failure
Jonathan Austin 0:bc2961fa1ef0 786 * of this procedure.
Jonathan Austin 0:bc2961fa1ef0 787 *
Jonathan Austin 0:bc2961fa1ef0 788 * @param[in] p_handle Identifies peer device for which procedure is requested.
Jonathan Austin 0:bc2961fa1ef0 789 *
Jonathan Austin 0:bc2961fa1ef0 790 * @retval NRF_SUCCESS On success, else an error code indicating reason for failure.
Jonathan Austin 0:bc2961fa1ef0 791 * @retval NRF_ERROR_INVALID_STATE If the API is called without module initialization and/or
Jonathan Austin 0:bc2961fa1ef0 792 * application registration.
Jonathan Austin 0:bc2961fa1ef0 793 * @retval NRF_ERROR_NULL If the p_handle is NULL.
Jonathan Austin 0:bc2961fa1ef0 794 * @retval NRF_ERROR_INVALID_ADDR If peer is not identified the handle provided by the application.
Jonathan Austin 0:bc2961fa1ef0 795 * @retval DM_NO_APP_CONTEXT If no application context was set that can be deleted.
Jonathan Austin 0:bc2961fa1ef0 796 *
Jonathan Austin 0:bc2961fa1ef0 797 * @note The API returns FEATURE_NOT_ENABLED if the DEVICE_MANAGER_APP_CONTEXT_SIZE is set to zero.
Jonathan Austin 0:bc2961fa1ef0 798 */
Jonathan Austin 0:bc2961fa1ef0 799 ret_code_t dm_application_context_delete(dm_handle_t const * p_handle);
Jonathan Austin 0:bc2961fa1ef0 800
Jonathan Austin 0:bc2961fa1ef0 801 /** @} */
Jonathan Austin 0:bc2961fa1ef0 802
Jonathan Austin 0:bc2961fa1ef0 803
Jonathan Austin 0:bc2961fa1ef0 804 /**
Jonathan Austin 0:bc2961fa1ef0 805 * @defgroup utility_api Utility APIs
Jonathan Austin 0:bc2961fa1ef0 806 * @{
Jonathan Austin 0:bc2961fa1ef0 807 * @brief This section describes the utility APIs offered by the module.
Jonathan Austin 0:bc2961fa1ef0 808 *
Jonathan Austin 0:bc2961fa1ef0 809 * @details APIs defined in this section are utility or assisting/helper APIs.
Jonathan Austin 0:bc2961fa1ef0 810 */
Jonathan Austin 0:bc2961fa1ef0 811 /**
Jonathan Austin 0:bc2961fa1ef0 812 * @brief Function for Setting/Copying Application instance to Device Manager handle.
Jonathan Austin 0:bc2961fa1ef0 813 *
Jonathan Austin 0:bc2961fa1ef0 814 * @param[in] p_appl_instance Application instance to be set.
Jonathan Austin 0:bc2961fa1ef0 815 * @param[out] p_handle Device Manager handle for which the instance is to be copied.
Jonathan Austin 0:bc2961fa1ef0 816 *
Jonathan Austin 0:bc2961fa1ef0 817 * @retval NRF_SUCCESS On success, else an error code indicating reason for failure.
Jonathan Austin 0:bc2961fa1ef0 818 * @retval NRF_ERROR_INVALID_STATE If the API is called without module initialization and/or
Jonathan Austin 0:bc2961fa1ef0 819 * application registration.
Jonathan Austin 0:bc2961fa1ef0 820 * @retval NRF_ERROR_NULL If p_handle and/or p_addr is NULL.
Jonathan Austin 0:bc2961fa1ef0 821 */
Jonathan Austin 0:bc2961fa1ef0 822 ret_code_t dm_application_instance_set(dm_application_instance_t const * p_appl_instance,
Jonathan Austin 0:bc2961fa1ef0 823 dm_handle_t * p_handle);
Jonathan Austin 0:bc2961fa1ef0 824
Jonathan Austin 0:bc2961fa1ef0 825 /**
Jonathan Austin 0:bc2961fa1ef0 826 * @brief Function for getting a peer's device address.
Jonathan Austin 0:bc2961fa1ef0 827 *
Jonathan Austin 0:bc2961fa1ef0 828 * @param[in] p_handle Identifies the peer device whose address is requested. Can not be NULL.
Jonathan Austin 0:bc2961fa1ef0 829 * @param[out] p_addr Pointer where address is to be copied. Can not be NULL.
Jonathan Austin 0:bc2961fa1ef0 830 *
Jonathan Austin 0:bc2961fa1ef0 831 * @retval NRF_SUCCESS On success, else an error code indicating reason for failure.
Jonathan Austin 0:bc2961fa1ef0 832 * @retval NRF_ERROR_INVALID_STATE If the API is called without module initialization and/or
Jonathan Austin 0:bc2961fa1ef0 833 * application registration.
Jonathan Austin 0:bc2961fa1ef0 834 * @retval NRF_ERROR_NULL If p_handle and/or p_addr is NULL.
Jonathan Austin 0:bc2961fa1ef0 835 * @retval NRF_ERROR_NOT_FOUND If the peer could not be identified.
Jonathan Austin 0:bc2961fa1ef0 836 */
Jonathan Austin 0:bc2961fa1ef0 837 ret_code_t dm_peer_addr_get(dm_handle_t const * p_handle,
Jonathan Austin 0:bc2961fa1ef0 838 ble_gap_addr_t * p_addr);
Jonathan Austin 0:bc2961fa1ef0 839
Jonathan Austin 0:bc2961fa1ef0 840 /**
Jonathan Austin 0:bc2961fa1ef0 841 * @brief Function for setting/updating a peer's device address.
Jonathan Austin 0:bc2961fa1ef0 842 *
Jonathan Austin 0:bc2961fa1ef0 843 * @param[in] p_handle Identifies the peer device whose address is requested to be set/updated.
Jonathan Austin 0:bc2961fa1ef0 844 * @param[out] p_addr Address to be set/updated.
Jonathan Austin 0:bc2961fa1ef0 845 *
Jonathan Austin 0:bc2961fa1ef0 846 * @retval NRF_SUCCESS On success, else an error code indicating reason for failure.
Jonathan Austin 0:bc2961fa1ef0 847 * @retval NRF_ERROR_INVALID_STATE If the API is called without module initialization and/or
Jonathan Austin 0:bc2961fa1ef0 848 * application registration.
Jonathan Austin 0:bc2961fa1ef0 849 * @retval NRF_ERROR_NULL If p_handle and/or p_addr is NULL.
Jonathan Austin 0:bc2961fa1ef0 850 * @retval NRF_ERROR_INVALID_ADDR If the peer is not identified by the handle provided by the application.
Jonathan Austin 0:bc2961fa1ef0 851 * @retval NRF_ERROR_INVALID_PARAM If this procedure is requested while connected to the peer or if the address
Jonathan Austin 0:bc2961fa1ef0 852 * type was set to BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_RESOLVABLE.
Jonathan Austin 0:bc2961fa1ef0 853 *
Jonathan Austin 0:bc2961fa1ef0 854 * @note Setting or updating a peer's device address is permitted
Jonathan Austin 0:bc2961fa1ef0 855 * only for a peer that is bonded and disconnected.
Jonathan Austin 0:bc2961fa1ef0 856 * @note Updated address is reflected only after DM_EVT_DEVICE_CONTEXT_STORED is notified to the
Jonathan Austin 0:bc2961fa1ef0 857 * application for this bonded device instance. In order to avoid abnormal behaviour, it is
Jonathan Austin 0:bc2961fa1ef0 858 * recommended to not invite/initiate connections on the updated address unless this event
Jonathan Austin 0:bc2961fa1ef0 859 * has been notified.
Jonathan Austin 0:bc2961fa1ef0 860 */
Jonathan Austin 0:bc2961fa1ef0 861 ret_code_t dm_peer_addr_set(dm_handle_t const * p_handle,
Jonathan Austin 0:bc2961fa1ef0 862 ble_gap_addr_t const * p_addr);
Jonathan Austin 0:bc2961fa1ef0 863
Jonathan Austin 0:bc2961fa1ef0 864 /**
Jonathan Austin 0:bc2961fa1ef0 865 * @brief Function for initializing Device Manager handle.
Jonathan Austin 0:bc2961fa1ef0 866 *
Jonathan Austin 0:bc2961fa1ef0 867 * @param[in] p_handle Device Manager handle to be initialized.
Jonathan Austin 0:bc2961fa1ef0 868 *
Jonathan Austin 0:bc2961fa1ef0 869 * @retval NRF_SUCCESS On success.
Jonathan Austin 0:bc2961fa1ef0 870 * @retval NRF_ERROR_NULL If p_handle is NULL.
Jonathan Austin 0:bc2961fa1ef0 871 *
Jonathan Austin 0:bc2961fa1ef0 872 * @note This routine is permitted before initialization of the module.
Jonathan Austin 0:bc2961fa1ef0 873 */
Jonathan Austin 0:bc2961fa1ef0 874 ret_code_t dm_handle_initialize(dm_handle_t * p_handle);
Jonathan Austin 0:bc2961fa1ef0 875
Jonathan Austin 0:bc2961fa1ef0 876 /**
Jonathan Austin 0:bc2961fa1ef0 877 * @brief Function for getting distributed keys for a device.
Jonathan Austin 0:bc2961fa1ef0 878 *
Jonathan Austin 0:bc2961fa1ef0 879 * @param[in] p_handle Device Manager handle identifying the peer.
Jonathan Austin 0:bc2961fa1ef0 880 * @param[out] p_key_dist Pointer to distributed keys.
Jonathan Austin 0:bc2961fa1ef0 881 *
Jonathan Austin 0:bc2961fa1ef0 882 * @retval NRF_SUCCESS On success, else an error code indicating reason for failure.
Jonathan Austin 0:bc2961fa1ef0 883 * @retval NRF_ERROR_INVALID_STATE If the API is called without module initialization and/or
Jonathan Austin 0:bc2961fa1ef0 884 * application registration.
Jonathan Austin 0:bc2961fa1ef0 885 * @retval NRF_ERROR_NULL If the p_handle and/or p_key_dist pointer is NULL.
Jonathan Austin 0:bc2961fa1ef0 886 * @retval NRF_ERROR_INVALID_ADDR If the peer is not identified by the handle provided by the application.
Jonathan Austin 0:bc2961fa1ef0 887 */
Jonathan Austin 0:bc2961fa1ef0 888 ret_code_t dm_distributed_keys_get(dm_handle_t const * p_handle,
Jonathan Austin 0:bc2961fa1ef0 889 dm_sec_keyset_t * p_key_dist);
Jonathan Austin 0:bc2961fa1ef0 890
Jonathan Austin 0:bc2961fa1ef0 891 /**
Jonathan Austin 0:bc2961fa1ef0 892 * @brief Function for getting the corresponding dm_handle_t based on the connection handle.
Jonathan Austin 0:bc2961fa1ef0 893 *
Jonathan Austin 0:bc2961fa1ef0 894 * @param[in] conn_handle Connection handle as provided by the SoftDevice.
Jonathan Austin 0:bc2961fa1ef0 895 * @param[in,out] p_handle Pointer to the p_handle containg the application instance for the
Jonathan Austin 0:bc2961fa1ef0 896 * registered application. If the application instance is valid then
Jonathan Austin 0:bc2961fa1ef0 897 * the p_handle will be filled with requested data.
Jonathan Austin 0:bc2961fa1ef0 898 *
Jonathan Austin 0:bc2961fa1ef0 899 * @retval NRF_SUCCESS On success, else an error code indicating reason for failure.
Jonathan Austin 0:bc2961fa1ef0 900 * @retval NRF_ERROR_NULL If the p_handle pointer is NULL.
Jonathan Austin 0:bc2961fa1ef0 901 * @retval NRF_ERROR_NOT_FOUND If no p_handle is found for the provided connection handle.
Jonathan Austin 0:bc2961fa1ef0 902 */
Jonathan Austin 0:bc2961fa1ef0 903 ret_code_t dm_handle_get(uint16_t conn_handle, dm_handle_t * p_handle);
Jonathan Austin 0:bc2961fa1ef0 904
Jonathan Austin 0:bc2961fa1ef0 905 /** @} */
Jonathan Austin 0:bc2961fa1ef0 906 /** @} */
Jonathan Austin 0:bc2961fa1ef0 907 /** @} */
Jonathan Austin 0:bc2961fa1ef0 908 #endif // DEVICE_MANAGER_H__
Jonathan Austin 0:bc2961fa1ef0 909