mbed library sources

Fork of mbed-src by mbed official

Committer:
mbed_official
Date:
Tue Mar 18 12:30:07 2014 +0000
Revision:
123:8a356fb1000a
Parent:
targets/hal/TARGET_NORDIC/TARGET_NRF51822/Lib/s110_nrf51822_6.0.0/s110_nrf51822_6.0.0_API/include/ble_gatts.h@104:a6a92e2e5a92
Synchronized with git revision 3e40310534d854400e01b2e9612ef7edf44a2dc9

Full URL: https://github.com/mbedmicro/mbed/commit/3e40310534d854400e01b2e9612ef7edf44a2dc9/

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbed_official 104:a6a92e2e5a92 1 /* Copyright (c) 2011 Nordic Semiconductor. All Rights Reserved.
mbed_official 104:a6a92e2e5a92 2 *
mbed_official 104:a6a92e2e5a92 3 * The information contained herein is confidential property of Nordic Semiconductor. The use,
mbed_official 104:a6a92e2e5a92 4 * copying, transfer or disclosure of such information is prohibited except by express written
mbed_official 104:a6a92e2e5a92 5 * agreement with Nordic Semiconductor.
mbed_official 104:a6a92e2e5a92 6 *
mbed_official 104:a6a92e2e5a92 7 */
mbed_official 104:a6a92e2e5a92 8 /**
mbed_official 104:a6a92e2e5a92 9 @addtogroup BLE_GATTS Generic Attribute Profile (GATT) Server
mbed_official 104:a6a92e2e5a92 10 @{
mbed_official 104:a6a92e2e5a92 11 @brief Definitions and prototypes for the GATTS interface.
mbed_official 104:a6a92e2e5a92 12 */
mbed_official 104:a6a92e2e5a92 13
mbed_official 104:a6a92e2e5a92 14 #ifndef BLE_GATTS_H__
mbed_official 104:a6a92e2e5a92 15 #define BLE_GATTS_H__
mbed_official 104:a6a92e2e5a92 16
mbed_official 104:a6a92e2e5a92 17 #include "ble_types.h"
mbed_official 104:a6a92e2e5a92 18 #include "ble_ranges.h"
mbed_official 104:a6a92e2e5a92 19 #include "ble_l2cap.h"
mbed_official 104:a6a92e2e5a92 20 #include "ble_gap.h"
mbed_official 104:a6a92e2e5a92 21 #include "ble_gatt.h"
mbed_official 104:a6a92e2e5a92 22 #include "nrf_svc.h"
mbed_official 104:a6a92e2e5a92 23
mbed_official 104:a6a92e2e5a92 24
mbed_official 104:a6a92e2e5a92 25 /**
mbed_official 104:a6a92e2e5a92 26 * @brief GATTS API SVC numbers.
mbed_official 104:a6a92e2e5a92 27 */
mbed_official 104:a6a92e2e5a92 28 enum BLE_GATTS_SVCS
mbed_official 104:a6a92e2e5a92 29 {
mbed_official 104:a6a92e2e5a92 30 SD_BLE_GATTS_SERVICE_ADD = BLE_GATTS_SVC_BASE, /**< Add a service. */
mbed_official 104:a6a92e2e5a92 31 SD_BLE_GATTS_INCLUDE_ADD, /**< Add an included service. */
mbed_official 104:a6a92e2e5a92 32 SD_BLE_GATTS_CHARACTERISTIC_ADD, /**< Add a characteristic. */
mbed_official 104:a6a92e2e5a92 33 SD_BLE_GATTS_DESCRIPTOR_ADD, /**< Add a generic attribute. */
mbed_official 104:a6a92e2e5a92 34 SD_BLE_GATTS_VALUE_SET, /**< Set an attribute value. */
mbed_official 104:a6a92e2e5a92 35 SD_BLE_GATTS_VALUE_GET, /**< Get an attribute value. */
mbed_official 104:a6a92e2e5a92 36 SD_BLE_GATTS_HVX, /**< Handle Value Notification or Indication. */
mbed_official 104:a6a92e2e5a92 37 SD_BLE_GATTS_SERVICE_CHANGED, /**< Perform a Service Changed Indication to one or more peers. */
mbed_official 104:a6a92e2e5a92 38 SD_BLE_GATTS_RW_AUTHORIZE_REPLY, /**< Reply to an authorization request for a read or write operation on one or more attributes. */
mbed_official 104:a6a92e2e5a92 39 SD_BLE_GATTS_SYS_ATTR_SET, /**< Set the persistent system attributes for a connection. */
mbed_official 104:a6a92e2e5a92 40 SD_BLE_GATTS_SYS_ATTR_GET, /**< Get updated persistent system attributes after terminating a connection. */
mbed_official 104:a6a92e2e5a92 41 };
mbed_official 104:a6a92e2e5a92 42
mbed_official 104:a6a92e2e5a92 43
mbed_official 104:a6a92e2e5a92 44 /** @addtogroup BLE_GATTS_DEFINES Defines
mbed_official 104:a6a92e2e5a92 45 * @{ */
mbed_official 104:a6a92e2e5a92 46
mbed_official 104:a6a92e2e5a92 47 /** @brief Only the default MTU size of 23 is currently supported. */
mbed_official 104:a6a92e2e5a92 48 #define GATT_RX_MTU 23
mbed_official 104:a6a92e2e5a92 49
mbed_official 104:a6a92e2e5a92 50 /** @defgroup BLE_ERRORS_GATTS SVC return values specific to GATTS
mbed_official 104:a6a92e2e5a92 51 * @{ */
mbed_official 104:a6a92e2e5a92 52 #define BLE_ERROR_GATTS_INVALID_ATTR_TYPE (NRF_GATTS_ERR_BASE + 0x000) /**< Invalid attribute type. */
mbed_official 104:a6a92e2e5a92 53 #define BLE_ERROR_GATTS_SYS_ATTR_MISSING (NRF_GATTS_ERR_BASE + 0x001) /**< System Attributes missing. */
mbed_official 104:a6a92e2e5a92 54 /** @} */
mbed_official 104:a6a92e2e5a92 55
mbed_official 104:a6a92e2e5a92 56 /** @defgroup BLE_GATTS_ATTR_LENS_MAX Maximum attribute lengths
mbed_official 104:a6a92e2e5a92 57 * @{ */
mbed_official 104:a6a92e2e5a92 58 #define BLE_GATTS_FIX_ATTR_LEN_MAX (510) /**< Maximum length for fixed length Attribute Values. */
mbed_official 104:a6a92e2e5a92 59 #define BLE_GATTS_VAR_ATTR_LEN_MAX (512) /**< Maximum length for variable length Attribute Values. */
mbed_official 104:a6a92e2e5a92 60 /** @} */
mbed_official 104:a6a92e2e5a92 61
mbed_official 104:a6a92e2e5a92 62 /** @defgroup BLE_GATTS_SRVC_TYPES GATT Server Service Types
mbed_official 104:a6a92e2e5a92 63 * @{ */
mbed_official 104:a6a92e2e5a92 64 #define BLE_GATTS_SRVC_TYPE_INVALID 0x00 /**< Invalid Service Type. */
mbed_official 104:a6a92e2e5a92 65 #define BLE_GATTS_SRVC_TYPE_PRIMARY 0x01 /**< Primary Service. */
mbed_official 104:a6a92e2e5a92 66 #define BLE_GATTS_SRVC_TYPE_SECONDARY 0x02 /**< Secondary Type. */
mbed_official 104:a6a92e2e5a92 67 /** @} */
mbed_official 104:a6a92e2e5a92 68
mbed_official 104:a6a92e2e5a92 69
mbed_official 104:a6a92e2e5a92 70 /** @defgroup BLE_GATTS_ATTR_TYPES GATT Server Attribute Types
mbed_official 104:a6a92e2e5a92 71 * @{ */
mbed_official 104:a6a92e2e5a92 72 #define BLE_GATTS_ATTR_TYPE_INVALID 0x00 /**< Invalid Attribute Type. */
mbed_official 104:a6a92e2e5a92 73 #define BLE_GATTS_ATTR_TYPE_PRIM_SRVC_DECL 0x01 /**< Primary Service Declaration. */
mbed_official 104:a6a92e2e5a92 74 #define BLE_GATTS_ATTR_TYPE_SEC_SRVC_DECL 0x02 /**< Secondary Service Declaration. */
mbed_official 104:a6a92e2e5a92 75 #define BLE_GATTS_ATTR_TYPE_INC_DECL 0x03 /**< Include Declaration. */
mbed_official 104:a6a92e2e5a92 76 #define BLE_GATTS_ATTR_TYPE_CHAR_DECL 0x04 /**< Characteristic Declaration. */
mbed_official 104:a6a92e2e5a92 77 #define BLE_GATTS_ATTR_TYPE_CHAR_VAL 0x05 /**< Characteristic Value. */
mbed_official 104:a6a92e2e5a92 78 #define BLE_GATTS_ATTR_TYPE_DESC 0x06 /**< Descriptor. */
mbed_official 104:a6a92e2e5a92 79 #define BLE_GATTS_ATTR_TYPE_OTHER 0x07 /**< Other, non-GATT specific type. */
mbed_official 104:a6a92e2e5a92 80 /** @} */
mbed_official 104:a6a92e2e5a92 81
mbed_official 104:a6a92e2e5a92 82
mbed_official 104:a6a92e2e5a92 83 /** @defgroup BLE_GATTS_OPS GATT Server Operations
mbed_official 104:a6a92e2e5a92 84 * @{ */
mbed_official 104:a6a92e2e5a92 85 #define BLE_GATTS_OP_INVALID 0x00 /**< Invalid Operation. */
mbed_official 104:a6a92e2e5a92 86 #define BLE_GATTS_OP_WRITE_REQ 0x01 /**< Write Request. */
mbed_official 104:a6a92e2e5a92 87 #define BLE_GATTS_OP_WRITE_CMD 0x02 /**< Write Command. */
mbed_official 104:a6a92e2e5a92 88 #define BLE_GATTS_OP_SIGN_WRITE_CMD 0x03 /**< Signed Write Command. */
mbed_official 104:a6a92e2e5a92 89 #define BLE_GATTS_OP_PREP_WRITE_REQ 0x04 /**< Prepare Write Request. */
mbed_official 104:a6a92e2e5a92 90 #define BLE_GATTS_OP_EXEC_WRITE_REQ_CANCEL 0x05 /**< Execute Write Request: Cancel all prepared writes. */
mbed_official 104:a6a92e2e5a92 91 #define BLE_GATTS_OP_EXEC_WRITE_REQ_NOW 0x06 /**< Execute Write Request: Immediately execute all prepared writes. */
mbed_official 104:a6a92e2e5a92 92 /** @} */
mbed_official 104:a6a92e2e5a92 93
mbed_official 104:a6a92e2e5a92 94 /** @defgroup BLE_GATTS_VLOCS GATT Value Locations
mbed_official 104:a6a92e2e5a92 95 * @{ */
mbed_official 104:a6a92e2e5a92 96 #define BLE_GATTS_VLOC_INVALID 0x00 /**< Invalid Location. */
mbed_official 104:a6a92e2e5a92 97 #define BLE_GATTS_VLOC_STACK 0x01 /**< Attribute Value is located in stack memory, no user memory is required. */
mbed_official 104:a6a92e2e5a92 98 #define BLE_GATTS_VLOC_USER 0x02 /**< Attribute Value is located in user memory. This requires the user to maintain a valid buffer through the lifetime of the attribute, since the stack
mbed_official 104:a6a92e2e5a92 99 will read and write directly to the memory using the pointer provided in the APIs. There are no alignment requirements for the buffer. */
mbed_official 104:a6a92e2e5a92 100 /** @} */
mbed_official 104:a6a92e2e5a92 101
mbed_official 104:a6a92e2e5a92 102 /** @defgroup BLE_GATTS_AUTHORIZE_TYPES GATT Server Authorization Types
mbed_official 104:a6a92e2e5a92 103 * @{ */
mbed_official 104:a6a92e2e5a92 104 #define BLE_GATTS_AUTHORIZE_TYPE_INVALID 0x00 /**< Invalid Type. */
mbed_official 104:a6a92e2e5a92 105 #define BLE_GATTS_AUTHORIZE_TYPE_READ 0x01 /**< Authorize a Read Operation. */
mbed_official 104:a6a92e2e5a92 106 #define BLE_GATTS_AUTHORIZE_TYPE_WRITE 0x02 /**< Authorize a Write Request Operation. */
mbed_official 104:a6a92e2e5a92 107 /** @} */
mbed_official 104:a6a92e2e5a92 108
mbed_official 104:a6a92e2e5a92 109
mbed_official 104:a6a92e2e5a92 110 /** @} */
mbed_official 104:a6a92e2e5a92 111
mbed_official 104:a6a92e2e5a92 112 /**@brief Attribute metadata. */
mbed_official 104:a6a92e2e5a92 113 typedef struct
mbed_official 104:a6a92e2e5a92 114 {
mbed_official 104:a6a92e2e5a92 115 ble_gap_conn_sec_mode_t read_perm; /**< Read permissions. */
mbed_official 104:a6a92e2e5a92 116 ble_gap_conn_sec_mode_t write_perm; /**< Write permissions. */
mbed_official 104:a6a92e2e5a92 117 uint8_t vlen :1; /**< Variable length attribute. */
mbed_official 104:a6a92e2e5a92 118 uint8_t vloc :2; /**< Value location, see @ref BLE_GATTS_VLOCS.*/
mbed_official 104:a6a92e2e5a92 119 uint8_t rd_auth :1; /**< Read Authorization and value will be requested from the application on every read operation. */
mbed_official 104:a6a92e2e5a92 120 uint8_t wr_auth :1; /**< Write Authorization will be requested from the application on every Write Request operation (but not Write Command). */
mbed_official 104:a6a92e2e5a92 121 } ble_gatts_attr_md_t;
mbed_official 104:a6a92e2e5a92 122
mbed_official 104:a6a92e2e5a92 123
mbed_official 104:a6a92e2e5a92 124 /**@brief GATT Attribute. */
mbed_official 104:a6a92e2e5a92 125 typedef struct
mbed_official 104:a6a92e2e5a92 126 {
mbed_official 104:a6a92e2e5a92 127 ble_uuid_t* p_uuid; /**< Pointer to the attribute UUID. */
mbed_official 104:a6a92e2e5a92 128 ble_gatts_attr_md_t* p_attr_md; /**< Pointer to the attribute metadata structure. */
mbed_official 104:a6a92e2e5a92 129 uint16_t init_len; /**< Initial attribute value length in bytes. */
mbed_official 104:a6a92e2e5a92 130 uint16_t init_offs; /**< Initial attribute value offset in bytes. If different from zero, the first init_offs bytes of the attribute value will be left uninitialized. */
mbed_official 104:a6a92e2e5a92 131 uint16_t max_len; /**< Maximum attribute value length in bytes, see @ref BLE_GATTS_ATTR_LENS_MAX for maximum values. */
mbed_official 104:a6a92e2e5a92 132 uint8_t* p_value; /**< Pointer to the attribute data. Please note that if the @ref BLE_GATTS_VLOC_USER value location is selected in the attribute metadata, this will have to point to a buffer
mbed_official 104:a6a92e2e5a92 133 that remains valid through the lifetime of the attribute. This excludes usage of automatic variables that may go out of scope or any other temporary location.
mbed_official 104:a6a92e2e5a92 134 The stack may access that memory directly without the application's knowledge. */
mbed_official 104:a6a92e2e5a92 135 } ble_gatts_attr_t;
mbed_official 104:a6a92e2e5a92 136
mbed_official 104:a6a92e2e5a92 137
mbed_official 104:a6a92e2e5a92 138 /**@brief GATT Attribute Context. */
mbed_official 104:a6a92e2e5a92 139 typedef struct
mbed_official 104:a6a92e2e5a92 140 {
mbed_official 104:a6a92e2e5a92 141 ble_uuid_t srvc_uuid; /**< Service UUID. */
mbed_official 104:a6a92e2e5a92 142 ble_uuid_t char_uuid; /**< Characteristic UUID if applicable (BLE_UUID_TYPE_UNKNOWN if N/A). */
mbed_official 104:a6a92e2e5a92 143 ble_uuid_t desc_uuid; /**< Descriptor UUID if applicable (BLE_UUID_TYPE_UNKNOWN if N/A). */
mbed_official 104:a6a92e2e5a92 144 uint16_t srvc_handle; /**< Service Handle. */
mbed_official 104:a6a92e2e5a92 145 uint16_t value_handle; /**< Characteristic Handle if applicable (BLE_GATT_HANDLE_INVALID if N/A). */
mbed_official 104:a6a92e2e5a92 146 uint8_t type; /**< Attribute Type, see @ref BLE_GATTS_ATTR_TYPES. */
mbed_official 104:a6a92e2e5a92 147 } ble_gatts_attr_context_t;
mbed_official 104:a6a92e2e5a92 148
mbed_official 104:a6a92e2e5a92 149
mbed_official 104:a6a92e2e5a92 150 /**@brief GATT Characteristic Presentation Format. */
mbed_official 104:a6a92e2e5a92 151 typedef struct
mbed_official 104:a6a92e2e5a92 152 {
mbed_official 104:a6a92e2e5a92 153 uint8_t format; /**< Format of the value, see @ref BLE_GATT_CPF_FORMATS. */
mbed_official 104:a6a92e2e5a92 154 int8_t exponent; /**< Exponent for integer data types. */
mbed_official 104:a6a92e2e5a92 155 uint16_t unit; /**< UUID from Bluetooth Assigned Numbers. */
mbed_official 104:a6a92e2e5a92 156 uint8_t name_space; /**< Namespace from Bluetooth Assigned Numbers, see @ref BLE_GATT_CPF_NAMESPACES. */
mbed_official 104:a6a92e2e5a92 157 uint16_t desc; /**< Namespace description from Bluetooth Assigned Numbers, see @ref BLE_GATT_CPF_NAMESPACES. */
mbed_official 104:a6a92e2e5a92 158 } ble_gatts_char_pf_t;
mbed_official 104:a6a92e2e5a92 159
mbed_official 104:a6a92e2e5a92 160
mbed_official 104:a6a92e2e5a92 161 /**@brief GATT Characteristic metadata. */
mbed_official 104:a6a92e2e5a92 162 typedef struct
mbed_official 104:a6a92e2e5a92 163 {
mbed_official 104:a6a92e2e5a92 164 ble_gatt_char_props_t char_props; /**< Characteristic Properties. */
mbed_official 104:a6a92e2e5a92 165 ble_gatt_char_ext_props_t char_ext_props; /**< Characteristic Extended Properties. */
mbed_official 104:a6a92e2e5a92 166 uint8_t* p_char_user_desc; /**< Pointer to a UTF-8, NULL if the descriptor is not required. */
mbed_official 104:a6a92e2e5a92 167 uint16_t char_user_desc_max_size; /**< The maximum size in bytes of the user description descriptor. */
mbed_official 104:a6a92e2e5a92 168 uint16_t char_user_desc_size; /**< The size of the user description, must be smaller or equal to char_user_desc_max_size. */
mbed_official 104:a6a92e2e5a92 169 ble_gatts_char_pf_t* p_char_pf; /**< Pointer to a presentation format structure or NULL if the descriptor is not required. */
mbed_official 104:a6a92e2e5a92 170 ble_gatts_attr_md_t* p_user_desc_md; /**< Attribute metadata for the User Description descriptor, or NULL for default values. */
mbed_official 104:a6a92e2e5a92 171 ble_gatts_attr_md_t* p_cccd_md; /**< Attribute metadata for the Client Characteristic Configuration Descriptor, or NULL for default values. */
mbed_official 104:a6a92e2e5a92 172 ble_gatts_attr_md_t* p_sccd_md; /**< Attribute metadata for the Server Characteristic Configuration Descriptor, or NULL for default values. */
mbed_official 104:a6a92e2e5a92 173 } ble_gatts_char_md_t;
mbed_official 104:a6a92e2e5a92 174
mbed_official 104:a6a92e2e5a92 175
mbed_official 104:a6a92e2e5a92 176 /**@brief GATT Characteristic Definition Handles. */
mbed_official 104:a6a92e2e5a92 177 typedef struct
mbed_official 104:a6a92e2e5a92 178 {
mbed_official 104:a6a92e2e5a92 179 uint16_t value_handle; /**< Handle to the characteristic value. */
mbed_official 104:a6a92e2e5a92 180 uint16_t user_desc_handle; /**< Handle to the User Description descriptor, or BLE_GATT_HANDLE_INVALID if not present. */
mbed_official 104:a6a92e2e5a92 181 uint16_t cccd_handle; /**< Handle to the Client Characteristic Configuration Descriptor, or BLE_GATT_HANDLE_INVALID if not present. */
mbed_official 104:a6a92e2e5a92 182 uint16_t sccd_handle; /**< Handle to the Server Characteristic Configuration Descriptor, or BLE_GATT_HANDLE_INVALID if not present. */
mbed_official 104:a6a92e2e5a92 183 } ble_gatts_char_handles_t;
mbed_official 104:a6a92e2e5a92 184
mbed_official 104:a6a92e2e5a92 185
mbed_official 104:a6a92e2e5a92 186 /**@brief GATT HVx parameters. */
mbed_official 104:a6a92e2e5a92 187 typedef struct
mbed_official 104:a6a92e2e5a92 188 {
mbed_official 104:a6a92e2e5a92 189 uint16_t handle; /**< Characteristic Value Handle. */
mbed_official 104:a6a92e2e5a92 190 uint8_t type; /**< Indication or Notification, see @ref BLE_GATT_HVX_TYPES. */
mbed_official 104:a6a92e2e5a92 191 uint16_t offset; /**< Offset within the attribute value. */
mbed_official 104:a6a92e2e5a92 192 uint16_t* p_len; /**< Length in bytes to be written, length in bytes written after successful return. */
mbed_official 104:a6a92e2e5a92 193 uint8_t* p_data; /**< Actual data content, use NULL to use the current attribute value. */
mbed_official 104:a6a92e2e5a92 194 } ble_gatts_hvx_params_t;
mbed_official 104:a6a92e2e5a92 195
mbed_official 104:a6a92e2e5a92 196 /**@brief GATT Read Authorization parameters. */
mbed_official 104:a6a92e2e5a92 197 typedef struct
mbed_official 104:a6a92e2e5a92 198 {
mbed_official 104:a6a92e2e5a92 199 uint16_t gatt_status; /**< GATT status code for the operation, see @ref BLE_GATT_STATUS_CODES. */
mbed_official 104:a6a92e2e5a92 200 uint8_t update : 1; /**< If set, data supplied in p_data will be used in the ATT response. */
mbed_official 104:a6a92e2e5a92 201 uint16_t offset; /**< Offset of the attribute value being updated. */
mbed_official 104:a6a92e2e5a92 202 uint16_t len; /**< Length in bytes of the value in p_data pointer, see @ref BLE_GATTS_ATTR_LENS_MAX. */
mbed_official 104:a6a92e2e5a92 203 uint8_t* p_data; /**< Pointer to new value used to update the attribute value. */
mbed_official 104:a6a92e2e5a92 204 } ble_gatts_read_authorize_params_t;
mbed_official 104:a6a92e2e5a92 205
mbed_official 104:a6a92e2e5a92 206 /**@brief GATT Write Authorisation parameters. */
mbed_official 104:a6a92e2e5a92 207 typedef struct
mbed_official 104:a6a92e2e5a92 208 {
mbed_official 104:a6a92e2e5a92 209 uint16_t gatt_status; /**< GATT status code for the operation, see @ref BLE_GATT_STATUS_CODES. */
mbed_official 104:a6a92e2e5a92 210 } ble_gatts_write_authorize_params_t;
mbed_official 104:a6a92e2e5a92 211
mbed_official 104:a6a92e2e5a92 212 /**@brief GATT Read or Write Authorize Reply parameters. */
mbed_official 104:a6a92e2e5a92 213 typedef struct
mbed_official 104:a6a92e2e5a92 214 {
mbed_official 104:a6a92e2e5a92 215 uint8_t type; /**< Type of authorize operation, see @ref BLE_GATTS_AUTHORIZE_TYPES. */
mbed_official 104:a6a92e2e5a92 216 union {
mbed_official 104:a6a92e2e5a92 217 ble_gatts_read_authorize_params_t read; /**< Read authorization parameters. */
mbed_official 104:a6a92e2e5a92 218 ble_gatts_write_authorize_params_t write; /**< Write authorization parameters. */
mbed_official 104:a6a92e2e5a92 219 } params;
mbed_official 104:a6a92e2e5a92 220 } ble_gatts_rw_authorize_reply_params_t;
mbed_official 104:a6a92e2e5a92 221
mbed_official 104:a6a92e2e5a92 222
mbed_official 104:a6a92e2e5a92 223 /**
mbed_official 104:a6a92e2e5a92 224 * @brief GATT Server Event IDs.
mbed_official 104:a6a92e2e5a92 225 */
mbed_official 104:a6a92e2e5a92 226 enum BLE_GATTS_EVTS
mbed_official 104:a6a92e2e5a92 227 {
mbed_official 104:a6a92e2e5a92 228 BLE_GATTS_EVT_WRITE = BLE_GATTS_EVT_BASE, /**< Write operation performed. */
mbed_official 104:a6a92e2e5a92 229 BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST, /**< Read/Write Authorization request. */
mbed_official 104:a6a92e2e5a92 230 BLE_GATTS_EVT_SYS_ATTR_MISSING, /**< A persistent system attribute access is pending, awaiting a sd_ble_gatts_sys_attr_set(). */
mbed_official 104:a6a92e2e5a92 231 BLE_GATTS_EVT_HVC, /**< Handle Value Confirmation. */
mbed_official 104:a6a92e2e5a92 232 BLE_GATTS_EVT_SC_CONFIRM, /**< Service Changed Confirmation. */
mbed_official 104:a6a92e2e5a92 233 BLE_GATTS_EVT_TIMEOUT /**< Timeout. */
mbed_official 104:a6a92e2e5a92 234 };
mbed_official 104:a6a92e2e5a92 235
mbed_official 104:a6a92e2e5a92 236
mbed_official 104:a6a92e2e5a92 237 /**@brief Event structure for BLE_GATTS_EVT_WRITE. */
mbed_official 104:a6a92e2e5a92 238 typedef struct
mbed_official 104:a6a92e2e5a92 239 {
mbed_official 104:a6a92e2e5a92 240 uint16_t handle; /**< Attribute Handle. */
mbed_official 104:a6a92e2e5a92 241 uint8_t op; /**< Type of write operation, see @ref BLE_GATTS_OPS. */
mbed_official 104:a6a92e2e5a92 242 ble_gatts_attr_context_t context; /**< Attribute Context. */
mbed_official 104:a6a92e2e5a92 243 uint16_t offset; /**< Offset for the write operation. */
mbed_official 104:a6a92e2e5a92 244 uint16_t len; /**< Length of the incoming data. */
mbed_official 104:a6a92e2e5a92 245 uint8_t data[1]; /**< Incoming data, variable length. */
mbed_official 104:a6a92e2e5a92 246 } ble_gatts_evt_write_t;
mbed_official 104:a6a92e2e5a92 247
mbed_official 104:a6a92e2e5a92 248 /**@brief Event structure for authorize read request. */
mbed_official 104:a6a92e2e5a92 249 typedef struct
mbed_official 104:a6a92e2e5a92 250 {
mbed_official 104:a6a92e2e5a92 251 uint16_t handle; /**< Attribute Handle. */
mbed_official 104:a6a92e2e5a92 252 ble_gatts_attr_context_t context; /**< Attribute Context. */
mbed_official 104:a6a92e2e5a92 253 uint16_t offset; /**< Offset for the read operation. */
mbed_official 104:a6a92e2e5a92 254 } ble_gatts_evt_read_t;
mbed_official 104:a6a92e2e5a92 255
mbed_official 104:a6a92e2e5a92 256 /**@brief Event structure for BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST. */
mbed_official 104:a6a92e2e5a92 257 typedef struct
mbed_official 104:a6a92e2e5a92 258 {
mbed_official 104:a6a92e2e5a92 259 uint8_t type; /**< Type of authorize operation, see @ref BLE_GATTS_AUTHORIZE_TYPES. */
mbed_official 104:a6a92e2e5a92 260 union {
mbed_official 104:a6a92e2e5a92 261 ble_gatts_evt_read_t read; /**< Attribute Read Parameters. */
mbed_official 104:a6a92e2e5a92 262 ble_gatts_evt_write_t write; /**< Attribute Write Parameters. */
mbed_official 104:a6a92e2e5a92 263 } request;
mbed_official 104:a6a92e2e5a92 264 } ble_gatts_evt_rw_authorize_request_t;
mbed_official 104:a6a92e2e5a92 265
mbed_official 104:a6a92e2e5a92 266 /**@brief Event structure for BLE_GATTS_EVT_SYS_ATTR_MISSING. */
mbed_official 104:a6a92e2e5a92 267 typedef struct
mbed_official 104:a6a92e2e5a92 268 {
mbed_official 104:a6a92e2e5a92 269 uint8_t hint;
mbed_official 104:a6a92e2e5a92 270 } ble_gatts_evt_sys_attr_missing_t;
mbed_official 104:a6a92e2e5a92 271
mbed_official 104:a6a92e2e5a92 272
mbed_official 104:a6a92e2e5a92 273 /**@brief Event structure for BLE_GATTS_EVT_HVC. */
mbed_official 104:a6a92e2e5a92 274 typedef struct
mbed_official 104:a6a92e2e5a92 275 {
mbed_official 104:a6a92e2e5a92 276 uint16_t handle; /**< Attribute Handle. */
mbed_official 104:a6a92e2e5a92 277 } ble_gatts_evt_hvc_t;
mbed_official 104:a6a92e2e5a92 278
mbed_official 104:a6a92e2e5a92 279 /**@brief Event structure for BLE_GATTS_EVT_TIMEOUT. */
mbed_official 104:a6a92e2e5a92 280 typedef struct
mbed_official 104:a6a92e2e5a92 281 {
mbed_official 104:a6a92e2e5a92 282 uint8_t src; /**< Timeout source, see @ref BLE_GATT_TIMEOUT_SOURCES. */
mbed_official 104:a6a92e2e5a92 283 } ble_gatts_evt_timeout_t;
mbed_official 104:a6a92e2e5a92 284
mbed_official 104:a6a92e2e5a92 285
mbed_official 104:a6a92e2e5a92 286 /**@brief GATT Server event callback event structure. */
mbed_official 104:a6a92e2e5a92 287 typedef struct
mbed_official 104:a6a92e2e5a92 288 {
mbed_official 104:a6a92e2e5a92 289 uint16_t conn_handle; /**< Connection Handle on which event occurred. */
mbed_official 104:a6a92e2e5a92 290 union
mbed_official 104:a6a92e2e5a92 291 {
mbed_official 104:a6a92e2e5a92 292 ble_gatts_evt_write_t write; /**< Write Event Parameters. */
mbed_official 104:a6a92e2e5a92 293 ble_gatts_evt_rw_authorize_request_t authorize_request; /**< Read or Write Authorize Request Parameters. */
mbed_official 104:a6a92e2e5a92 294 ble_gatts_evt_sys_attr_missing_t sys_attr_missing; /**< System attributes missing. */
mbed_official 104:a6a92e2e5a92 295 ble_gatts_evt_hvc_t hvc; /**< Handle Value Confirmation Event Parameters. */
mbed_official 104:a6a92e2e5a92 296 ble_gatts_evt_timeout_t timeout; /**< Timeout Event. */
mbed_official 104:a6a92e2e5a92 297 } params;
mbed_official 104:a6a92e2e5a92 298 } ble_gatts_evt_t;
mbed_official 104:a6a92e2e5a92 299
mbed_official 104:a6a92e2e5a92 300
mbed_official 104:a6a92e2e5a92 301 /**@brief Add a service declaration to the local server ATT table.
mbed_official 104:a6a92e2e5a92 302 *
mbed_official 104:a6a92e2e5a92 303 * @param[in] type Toggles between primary and secondary services, see @ref BLE_GATTS_SRVC_TYPES.
mbed_official 104:a6a92e2e5a92 304 * @param[in] p_uuid Pointer to service UUID.
mbed_official 104:a6a92e2e5a92 305 * @param[out] p_handle Pointer to a 16-bit word where the assigned handle will be stored.
mbed_official 104:a6a92e2e5a92 306 *
mbed_official 104:a6a92e2e5a92 307 * @note Secondary Services are only relevant in the context of the entity that references them, it is therefore forbidden to
mbed_official 104:a6a92e2e5a92 308 * add a secondary service declaration that is not referenced by another service later in the ATT table.
mbed_official 104:a6a92e2e5a92 309 *
mbed_official 104:a6a92e2e5a92 310 * @return @ref NRF_SUCCESS Successfully added a service declaration.
mbed_official 104:a6a92e2e5a92 311 * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied.
mbed_official 104:a6a92e2e5a92 312 * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, Vendor Specific UUIDs need to be present in the table.
mbed_official 104:a6a92e2e5a92 313 * @return @ref NRF_ERROR_FORBIDDEN Forbidden value supplied, certain UUIDs are reserved for the stack.
mbed_official 104:a6a92e2e5a92 314 * @return @ref NRF_ERROR_NO_MEM Not enough memory to complete operation.
mbed_official 104:a6a92e2e5a92 315 */
mbed_official 104:a6a92e2e5a92 316 SVCALL(SD_BLE_GATTS_SERVICE_ADD, uint32_t, sd_ble_gatts_service_add(uint8_t type, ble_uuid_t const*const p_uuid, uint16_t *const p_handle));
mbed_official 104:a6a92e2e5a92 317
mbed_official 104:a6a92e2e5a92 318
mbed_official 104:a6a92e2e5a92 319 /**@brief Add an include declaration to the local server ATT table.
mbed_official 104:a6a92e2e5a92 320 *
mbed_official 104:a6a92e2e5a92 321 * @note It is currently only possible to add an include declaration to the last added service (i.e. only sequential addition is supported at this time).
mbed_official 104:a6a92e2e5a92 322 *
mbed_official 104:a6a92e2e5a92 323 * @note The included service must already be present in the ATT table prior to this call.
mbed_official 104:a6a92e2e5a92 324 *
mbed_official 104:a6a92e2e5a92 325 * @param[in] service_handle Handle of the service where the included service is to be placed, if BLE_GATT_HANDLE_INVALID is used, it will be placed sequentially.
mbed_official 104:a6a92e2e5a92 326 * @param[in] inc_srvc_handle Handle of the included service.
mbed_official 104:a6a92e2e5a92 327 * @param[out] p_include_handle Pointer to a 16-bit word where the assigned handle will be stored.
mbed_official 104:a6a92e2e5a92 328 *
mbed_official 104:a6a92e2e5a92 329 * @return @ref NRF_SUCCESS Successfully added an include declaration.
mbed_official 104:a6a92e2e5a92 330 * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied.
mbed_official 104:a6a92e2e5a92 331 * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, handle values need to match previously added services.
mbed_official 104:a6a92e2e5a92 332 * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation.
mbed_official 104:a6a92e2e5a92 333 * @return @ref NRF_ERROR_FORBIDDEN Forbidden value supplied, self inclusions are not allowed.
mbed_official 104:a6a92e2e5a92 334 * @return @ref NRF_ERROR_NO_MEM Not enough memory to complete operation.
mbed_official 104:a6a92e2e5a92 335 * @return @ref NRF_ERROR_NOT_FOUND Attribute not found.
mbed_official 104:a6a92e2e5a92 336 */
mbed_official 104:a6a92e2e5a92 337 SVCALL(SD_BLE_GATTS_INCLUDE_ADD, uint32_t, sd_ble_gatts_include_add(uint16_t service_handle, uint16_t inc_srvc_handle, uint16_t *const p_include_handle));
mbed_official 104:a6a92e2e5a92 338
mbed_official 104:a6a92e2e5a92 339
mbed_official 104:a6a92e2e5a92 340 /**@brief Add a characteristic declaration, a characteristic value declaration and optional characteristic descriptor declarations to the local server ATT table.
mbed_official 104:a6a92e2e5a92 341 *
mbed_official 104:a6a92e2e5a92 342 * @note It is currently only possible to add a characteristic to the last added service (i.e. only sequential addition is supported at this time).
mbed_official 104:a6a92e2e5a92 343 *
mbed_official 104:a6a92e2e5a92 344 * @note Several restrictions apply to the parameters, such as matching permissions between the user description descriptor and the writeable auxiliaries bits,
mbed_official 104:a6a92e2e5a92 345 * readable (no security) and writeable (selectable) CCCDs and SCCDs and valid presentation format values.
mbed_official 104:a6a92e2e5a92 346 *
mbed_official 104:a6a92e2e5a92 347 * @note If no metadata is provided for the optional descriptors, their permissions will be derived from the characteristic permissions.
mbed_official 104:a6a92e2e5a92 348 *
mbed_official 104:a6a92e2e5a92 349 * @param[in] service_handle Handle of the service where the characteristic is to be placed, if BLE_GATT_HANDLE_INVALID is used, it will be placed sequentially.
mbed_official 104:a6a92e2e5a92 350 * @param[in] p_char_md Characteristic metadata.
mbed_official 104:a6a92e2e5a92 351 * @param[in] p_attr_char_value Pointer to the attribute structure corresponding to the characteristic value.
mbed_official 104:a6a92e2e5a92 352 * @param[out] p_handles Pointer to the structure where the assigned handles will be stored.
mbed_official 104:a6a92e2e5a92 353 *
mbed_official 104:a6a92e2e5a92 354 * @return @ref NRF_SUCCESS Successfully added a characteristic.
mbed_official 104:a6a92e2e5a92 355 * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied.
mbed_official 104:a6a92e2e5a92 356 * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, service handle, Vendor Specific UUIDs, lengths, and permissions need to adhere to the constraints.
mbed_official 104:a6a92e2e5a92 357 * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation, a service context is required.
mbed_official 104:a6a92e2e5a92 358 * @return @ref NRF_ERROR_FORBIDDEN Forbidden value supplied, certain UUIDs are reserved for the stack.
mbed_official 104:a6a92e2e5a92 359 * @return @ref NRF_ERROR_NO_MEM Not enough memory to complete operation.
mbed_official 104:a6a92e2e5a92 360 * @return @ref NRF_ERROR_DATA_SIZE Invalid data size(s) supplied, attribute lengths are restricted by @ref BLE_GATTS_ATTR_LENS_MAX.
mbed_official 104:a6a92e2e5a92 361 */
mbed_official 104:a6a92e2e5a92 362 SVCALL(SD_BLE_GATTS_CHARACTERISTIC_ADD, uint32_t, sd_ble_gatts_characteristic_add(uint16_t service_handle, ble_gatts_char_md_t const*const p_char_md, ble_gatts_attr_t const*const p_attr_char_value, ble_gatts_char_handles_t *const p_handles));
mbed_official 104:a6a92e2e5a92 363
mbed_official 104:a6a92e2e5a92 364
mbed_official 104:a6a92e2e5a92 365 /**@brief Add a descriptor to the local server ATT table.
mbed_official 104:a6a92e2e5a92 366 *
mbed_official 104:a6a92e2e5a92 367 * @note It is currently only possible to add a descriptor to the last added characteristic (i.e. only sequential addition is supported at this time).
mbed_official 104:a6a92e2e5a92 368 *
mbed_official 104:a6a92e2e5a92 369 * @param[in] char_handle Handle of the characteristic where the descriptor is to be placed, if BLE_GATT_HANDLE_INVALID is used, it will be placed sequentially.
mbed_official 104:a6a92e2e5a92 370 * @param[in] p_attr Pointer to the attribute structure.
mbed_official 104:a6a92e2e5a92 371 * @param[out] p_handle Pointer to a 16-bit word where the assigned handle will be stored.
mbed_official 104:a6a92e2e5a92 372 *
mbed_official 104:a6a92e2e5a92 373 * @return @ref NRF_SUCCESS Successfully added a descriptor.
mbed_official 104:a6a92e2e5a92 374 * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied.
mbed_official 104:a6a92e2e5a92 375 * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, characteristic handle, Vendor Specific UUIDs, lengths, and permissions need to adhere to the constraints.
mbed_official 104:a6a92e2e5a92 376 * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation, a characteristic context is required.
mbed_official 104:a6a92e2e5a92 377 * @return @ref NRF_ERROR_FORBIDDEN Forbidden value supplied, certain UUIDs are reserved for the stack.
mbed_official 104:a6a92e2e5a92 378 * @return @ref NRF_ERROR_NO_MEM Not enough memory to complete operation.
mbed_official 104:a6a92e2e5a92 379 * @return @ref NRF_ERROR_DATA_SIZE Invalid data size(s) supplied, attribute lengths are restricted by @ref BLE_GATTS_ATTR_LENS_MAX.
mbed_official 104:a6a92e2e5a92 380 */
mbed_official 104:a6a92e2e5a92 381 SVCALL(SD_BLE_GATTS_DESCRIPTOR_ADD, uint32_t, sd_ble_gatts_descriptor_add(uint16_t char_handle, ble_gatts_attr_t const * const p_attr, uint16_t* const p_handle));
mbed_official 104:a6a92e2e5a92 382
mbed_official 104:a6a92e2e5a92 383 /**@brief Set the value of a given attribute.
mbed_official 104:a6a92e2e5a92 384 *
mbed_official 104:a6a92e2e5a92 385 * @param[in] handle Attribute handle.
mbed_official 104:a6a92e2e5a92 386 * @param[in] offset Offset in bytes to write from.
mbed_official 104:a6a92e2e5a92 387 * @param[in,out] p_len Length in bytes to be written, length in bytes written after successful return.
mbed_official 104:a6a92e2e5a92 388 * @param[in] p_value Pointer to a buffer (at least len bytes long) containing the desired attribute value.
mbed_official 104:a6a92e2e5a92 389 *
mbed_official 104:a6a92e2e5a92 390 * @return @ref NRF_SUCCESS Successfully set the value of the attribute.
mbed_official 104:a6a92e2e5a92 391 * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied.
mbed_official 104:a6a92e2e5a92 392 * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied.
mbed_official 104:a6a92e2e5a92 393 * @return @ref NRF_ERROR_NOT_FOUND Attribute not found.
mbed_official 104:a6a92e2e5a92 394 * @return @ref NRF_ERROR_FORBIDDEN Forbidden handle supplied, certain attributes are not modifiable by the application.
mbed_official 104:a6a92e2e5a92 395 * @return @ref NRF_ERROR_DATA_SIZE Invalid data size(s) supplied, attribute lengths are restricted by @ref BLE_GATTS_ATTR_LENS_MAX.
mbed_official 104:a6a92e2e5a92 396 */
mbed_official 104:a6a92e2e5a92 397 SVCALL(SD_BLE_GATTS_VALUE_SET, uint32_t, sd_ble_gatts_value_set(uint16_t handle, uint16_t offset, uint16_t* const p_len, uint8_t const * const p_value));
mbed_official 104:a6a92e2e5a92 398
mbed_official 104:a6a92e2e5a92 399 /**@brief Get the value of a given attribute.
mbed_official 104:a6a92e2e5a92 400 *
mbed_official 104:a6a92e2e5a92 401 * @param[in] handle Attribute handle.
mbed_official 104:a6a92e2e5a92 402 * @param[in] offset Offset in bytes to read from.
mbed_official 104:a6a92e2e5a92 403 * @param[in,out] p_len Length in bytes to be read, total length of attribute value (in bytes, starting from offset) after successful return.
mbed_official 104:a6a92e2e5a92 404 * @param[in,out] p_data Pointer to a buffer (at least len bytes long) where to store the attribute value. Set to NULL to obtain the complete length of attribute value.
mbed_official 104:a6a92e2e5a92 405 *
mbed_official 104:a6a92e2e5a92 406 * @note If the attribute value is longer than the size of the supplied buffer,
mbed_official 104:a6a92e2e5a92 407 * p_len will return the total attribute value length (excluding offset),
mbed_official 104:a6a92e2e5a92 408 * and not the number of bytes actually returned in p_data.
mbed_official 104:a6a92e2e5a92 409 * The application may use this information to allocate a suitable buffer size.
mbed_official 104:a6a92e2e5a92 410 *
mbed_official 104:a6a92e2e5a92 411 * @return @ref NRF_SUCCESS Successfully retrieved the value of the attribute.
mbed_official 104:a6a92e2e5a92 412 * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied.
mbed_official 104:a6a92e2e5a92 413 * @return @ref NRF_ERROR_NOT_FOUND Attribute not found.
mbed_official 104:a6a92e2e5a92 414 */
mbed_official 104:a6a92e2e5a92 415 SVCALL(SD_BLE_GATTS_VALUE_GET, uint32_t, sd_ble_gatts_value_get(uint16_t handle, uint16_t offset, uint16_t *const p_len, uint8_t* const p_data));
mbed_official 104:a6a92e2e5a92 416
mbed_official 104:a6a92e2e5a92 417 /**@brief Notify or Indicate an attribute value.
mbed_official 104:a6a92e2e5a92 418 *
mbed_official 104:a6a92e2e5a92 419 * @details This function checks for the relevant Client Characteristic Configuration descriptor value to verify that the relevant operation
mbed_official 104:a6a92e2e5a92 420 * (notification or indication) has been enabled by the client. It is also able to update the attribute value before issuing the PDU, so that
mbed_official 104:a6a92e2e5a92 421 * the application can atomically perform a value update and a server initiated transaction with a single API call.
mbed_official 104:a6a92e2e5a92 422 * If the application chooses to indicate an attribute value, a @ref BLE_GATTS_EVT_HVC will be sent up as soon as the confirmation arrives from
mbed_official 104:a6a92e2e5a92 423 * the peer.
mbed_official 104:a6a92e2e5a92 424 *
mbed_official 104:a6a92e2e5a92 425 * @note The local attribute value may be updated even if an outgoing packet is not sent to the peer due to an error during execution.
mbed_official 104:a6a92e2e5a92 426 * When receiveing the error codes @ref NRF_ERROR_INVALID_STATE, @ref NRF_ERROR_BUSY, @ref BLE_ERROR_GATTS_SYS_ATTR_MISSING and
mbed_official 104:a6a92e2e5a92 427 * @ref BLE_ERROR_NO_TX_BUFFERS the ATT table has been updated.
mbed_official 104:a6a92e2e5a92 428 * The caller can check whether the value has been updated by looking at the contents of *(p_hvx_params->p_len).
mbed_official 104:a6a92e2e5a92 429 *
mbed_official 104:a6a92e2e5a92 430 * @note It is important to note that a notification will <b>consume an application buffer</b>, and will therefore
mbed_official 104:a6a92e2e5a92 431 * generate a @ref BLE_EVT_TX_COMPLETE event when the packet has been transmitted. An indication on the other hand will use the
mbed_official 104:a6a92e2e5a92 432 * standard server internal buffer and thus will only generate a @ref BLE_GATTS_EVT_HVC event as soon as the confirmation
mbed_official 104:a6a92e2e5a92 433 * has been received from the peer. Please see the documentation of @ref sd_ble_tx_buffer_count_get for more details.
mbed_official 104:a6a92e2e5a92 434 *
mbed_official 104:a6a92e2e5a92 435 * @param[in] conn_handle Connection handle.
mbed_official 104:a6a92e2e5a92 436 * @param[in] p_hvx_params Pointer to an HVx parameters structure. If the p_data member contains a non-NULL pointer the attribute value will be updated with
mbed_official 104:a6a92e2e5a92 437 * the contents pointed by it before sending the notification or indication.
mbed_official 104:a6a92e2e5a92 438 *
mbed_official 104:a6a92e2e5a92 439 * @return @ref NRF_SUCCESS Successfully queued a notification or indication for transmission, and optionally updated the attribute value.
mbed_official 104:a6a92e2e5a92 440 * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle.
mbed_official 104:a6a92e2e5a92 441 * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied.
mbed_official 104:a6a92e2e5a92 442 * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied.
mbed_official 104:a6a92e2e5a92 443 * @return @ref BLE_ERROR_INVALID_ATTR_HANDLE Invalid attribute handle(s) supplied. Only attributes added directly by the application are available to notify and indicate.
mbed_official 104:a6a92e2e5a92 444 * @return @ref BLE_ERROR_GATTS_INVALID_ATTR_TYPE Invalid attribute type(s) supplied, only characteristic values may be notified and indicated.
mbed_official 104:a6a92e2e5a92 445 * @return @ref NRF_ERROR_NOT_FOUND Attribute not found.
mbed_official 104:a6a92e2e5a92 446 * @return @ref NRF_ERROR_DATA_SIZE Invalid data size(s) supplied.
mbed_official 104:a6a92e2e5a92 447 * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation, notifications or indications must be enabled in the CCCD.
mbed_official 104:a6a92e2e5a92 448 * @return @ref NRF_ERROR_BUSY Procedure already in progress.
mbed_official 104:a6a92e2e5a92 449 * @return @ref BLE_ERROR_GATTS_SYS_ATTR_MISSING System attributes missing, use @ref sd_ble_gatts_sys_attr_set to set them to a known value.
mbed_official 104:a6a92e2e5a92 450 * @return @ref BLE_ERROR_NO_TX_BUFFERS There are no available buffers to send the data, applies only to notifications.
mbed_official 104:a6a92e2e5a92 451 */
mbed_official 104:a6a92e2e5a92 452 SVCALL(SD_BLE_GATTS_HVX, uint32_t, sd_ble_gatts_hvx(uint16_t conn_handle, ble_gatts_hvx_params_t const*const p_hvx_params));
mbed_official 104:a6a92e2e5a92 453
mbed_official 104:a6a92e2e5a92 454 /**@brief Indicate the Service Changed attribute value.
mbed_official 104:a6a92e2e5a92 455 *
mbed_official 104:a6a92e2e5a92 456 * @details This call will send a Handle Value Indication to one or more peers connected to inform them that the attribute
mbed_official 104:a6a92e2e5a92 457 * table layout has changed. As soon as the peer has confirmed the indication, a @ref BLE_GATTS_EVT_SC_CONFIRM event will
mbed_official 104:a6a92e2e5a92 458 * be issued.
mbed_official 104:a6a92e2e5a92 459 *
mbed_official 104:a6a92e2e5a92 460 * @note Some of the restrictions and limitations that apply to @ref sd_ble_gatts_hvx also apply here.
mbed_official 104:a6a92e2e5a92 461 *
mbed_official 104:a6a92e2e5a92 462 * @param[in] conn_handle Connection handle.
mbed_official 104:a6a92e2e5a92 463 * @param[in] start_handle Start of affected attribute handle range.
mbed_official 104:a6a92e2e5a92 464 * @param[in] end_handle End of affected attribute handle range.
mbed_official 104:a6a92e2e5a92 465 *
mbed_official 104:a6a92e2e5a92 466 * @return @ref NRF_SUCCESS Successfully queued the Service Changed indication for transmission.
mbed_official 104:a6a92e2e5a92 467 * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle.
mbed_official 104:a6a92e2e5a92 468 * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied.
mbed_official 104:a6a92e2e5a92 469 * @return @ref BLE_ERROR_INVALID_ATTR_HANDLE Invalid attribute handle(s) supplied, handles must be in the range populated by the application.
mbed_official 104:a6a92e2e5a92 470 * @return @ref NRF_ERROR_INVALID_STATE Invalid state to perform operation, notifications or indications must be enabled in the CCCD.
mbed_official 104:a6a92e2e5a92 471 * @return @ref NRF_ERROR_BUSY Procedure already in progress.
mbed_official 104:a6a92e2e5a92 472 * @return @ref BLE_ERROR_GATTS_SYS_ATTR_MISSING System attributes missing, use @ref sd_ble_gatts_sys_attr_set to set them to a known value.
mbed_official 104:a6a92e2e5a92 473 */
mbed_official 104:a6a92e2e5a92 474 SVCALL(SD_BLE_GATTS_SERVICE_CHANGED, uint32_t, sd_ble_gatts_service_changed(uint16_t conn_handle, uint16_t start_handle, uint16_t end_handle));
mbed_official 104:a6a92e2e5a92 475
mbed_official 104:a6a92e2e5a92 476 /**@brief Respond to a Read/Write authorization request.
mbed_official 104:a6a92e2e5a92 477 *
mbed_official 104:a6a92e2e5a92 478 * @note This call should only be used as a response to a @ref BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST event issued to the application.
mbed_official 104:a6a92e2e5a92 479 *
mbed_official 104:a6a92e2e5a92 480 * @param[in] conn_handle Connection handle.
mbed_official 104:a6a92e2e5a92 481 * @param[in] p_rw_authorize_reply_params Pointer to a structure with the attribute provided by the application.
mbed_official 104:a6a92e2e5a92 482 *
mbed_official 104:a6a92e2e5a92 483 * @return @ref NRF_SUCCESS Successfully queued a response to the peer, and in the case of a write operation, ATT table updated.
mbed_official 104:a6a92e2e5a92 484 * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle.
mbed_official 104:a6a92e2e5a92 485 * @return @ref NRF_ERROR_INVALID_STATE No authorization request pending.
mbed_official 104:a6a92e2e5a92 486 * @return @ref NRF_ERROR_INVALID_PARAM Authorization op invalid,
mbed_official 104:a6a92e2e5a92 487 * or for Read Authorization reply: requested handles not replied with,
mbed_official 104:a6a92e2e5a92 488 * or for Write Authorization reply: handle supplied does not match requested handle.
mbed_official 104:a6a92e2e5a92 489 */
mbed_official 104:a6a92e2e5a92 490 SVCALL(SD_BLE_GATTS_RW_AUTHORIZE_REPLY, uint32_t, sd_ble_gatts_rw_authorize_reply(uint16_t conn_handle, ble_gatts_rw_authorize_reply_params_t const*const p_rw_authorize_reply_params));
mbed_official 104:a6a92e2e5a92 491
mbed_official 104:a6a92e2e5a92 492
mbed_official 104:a6a92e2e5a92 493 /**@brief Update persistent system attribute information.
mbed_official 104:a6a92e2e5a92 494 *
mbed_official 104:a6a92e2e5a92 495 * @details Supply to the stack information about persistent system attributes.
mbed_official 104:a6a92e2e5a92 496 * This call is legal in the connected state only, and is usually
mbed_official 104:a6a92e2e5a92 497 * made immediately after a connection is established and the bond identified.
mbed_official 104:a6a92e2e5a92 498 * usually as a response to a BLE_GATTS_EVT_SYS_ATTR_MISSING.
mbed_official 104:a6a92e2e5a92 499 *
mbed_official 104:a6a92e2e5a92 500 * p_sysattrs may point directly to the application's stored copy of the struct.
mbed_official 104:a6a92e2e5a92 501 * If the pointer is NULL, the system attribute info is initialized, assuming that
mbed_official 104:a6a92e2e5a92 502 * the application does not have any previously saved data for this bond.
mbed_official 104:a6a92e2e5a92 503 *
mbed_official 104:a6a92e2e5a92 504 * @note The state of persistent system attributes is reset upon connection and then remembered for its duration.
mbed_official 104:a6a92e2e5a92 505 *
mbed_official 104:a6a92e2e5a92 506 * @note If this call returns with an error code different from @ref NRF_SUCCESS, the storage of persistent system attributes may have been completed only partially.
mbed_official 104:a6a92e2e5a92 507 * This means that the state of the attribute table is undefined, and the application should either provide a new set of attributes using this same call or
mbed_official 104:a6a92e2e5a92 508 * reset the SoftDevice to return to a known state.
mbed_official 104:a6a92e2e5a92 509 *
mbed_official 104:a6a92e2e5a92 510 * @param[in] conn_handle Connection handle.
mbed_official 104:a6a92e2e5a92 511 * @param[in] p_sys_attr_data Pointer to a saved copy of system attributes supplied to the stack, or NULL.
mbed_official 104:a6a92e2e5a92 512 * @param[in] len Size of data pointed by p_sys_attr_data, in octets.
mbed_official 104:a6a92e2e5a92 513 *
mbed_official 104:a6a92e2e5a92 514 * @return @ref NRF_SUCCESS Successfully set the system attribute information.
mbed_official 104:a6a92e2e5a92 515 * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle.
mbed_official 104:a6a92e2e5a92 516 * @return @ref NRF_ERROR_INVALID_DATA Invalid data supplied, the data should be exactly the same as retrieved with @ref sd_ble_gatts_sys_attr_get.
mbed_official 104:a6a92e2e5a92 517 * @return @ref NRF_ERROR_NO_MEM Not enough memory to complete operation.
mbed_official 104:a6a92e2e5a92 518 */
mbed_official 104:a6a92e2e5a92 519 SVCALL(SD_BLE_GATTS_SYS_ATTR_SET, uint32_t, sd_ble_gatts_sys_attr_set(uint16_t conn_handle, uint8_t const*const p_sys_attr_data, uint16_t len));
mbed_official 104:a6a92e2e5a92 520
mbed_official 104:a6a92e2e5a92 521
mbed_official 104:a6a92e2e5a92 522 /**@brief Retrieve persistent system attribute information from the stack.
mbed_official 104:a6a92e2e5a92 523 *
mbed_official 104:a6a92e2e5a92 524 * @details This call is used to retrieve information about values to be stored perisistently by the application
mbed_official 104:a6a92e2e5a92 525 * after a connection has been terminated. When a new connection is made to the same bond, the values
mbed_official 104:a6a92e2e5a92 526 * should be restored using @ref sd_ble_gatts_sys_attr_set.
mbed_official 104:a6a92e2e5a92 527 * The data should be read before any new advertising is started, or any new connection established. The connection handle for
mbed_official 104:a6a92e2e5a92 528 * the previous now defunct connection will remain valid until a new one is created to allow this API call to refer to it.
mbed_official 104:a6a92e2e5a92 529 *
mbed_official 104:a6a92e2e5a92 530 * @param[in] conn_handle Connection handle of the recently terminated connection.
mbed_official 104:a6a92e2e5a92 531 * @param[in] p_sys_attr_data Pointer to a buffer where updated information about system attributes will be filled in. NULL can be provided to
mbed_official 104:a6a92e2e5a92 532 * obtain the length of the data
mbed_official 104:a6a92e2e5a92 533 * @param[in,out] p_len Size of application buffer if p_sys_attr_data is not NULL. Unconditially updated to actual length of system attribute data.
mbed_official 104:a6a92e2e5a92 534 *
mbed_official 104:a6a92e2e5a92 535 * @return @ref NRF_SUCCESS Successfully retrieved the system attribute information.
mbed_official 104:a6a92e2e5a92 536 * @return @ref BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle.
mbed_official 104:a6a92e2e5a92 537 * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied.
mbed_official 104:a6a92e2e5a92 538 * @return @ref NRF_ERROR_DATA_SIZE The system attribute information did not fit into the provided buffer.
mbed_official 104:a6a92e2e5a92 539 */
mbed_official 104:a6a92e2e5a92 540 SVCALL(SD_BLE_GATTS_SYS_ATTR_GET, uint32_t, sd_ble_gatts_sys_attr_get(uint16_t conn_handle, uint8_t * const p_sys_attr_data, uint16_t* const p_len));
mbed_official 104:a6a92e2e5a92 541
mbed_official 104:a6a92e2e5a92 542
mbed_official 104:a6a92e2e5a92 543 #endif // BLE_GATTS_H__
mbed_official 104:a6a92e2e5a92 544
mbed_official 104:a6a92e2e5a92 545 /**
mbed_official 104:a6a92e2e5a92 546 @}
mbed_official 104:a6a92e2e5a92 547 */