Patched version of nrf51822 FOTA compatible driver, with GPTIO disabled, as it clashed with the mbed definitions...

Fork of nRF51822 by Nordic Semiconductor

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers ble_gap.h Source File

ble_gap.h

00001 /* Copyright (c) 2011 Nordic Semiconductor. All Rights Reserved.
00002  *
00003  * The information contained herein is confidential property of Nordic Semiconductor. The use,
00004  * copying, transfer or disclosure of such information is prohibited except by express written
00005  * agreement with Nordic Semiconductor.
00006  *
00007  */
00008 /**
00009   @addtogroup BLE_GAP Generic Access Profile (GAP)
00010   @{
00011   @brief Definitions and prototypes for the GAP interface.
00012  */
00013 
00014 #ifndef BLE_GAP_H__
00015 #define BLE_GAP_H__
00016 
00017 #include "ble_types.h"
00018 #include "ble_ranges.h"
00019 #include "nrf_svc.h"
00020 
00021 
00022 /**@addtogroup BLE_GAP_ENUMERATIONS Enumerations 
00023  * @{ */
00024 
00025 /**@brief GAP API SVC numbers.
00026  */
00027 enum BLE_GAP_SVCS
00028 {
00029   SD_BLE_GAP_ADDRESS_SET  = BLE_GAP_SVC_BASE,  /**< Set own Bluetooth Address. */
00030   SD_BLE_GAP_ADDRESS_GET,                      /**< Get own Bluetooth Address. */
00031   SD_BLE_GAP_ADV_DATA_SET,                     /**< Set Advertisement Data. */
00032   SD_BLE_GAP_ADV_START,                        /**< Start Advertising. */
00033   SD_BLE_GAP_ADV_STOP,                         /**< Stop Advertising. */
00034   SD_BLE_GAP_CONN_PARAM_UPDATE,                /**< Connection Parameter Update. */
00035   SD_BLE_GAP_DISCONNECT,                       /**< Disconnect. */
00036   SD_BLE_GAP_TX_POWER_SET,                     /**< Set TX Power. */
00037   SD_BLE_GAP_APPEARANCE_SET,                   /**< Set Appearance. */
00038   SD_BLE_GAP_APPEARANCE_GET,                   /**< Get Appearance. */
00039   SD_BLE_GAP_PPCP_SET,                         /**< Set PPCP. */
00040   SD_BLE_GAP_PPCP_GET,                         /**< Get PPCP. */
00041   SD_BLE_GAP_DEVICE_NAME_SET,                  /**< Set Device Name. */
00042   SD_BLE_GAP_DEVICE_NAME_GET,                  /**< Get Device Name. */
00043   SD_BLE_GAP_AUTHENTICATE,                     /**< Initiate Pairing/Bonding. */
00044   SD_BLE_GAP_SEC_PARAMS_REPLY,                 /**< Reply with Security Parameters. */
00045   SD_BLE_GAP_AUTH_KEY_REPLY,                   /**< Reply with an authentication key. */
00046   SD_BLE_GAP_SEC_INFO_REPLY,                   /**< Reply with Security Information. */
00047   SD_BLE_GAP_CONN_SEC_GET,                     /**< Obtain connection security level. */
00048   SD_BLE_GAP_RSSI_START,                       /**< Start reporting of changes in RSSI. */ 
00049   SD_BLE_GAP_RSSI_STOP,                        /**< Stop reporting of changes in RSSI. */ 
00050 };
00051 /**@} */
00052 
00053 /**@addtogroup BLE_GAP_DEFINES Defines
00054  * @{ */
00055 
00056 /**@defgroup BLE_ERRORS_GAP SVC return values specific to GAP
00057  * @{ */
00058 #define BLE_ERROR_GAP_UUID_LIST_MISMATCH            (NRF_GAP_ERR_BASE + 0x000)  /**< UUID list does not contain an integral number of UUIDs. */
00059 #define BLE_ERROR_GAP_DISCOVERABLE_WITH_WHITELIST   (NRF_GAP_ERR_BASE + 0x001)  /**< Use of Whitelist not permitted with discoverable advertising. */
00060 #define BLE_ERROR_GAP_INVALID_BLE_ADDR              (NRF_GAP_ERR_BASE + 0x002)  /**< The upper two bits of the address do not correspond to the specified address type. */
00061 /**@} */
00062 
00063 
00064 /**@defgroup BLE_GAP_ROLES GAP Roles
00065  * @note Not explicitly used in peripheral API, but will be relevant for central API.
00066  * @{ */
00067 #define BLE_GAP_ROLE_INVALID     0x0            /**< Invalid Role. */
00068 #define BLE_GAP_ROLE_PERIPH      0x1            /**< Peripheral Role. */
00069 #define BLE_GAP_ROLE_CENTRAL     0x2            /**< Central Role. */
00070 /**@} */
00071 
00072 
00073 /**@defgroup BLE_GAP_TIMEOUT_SOURCES GAP Timeout sources
00074  * @{ */
00075 #define BLE_GAP_TIMEOUT_SRC_ADVERTISEMENT              0x00 /**< Advertisement timeout. */
00076 #define BLE_GAP_TIMEOUT_SRC_SECURITY_REQUEST           0x01 /**< Security request timeout. */
00077 /**@} */
00078 
00079 
00080 /**@defgroup BLE_GAP_ADDR_TYPES GAP Address types
00081  * @{ */
00082 #define BLE_GAP_ADDR_TYPE_PUBLIC                        0x00 /**< Public address. */
00083 #define BLE_GAP_ADDR_TYPE_RANDOM_STATIC                 0x01 /**< Random Static address. */
00084 #define BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_RESOLVABLE     0x02 /**< Private Resolvable address. */
00085 #define BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_NON_RESOLVABLE 0x03 /**< Private Non-Resolvable address. */
00086 /**@} */
00087 
00088 /**@defgroup BLE_GAP_ADDR_CYCLE_MODES GAP Address cycle modes
00089  * @{ */
00090 #define BLE_GAP_ADDR_CYCLE_MODE_NONE      0x00 /**< Set addresses directly, no automatic address cycling. */
00091 #define BLE_GAP_ADDR_CYCLE_MODE_AUTO      0x01 /**< Automatically generate and update private addresses. */
00092 /** @} */
00093 
00094 /**@brief The default interval in seconds at which a private address is refreshed when address cycle mode is @ref BLE_GAP_ADDR_CYCLE_MODE_AUTO.  */
00095 #define BLE_GAP_DEFAULT_PRIVATE_ADDR_CYCLE_INTERVAL_S (60 * 15)
00096 
00097 /** @brief BLE address length. */
00098 #define BLE_GAP_ADDR_LEN            6
00099 
00100 
00101 /**@defgroup BLE_GAP_AD_TYPE_DEFINITIONS GAP Advertising and Scan Response Data format
00102  * @note Found at https://www.bluetooth.org/Technical/AssignedNumbers/generic_access_profile.htm
00103  * @{ */
00104 #define BLE_GAP_AD_TYPE_FLAGS                               0x01 /**< Flags for discoverability. */
00105 #define BLE_GAP_AD_TYPE_16BIT_SERVICE_UUID_MORE_AVAILABLE   0x02 /**< Partial list of 16 bit service UUIDs. */
00106 #define BLE_GAP_AD_TYPE_16BIT_SERVICE_UUID_COMPLETE         0x03 /**< Complete list of 16 bit service UUIDs. */
00107 #define BLE_GAP_AD_TYPE_32BIT_SERVICE_UUID_MORE_AVAILABLE   0x04 /**< Partial list of 32 bit service UUIDs. */
00108 #define BLE_GAP_AD_TYPE_32BIT_SERVICE_UUID_COMPLETE         0x05 /**< Complete list of 32 bit service UUIDs. */
00109 #define BLE_GAP_AD_TYPE_128BIT_SERVICE_UUID_MORE_AVAILABLE  0x06 /**< Partial list of 128 bit service UUIDs. */
00110 #define BLE_GAP_AD_TYPE_128BIT_SERVICE_UUID_COMPLETE        0x07 /**< Complete list of 128 bit service UUIDs. */
00111 #define BLE_GAP_AD_TYPE_SHORT_LOCAL_NAME                    0x08 /**< Short local device name. */
00112 #define BLE_GAP_AD_TYPE_COMPLETE_LOCAL_NAME                 0x09 /**< Complete local device name. */
00113 #define BLE_GAP_AD_TYPE_TX_POWER_LEVEL                      0x0A /**< Transmit power level. */
00114 #define BLE_GAP_AD_TYPE_CLASS_OF_DEVICE                     0x0D /**< Class of device. */
00115 #define BLE_GAP_AD_TYPE_SIMPLE_PAIRING_HASH_C               0x0E /**< Simple Pairing Hash C. */
00116 #define BLE_GAP_AD_TYPE_SIMPLE_PAIRING_RANDOMIZER_R         0x0F /**< Simple Pairing Randomizer R. */
00117 #define BLE_GAP_AD_TYPE_SECURITY_MANAGER_TK_VALUE           0x10 /**< Security Manager TK Value. */
00118 #define BLE_GAP_AD_TYPE_SECURITY_MANAGER_OOB_FLAGS          0x11 /**< Security Manager Out Of Band Flags. */
00119 #define BLE_GAP_AD_TYPE_SLAVE_CONNECTION_INTERVAL_RANGE     0x12 /**< Slave Connection Interval Range. */
00120 #define BLE_GAP_AD_TYPE_SOLICITED_SERVICE_UUIDS_16BIT       0x14 /**< List of 16-bit Service Solicitation UUIDs. */
00121 #define BLE_GAP_AD_TYPE_SOLICITED_SERVICE_UUIDS_128BIT      0x15 /**< List of 128-bit Service Solicitation UUIDs. */
00122 #define BLE_GAP_AD_TYPE_SERVICE_DATA                        0x16 /**< Service Data - 16-bit UUID. */
00123 #define BLE_GAP_AD_TYPE_PUBLIC_TARGET_ADDRESS               0x17 /**< Public Target Address. */
00124 #define BLE_GAP_AD_TYPE_RANDOM_TARGET_ADDRESS               0x18 /**< Random Target Address. */
00125 #define BLE_GAP_AD_TYPE_APPEARANCE                          0x19 /**< Appearance. */
00126 #define BLE_GAP_AD_TYPE_ADVERTISING_INTERVAL                0x1A /**< Advertising Interval. */ 
00127 #define BLE_GAP_AD_TYPE_LE_BLUETOOTH_DEVICE_ADDRESS         0x1B /**< LE Bluetooth Device Address. */
00128 #define BLE_GAP_AD_TYPE_LE_ROLE                             0x1C /**< LE Role. */
00129 #define BLE_GAP_AD_TYPE_SIMPLE_PAIRING_HASH_C256            0x1D /**< Simple Pairing Hash C-256. */
00130 #define BLE_GAP_AD_TYPE_SIMPLE_PAIRING_RANDOMIZER_R256      0x1E /**< Simple Pairing Randomizer R-256. */
00131 #define BLE_GAP_AD_TYPE_SERVICE_DATA_32BIT_UUID             0x20 /**< Service Data - 32-bit UUID. */
00132 #define BLE_GAP_AD_TYPE_SERVICE_DATA_128BIT_UUID            0x21 /**< Service Data - 128-bit UUID. */
00133 #define BLE_GAP_AD_TYPE_3D_INFORMATION_DATA                 0x3D /**< 3D Information Data. */
00134 #define BLE_GAP_AD_TYPE_MANUFACTURER_SPECIFIC_DATA          0xFF /**< Manufacturer Specific Data. */
00135 /**@} */
00136 
00137 
00138 /**@defgroup BLE_GAP_ADV_FLAGS GAP Advertisement Flags
00139  * @{ */
00140 #define BLE_GAP_ADV_FLAG_LE_LIMITED_DISC_MODE         (0x01)   /**< LE Limited Discoverable Mode. */
00141 #define BLE_GAP_ADV_FLAG_LE_GENERAL_DISC_MODE         (0x02)   /**< LE General Discoverable Mode. */
00142 #define BLE_GAP_ADV_FLAG_BR_EDR_NOT_SUPPORTED         (0x04)   /**< BR/EDR not supported. */
00143 #define BLE_GAP_ADV_FLAG_LE_BR_EDR_CONTROLLER         (0x08)   /**< Simultaneous LE and BR/EDR, Controller. */
00144 #define BLE_GAP_ADV_FLAG_LE_BR_EDR_HOST               (0x10)   /**< Simultaneous LE and BR/EDR, Host. */
00145 #define BLE_GAP_ADV_FLAGS_LE_ONLY_LIMITED_DISC_MODE   (BLE_GAP_ADV_FLAG_LE_LIMITED_DISC_MODE | BLE_GAP_ADV_FLAG_BR_EDR_NOT_SUPPORTED)   /**< LE Limited Discoverable Mode, BR/EDR not supported. */
00146 #define BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE   (BLE_GAP_ADV_FLAG_LE_GENERAL_DISC_MODE | BLE_GAP_ADV_FLAG_BR_EDR_NOT_SUPPORTED)   /**< LE General Discoverable Mode, BR/EDR not supported. */
00147 /**@} */
00148 
00149 
00150 /**@defgroup BLE_GAP_ADV_INTERVALS GAP Advertising interval max and min
00151  * @{ */
00152 #define BLE_GAP_ADV_INTERVAL_MIN        0x0020 /**< Minimum Advertising interval in 625 us units, i.e. 20 ms. */
00153 #define BLE_GAP_ADV_NONCON_INTERVAL_MIN 0x00A0 /**< Minimum Advertising interval in 625 us units for non connectable mode, i.e. 100 ms. */
00154 #define BLE_GAP_ADV_INTERVAL_MAX        0x4000 /**< Maximum Advertising interval in 625 us units, i.e. 10.24 s. */
00155  /**@}  */
00156 
00157 
00158 /**@brief Maximum size of advertising data in octets. */
00159 #define  BLE_GAP_ADV_MAX_SIZE       31
00160 
00161 
00162 /**@defgroup BLE_GAP_ADV_TYPES GAP Advertising types
00163  * @{ */
00164 #define BLE_GAP_ADV_TYPE_ADV_IND          0x00   /**< Connectable undirected. */
00165 #define BLE_GAP_ADV_TYPE_ADV_DIRECT_IND   0x01   /**< Connectable directed. */
00166 #define BLE_GAP_ADV_TYPE_ADV_SCAN_IND     0x02   /**< Scannable undirected. */
00167 #define BLE_GAP_ADV_TYPE_ADV_NONCONN_IND  0x03   /**< Non connectable undirected. */
00168 /**@} */
00169 
00170 
00171 /**@defgroup BLE_GAP_ADV_FILTER_POLICIES GAP Advertising filter policies
00172  * @{ */
00173 #define BLE_GAP_ADV_FP_ANY                0x00   /**< Allow scan requests and connect requests from any device. */
00174 #define BLE_GAP_ADV_FP_FILTER_SCANREQ     0x01   /**< Filter scan requests with whitelist. */
00175 #define BLE_GAP_ADV_FP_FILTER_CONNREQ     0x02   /**< Filter connect requests with whitelist. */
00176 #define BLE_GAP_ADV_FP_FILTER_BOTH        0x03   /**< Filter both scan and connect requests with whitelist. */
00177 /**@} */
00178 
00179 
00180 /**@defgroup BLE_GAP_ADV_TIMEOUT_VALUES GAP Advertising timeout values
00181  * @{ */
00182 #define BLE_GAP_ADV_TIMEOUT_LIMITED_MAX      180 /**< Maximum advertising time in limited discoverable mode (TGAP(lim_adv_timeout) = 180s in spec (Addendum 2)). */
00183 #define BLE_GAP_ADV_TIMEOUT_GENERAL_UNLIMITED  0 /**< Unlimited advertising in general discoverable mode. */
00184 /**@} */
00185 
00186 
00187 /**@defgroup BLE_GAP_DISC_MODES GAP Discovery modes
00188  * @{ */
00189 #define BLE_GAP_DISC_MODE_NOT_DISCOVERABLE  0x00   /**< Not discoverable discovery Mode. */
00190 #define BLE_GAP_DISC_MODE_LIMITED           0x01   /**< Limited Discovery Mode. */
00191 #define BLE_GAP_DISC_MODE_GENERAL           0x02   /**< General Discovery Mode. */
00192 /**@} */
00193 
00194 /**@defgroup BLE_GAP_IO_CAPS GAP IO Capabilities
00195  * @{ */
00196 #define BLE_GAP_IO_CAPS_DISPLAY_ONLY      0x00   /**< Display Only. */
00197 #define BLE_GAP_IO_CAPS_DISPLAY_YESNO     0x01   /**< Display and Yes/No entry. */
00198 #define BLE_GAP_IO_CAPS_KEYBOARD_ONLY     0x02   /**< Keyboard Only. */
00199 #define BLE_GAP_IO_CAPS_NONE              0x03   /**< No I/O capabilities. */
00200 #define BLE_GAP_IO_CAPS_KEYBOARD_DISPLAY  0x04   /**< Keyboard and Display. */
00201 /**@} */
00202 
00203 
00204 /**@defgroup BLE_GAP_AUTH_KEY_TYPES GAP Authentication Key Types
00205  * @{ */
00206 #define BLE_GAP_AUTH_KEY_TYPE_NONE        0x00   /**< No key (may be used to reject). */
00207 #define BLE_GAP_AUTH_KEY_TYPE_PASSKEY     0x01   /**< 6-digit Passkey. */
00208 #define BLE_GAP_AUTH_KEY_TYPE_OOB         0x02   /**< Out Of Band data. */
00209 /**@} */
00210 
00211 /**@defgroup BLE_GAP_SEC_STATUS GAP Security status
00212  * @{ */
00213 #define BLE_GAP_SEC_STATUS_SUCCESS                0x00  /**< Successful parameters. */
00214 #define BLE_GAP_SEC_STATUS_TIMEOUT                0x01  /**< Procedure timed out. */
00215 #define BLE_GAP_SEC_STATUS_PDU_INVALID            0x02  /**< Invalid PDU received. */
00216 #define BLE_GAP_SEC_STATUS_PASSKEY_ENTRY_FAILED   0x81  /**< Passkey entry failed (user cancelled or other). */
00217 #define BLE_GAP_SEC_STATUS_OOB_NOT_AVAILABLE      0x82  /**< Out of Band Key not available. */
00218 #define BLE_GAP_SEC_STATUS_AUTH_REQ               0x83  /**< Authentication requirements not met. */
00219 #define BLE_GAP_SEC_STATUS_CONFIRM_VALUE          0x84  /**< Confirm value failed. */
00220 #define BLE_GAP_SEC_STATUS_PAIRING_NOT_SUPP       0x85  /**< Pairing not supported.  */
00221 #define BLE_GAP_SEC_STATUS_ENC_KEY_SIZE           0x86  /**< Encryption key size. */
00222 #define BLE_GAP_SEC_STATUS_SMP_CMD_UNSUPPORTED    0x87  /**< Unsupported SMP command. */
00223 #define BLE_GAP_SEC_STATUS_UNSPECIFIED            0x88  /**< Unspecified reason. */
00224 #define BLE_GAP_SEC_STATUS_REPEATED_ATTEMPTS      0x89  /**< Too little time elapsed since last attempt. */
00225 #define BLE_GAP_SEC_STATUS_INVALID_PARAMS         0x8A  /**< Invalid parameters. */
00226 /**@} */
00227 
00228 /**@defgroup BLE_GAP_SEC_STATUS_SOURCES GAP Security status sources
00229  * @{ */
00230 #define BLE_GAP_SEC_STATUS_SOURCE_LOCAL           0x00  /**< Local failure. */
00231 #define BLE_GAP_SEC_STATUS_SOURCE_REMOTE          0x01  /**< Remote failure. */
00232 /**@} */
00233 
00234 /**@defgroup BLE_GAP_CP_LIMITS GAP Connection Parameters Limits
00235  * @{ */
00236 #define BLE_GAP_CP_MIN_CONN_INTVL_NONE           0xFFFF  /**< No new minimum connction interval specified in connect parameters. */
00237 #define BLE_GAP_CP_MIN_CONN_INTVL_MIN            0x0006  /**< Lowest mimimum connection interval permitted, in units of 1.25 ms, i.e. 7.5 ms. */
00238 #define BLE_GAP_CP_MIN_CONN_INTVL_MAX            0x0C80  /**< Highest minimum connection interval permitted, in units of 1.25 ms, i.e. 4 s. */
00239 #define BLE_GAP_CP_MAX_CONN_INTVL_NONE           0xFFFF  /**< No new maximum connction interval specified in connect parameters. */
00240 #define BLE_GAP_CP_MAX_CONN_INTVL_MIN            0x0006  /**< Lowest maximum connection interval permitted, in units of 1.25 ms, i.e. 7.5 ms. */
00241 #define BLE_GAP_CP_MAX_CONN_INTVL_MAX            0x0C80  /**< Highest maximum connection interval permitted, in units of 1.25 ms, i.e. 4 s. */
00242 #define BLE_GAP_CP_SLAVE_LATENCY_MAX             0x03E8  /**< Highest slave latency permitted, in connection events. */
00243 #define BLE_GAP_CP_CONN_SUP_TIMEOUT_NONE         0xFFFF  /**< No new supervision timeout specified in connect parameters. */
00244 #define BLE_GAP_CP_CONN_SUP_TIMEOUT_MIN          0x000A  /**< Lowest supervision timeout permitted, in units of 10 ms, i.e. 100 ms. */
00245 #define BLE_GAP_CP_CONN_SUP_TIMEOUT_MAX          0x0C80  /**< Highest supervision timeout permitted, in units of 10 ms, i.e. 32 s. */
00246 /**@} */
00247 
00248 
00249 /**@brief GAP device name maximum length. */
00250 #define BLE_GAP_DEVNAME_MAX_LEN           31
00251 
00252 
00253 /**@defgroup BLE_GAP_CONN_SEC_MODE_SET_MACROS GAP attribute security requirement setters
00254  *
00255  * See @ref ble_gap_conn_sec_mode_t.
00256  * @{ */
00257 /**@brief Set sec_mode pointed to by ptr to have no access rights.*/
00258 #define BLE_GAP_CONN_SEC_MODE_SET_NO_ACCESS(ptr)         do {(ptr)->sm = 0; (ptr)->lv = 0;} while(0)
00259 /**@brief Set sec_mode pointed to by ptr to require no protection, open link.*/
00260 #define BLE_GAP_CONN_SEC_MODE_SET_OPEN(ptr)              do {(ptr)->sm = 1; (ptr)->lv = 1;} while(0)
00261 /**@brief Set sec_mode pointed to by ptr to require encryption, but no MITM protection.*/
00262 #define BLE_GAP_CONN_SEC_MODE_SET_ENC_NO_MITM(ptr)       do {(ptr)->sm = 1; (ptr)->lv = 2;} while(0)
00263 /**@brief Set sec_mode pointed to by ptr to require encryption and MITM protection.*/
00264 #define BLE_GAP_CONN_SEC_MODE_SET_ENC_WITH_MITM(ptr)     do {(ptr)->sm = 1; (ptr)->lv = 3;} while(0)
00265 /**@brief Set sec_mode pointed to by ptr to require signing or encryption, no MITM protection needed.*/
00266 #define BLE_GAP_CONN_SEC_MODE_SET_SIGNED_NO_MITM(ptr)    do {(ptr)->sm = 2; (ptr)->lv = 1;} while(0)
00267 /**@brief Set sec_mode pointed to by ptr to require signing or encryption with MITM protection.*/
00268 #define BLE_GAP_CONN_SEC_MODE_SET_SIGNED_WITH_MITM(ptr)  do {(ptr)->sm = 2; (ptr)->lv = 2;} while(0)
00269 /**@} */
00270 
00271 
00272 /**@brief GAP Security Key Length. */
00273 #define BLE_GAP_SEC_KEY_LEN 16
00274 
00275 /**@brief GAP Passkey Length. */
00276 #define BLE_GAP_PASSKEY_LEN 6
00277 
00278 /**@brief Maximum amount of addresses in a whitelist. */
00279 #define BLE_GAP_WHITELIST_ADDR_MAX_COUNT (8)
00280 
00281 /**@brief Maximum amount of IRKs in a whitelist.
00282  * @note  The number of IRKs is limited to 8, even if the hardware supports more.
00283  */
00284 #define BLE_GAP_WHITELIST_IRK_MAX_COUNT (8)
00285 
00286 /**@defgroup GAP_SEC_MODES GAP Security Modes
00287  * @{ */
00288 #define BLE_GAP_SEC_MODE 0x00 /**< No key (may be used to reject). */
00289 /**@} */
00290 
00291 /**@} */
00292 
00293 /**@addtogroup BLE_GAP_STRUCTURES Structures
00294  * @{ */
00295 
00296 /**@brief Bluetooth Low Energy address. */
00297 typedef struct
00298 {
00299   uint8_t addr_type;                    /**< See @ref BLE_GAP_ADDR_TYPES. */
00300   uint8_t addr[BLE_GAP_ADDR_LEN];       /**< 48-bit address, LSB format. */
00301 } ble_gap_addr_t;
00302 
00303 
00304 /**@brief GAP connection parameters.
00305  *
00306  * @note  When ble_conn_params_t is received in an event, both min_conn_interval and
00307  *        max_conn_interval will be equal to the connection interval set by the central.
00308  */
00309 typedef struct
00310 {
00311   uint16_t min_conn_interval;         /**< Minimum Connection Interval in 1.25 ms units, see @ref BLE_GAP_CP_LIMITS.*/
00312   uint16_t max_conn_interval;         /**< Maximum Connection Interval in 1.25 ms units, see @ref BLE_GAP_CP_LIMITS.*/
00313   uint16_t slave_latency;             /**< Slave Latency in number of connection events, see @ref BLE_GAP_CP_LIMITS.*/
00314   uint16_t conn_sup_timeout;          /**< Connection Supervision Timeout in 10 ms units, see @ref BLE_GAP_CP_LIMITS.*/
00315 } ble_gap_conn_params_t;
00316 
00317 
00318 /**@brief GAP link requirements.
00319  *
00320  * See Bluetooth Core specification, Volume 3 Part C 10.2 for details.
00321  *
00322  * Security Mode 0 Level 0: No access permissions at all (this level is not defined by the Bluetooth Core specification).\n
00323  * Security Mode 1 Level 1: No security is needed (aka open link).\n
00324  * Security Mode 1 Level 2: Encrypted link required, MITM protection not necessary.\n
00325  * Security Mode 1 Level 3: MITM protected encrypted link required.\n
00326  * Security Mode 2 Level 1: Signing or encryption required, MITM protection not necessary.\n
00327  * Security Mode 2 Level 2: MITM protected signing required, unless link is MITM protected encrypted.\n
00328  */
00329 typedef struct
00330 {
00331   uint8_t sm : 4;                     /**< Security Mode (1 or 2), 0 for no permissions at all. */
00332   uint8_t lv : 4;                     /**< Level (1, 2 or 3), 0 for no permissions at all. */
00333 
00334 } ble_gap_conn_sec_mode_t;
00335 
00336 
00337 /**@brief GAP connection security status.*/
00338 typedef struct
00339 {
00340   ble_gap_conn_sec_mode_t sec_mode;           /**< Currently active security mode for this connection.*/
00341   uint8_t                 encr_key_size;      /**< Length of currently active encryption key, 7 to 16 octets (only applicable for bonding procedures). */
00342 } ble_gap_conn_sec_t;
00343 
00344 
00345 /**@brief Identity Resolving Key. */
00346 typedef struct
00347 {
00348   uint8_t irk[BLE_GAP_SEC_KEY_LEN];   /**< Array containing IRK. */
00349 } ble_gap_irk_t;
00350 
00351 
00352 /**@brief Whitelist structure. */
00353 typedef struct
00354 {
00355   ble_gap_addr_t   ** pp_addrs;        /**< Pointer to array of device address pointers, pointing to addresses to be used in whitelist. NULL if none are given. */
00356   uint8_t             addr_count;      /**< Count of device addresses in array, up to @ref BLE_GAP_WHITELIST_ADDR_MAX_COUNT. */
00357   ble_gap_irk_t    ** pp_irks;         /**< Pointer to array of Identity Resolving Key (IRK) pointers, each pointing to an IRK in the whitelist. NULL if none are given. */
00358   uint8_t             irk_count;       /**< Count of IRKs in array, up to @ref BLE_GAP_WHITELIST_IRK_MAX_COUNT. */
00359 } ble_gap_whitelist_t;
00360 
00361 
00362 /**@brief GAP advertising parameters.*/
00363 typedef struct
00364 {
00365   uint8_t               type;                 /**< See @ref BLE_GAP_ADV_TYPES. */
00366   ble_gap_addr_t*       p_peer_addr;          /**< For BLE_GAP_CONN_MODE_DIRECTED mode only, known peer address. */
00367   uint8_t               fp;                   /**< Filter Policy, see @ref BLE_GAP_ADV_FILTER_POLICIES. */
00368   ble_gap_whitelist_t * p_whitelist;          /**< Pointer to whitelist, NULL if none is given. */
00369   uint16_t              interval;             /**< Advertising interval between 0x0020 and 0x4000 in 0.625 ms units (20ms to 10.24s), see @ref BLE_GAP_ADV_INTERVALS.
00370                                                    - If type equals @ref BLE_GAP_ADV_TYPE_ADV_DIRECT_IND, this parameter must be set to 0 for high duty cycle directed advertising.
00371                                                    - If type equals @ref BLE_GAP_ADV_TYPE_ADV_DIRECT_IND, set @ref BLE_GAP_ADV_INTERVAL_MIN <= interval <= @ref BLE_GAP_ADV_INTERVAL_MAX for low duty cycle advertising */
00372   uint16_t              timeout;              /**< Advertising timeout between 0x0001 and 0x3FFF in seconds, 0x0000 disables timeout. See also @ref BLE_GAP_ADV_TIMEOUT_VALUES. If type equals @ref BLE_GAP_ADV_TYPE_ADV_DIRECT_IND, this parameter must be set to 0 for High duty cycle directed advertising. */
00373 } ble_gap_adv_params_t;
00374 
00375 
00376 /**@brief GAP scanning parameters. */
00377 typedef struct
00378 {
00379   uint8_t    filter;                    /**< Filter based on discovery mode, see @ref BLE_GAP_DISC_MODES. */
00380   uint8_t    active    : 1;             /**< If 1, perform active scanning (scan requests). */
00381   uint8_t    selective : 1;             /**< If 1, ignore unknown devices (non whitelisted). */
00382   uint16_t   interval;                  /**< Scan interval between 0x0020 and 0x4000 in 0.625ms units (20ms to 10.24s). */
00383   uint16_t   window;                    /**< Scan window between 0x0004 and 0x4000 in 0.625ms units (2.5ms to 10.24s). */
00384   uint16_t   timeout;                   /**< Scan timeout between 0x0001 and 0x3FFF in seconds, 0x0000 disables timeout. */
00385 } ble_gap_scan_params_t;
00386 
00387 
00388 /**@brief GAP security parameters. */
00389 typedef struct
00390 {
00391   uint16_t   timeout;                   /**< Timeout for SMP transactions or Security Request in seconds, see @ref sd_ble_gap_authenticate and @ref sd_ble_gap_sec_params_reply for more information. */
00392   uint8_t    bond    : 1;               /**< Perform bonding. */
00393   uint8_t    mitm    : 1;               /**< Man In The Middle protection required. */
00394   uint8_t    io_caps : 3;               /**< IO capabilities, see @ref BLE_GAP_IO_CAPS. */
00395   uint8_t    oob     : 1;               /**< Out Of Band data available. */
00396   uint8_t    min_key_size;              /**< Minimum encryption key size in octets between 7 and 16. */
00397   uint8_t    max_key_size;              /**< Maximum encryption key size in octets between min_key_size and 16. */
00398 } ble_gap_sec_params_t;
00399 
00400 
00401 /**@brief GAP Encryption Information. */
00402 typedef struct
00403 {
00404   uint16_t  div;                        /**< Encryption Diversifier. */
00405   uint8_t   ltk[BLE_GAP_SEC_KEY_LEN];   /**< Long Term Key. */
00406   uint8_t   auth : 1;                   /**< Authenticated Key. */
00407   uint8_t   ltk_len : 7;                /**< LTK length in octets. */
00408 } ble_gap_enc_info_t;
00409 
00410 
00411 /**@brief GAP Master Identification. */
00412 typedef struct
00413 {
00414   uint16_t  ediv;                       /**< Encrypted Diversifier. */
00415   uint8_t   rand[8];                    /**< Random Number. */
00416 } ble_gap_master_id_t;
00417 
00418 
00419 /**@brief GAP Identity Information. */
00420 typedef struct
00421 {
00422   ble_gap_addr_t  addr;                       /**< Bluetooth address to which this key applies. */
00423   uint8_t         irk[BLE_GAP_SEC_KEY_LEN];   /**< Identity Resolution Key. */
00424 } ble_gap_id_info_t;
00425 
00426 
00427 /**@brief GAP Signing Information. */
00428 typedef struct
00429 {
00430   uint8_t   csrk[BLE_GAP_SEC_KEY_LEN]; /* Connection Signature Resolving Key. */
00431 } ble_gap_sign_info_t;
00432 
00433 
00434 /**@brief GAP Event IDs.
00435  * Those IDs uniquely identify an event coming from the stack to the application.
00436  */
00437 enum BLE_GAP_EVTS
00438 {
00439   BLE_GAP_EVT_CONNECTED  = BLE_GAP_EVT_BASE,    /**< Connection established. */
00440   BLE_GAP_EVT_DISCONNECTED,                     /**< Disconnected from peer. */
00441   BLE_GAP_EVT_CONN_PARAM_UPDATE,                /**< Connection Parameters updated. */
00442   BLE_GAP_EVT_SEC_PARAMS_REQUEST,               /**< Request to provide security parameters. */
00443   BLE_GAP_EVT_SEC_INFO_REQUEST,                 /**< Request to provide security information. */
00444   BLE_GAP_EVT_PASSKEY_DISPLAY,                  /**< Request to display a passkey to the user. */
00445   BLE_GAP_EVT_AUTH_KEY_REQUEST,                 /**< Request to provide an authentication key. */
00446   BLE_GAP_EVT_AUTH_STATUS,                      /**< Authentication procedure completed with status. */
00447   BLE_GAP_EVT_CONN_SEC_UPDATE,                  /**< Connection security updated. */
00448   BLE_GAP_EVT_TIMEOUT,                          /**< Timeout expired. */
00449   BLE_GAP_EVT_RSSI_CHANGED,                     /**< Signal strength measurement report. */
00450 };
00451 
00452 
00453 /**
00454  * @brief GAP Option IDs.
00455  * IDs that uniquely identify a GAP option.
00456  */
00457 enum BLE_GAP_OPTS
00458 {
00459   BLE_GAP_OPT_LOCAL_CONN_LATENCY  = BLE_GAP_OPT_BASE,    /**< Local connection latency. */
00460   BLE_GAP_OPT_PASSKEY,                                   /**< Set passkey to be used during pairing. This option can be used to make the SoftDevice use an application provided passkey instead of generating a random passkey.*/
00461   BLE_GAP_OPT_PRIVACY,                                   /**< Set or get custom IRK or custom private address cycle interval. */
00462 };
00463 /**@} */
00464 
00465 
00466 /**@brief Event data for connected event. */
00467 typedef struct
00468 {
00469   ble_gap_addr_t        peer_addr;              /**< Bluetooth address of the peer device. */
00470   uint8_t               irk_match :1;           /**< If 1, peer device's address resolved using an IRK. */
00471   uint8_t               irk_match_idx  :7;      /**< Index in IRK list where the address was matched. */
00472   ble_gap_conn_params_t conn_params;            /**< GAP Connection Parameters. */
00473 } ble_gap_evt_connected_t;
00474 
00475 
00476 /**@brief Event data for disconnected event. */
00477 typedef struct
00478 {
00479   uint8_t reason;                               /**< HCI error code. */
00480 } ble_gap_evt_disconnected_t;
00481 
00482 
00483 /**@brief Event data for connection parameter update event. */
00484 typedef struct
00485 {
00486   ble_gap_conn_params_t conn_params;            /**<  GAP Connection Parameters. */
00487 } ble_gap_evt_conn_param_update_t;
00488 
00489 
00490 /**@brief Event data for security parameters request event. */
00491 typedef struct
00492 {
00493   ble_gap_sec_params_t peer_params;             /**< Initiator Security Parameters. */
00494 } ble_gap_evt_sec_params_request_t;
00495 
00496 
00497 /**@brief Event data for security info request event. */
00498 typedef struct
00499 {
00500   ble_gap_addr_t peer_addr;                     /**< Bluetooth address of the peer device. */
00501   uint16_t       div;                           /**< Encryption diversifier for LTK lookup. */
00502   uint8_t        enc_info  : 1;                 /**< If 1, Encryption Information required. */
00503   uint8_t        id_info   : 1;                 /**< If 1, Identity Information required. */
00504   uint8_t        sign_info : 1;                 /**< If 1, Signing Information required. */
00505 } ble_gap_evt_sec_info_request_t;
00506 
00507 
00508 /**@brief Event data for passkey display event. */
00509 typedef struct
00510 {
00511   uint8_t passkey[BLE_GAP_PASSKEY_LEN];         /**< 6-digit passkey in ASCII ('0'-'9' digits only). */
00512 } ble_gap_evt_passkey_display_t;
00513 
00514 
00515 /**@brief Event data for authentication key request event. */
00516 typedef struct
00517 {
00518   uint8_t key_type;                             /**< See @ref BLE_GAP_AUTH_KEY_TYPES. */
00519 } ble_gap_evt_auth_key_request_t;
00520 
00521 
00522 /**@brief Security levels supported.
00523  * @note See Bluetooth Specification Version 4.1 Volume 3, Part C, Chapter 10.
00524 */
00525 typedef struct
00526 {
00527   uint8_t lv1 : 1;                              /**< If 1: Level 1 is supported. */
00528   uint8_t lv2 : 1;                              /**< If 1: Level 2 is supported. */
00529   uint8_t lv3 : 1;                              /**< If 1: Level 3 is supported. */
00530 } ble_gap_sec_levels_t;
00531 
00532 
00533 /**@brief Keys that have been exchanged. */
00534 typedef struct
00535 {
00536   uint8_t ltk       : 1;                        /**< Long Term Key. */
00537   uint8_t ediv_rand : 1;                        /**< Encrypted Diversifier and Random value. */
00538   uint8_t irk       : 1;                        /**< Identity Resolving Key. */
00539   uint8_t address   : 1;                        /**< Public or static random address. */
00540   uint8_t csrk      : 1;                        /**< Connection Signature Resolving Key. */
00541 } ble_gap_sec_keys_t;
00542 
00543 
00544 /**@brief Event data for authentication status event. */
00545 typedef struct
00546 {
00547   uint8_t               auth_status;            /**< Authentication status, see @ref BLE_GAP_SEC_STATUS. */
00548   uint8_t               error_src;              /**< On error, source that caused the failure, see @ref BLE_GAP_SEC_STATUS_SOURCES. */
00549   ble_gap_sec_levels_t  sm1_levels;             /**< Levels supported in Security Mode 1. */
00550   ble_gap_sec_levels_t  sm2_levels;             /**< Levels supported in Security Mode 2. */
00551   ble_gap_sec_keys_t    periph_kex;             /**< Bitmap stating which keys were exchanged (distributed) by the peripheral. */
00552   ble_gap_sec_keys_t    central_kex;            /**< Bitmap stating which keys were exchanged (distributed) by the central. */
00553   struct periph_keys_t
00554   {
00555     ble_gap_enc_info_t    enc_info;             /**< Peripheral's Encryption information. */
00556   } periph_keys;                                /**< Actual keys distributed from the Peripheral to the Central. */ 
00557   struct central_keys_t
00558   {
00559     ble_gap_irk_t         irk;                  /**< Central's IRK. */
00560     ble_gap_addr_t        id_info;              /**< Central's Identity Info. */
00561   } central_keys;                               /**< Actual keys distributed from the Central to the Peripheral. */
00562 } ble_gap_evt_auth_status_t;
00563 
00564 
00565 /**@brief Event data for connection security update event. */
00566 typedef struct
00567 {
00568   ble_gap_conn_sec_t conn_sec;                  /**< Connection security level. */
00569 } ble_gap_evt_conn_sec_update_t;
00570 
00571 
00572 /**@brief Event data for timeout event. */
00573 typedef struct
00574 {
00575   uint8_t src;                                  /**< Source of timeout event, see @ref BLE_GAP_TIMEOUT_SOURCES. */
00576 } ble_gap_evt_timeout_t;
00577 
00578 
00579 /**@brief Event data for advertisement report event. */
00580 typedef struct
00581 {
00582   int8_t  rssi;                               /**< Received Signal Strength Indication in dBm. */
00583 } ble_gap_evt_rssi_changed_t;
00584 
00585 
00586 /**@brief GAP event callback event structure. */
00587 typedef struct
00588 {
00589   uint16_t conn_handle;                                     /**< Connection Handle on which event occured. */
00590   union                                                     /**< union alternative identified by evt_id in enclosing struct. */
00591   {
00592     ble_gap_evt_connected_t          connected;             /**< Connected Event Parameters. */
00593     ble_gap_evt_disconnected_t       disconnected;          /**< Disconnected Event Parameters. */
00594     ble_gap_evt_conn_param_update_t  conn_param_update;     /**< Connection Parameter Update Parameters. */
00595     ble_gap_evt_sec_params_request_t sec_params_request;    /**< Security Parameters Request Event Parameters. */
00596     ble_gap_evt_sec_info_request_t   sec_info_request;      /**< Security Information Request Event Parameters. */
00597     ble_gap_evt_passkey_display_t    passkey_display;       /**< Passkey Display Event Parameters. */
00598     ble_gap_evt_auth_key_request_t   auth_key_request;      /**< Authentication Key Request Event Parameters. */
00599     ble_gap_evt_auth_status_t        auth_status;           /**< Authentication Status Event Parameters. */
00600     ble_gap_evt_conn_sec_update_t    conn_sec_update;       /**< Connection Security Update Event Parameters. */
00601     ble_gap_evt_timeout_t            timeout;               /**< Timeout Event Parameters. */
00602     ble_gap_evt_rssi_changed_t       rssi_changed;          /**< RSSI Event parameters. */
00603   } params;
00604 
00605 } ble_gap_evt_t;
00606 
00607 
00608 /**@brief Local connection latency option.
00609  *
00610  *         Local connection latency is a feature which enables the slave to improve
00611  *         current consumption by ignoring the slave latency set by the peer. The
00612  *         local connection latency can only be set to a multiple of the slave latency,
00613  *         and cannot be longer than half of the supervision timeout.
00614  *
00615  *         Used with @ref sd_ble_opt_set to set the local connection latency. The
00616  *         @ref sd_ble_opt_get is not supported for this option, but the actual 
00617  *         local connection latency (unless set to NULL) is set as a return parameter
00618  *         when setting the option.
00619  *
00620  *  @note  The latency set will be truncated down to the closest slave latency event
00621  *         multiple, or the nearest multiple before half of the supervision timeout.
00622  *
00623  *  @note  The local connection latency is default off, and needs to be set for new
00624  *         connections and whenever the connection is updated.
00625  *
00626  *  @retval ::NRF_SUCCESS Set successfully.
00627  *  @retval ::NRF_ERROR_NOT_SUPPORTED Get is not supported.
00628  *  @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle parameter.
00629  */
00630 typedef struct
00631 {
00632   uint16_t   conn_handle;                       /**< Connection Handle */
00633   uint16_t   requested_latency;                 /**< Requested local connection latency. */
00634   uint16_t * p_actual_latency;                  /**< Pointer to storage for the actual local connection latency (can be set to NULL to skip return value). */
00635 } ble_gap_opt_local_conn_latency_t;
00636 
00637 
00638 /**@brief Passkey Option.
00639  *
00640  *        Structure containing the passkey to be used during pairing. This can be used with @ref
00641  *        sd_ble_opt_set to make the SoftDevice use a pre-programmed passkey for authentication
00642  *        instead of generating a random one.
00643  *
00644  * @note  @ref sd_ble_opt_get is not supported for this option.
00645  *
00646  */
00647 typedef struct
00648 {
00649   uint8_t * p_passkey;                          /**< Pointer to 6-digit ASCII string (digit 0..9 only, no NULL termination) passkey to be used during pairing. If this is NULL, the SoftDevice will generate a random passkey if required.*/
00650 } ble_gap_opt_passkey_t;
00651 
00652 
00653 /**@brief Custom Privacy Options.
00654  *
00655  * @note The specified address cycle interval is used when the address cycle mode is
00656  * @ref BLE_GAP_ADDR_CYCLE_MODE_AUTO. If 0 is given, the address will not be refreshed at any
00657  * interval, and not at start of advertising. A new address can be generated manually by calling
00658  * @ref sd_ble_gap_address_set with the same type again. The default interval is
00659  * @ref BLE_GAP_DEFAULT_PRIVATE_ADDR_CYCLE_INTERVAL_S.
00660  *
00661  * @note If cycle mode is @ref BLE_GAP_ADDR_CYCLE_MODE_AUTO, the address will immediately be
00662  * refreshed when this option is set.
00663  */
00664 typedef struct
00665 {
00666   ble_gap_irk_t * p_irk;        /**< When input: Pointer to custom IRK, or NULL to use/reset to the device's default IRK. When output: Pointer to where the current IRK is to be stored, or NULL to not read out the IRK. */
00667   uint16_t        interval_s;   /**< When input: Custom private address cycle interval in seconds. When output: The current private address cycle interval. */
00668 } ble_gap_opt_privacy_t;
00669 
00670 
00671 /**@brief Option structure for GAP options. */
00672 typedef union
00673 {
00674   ble_gap_opt_local_conn_latency_t local_conn_latency;  /**< Local connection latency. */
00675   ble_gap_opt_passkey_t            passkey;             /**< Passkey to be used for pairing.*/
00676   ble_gap_opt_privacy_t            privacy;             /**< Custom privacy options. */
00677 } ble_gap_opt_t;
00678 /**@} */
00679 
00680 
00681 /**@addtogroup BLE_GAP_FUNCTIONS Functions
00682  * @{ */
00683 
00684 /**@brief Set local Bluetooth address.
00685  *
00686  * If the address cycle mode is @ref BLE_GAP_ADDR_CYCLE_MODE_AUTO, the address type is required to
00687  * be @ref BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_RESOLVABLE or
00688  * @ref BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_NON_RESOLVABLE. The given address is ignored and the
00689  * SoftDevice will generate a new private address automatically every time advertising is
00690  * (re)started, and every @ref BLE_GAP_DEFAULT_PRIVATE_ADDR_CYCLE_INTERVAL_S seconds. If this API
00691  * call is used again with the same parameters while advertising, the SoftDevice will immediately
00692  * generate a new private address to replace the current address.
00693  *
00694  * If the application wishes to use a @ref BLE_GAP_ADDR_TYPE_PUBLIC or
00695  * @ref BLE_GAP_ADDR_TYPE_RANDOM_STATIC address, the cycle mode must be
00696  * @ref BLE_GAP_ADDR_CYCLE_MODE_NONE.
00697  *
00698  * If this API function is called while advertising, the softdevice will immediately update the
00699  * advertising address without the need to stop advertising in the following cases:
00700  *   - If the previously set address is of type @ref BLE_GAP_ADDR_TYPE_PUBLIC and the new address
00701  *   is also of type @ref BLE_GAP_ADDR_TYPE_PUBLIC
00702  *   - If the previously set address is not @ref BLE_GAP_ADDR_TYPE_PUBLIC and the new address is
00703  *   also not @ref BLE_GAP_ADDR_TYPE_PUBLIC.
00704  *
00705  * If the address is changed from a @ref BLE_GAP_ADDR_TYPE_PUBLIC address to another type or from
00706  * another type to a @ref BLE_GAP_ADDR_TYPE_PUBLIC address, the change will take effect the next
00707  * time advertising is started.
00708  *
00709  * @note If the address cycle mode is @ref BLE_GAP_ADDR_CYCLE_MODE_NONE and the application is
00710  *       using privacy, the application must take care to generate and set new private addresses
00711  *       periodically to comply with the Privacy specification in Bluetooth Core Spec.
00712  *
00713  * @param[in] addr_cycle_mode Address cycle mode, see @ref BLE_GAP_ADDR_CYCLE_MODES.
00714  * @param[in] p_addr          Pointer to address structure.
00715  *
00716  * @return @ref NRF_SUCCESS Address successfully set.
00717  * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied.
00718  * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameters.
00719  * @return @ref BLE_ERROR_GAP_INVALID_BLE_ADDR Invalid address.
00720  * @return @ref NRF_ERROR_BUSY The stack is busy, process pending events and retry.
00721  */
00722 SVCALL(SD_BLE_GAP_ADDRESS_SET, uint32_t, sd_ble_gap_address_set(uint8_t addr_cycle_mode, ble_gap_addr_t const * const p_addr));
00723 
00724 
00725 /**@brief Get local Bluetooth address.
00726  *
00727  * @param[out] p_addr Pointer to address structure.
00728  *
00729  * @return @ref NRF_SUCCESS Address successfully retrieved.
00730  * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied.
00731  */
00732 SVCALL(SD_BLE_GAP_ADDRESS_GET, uint32_t, sd_ble_gap_address_get(ble_gap_addr_t * const p_addr));
00733 
00734 
00735 /**@brief Set, clear or update advertisement and scan response data.
00736  *
00737  * @note The format of the advertisement data will be checked by this call to ensure interoperability.
00738  *       Limitations imposed by this API call to the data provided include having a flags data type in the scan response data and
00739  *       duplicating the local name in the advertisement data and scan response data. 
00740  *
00741  * @note: To clear the advertisement data and set it to a 0-length packet, simply provide a valid pointer (p_data/p_sr_data) with its corresponding 
00742  *        length (dlen/srdlen) set to 0.
00743  *
00744  * @note: The call will fail if p_data and p_sr_data are both NULL since this would have no effect.
00745  *
00746  * @param[in] p_data    Raw data to be placed in advertisement packet. If NULL, no changes are made to the current advertisement packet data.
00747  * @param[in] dlen      Data length for p_data. Max size: @ref BLE_GAP_ADV_MAX_SIZE octets. Should be 0 if p_data is NULL, can be 0 if p_data is not NULL.
00748  * @param[in] p_sr_data Raw data to be placed in scan response packet. If NULL, no changes are made to the current scan response packet data.
00749  * @param[in] srdlen    Data length for p_sr_data. Max size: @ref BLE_GAP_ADV_MAX_SIZE octets. Should be 0 if p_sr_data is NULL, can be 0 if p_data is not NULL.
00750  *
00751  * @return @ref NRF_SUCCESS Advertisement data successfully updated or cleared.
00752  * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied.
00753  * @return @ref NRF_ERROR_INVALID_FLAGS Invalid combination of advertising flags supplied.
00754  * @return @ref NRF_ERROR_INVALID_DATA Invalid data type(s) supplied, check the advertising data format specification.
00755  * @return @ref NRF_ERROR_INVALID_LENGTH Invalid data length(s) supplied.
00756  * @return @ref BLE_ERROR_GAP_UUID_LIST_MISMATCH Invalid UUID list supplied.
00757  * @return @ref NRF_ERROR_BUSY The stack is busy, process pending events and retry.
00758  */
00759 SVCALL(SD_BLE_GAP_ADV_DATA_SET, uint32_t, sd_ble_gap_adv_data_set(uint8_t const * const p_data, uint8_t dlen, uint8_t const * const p_sr_data, uint8_t srdlen));
00760 
00761 
00762 /**@brief Start advertising (GAP Discoverable, Connectable modes, Broadcast Procedure).
00763  *
00764  * @param[in] p_adv_params Pointer to advertising parameters structure.
00765  *
00766  * @return @ref NRF_SUCCESS The BLE stack has started advertising.
00767  * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied.
00768  * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation.
00769  * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, check the accepted ranges and limits.
00770  * @return @ref BLE_ERROR_GAP_INVALID_BLE_ADDR Invalid Bluetooth address supplied.
00771  * @return @ref BLE_ERROR_GAP_DISCOVERABLE_WITH_WHITELIST Discoverable mode and whitelist incompatible.
00772  */
00773 SVCALL(SD_BLE_GAP_ADV_START, uint32_t, sd_ble_gap_adv_start(ble_gap_adv_params_t const * const p_adv_params));
00774 
00775 
00776 /**@brief Stop advertising (GAP Discoverable, Connectable modes, Broadcast Procedure).
00777  *
00778  * @return @ref NRF_SUCCESS The BLE stack has stopped advertising.
00779  * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation (most probably not in advertising state).
00780  */
00781 SVCALL(SD_BLE_GAP_ADV_STOP, uint32_t, sd_ble_gap_adv_stop(void));
00782 
00783 
00784 /**@brief Update connection parameters.
00785  *
00786  * @details In the central role this will initiate a Link Layer connection parameter update procedure,
00787  *          otherwise in the peripheral role, this will send the corresponding L2CAP request and wait for
00788  *          the central to perform the procedure. In both cases, and regardless of success or failure, the application
00789  *          will be informed of the result with a @ref BLE_GAP_EVT_CONN_PARAM_UPDATE event.
00790  *
00791  * @note If both a connection supervision timeout and a maximum connection interval are specified, then the following constraint
00792  *       applies: (conn_sup_timeout * 8) >= (max_conn_interval * (slave_latency + 1))
00793  *
00794  * @param[in] conn_handle Connection handle.
00795  * @param[in] p_conn_params  Pointer to desired connection parameters. If NULL is provided on a peripheral role,
00796  *                           the parameters in the PPCP characteristic of the GAP service will be used instead.
00797  *
00798  * @return @ref NRF_SUCCESS The Connection Update procedure has been started successfully.
00799  * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied.
00800  * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, check parameter limits and constraints.
00801  * @return @ref NRF_ERROR_BUSY Procedure already in progress or not allowed at this time, process pending events and retry.
00802  * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied.
00803  * @return @ref NRF_ERROR_NO_MEM Not enough memory to complete operation.
00804  */
00805 SVCALL(SD_BLE_GAP_CONN_PARAM_UPDATE, uint32_t, sd_ble_gap_conn_param_update(uint16_t conn_handle, ble_gap_conn_params_t const * const p_conn_params));
00806 
00807 
00808 /**@brief Disconnect (GAP Link Termination).
00809  *
00810  * @details This call initiates the disconnection procedure, and its completion will be communicated to the application
00811  *          with a BLE_GAP_EVT_DISCONNECTED event.
00812  *
00813  * @param[in] conn_handle Connection handle.
00814  * @param[in] hci_status_code HCI status code, see @ref BLE_HCI_STATUS_CODES (accepted values are BTLE_REMOTE_USER_TERMINATED_CONNECTION and BTLE_CONN_INTERVAL_UNACCEPTABLE).
00815  *
00816  * @return @ref NRF_SUCCESS The disconnection procedure has been started successfully.
00817  * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied.
00818  * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied.
00819  * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation (disconnection is already in progress or not connected at all).
00820  */
00821 SVCALL(SD_BLE_GAP_DISCONNECT, uint32_t, sd_ble_gap_disconnect(uint16_t conn_handle, uint8_t hci_status_code));
00822 
00823 
00824 /**@brief Set the radio's transmit power.
00825  *
00826  * @param[in] tx_power Radio transmit power in dBm (accepted values are -40, -30, -20, -16, -12, -8, -4, 0, and 4 dBm).
00827  *
00828  * @note -40 dBm will not actually give -40 dBm, but will instead be remapped to -30 dBm.
00829  *
00830  * @return @ref NRF_SUCCESS Successfully changed the transmit power.
00831  * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied.
00832  * @return @ref NRF_ERROR_BUSY The stack is busy, process pending events and retry.
00833  */
00834 SVCALL(SD_BLE_GAP_TX_POWER_SET, uint32_t, sd_ble_gap_tx_power_set(int8_t tx_power));
00835 
00836 
00837 /**@brief Set GAP Appearance value.
00838  *
00839  * @param[in] appearance Appearance (16-bit), see @ref BLE_APPEARANCES.
00840  *
00841  * @return @ref NRF_SUCCESS  Appearance value set successfully.
00842  * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied.
00843  */
00844 SVCALL(SD_BLE_GAP_APPEARANCE_SET, uint32_t, sd_ble_gap_appearance_set(uint16_t appearance));
00845 
00846 
00847 /**@brief Get GAP Appearance value.
00848  *
00849  * @param[out] p_appearance Appearance (16-bit), see @ref BLE_APPEARANCES.
00850  *
00851  * @return @ref NRF_SUCCESS Appearance value retrieved successfully.
00852  * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied.
00853  */
00854 SVCALL(SD_BLE_GAP_APPEARANCE_GET, uint32_t, sd_ble_gap_appearance_get(uint16_t * const p_appearance));
00855 
00856 
00857 /**@brief Set GAP Peripheral Preferred Connection Parameters.
00858  *
00859  * @param[in] p_conn_params Pointer to a @ref ble_gap_conn_params_t structure with the desired parameters.
00860  *
00861  * @return @ref NRF_SUCCESS Peripheral Preferred Connection Parameters set successfully.
00862  * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied.
00863  * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied.
00864  */
00865 SVCALL(SD_BLE_GAP_PPCP_SET, uint32_t, sd_ble_gap_ppcp_set(ble_gap_conn_params_t const * const p_conn_params));
00866 
00867 
00868 /**@brief Get GAP Peripheral Preferred Connection Parameters.
00869  *
00870  * @param[out] p_conn_params Pointer to a @ref ble_gap_conn_params_t structure where the parameters will be stored.
00871  *
00872  * @return @ref NRF_SUCCESS Peripheral Preferred Connection Parameters retrieved successfully.
00873  * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied.
00874  */
00875 SVCALL(SD_BLE_GAP_PPCP_GET, uint32_t, sd_ble_gap_ppcp_get(ble_gap_conn_params_t * const p_conn_params));
00876 
00877 
00878 /**@brief Set GAP device name.
00879  *
00880  * @param[in] p_write_perm Write permissions for the Device Name characteristic see @ref ble_gap_conn_sec_mode_t.
00881  * @param[in] p_dev_name Pointer to a UTF-8 encoded, <b>non NULL-terminated</b> string.
00882  * @param[in] len   Length of the UTF-8, <b>non NULL-terminated</b> string pointed to by p_dev_name in octets (must be smaller or equal than @ref BLE_GAP_DEVNAME_MAX_LEN).
00883  *
00884  * @return @ref NRF_SUCCESS GAP device name and permissions set successfully.
00885  * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied.
00886  * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied.
00887  * @return @ref NRF_ERROR_DATA_SIZE Invalid data size(s) supplied.
00888  */
00889 SVCALL(SD_BLE_GAP_DEVICE_NAME_SET, uint32_t, sd_ble_gap_device_name_set(ble_gap_conn_sec_mode_t const * const p_write_perm, uint8_t const * const p_dev_name, uint16_t len));
00890 
00891 
00892 /**@brief Get GAP device name.
00893  *
00894  * @param[in]     p_dev_name Pointer to an empty buffer where the UTF-8 <b>non NULL-terminated</b> string will be placed. Set to NULL to obtain the complete device name length.
00895  * @param[in,out] p_len      Length of the buffer pointed by p_dev_name, complete device name length on output.
00896  *
00897  * @note          If the device name is longer than the size of the supplied buffer,
00898  *                p_len will return the complete device name length,
00899  *                and not the number of bytes actually returned in p_dev_name.
00900  *                The application may use this information to allocate a suitable buffer size.
00901  *
00902  * @return @ref NRF_SUCCESS GAP device name retrieved successfully.
00903  * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied.
00904  * @return @ref NRF_ERROR_DATA_SIZE Invalid data size(s) supplied.
00905  */
00906 SVCALL(SD_BLE_GAP_DEVICE_NAME_GET, uint32_t, sd_ble_gap_device_name_get(uint8_t * const p_dev_name, uint16_t * const p_len));
00907 
00908 
00909 /**@brief Initiate GAP Authentication procedure.
00910  *
00911  * @param[in] conn_handle Connection handle.
00912  * @param[in] p_sec_params Pointer to the @ref ble_gap_sec_params_t structure with the security parameters to be used during the pairing procedure.
00913  *
00914  * @details In the central role, this function will send an SMP Pairing Request, otherwise in the peripheral role, an SMP Security Request will be sent.
00915  *          In the peripheral role, only the timeout, bond and mitm fields of @ref ble_gap_sec_params_t are used.
00916  *
00917  * @note    The GAP Authentication procedure may be triggered by the central without calling this function when accessing a secure service.
00918  * @note    Calling this function may result in the following events depending on the outcome and parameters: @ref BLE_GAP_EVT_SEC_PARAMS_REQUEST,
00919  *          @ref BLE_GAP_EVT_SEC_INFO_REQUEST, @ref BLE_GAP_EVT_AUTH_KEY_REQUEST, @ref BLE_GAP_EVT_AUTH_STATUS.
00920  * @note    The timeout parameter in @ref ble_gap_sec_params_t is interpreted here as the Security Request timeout
00921  *
00922  *
00923  * @return @ref NRF_SUCCESS Successfully initiated authentication procedure.
00924  * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied.
00925  * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied.
00926  * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation.
00927  * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied.
00928  * @return @ref NRF_ERROR_TIMEOUT A SMP timeout has occured, and further SMP operations on this link is prohibited.
00929  */
00930 SVCALL(SD_BLE_GAP_AUTHENTICATE, uint32_t, sd_ble_gap_authenticate(uint16_t conn_handle, ble_gap_sec_params_t const * const p_sec_params));
00931 
00932 
00933 /**@brief Reply with GAP security parameters.
00934  *
00935  * @param[in] conn_handle Connection handle.
00936  * @param[in] sec_status Security status, see @ref BLE_GAP_SEC_STATUS.
00937  * @param[in] p_sec_params Pointer to a @ref ble_gap_sec_params_t security parameters structure.
00938  *
00939  * @details This function is only used to reply to a @ref BLE_GAP_EVT_SEC_PARAMS_REQUEST, calling it at other times will result in an NRF_ERROR_INVALID_STATE.
00940  * @note    If the call returns an error code, the request is still pending, and the reply call may be repeated with corrected parameters.
00941  * @note    The timeout parameter in @ref ble_gap_sec_params_t is interpreted here as the SMP procedure timeout, and must be 30 seconds. The function will fail
00942  *          if the application supplies a different value.
00943  *
00944  * @return @ref NRF_SUCCESS Successfully accepted security parameter from the application.
00945  * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied.
00946  * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied.
00947  * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation.
00948  * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied.
00949  */
00950 SVCALL(SD_BLE_GAP_SEC_PARAMS_REPLY, uint32_t, sd_ble_gap_sec_params_reply(uint16_t conn_handle, uint8_t sec_status, ble_gap_sec_params_t const * const p_sec_params));
00951 
00952 
00953 /**@brief Reply with an authentication key.
00954  *
00955  * @param[in] conn_handle Connection handle.
00956  * @param[in] key_type See @ref BLE_GAP_AUTH_KEY_TYPES.
00957  * @param[in] key If key type is BLE_GAP_AUTH_KEY_TYPE_NONE, then NULL.
00958  *                If key type is BLE_GAP_AUTH_KEY_TYPE_PASSKEY, then a 6-byte ASCII string (digit 0..9 only, no NULL termination).
00959  *                If key type is BLE_GAP_AUTH_KEY_TYPE_OOB, then a 16-byte OOB key value in Little Endian format.
00960  *
00961  * @details This function is only used to reply to a @ref BLE_GAP_EVT_AUTH_KEY_REQUEST, calling it at other times will result in an NRF_ERROR_INVALID_STATE.
00962  * @note    If the call returns an error code, the request is still pending, and the reply call may be repeated with corrected parameters.
00963  *
00964  * @return @ref NRF_SUCCESS Authentication key successfully set.
00965  * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied.
00966  * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied.
00967  * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation.
00968  * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied.
00969  */
00970 SVCALL(SD_BLE_GAP_AUTH_KEY_REPLY, uint32_t, sd_ble_gap_auth_key_reply(uint16_t conn_handle, uint8_t key_type, uint8_t const * const key));
00971 
00972 
00973 /**@brief Reply with GAP security information.
00974  *
00975  * @param[in] conn_handle Connection handle.
00976  * @param[in] p_enc_info Pointer to a @ref ble_gap_enc_info_t encryption information structure. May be NULL to signal none is available.
00977  * @param[in] p_sign_info Pointer to a @ref ble_gap_sign_info_t signing information structure. May be NULL to signal none is available.
00978  *
00979  * @details This function is only used to reply to a @ref BLE_GAP_EVT_SEC_INFO_REQUEST, calling it at other times will result in NRF_ERROR_INVALID_STATE.
00980  * @note    If the call returns an error code, the request is still pending, and the reply call may be repeated with corrected parameters.
00981  * @note    Data signing is not implemented yet. p_sign_info must therefore be NULL.
00982  *
00983  * @return @ref NRF_SUCCESS Successfully accepted security information.
00984  * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied.
00985  * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation.
00986  * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied.
00987  * @return @ref NRF_ERROR_BUSY The stack is busy, process pending events and retry.
00988  */
00989 SVCALL(SD_BLE_GAP_SEC_INFO_REPLY, uint32_t, sd_ble_gap_sec_info_reply(uint16_t conn_handle, ble_gap_enc_info_t const * const p_enc_info, ble_gap_sign_info_t const * const p_sign_info));
00990 
00991 
00992 /**@brief Get the current connection security.
00993  *
00994  * @param[in]  conn_handle Connection handle.
00995  * @param[out] p_conn_sec  Pointer to a @ref ble_gap_conn_sec_t structure to be filled in.
00996  *
00997  * @return @ref NRF_SUCCESS Current connection security successfully retrieved.
00998  * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied.
00999  * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied.
01000  */
01001 SVCALL(SD_BLE_GAP_CONN_SEC_GET, uint32_t, sd_ble_gap_conn_sec_get(uint16_t conn_handle, ble_gap_conn_sec_t * const p_conn_sec));
01002 
01003 
01004 /**@brief Start reporting the received signal strength to the application. 
01005  *
01006  * A new event is reported whenever the RSSI value changes, until @ref sd_ble_gap_rssi_stop is called.
01007  *
01008  * @param[in] conn_handle Connection handle.
01009  *
01010  * @return @ref NRF_SUCCESS Successfully activated RSSI reporting.
01011  * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation.
01012  * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied.
01013  */
01014 SVCALL(SD_BLE_GAP_RSSI_START, uint32_t, sd_ble_gap_rssi_start(uint16_t conn_handle));
01015 
01016 
01017 /**@brief Stop reporting the received singnal strength. 
01018  *
01019  * An RSSI change detected before the call but not yet received by the application 
01020  * may be reported after @ref sd_ble_gap_rssi_stop has been called.
01021  *
01022  * @param[in] conn_handle Connection handle.
01023  *
01024  * @return @ref NRF_SUCCESS Successfully deactivated RSSI reporting.
01025  * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation.
01026  * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied.
01027  */
01028 SVCALL(SD_BLE_GAP_RSSI_STOP, uint32_t, sd_ble_gap_rssi_stop(uint16_t conn_handle));
01029 /**@} */
01030 
01031 #endif // BLE_GAP_H__
01032 
01033 /**
01034   @}
01035 */