RCBControllerでモータを制御します。うおーるぼっとも動かせました。

Dependencies:   BLE_API TB6612FNG2 mbed nRF51822

Fork of BLE_RCBController2 by Junichi Katsu

うまく接続できない時は、iPhone/iPadのBluetoothをOFF->ONしてキャッシュをクリアしてみてください。

ライブラリ類をUpdateするとコンパイル出来なくなります。インポートした物をそのまま使って下さい。

RCBControllerでうおーるぼっとを操縦する例 /media/uploads/robo8080/img_1671.jpg

Components / Wallbot
This robot has switch, line sensors and motors. It controls by mbed.

RCBControllerでの操縦は次の4種類あります。 それぞれうおーるぼっとの動きが異なりますので試してみてください。

  • 左十字ボタン
  • 左のみアナログ
  • 右のみアナログ
  • 両方アナログ

うおーるぼっと(LPC1768のソケット)とHRM1017の接続はこれです。

LPC1768 ー HRM1017

p11 ーーー P0_0

p12 ーーー P0_1

p13 ーーー P0_28

p14 ーーー P0_29

p21 ーーー P0_30

p22 ーーー P0_25

GND ーーー GND

/media/uploads/robo8080/img_1711.jpg

/media/uploads/robo8080/img_1703.jpg

HRM1017の電源はうおーるぼっとのUSBコネクタからとります。 /media/uploads/robo8080/img_1674.jpg

Committer:
jksoft
Date:
Wed Aug 20 13:41:01 2014 +0000
Revision:
4:ebda47d22091
Parent:
nRF51822/nordic/nrf-sdk/s110/ble_gatts.h@1:48f6e08a3ac2
?????????

Who changed what in which revision?

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