fix adv issue with SD 6.1.0. Add binaries for 6.1.0r0
This commit is contained in:
		
							
								
								
									
										2
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								Makefile
									
									
									
									
									
								
							| @@ -18,7 +18,7 @@ TUSB_PATH       = lib/tinyusb/src | |||||||
| NRFX_PATH				= lib/nrfx | NRFX_PATH				= lib/nrfx | ||||||
|  |  | ||||||
| SD_VER1         = 6 | SD_VER1         = 6 | ||||||
| SD_VER2         = 0 | SD_VER2         = 1 | ||||||
| SD_VER3         = 0 | SD_VER3         = 0 | ||||||
| SD_VER4         = 0 | SD_VER4         = 0 | ||||||
|  |  | ||||||
|   | |||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										11373
									
								
								bin/pca10056/6.1.0r0/pca10056_bootloader_s140_6.1.0r0.hex
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11373
									
								
								bin/pca10056/6.1.0r0/pca10056_bootloader_s140_6.1.0r0.hex
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								bin/pca10056/6.1.0r0/pca10056_bootloader_s140_6.1.0r0.zip
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								bin/pca10056/6.1.0r0/pca10056_bootloader_s140_6.1.0r0.zip
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| @@ -654,11 +654,11 @@ static void advertising_start(void) | |||||||
| { | { | ||||||
|   if (!m_is_advertising) |   if (!m_is_advertising) | ||||||
|   { |   { | ||||||
|     uint8_t adv_buf[BLE_GAP_ADV_SET_DATA_SIZE_MAX]; |     static uint8_t adv_buf[BLE_GAP_ADV_SET_DATA_SIZE_MAX]; | ||||||
|     ble_gap_adv_data_t gap_adv = |     static ble_gap_adv_data_t gap_adv; | ||||||
|     { |  | ||||||
|         .adv_data = { .p_data = adv_buf, .len = 0 } |     varclr(&gap_adv); | ||||||
|     }; |     gap_adv.adv_data.p_data = adv_buf; | ||||||
|  |  | ||||||
|     uint8_t  adv_flag = BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE; |     uint8_t  adv_flag = BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE; | ||||||
|     ble_gap_adv_params_t m_adv_params = |     ble_gap_adv_params_t m_adv_params = | ||||||
|   | |||||||
| @@ -1,622 +0,0 @@ | |||||||
| /* |  | ||||||
|  * Copyright (c) 2012 - 2018, Nordic Semiconductor ASA |  | ||||||
|  * All rights reserved. |  | ||||||
|  * |  | ||||||
|  * Redistribution and use in source and binary forms, with or without modification, |  | ||||||
|  * are permitted provided that the following conditions are met: |  | ||||||
|  * |  | ||||||
|  * 1. Redistributions of source code must retain the above copyright notice, this |  | ||||||
|  *    list of conditions and the following disclaimer. |  | ||||||
|  * |  | ||||||
|  * 2. Redistributions in binary form, except as embedded into a Nordic |  | ||||||
|  *    Semiconductor ASA integrated circuit in a product or a software update for |  | ||||||
|  *    such product, must reproduce the above copyright notice, this list of |  | ||||||
|  *    conditions and the following disclaimer in the documentation and/or other |  | ||||||
|  *    materials provided with the distribution. |  | ||||||
|  * |  | ||||||
|  * 3. Neither the name of Nordic Semiconductor ASA nor the names of its |  | ||||||
|  *    contributors may be used to endorse or promote products derived from this |  | ||||||
|  *    software without specific prior written permission. |  | ||||||
|  * |  | ||||||
|  * 4. This software, with or without modification, must only be used with a |  | ||||||
|  *    Nordic Semiconductor ASA integrated circuit. |  | ||||||
|  * |  | ||||||
|  * 5. Any software provided in binary form under this license must not be reverse |  | ||||||
|  *    engineered, decompiled, modified and/or disassembled. |  | ||||||
|  * |  | ||||||
|  * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS |  | ||||||
|  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |  | ||||||
|  * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE |  | ||||||
|  * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE |  | ||||||
|  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |  | ||||||
|  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE |  | ||||||
|  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |  | ||||||
|  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |  | ||||||
|  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT |  | ||||||
|  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |  | ||||||
|  */ |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|   @addtogroup BLE_COMMON BLE SoftDevice Common |  | ||||||
|   @{ |  | ||||||
|   @defgroup ble_api Events, type definitions and API calls |  | ||||||
|   @{ |  | ||||||
|  |  | ||||||
|   @brief Module independent events, type definitions and API calls for the BLE SoftDevice. |  | ||||||
|  |  | ||||||
|  */ |  | ||||||
|  |  | ||||||
| #ifndef BLE_H__ |  | ||||||
| #define BLE_H__ |  | ||||||
|  |  | ||||||
| #include <stdint.h> |  | ||||||
| #include "nrf_svc.h" |  | ||||||
| #include "nrf_error.h" |  | ||||||
| #include "ble_err.h" |  | ||||||
| #include "ble_gap.h" |  | ||||||
| #include "ble_l2cap.h" |  | ||||||
| #include "ble_gatt.h" |  | ||||||
| #include "ble_gattc.h" |  | ||||||
| #include "ble_gatts.h" |  | ||||||
|  |  | ||||||
| #ifdef __cplusplus |  | ||||||
| extern "C" { |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| /** @addtogroup BLE_COMMON_ENUMERATIONS Enumerations |  | ||||||
|  * @{ */ |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|  * @brief Common API SVC numbers. |  | ||||||
|  */ |  | ||||||
| enum BLE_COMMON_SVCS |  | ||||||
| { |  | ||||||
|   SD_BLE_ENABLE = BLE_SVC_BASE,         /**< Enable and initialize the BLE stack */ |  | ||||||
|   SD_BLE_EVT_GET,                       /**< Get an event from the pending events queue. */ |  | ||||||
|   SD_BLE_UUID_VS_ADD,                   /**< Add a Vendor Specific UUID. */ |  | ||||||
|   SD_BLE_UUID_DECODE,                   /**< Decode UUID bytes. */ |  | ||||||
|   SD_BLE_UUID_ENCODE,                   /**< Encode UUID bytes. */ |  | ||||||
|   SD_BLE_VERSION_GET,                   /**< Get the local version information (company ID, Link Layer Version, Link Layer Subversion). */ |  | ||||||
|   SD_BLE_USER_MEM_REPLY,                /**< User Memory Reply. */ |  | ||||||
|   SD_BLE_OPT_SET,                       /**< Set a BLE option. */ |  | ||||||
|   SD_BLE_OPT_GET,                       /**< Get a BLE option. */ |  | ||||||
|   SD_BLE_CFG_SET,                       /**< Add a configuration to the BLE stack. */ |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|  * @brief BLE Module Independent Event IDs. |  | ||||||
|  */ |  | ||||||
| enum BLE_COMMON_EVTS |  | ||||||
| { |  | ||||||
|   BLE_EVT_USER_MEM_REQUEST = BLE_EVT_BASE + 0,   /**< User Memory request. @ref ble_evt_user_mem_request_t */ |  | ||||||
|   BLE_EVT_USER_MEM_RELEASE = BLE_EVT_BASE + 1,   /**< User Memory release. @ref ble_evt_user_mem_release_t */ |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| /**@brief BLE Connection Configuration IDs. |  | ||||||
|  * |  | ||||||
|  * IDs that uniquely identify a connection configuration. |  | ||||||
|  */ |  | ||||||
| enum BLE_CONN_CFGS |  | ||||||
| { |  | ||||||
|     BLE_CONN_CFG_GAP   = BLE_CONN_CFG_BASE + 0, /**< BLE GAP specific connection configuration. */ |  | ||||||
|     BLE_CONN_CFG_GATTC = BLE_CONN_CFG_BASE + 1, /**< BLE GATTC specific connection configuration. */ |  | ||||||
|     BLE_CONN_CFG_GATTS = BLE_CONN_CFG_BASE + 2, /**< BLE GATTS specific connection configuration. */ |  | ||||||
|     BLE_CONN_CFG_GATT  = BLE_CONN_CFG_BASE + 3, /**< BLE GATT specific connection configuration. */ |  | ||||||
|     BLE_CONN_CFG_L2CAP = BLE_CONN_CFG_BASE + 4, /**< BLE L2CAP specific connection configuration. */ |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| /**@brief BLE Common Configuration IDs. |  | ||||||
|  * |  | ||||||
|  * IDs that uniquely identify a common configuration. |  | ||||||
|  */ |  | ||||||
| enum BLE_COMMON_CFGS |  | ||||||
| { |  | ||||||
|   BLE_COMMON_CFG_VS_UUID = BLE_CFG_BASE, /**< Vendor specific UUID configuration */ |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| /**@brief Common Option IDs. |  | ||||||
|  * IDs that uniquely identify a common option. |  | ||||||
|  */ |  | ||||||
| enum BLE_COMMON_OPTS |  | ||||||
| { |  | ||||||
|   BLE_COMMON_OPT_PA_LNA       = BLE_OPT_BASE + 0, /**< PA and LNA options */ |  | ||||||
|   BLE_COMMON_OPT_CONN_EVT_EXT = BLE_OPT_BASE + 1, /**< Extended connection events option */ |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
| /** @addtogroup BLE_COMMON_DEFINES Defines |  | ||||||
|  * @{ */ |  | ||||||
|  |  | ||||||
| /** @brief  Required pointer alignment for BLE Events. |  | ||||||
| */ |  | ||||||
| #define BLE_EVT_PTR_ALIGNMENT    4 |  | ||||||
|  |  | ||||||
| /** @brief  Leaves the maximum of the two arguments. |  | ||||||
| */ |  | ||||||
| #define BLE_MAX(a, b) ((a) < (b) ? (b) : (a)) |  | ||||||
|  |  | ||||||
| /** @brief  Maximum possible length for BLE Events. |  | ||||||
|  * @note The highest value used for @ref ble_gatt_conn_cfg_t::att_mtu in any connection configuration shall be used as a parameter. |  | ||||||
|  * If that value has not been configured for any connections then @ref BLE_GATT_ATT_MTU_DEFAULT must be used instead. |  | ||||||
| */ |  | ||||||
| #define BLE_EVT_LEN_MAX(ATT_MTU) ( \ |  | ||||||
|     offsetof(ble_evt_t, evt.gattc_evt.params.prim_srvc_disc_rsp.services) + ((ATT_MTU) - 1) / 4 * sizeof(ble_gattc_service_t) \ |  | ||||||
| ) |  | ||||||
|  |  | ||||||
| /** @defgroup BLE_USER_MEM_TYPES User Memory Types |  | ||||||
|  * @{ */ |  | ||||||
| #define BLE_USER_MEM_TYPE_INVALID               0x00  /**< Invalid User Memory Types. */ |  | ||||||
| #define BLE_USER_MEM_TYPE_GATTS_QUEUED_WRITES   0x01  /**< User Memory for GATTS queued writes. */ |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
| /** @defgroup BLE_UUID_VS_COUNTS Vendor Specific UUID counts |  | ||||||
|  * @{ |  | ||||||
|  */ |  | ||||||
| #define BLE_UUID_VS_COUNT_DEFAULT 10  /**< Default VS UUID count. */ |  | ||||||
| #define BLE_UUID_VS_COUNT_MAX     254 /**< Maximum VS UUID count. */ |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
| /** @defgroup BLE_COMMON_CFG_DEFAULTS Configuration defaults. |  | ||||||
|  * @{ |  | ||||||
|  */ |  | ||||||
| #define BLE_CONN_CFG_TAG_DEFAULT  0    /**< Default configuration tag, SoftDevice default connection configuration. */ |  | ||||||
|  |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
| /** @addtogroup BLE_COMMON_STRUCTURES Structures |  | ||||||
|  * @{ */ |  | ||||||
|  |  | ||||||
| /**@brief User Memory Block. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint8_t          *p_mem;      /**< Pointer to the start of the user memory block. */ |  | ||||||
|   uint16_t          len;        /**< Length in bytes of the user memory block. */ |  | ||||||
| } ble_user_mem_block_t; |  | ||||||
|  |  | ||||||
| /**@brief Event structure for @ref BLE_EVT_USER_MEM_REQUEST. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint8_t                     type;     /**< User memory type, see @ref BLE_USER_MEM_TYPES. */ |  | ||||||
| } ble_evt_user_mem_request_t; |  | ||||||
|  |  | ||||||
| /**@brief Event structure for @ref BLE_EVT_USER_MEM_RELEASE. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint8_t                     type;       /**< User memory type, see @ref BLE_USER_MEM_TYPES. */ |  | ||||||
|   ble_user_mem_block_t        mem_block;  /**< User memory block */ |  | ||||||
| } ble_evt_user_mem_release_t; |  | ||||||
|  |  | ||||||
| /**@brief Event structure for events not associated with a specific function module. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint16_t conn_handle;                                 /**< Connection Handle on which this event occurred. */ |  | ||||||
|   union |  | ||||||
|   { |  | ||||||
|     ble_evt_user_mem_request_t      user_mem_request;    /**< User Memory Request Event Parameters. */ |  | ||||||
|     ble_evt_user_mem_release_t      user_mem_release;    /**< User Memory Release Event Parameters. */ |  | ||||||
|   } params;                                              /**< Event parameter union. */ |  | ||||||
| } ble_common_evt_t; |  | ||||||
|  |  | ||||||
| /**@brief BLE Event header. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint16_t evt_id;                /**< Value from a BLE_<module>_EVT series. */ |  | ||||||
|   uint16_t evt_len;               /**< Length in octets including this header. */ |  | ||||||
| } ble_evt_hdr_t; |  | ||||||
|  |  | ||||||
| /**@brief Common BLE Event type, wrapping the module specific event reports. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   ble_evt_hdr_t header;           /**< Event header. */ |  | ||||||
|   union |  | ||||||
|   { |  | ||||||
|     ble_common_evt_t  common_evt; /**< Common Event, evt_id in BLE_EVT_* series. */ |  | ||||||
|     ble_gap_evt_t     gap_evt;    /**< GAP originated event, evt_id in BLE_GAP_EVT_* series. */ |  | ||||||
|     ble_gattc_evt_t   gattc_evt;  /**< GATT client originated event, evt_id in BLE_GATTC_EVT* series. */ |  | ||||||
|     ble_gatts_evt_t   gatts_evt;  /**< GATT server originated event, evt_id in BLE_GATTS_EVT* series. */ |  | ||||||
|     ble_l2cap_evt_t   l2cap_evt;  /**< L2CAP originated event, evt_id in BLE_L2CAP_EVT* series. */ |  | ||||||
|   } evt;                          /**< Event union. */ |  | ||||||
| } ble_evt_t; |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|  * @brief Version Information. |  | ||||||
|  */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint8_t   version_number;    /**< Link Layer Version number. See https://www.bluetooth.org/en-us/specification/assigned-numbers/link-layer for assigned values. */ |  | ||||||
|   uint16_t  company_id;        /**< Company ID, Nordic Semiconductor's company ID is 89 (0x0059) (https://www.bluetooth.org/apps/content/Default.aspx?doc_id=49708). */ |  | ||||||
|   uint16_t  subversion_number; /**< Link Layer Sub Version number, corresponds to the SoftDevice Config ID or Firmware ID (FWID). */ |  | ||||||
| } ble_version_t; |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|  * @brief Configuration parameters for the PA and LNA. |  | ||||||
|  */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|      uint8_t enable :1;      /**< Enable toggling for this amplifier */ |  | ||||||
|      uint8_t active_high :1; /**< Set the pin to be active high */ |  | ||||||
|      uint8_t gpio_pin :6;    /**< The GPIO pin to toggle for this amplifier */ |  | ||||||
| } ble_pa_lna_cfg_t; |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|  * @brief PA & LNA GPIO toggle configuration |  | ||||||
|  * |  | ||||||
|  * This option configures the SoftDevice to toggle pins when the radio is active for use with a power amplifier and/or |  | ||||||
|  * a low noise amplifier. |  | ||||||
|  * |  | ||||||
|  * Toggling the pins is achieved by using two PPI channels and a GPIOTE channel. The hardware channel IDs are provided |  | ||||||
|  * by the application and should be regarded as reserved as long as any PA/LNA toggling is enabled. |  | ||||||
|  * |  | ||||||
|  * @note  @ref sd_ble_opt_get is not supported for this option. |  | ||||||
|  * @note  Setting this option while the radio is in use (i.e. any of the roles are active) may have undefined consequences |  | ||||||
|  * and must be avoided by the application. |  | ||||||
|  */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|    ble_pa_lna_cfg_t pa_cfg;   /**< Power Amplifier configuration */ |  | ||||||
|    ble_pa_lna_cfg_t lna_cfg;  /**< Low Noise Amplifier configuration */ |  | ||||||
|  |  | ||||||
|    uint8_t ppi_ch_id_set;     /**< PPI channel used for radio pin setting */ |  | ||||||
|    uint8_t ppi_ch_id_clr;     /**< PPI channel used for radio pin clearing */ |  | ||||||
|    uint8_t gpiote_ch_id;      /**< GPIOTE channel used for radio pin toggling */ |  | ||||||
| } ble_common_opt_pa_lna_t; |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|  * @brief Configuration of extended BLE connection events. |  | ||||||
|  * |  | ||||||
|  * When enabled the SoftDevice will dynamically extend the connection event when possible. |  | ||||||
|  * |  | ||||||
|  * The connection event length is controlled by the connection configuration as set by @ref ble_gap_conn_cfg_t::event_length. |  | ||||||
|  * The connection event can be extended if there is time to send another packet pair before the start of the next connection interval, |  | ||||||
|  * and if there are no conflicts with other BLE roles requesting radio time. |  | ||||||
|  * |  | ||||||
|  * @note @ref sd_ble_opt_get is not supported for this option. |  | ||||||
|  */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|    uint8_t enable : 1; /**< Enable extended BLE connection events, disabled by default. */ |  | ||||||
| } ble_common_opt_conn_evt_ext_t; |  | ||||||
|  |  | ||||||
| /**@brief Option structure for common options. */ |  | ||||||
| typedef union |  | ||||||
| { |  | ||||||
|   ble_common_opt_pa_lna_t       pa_lna;        /**< Parameters for controlling PA and LNA pin toggling. */ |  | ||||||
|   ble_common_opt_conn_evt_ext_t conn_evt_ext;  /**< Parameters for enabling extended connection events. */ |  | ||||||
| } ble_common_opt_t; |  | ||||||
|  |  | ||||||
| /**@brief Common BLE Option type, wrapping the module specific options. */ |  | ||||||
| typedef union |  | ||||||
| { |  | ||||||
|   ble_common_opt_t  common_opt;         /**< COMMON options, opt_id in @ref BLE_COMMON_OPTS series. */ |  | ||||||
|   ble_gap_opt_t     gap_opt;            /**< GAP option, opt_id in @ref BLE_GAP_OPTS series. */ |  | ||||||
| } ble_opt_t; |  | ||||||
|  |  | ||||||
| /**@brief BLE connection configuration type, wrapping the module specific configurations, set with |  | ||||||
|  * @ref sd_ble_cfg_set. |  | ||||||
|  * |  | ||||||
|  * @note Connection configurations don't have to be set. |  | ||||||
|  * In the case that no configurations has been set, or fewer connection configurations has been set than enabled connections, |  | ||||||
|  * the default connection configuration will be automatically added for the remaining connections. |  | ||||||
|  * When creating connections with the default configuration, @ref BLE_CONN_CFG_TAG_DEFAULT should be used in |  | ||||||
|  * place of @ref ble_conn_cfg_t::conn_cfg_tag. |  | ||||||
|  * |  | ||||||
|  * @sa sd_ble_gap_adv_start() |  | ||||||
|  * @sa sd_ble_gap_connect() |  | ||||||
|  * |  | ||||||
|  * @mscs |  | ||||||
|  * @mmsc{@ref BLE_CONN_CFG} |  | ||||||
|  * @endmscs |  | ||||||
|  |  | ||||||
|  */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint8_t              conn_cfg_tag;        /**< The application chosen tag it can use with the |  | ||||||
|                                                  @ref sd_ble_gap_adv_start() and @ref sd_ble_gap_connect() calls |  | ||||||
|                                                  to select this configuration when creating a connection. |  | ||||||
|                                                  Must be different for all connection configurations added and not @ref BLE_CONN_CFG_TAG_DEFAULT. */ |  | ||||||
|   union { |  | ||||||
|     ble_gap_conn_cfg_t   gap_conn_cfg;      /**< GAP connection configuration, cfg_id is @ref BLE_CONN_CFG_GAP. */ |  | ||||||
|     ble_gattc_conn_cfg_t gattc_conn_cfg;    /**< GATTC connection configuration, cfg_id is @ref BLE_CONN_CFG_GATTC. */ |  | ||||||
|     ble_gatts_conn_cfg_t gatts_conn_cfg;    /**< GATTS connection configuration, cfg_id is @ref BLE_CONN_CFG_GATTS. */ |  | ||||||
|     ble_gatt_conn_cfg_t  gatt_conn_cfg;     /**< GATT connection configuration, cfg_id is @ref BLE_CONN_CFG_GATT. */ |  | ||||||
|     ble_l2cap_conn_cfg_t l2cap_conn_cfg;    /**< L2CAP connection configuration, cfg_id is @ref BLE_CONN_CFG_L2CAP. */ |  | ||||||
|   } params;                                 /**< Connection configuration union. */ |  | ||||||
| } ble_conn_cfg_t; |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|  * @brief Configuration of Vendor Specific UUIDs, set with @ref sd_ble_cfg_set. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_PARAM Too many UUIDs configured. |  | ||||||
|  */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint8_t vs_uuid_count; /**< Number of 128-bit Vendor Specific UUID bases to allocate memory for. |  | ||||||
|                               Default value is @ref BLE_UUID_VS_COUNT_DEFAULT. Maximum value is |  | ||||||
|                               @ref BLE_UUID_VS_COUNT_MAX. */ |  | ||||||
| } ble_common_cfg_vs_uuid_t; |  | ||||||
|  |  | ||||||
| /**@brief Common BLE Configuration type, wrapping the common configurations. */ |  | ||||||
| typedef union |  | ||||||
| { |  | ||||||
|   ble_common_cfg_vs_uuid_t  vs_uuid_cfg;  /**< Vendor specific UUID configuration, cfg_id is @ref BLE_COMMON_CFG_VS_UUID. */ |  | ||||||
| } ble_common_cfg_t; |  | ||||||
|  |  | ||||||
| /**@brief BLE Configuration type, wrapping the module specific configurations. */ |  | ||||||
| typedef union |  | ||||||
| { |  | ||||||
|   ble_conn_cfg_t    conn_cfg;   /**< Connection specific configurations, cfg_id in @ref BLE_CONN_CFGS series. */ |  | ||||||
|   ble_common_cfg_t  common_cfg; /**< Global common configurations, cfg_id in @ref BLE_COMMON_CFGS series. */ |  | ||||||
|   ble_gap_cfg_t     gap_cfg;    /**< Global GAP configurations, cfg_id in @ref BLE_GAP_CFGS series. */ |  | ||||||
|   ble_gatts_cfg_t   gatts_cfg;  /**< Global GATTS configuration, cfg_id in @ref BLE_GATTS_CFGS series. */ |  | ||||||
| } ble_cfg_t; |  | ||||||
|  |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
| /** @addtogroup BLE_COMMON_FUNCTIONS Functions |  | ||||||
|  * @{ */ |  | ||||||
|  |  | ||||||
| /**@brief Enable the BLE stack |  | ||||||
|  * |  | ||||||
|  * @param[in, out] p_app_ram_base   Pointer to a variable containing the start address of the |  | ||||||
|  *                                  application RAM region (APP_RAM_BASE). On return, this will |  | ||||||
|  *                                  contain the minimum start address of the application RAM region |  | ||||||
|  *                                  required by the SoftDevice for this configuration. |  | ||||||
|  * |  | ||||||
|  * @note The memory requirement for a specific configuration will not increase between SoftDevices |  | ||||||
|  *       with the same major version number. |  | ||||||
|  * |  | ||||||
|  * @note The value of *p_app_ram_base when the app has done no custom configuration of the |  | ||||||
|  *       SoftDevice, i.e. the app has not called @ref sd_ble_cfg_set before @ref sd_ble_enable, can |  | ||||||
|  *       be found in the release notes. |  | ||||||
|  * |  | ||||||
|  * @note At runtime the IC's RAM is split into 2 regions: The SoftDevice RAM region is located |  | ||||||
|  *       between 0x20000000 and APP_RAM_BASE-1 and the application's RAM region is located between |  | ||||||
|  *       APP_RAM_BASE and the start of the call stack. |  | ||||||
|  * |  | ||||||
|  * @details This call initializes the BLE stack, no BLE related function other than @ref |  | ||||||
|  *          sd_ble_cfg_set can be called before this one. |  | ||||||
|  * |  | ||||||
|  * @mscs |  | ||||||
|  * @mmsc{@ref BLE_COMMON_ENABLE} |  | ||||||
|  * @endmscs |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS              The BLE stack has been initialized successfully. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_STATE  The BLE stack had already been initialized and cannot be reinitialized. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_ADDR   Invalid or not sufficiently aligned pointer supplied. |  | ||||||
|  * @retval ::NRF_ERROR_NO_MEM         The amount of memory assigned to the SoftDevice by *p_app_ram_base is not |  | ||||||
|  *                                    large enough to fit this configuration's memory requirement. Check *p_app_ram_base |  | ||||||
|  *                                    and set the start address of the application RAM region accordingly. |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_BLE_ENABLE, uint32_t, sd_ble_enable(uint32_t * p_app_ram_base)); |  | ||||||
|  |  | ||||||
| /**@brief Add configurations for the BLE stack |  | ||||||
|  * |  | ||||||
|  * @param[in] cfg_id              Config ID, see @ref BLE_CONN_CFGS, @ref BLE_COMMON_CFGS, @ref |  | ||||||
|  *                                BLE_GAP_CFGS or @ref BLE_GATTS_CFGS. |  | ||||||
|  * @param[in] p_cfg               Pointer to a ble_cfg_t structure containing the configuration value. |  | ||||||
|  * @param[in] app_ram_base        The start address of the application RAM region (APP_RAM_BASE). |  | ||||||
|  *                                See @ref sd_ble_enable for details about APP_RAM_BASE. |  | ||||||
|  * |  | ||||||
|  * @note The memory requirement for a specific configuration will not increase between SoftDevices |  | ||||||
|  *       with the same major version number. |  | ||||||
|  * |  | ||||||
|  * @note If a configuration is set more than once, the last one set is the one that takes effect on |  | ||||||
|  *       @ref sd_ble_enable. |  | ||||||
|  * |  | ||||||
|  * @note Any part of the BLE stack that is NOT configured with @ref sd_ble_cfg_set will have default |  | ||||||
|  *       configuration. |  | ||||||
|  * |  | ||||||
|  * @note @ref sd_ble_cfg_set may be called at any time when the SoftDevice is enabled (see @ref |  | ||||||
|  *       sd_softdevice_enable) while the BLE part of the SoftDevice is not enabled (see @ref |  | ||||||
|  *       sd_ble_enable). |  | ||||||
|  * |  | ||||||
|  * @note Error codes for the configurations are described in the configuration structs. |  | ||||||
|  * |  | ||||||
|  * @mscs |  | ||||||
|  * @mmsc{@ref BLE_COMMON_ENABLE} |  | ||||||
|  * @endmscs |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS              The configuration has been added successfully. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_STATE  The BLE stack had already been initialized. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_ADDR   Invalid or not sufficiently aligned pointer supplied. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_PARAM  Invalid cfg_id supplied. |  | ||||||
|  * @retval ::NRF_ERROR_NO_MEM         The amount of memory assigned to the SoftDevice by app_ram_base is not |  | ||||||
|  *                                    large enough to fit this configuration's memory requirement. |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_BLE_CFG_SET, uint32_t, sd_ble_cfg_set(uint32_t cfg_id, ble_cfg_t const * p_cfg, uint32_t app_ram_base)); |  | ||||||
|  |  | ||||||
| /**@brief Get an event from the pending events queue. |  | ||||||
|  * |  | ||||||
|  * @param[out] p_dest Pointer to buffer to be filled in with an event, or NULL to retrieve the event length. |  | ||||||
|  *                    This buffer <b>must be aligned to the extend defined by @ref BLE_EVT_PTR_ALIGNMENT</b>. |  | ||||||
|  *                    The buffer should be interpreted as a @ref ble_evt_t struct. |  | ||||||
|  * @param[in, out] p_len Pointer the length of the buffer, on return it is filled with the event length. |  | ||||||
|  * |  | ||||||
|  * @details This call allows the application to pull a BLE event from the BLE stack. The application is signaled that |  | ||||||
|  * an event is available from the BLE stack by the triggering of the SD_EVT_IRQn interrupt. |  | ||||||
|  * The application is free to choose whether to call this function from thread mode (main context) or directly from the |  | ||||||
|  * Interrupt Service Routine that maps to SD_EVT_IRQn. In any case however, and because the BLE stack runs at a higher |  | ||||||
|  * priority than the application, this function should be called in a loop (until @ref NRF_ERROR_NOT_FOUND is returned) |  | ||||||
|  * every time SD_EVT_IRQn is raised to ensure that all available events are pulled from the BLE stack. Failure to do so |  | ||||||
|  * could potentially leave events in the internal queue without the application being aware of this fact. |  | ||||||
|  * |  | ||||||
|  * Sizing the p_dest buffer is equally important, since the application needs to provide all the memory necessary for the event to |  | ||||||
|  * be copied into application memory. If the buffer provided is not large enough to fit the entire contents of the event, |  | ||||||
|  * @ref NRF_ERROR_DATA_SIZE will be returned and the application can then call again with a larger buffer size. |  | ||||||
|  * The maximum possible event length is defined by @ref BLE_EVT_LEN_MAX. The application may also "peek" the event length |  | ||||||
|  * by providing p_dest as a NULL pointer and inspecting the value of *p_len upon return: |  | ||||||
|  * |  | ||||||
|  *     \code |  | ||||||
|  *     uint16_t len; |  | ||||||
|  *     errcode = sd_ble_evt_get(NULL, &len); |  | ||||||
|  *     \endcode |  | ||||||
|  * |  | ||||||
|  * @mscs |  | ||||||
|  * @mmsc{@ref BLE_COMMON_IRQ_EVT_MSC} |  | ||||||
|  * @mmsc{@ref BLE_COMMON_THREAD_EVT_MSC} |  | ||||||
|  * @endmscs |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS Event pulled and stored into the supplied buffer. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_ADDR Invalid or not sufficiently aligned pointer supplied. |  | ||||||
|  * @retval ::NRF_ERROR_NOT_FOUND No events ready to be pulled. |  | ||||||
|  * @retval ::NRF_ERROR_DATA_SIZE Event ready but could not fit into the supplied buffer. |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_BLE_EVT_GET, uint32_t, sd_ble_evt_get(uint8_t *p_dest, uint16_t *p_len)); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /**@brief Add a Vendor Specific base UUID. |  | ||||||
|  * |  | ||||||
|  * @details This call enables the application to add a vendor specific base UUID to the BLE stack's table, for later |  | ||||||
|  * use with all other modules and APIs. This then allows the application to use the shorter, 24-bit @ref ble_uuid_t |  | ||||||
|  * format when dealing with both 16-bit and 128-bit UUIDs without having to check for lengths and having split code |  | ||||||
|  * paths. This is accomplished by extending the grouping mechanism that the Bluetooth SIG standard base UUID uses |  | ||||||
|  * for all other 128-bit UUIDs. The type field in the @ref ble_uuid_t structure is an index (relative to |  | ||||||
|  * @ref BLE_UUID_TYPE_VENDOR_BEGIN) to the table populated by multiple calls to this function, and the UUID field |  | ||||||
|  * in the same structure contains the 2 bytes at indexes 12 and 13. The number of possible 128-bit UUIDs available to |  | ||||||
|  * the application is therefore the number of Vendor Specific UUIDs added with the help of this function times 65536, |  | ||||||
|  * although restricted to modifying bytes 12 and 13 for each of the entries in the supplied array. |  | ||||||
|  * |  | ||||||
|  * @note Bytes 12 and 13 of the provided UUID will not be used internally, since those are always replaced by |  | ||||||
|  * the 16-bit uuid field in @ref ble_uuid_t. |  | ||||||
|  * |  | ||||||
|  * @note If a UUID is already present in the BLE stack's internal table, the corresponding index will be returned in |  | ||||||
|  * p_uuid_type along with an @ref NRF_SUCCESS error code. |  | ||||||
|  * |  | ||||||
|  * @param[in]  p_vs_uuid    Pointer to a 16-octet (128-bit) little endian Vendor Specific UUID disregarding |  | ||||||
|  *                          bytes 12 and 13. |  | ||||||
|  * @param[out] p_uuid_type  Pointer to a uint8_t where the type field in @ref ble_uuid_t corresponding to this UUID will be stored. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS Successfully added the Vendor Specific UUID. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_ADDR If p_vs_uuid or p_uuid_type is NULL or invalid. |  | ||||||
|  * @retval ::NRF_ERROR_NO_MEM If there are no more free slots for VS UUIDs. |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_BLE_UUID_VS_ADD, uint32_t, sd_ble_uuid_vs_add(ble_uuid128_t const *p_vs_uuid, uint8_t *p_uuid_type)); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /** @brief Decode little endian raw UUID bytes (16-bit or 128-bit) into a 24 bit @ref ble_uuid_t structure. |  | ||||||
|  * |  | ||||||
|  * @details The raw UUID bytes excluding bytes 12 and 13 (i.e. bytes 0-11 and 14-15) of p_uuid_le are compared |  | ||||||
|  * to the corresponding ones in each entry of the table of vendor specific UUIDs populated with @ref sd_ble_uuid_vs_add |  | ||||||
|  * to look for a match. If there is such a match, bytes 12 and 13 are returned as p_uuid->uuid and the index |  | ||||||
|  * relative to @ref BLE_UUID_TYPE_VENDOR_BEGIN as p_uuid->type. |  | ||||||
|  * |  | ||||||
|  * @note If the UUID length supplied is 2, then the type set by this call will always be @ref BLE_UUID_TYPE_BLE. |  | ||||||
|  * |  | ||||||
|  * @param[in]   uuid_le_len Length in bytes of the buffer pointed to by p_uuid_le (must be 2 or 16 bytes). |  | ||||||
|  * @param[in]   p_uuid_le   Pointer pointing to little endian raw UUID bytes. |  | ||||||
|  * @param[out]  p_uuid      Pointer to a @ref ble_uuid_t structure to be filled in. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS Successfully decoded into the @ref ble_uuid_t structure. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_LENGTH Invalid UUID length. |  | ||||||
|  * @retval ::NRF_ERROR_NOT_FOUND For a 128-bit UUID, no match in the populated table of UUIDs. |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_BLE_UUID_DECODE, uint32_t, sd_ble_uuid_decode(uint8_t uuid_le_len, uint8_t const *p_uuid_le, ble_uuid_t *p_uuid)); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /** @brief Encode a @ref ble_uuid_t structure into little endian raw UUID bytes (16-bit or 128-bit). |  | ||||||
|  * |  | ||||||
|  * @note The pointer to the destination buffer p_uuid_le may be NULL, in which case only the validity and size of p_uuid is computed. |  | ||||||
|  * |  | ||||||
|  * @param[in]   p_uuid        Pointer to a @ref ble_uuid_t structure that will be encoded into bytes. |  | ||||||
|  * @param[out]  p_uuid_le_len Pointer to a uint8_t that will be filled with the encoded length (2 or 16 bytes). |  | ||||||
|  * @param[out]  p_uuid_le     Pointer to a buffer where the little endian raw UUID bytes (2 or 16) will be stored. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS Successfully encoded into the buffer. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_PARAM Invalid UUID type. |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_BLE_UUID_ENCODE, uint32_t, sd_ble_uuid_encode(ble_uuid_t const *p_uuid, uint8_t *p_uuid_le_len, uint8_t *p_uuid_le)); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /**@brief Get Version Information. |  | ||||||
|  * |  | ||||||
|  * @details This call allows the application to get the BLE stack version information. |  | ||||||
|  * |  | ||||||
|  * @param[out] p_version Pointer to a ble_version_t structure to be filled in. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS  Version information stored successfully. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. |  | ||||||
|  * @retval ::NRF_ERROR_BUSY The BLE stack is busy (typically doing a locally-initiated disconnection procedure). |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_BLE_VERSION_GET, uint32_t, sd_ble_version_get(ble_version_t *p_version)); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /**@brief Provide a user memory block. |  | ||||||
|  * |  | ||||||
|  * @note This call can only be used as a response to a @ref BLE_EVT_USER_MEM_REQUEST event issued to the application. |  | ||||||
|  * |  | ||||||
|  * @param[in] conn_handle Connection handle. |  | ||||||
|  * @param[in] p_block Pointer to a user memory block structure or NULL if memory is managed by the application. |  | ||||||
|  * |  | ||||||
|  * @mscs |  | ||||||
|  * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_PEER_CANCEL_MSC} |  | ||||||
|  * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_NOBUF_AUTH_MSC} |  | ||||||
|  * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_NOBUF_NOAUTH_MSC} |  | ||||||
|  * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_BUF_AUTH_MSC} |  | ||||||
|  * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_BUF_NOAUTH_MSC} |  | ||||||
|  * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_QUEUE_FULL_MSC} |  | ||||||
|  * @endmscs |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS Successfully queued a response to the peer. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. |  | ||||||
|  * @retval ::NRF_ERROR_BUSY The stack is busy, process pending events and retry. |  | ||||||
|  * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_LENGTH Invalid user memory block length supplied. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection state or no user memory request pending. |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_BLE_USER_MEM_REPLY, uint32_t, sd_ble_user_mem_reply(uint16_t conn_handle, ble_user_mem_block_t const *p_block)); |  | ||||||
|  |  | ||||||
| /**@brief Set a BLE option. |  | ||||||
|  * |  | ||||||
|  * @details This call allows the application to set the value of an option. |  | ||||||
|  * |  | ||||||
|  * @mscs |  | ||||||
|  * @mmsc{@ref BLE_GAP_PERIPH_BONDING_STATIC_PK_MSC} |  | ||||||
|  * @endmscs |  | ||||||
|  * |  | ||||||
|  * @param[in] opt_id Option ID, see @ref BLE_COMMON_OPTS and @ref BLE_GAP_OPTS. |  | ||||||
|  * @param[in] p_opt Pointer to a ble_opt_t structure containing the option value. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS  Option set successfully. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. |  | ||||||
|  * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, check parameter limits and constraints. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_STATE Unable to set the parameter at this time. |  | ||||||
|  * @retval ::NRF_ERROR_BUSY The BLE stack is busy or the previous procedure has not completed. |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_BLE_OPT_SET, uint32_t, sd_ble_opt_set(uint32_t opt_id, ble_opt_t const *p_opt)); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /**@brief Get a BLE option. |  | ||||||
|  * |  | ||||||
|  * @details This call allows the application to retrieve the value of an option. |  | ||||||
|  * |  | ||||||
|  * @param[in] opt_id Option ID, see @ref BLE_COMMON_OPTS and @ref BLE_GAP_OPTS. |  | ||||||
|  * @param[out] p_opt Pointer to a ble_opt_t structure to be filled in. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS  Option retrieved successfully. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. |  | ||||||
|  * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, check parameter limits and constraints. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_STATE Unable to retrieve the parameter at this time. |  | ||||||
|  * @retval ::NRF_ERROR_BUSY The BLE stack is busy or the previous procedure has not completed. |  | ||||||
|  * @retval ::NRF_ERROR_NOT_SUPPORTED This option is not supported. |  | ||||||
|  * |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_BLE_OPT_GET, uint32_t, sd_ble_opt_get(uint32_t opt_id, ble_opt_t *p_opt)); |  | ||||||
|  |  | ||||||
| /** @} */ |  | ||||||
| #ifdef __cplusplus |  | ||||||
| } |  | ||||||
| #endif |  | ||||||
| #endif /* BLE_H__ */ |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|   @} |  | ||||||
|   @} |  | ||||||
| */ |  | ||||||
| @@ -1,93 +0,0 @@ | |||||||
| /* |  | ||||||
|  * Copyright (c) 2012 - 2018, Nordic Semiconductor ASA |  | ||||||
|  * All rights reserved. |  | ||||||
|  * |  | ||||||
|  * Redistribution and use in source and binary forms, with or without modification, |  | ||||||
|  * are permitted provided that the following conditions are met: |  | ||||||
|  * |  | ||||||
|  * 1. Redistributions of source code must retain the above copyright notice, this |  | ||||||
|  *    list of conditions and the following disclaimer. |  | ||||||
|  * |  | ||||||
|  * 2. Redistributions in binary form, except as embedded into a Nordic |  | ||||||
|  *    Semiconductor ASA integrated circuit in a product or a software update for |  | ||||||
|  *    such product, must reproduce the above copyright notice, this list of |  | ||||||
|  *    conditions and the following disclaimer in the documentation and/or other |  | ||||||
|  *    materials provided with the distribution. |  | ||||||
|  * |  | ||||||
|  * 3. Neither the name of Nordic Semiconductor ASA nor the names of its |  | ||||||
|  *    contributors may be used to endorse or promote products derived from this |  | ||||||
|  *    software without specific prior written permission. |  | ||||||
|  * |  | ||||||
|  * 4. This software, with or without modification, must only be used with a |  | ||||||
|  *    Nordic Semiconductor ASA integrated circuit. |  | ||||||
|  * |  | ||||||
|  * 5. Any software provided in binary form under this license must not be reverse |  | ||||||
|  *    engineered, decompiled, modified and/or disassembled. |  | ||||||
|  * |  | ||||||
|  * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS |  | ||||||
|  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |  | ||||||
|  * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE |  | ||||||
|  * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE |  | ||||||
|  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |  | ||||||
|  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE |  | ||||||
|  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |  | ||||||
|  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |  | ||||||
|  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT |  | ||||||
|  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |  | ||||||
|  */ |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|   @addtogroup BLE_COMMON |  | ||||||
|   @{ |  | ||||||
|   @addtogroup  nrf_error |  | ||||||
|   @{ |  | ||||||
|     @ingroup BLE_COMMON |  | ||||||
|   @} |  | ||||||
|  |  | ||||||
|   @defgroup ble_err General error codes |  | ||||||
|   @{ |  | ||||||
|  |  | ||||||
|   @brief General error code definitions for the BLE API. |  | ||||||
|  |  | ||||||
|   @ingroup BLE_COMMON |  | ||||||
| */ |  | ||||||
| #ifndef NRF_BLE_ERR_H__ |  | ||||||
| #define NRF_BLE_ERR_H__ |  | ||||||
|  |  | ||||||
| #include "nrf_error.h" |  | ||||||
|  |  | ||||||
| #ifdef __cplusplus |  | ||||||
| extern "C" { |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| /* @defgroup BLE_ERRORS Error Codes |  | ||||||
|  * @{ */ |  | ||||||
| #define BLE_ERROR_NOT_ENABLED            (NRF_ERROR_STK_BASE_NUM+0x001) /**< @ref sd_ble_enable has not been called. */ |  | ||||||
| #define BLE_ERROR_INVALID_CONN_HANDLE    (NRF_ERROR_STK_BASE_NUM+0x002) /**< Invalid connection handle. */ |  | ||||||
| #define BLE_ERROR_INVALID_ATTR_HANDLE    (NRF_ERROR_STK_BASE_NUM+0x003) /**< Invalid attribute handle. */ |  | ||||||
| #define BLE_ERROR_INVALID_ADV_HANDLE     (NRF_ERROR_STK_BASE_NUM+0x004) /**< Invalid advertising handle. */ |  | ||||||
| #define BLE_ERROR_INVALID_ROLE           (NRF_ERROR_STK_BASE_NUM+0x005) /**< Invalid role. */ |  | ||||||
| #define BLE_ERROR_BLOCKED_BY_OTHER_LINKS (NRF_ERROR_STK_BASE_NUM+0x006) /**< The attempt to change link settings failed due to the scheduling of other links. */ |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /** @defgroup BLE_ERROR_SUBRANGES Module specific error code subranges |  | ||||||
|  *  @brief Assignment of subranges for module specific error codes. |  | ||||||
|  *  @note For specific error codes, see ble_<module>.h or ble_error_<module>.h. |  | ||||||
|  * @{ */ |  | ||||||
| #define NRF_L2CAP_ERR_BASE             (NRF_ERROR_STK_BASE_NUM+0x100) /**< L2CAP specific errors. */ |  | ||||||
| #define NRF_GAP_ERR_BASE               (NRF_ERROR_STK_BASE_NUM+0x200) /**< GAP specific errors. */ |  | ||||||
| #define NRF_GATTC_ERR_BASE             (NRF_ERROR_STK_BASE_NUM+0x300) /**< GATT client specific errors. */ |  | ||||||
| #define NRF_GATTS_ERR_BASE             (NRF_ERROR_STK_BASE_NUM+0x400) /**< GATT server specific errors. */ |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
| #ifdef __cplusplus |  | ||||||
| } |  | ||||||
| #endif |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|   @} |  | ||||||
|   @} |  | ||||||
| */ |  | ||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -1,228 +0,0 @@ | |||||||
| /* |  | ||||||
|  * Copyright (c) 2013 - 2017, Nordic Semiconductor ASA |  | ||||||
|  * All rights reserved. |  | ||||||
|  * |  | ||||||
|  * Redistribution and use in source and binary forms, with or without modification, |  | ||||||
|  * are permitted provided that the following conditions are met: |  | ||||||
|  * |  | ||||||
|  * 1. Redistributions of source code must retain the above copyright notice, this |  | ||||||
|  *    list of conditions and the following disclaimer. |  | ||||||
|  * |  | ||||||
|  * 2. Redistributions in binary form, except as embedded into a Nordic |  | ||||||
|  *    Semiconductor ASA integrated circuit in a product or a software update for |  | ||||||
|  *    such product, must reproduce the above copyright notice, this list of |  | ||||||
|  *    conditions and the following disclaimer in the documentation and/or other |  | ||||||
|  *    materials provided with the distribution. |  | ||||||
|  * |  | ||||||
|  * 3. Neither the name of Nordic Semiconductor ASA nor the names of its |  | ||||||
|  *    contributors may be used to endorse or promote products derived from this |  | ||||||
|  *    software without specific prior written permission. |  | ||||||
|  * |  | ||||||
|  * 4. This software, with or without modification, must only be used with a |  | ||||||
|  *    Nordic Semiconductor ASA integrated circuit. |  | ||||||
|  * |  | ||||||
|  * 5. Any software provided in binary form under this license must not be reverse |  | ||||||
|  *    engineered, decompiled, modified and/or disassembled. |  | ||||||
|  * |  | ||||||
|  * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS |  | ||||||
|  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |  | ||||||
|  * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE |  | ||||||
|  * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE |  | ||||||
|  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |  | ||||||
|  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE |  | ||||||
|  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |  | ||||||
|  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |  | ||||||
|  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT |  | ||||||
|  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |  | ||||||
|  */ |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|   @addtogroup BLE_GATT Generic Attribute Profile (GATT) Common |  | ||||||
|   @{ |  | ||||||
|   @brief  Common definitions and prototypes for the GATT interfaces. |  | ||||||
|  */ |  | ||||||
|  |  | ||||||
| #ifndef BLE_GATT_H__ |  | ||||||
| #define BLE_GATT_H__ |  | ||||||
|  |  | ||||||
| #include <stdint.h> |  | ||||||
| #include "nrf_svc.h" |  | ||||||
| #include "nrf_error.h" |  | ||||||
| #include "ble_hci.h" |  | ||||||
| #include "ble_ranges.h" |  | ||||||
| #include "ble_types.h" |  | ||||||
| #include "ble_err.h" |  | ||||||
|  |  | ||||||
| #ifdef __cplusplus |  | ||||||
| extern "C" { |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| /** @addtogroup BLE_GATT_DEFINES Defines |  | ||||||
|  * @{ */ |  | ||||||
|  |  | ||||||
| /** @brief Default ATT MTU, in bytes. */ |  | ||||||
| #define BLE_GATT_ATT_MTU_DEFAULT          23 |  | ||||||
|  |  | ||||||
| /**@brief Invalid Attribute Handle. */ |  | ||||||
| #define BLE_GATT_HANDLE_INVALID            0x0000 |  | ||||||
|  |  | ||||||
| /**@brief First Attribute Handle. */ |  | ||||||
| #define BLE_GATT_HANDLE_START              0x0001 |  | ||||||
|  |  | ||||||
| /**@brief Last Attribute Handle. */ |  | ||||||
| #define BLE_GATT_HANDLE_END                0xFFFF |  | ||||||
|  |  | ||||||
| /** @defgroup BLE_GATT_TIMEOUT_SOURCES GATT Timeout sources |  | ||||||
|  * @{ */ |  | ||||||
| #define BLE_GATT_TIMEOUT_SRC_PROTOCOL      0x00  /**< ATT Protocol timeout. */ |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
| /** @defgroup BLE_GATT_WRITE_OPS GATT Write operations |  | ||||||
|  * @{ */ |  | ||||||
| #define BLE_GATT_OP_INVALID                0x00  /**< Invalid Operation. */ |  | ||||||
| #define BLE_GATT_OP_WRITE_REQ              0x01  /**< Write Request. */ |  | ||||||
| #define BLE_GATT_OP_WRITE_CMD              0x02  /**< Write Command. */ |  | ||||||
| #define BLE_GATT_OP_SIGN_WRITE_CMD         0x03  /**< Signed Write Command. */ |  | ||||||
| #define BLE_GATT_OP_PREP_WRITE_REQ         0x04  /**< Prepare Write Request. */ |  | ||||||
| #define BLE_GATT_OP_EXEC_WRITE_REQ         0x05  /**< Execute Write Request. */ |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
| /** @defgroup BLE_GATT_EXEC_WRITE_FLAGS GATT Execute Write flags |  | ||||||
|  * @{ */ |  | ||||||
| #define BLE_GATT_EXEC_WRITE_FLAG_PREPARED_CANCEL 0x00   /**< Cancel prepared write. */ |  | ||||||
| #define BLE_GATT_EXEC_WRITE_FLAG_PREPARED_WRITE  0x01   /**< Execute prepared write. */ |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
| /** @defgroup BLE_GATT_HVX_TYPES GATT Handle Value operations |  | ||||||
|  * @{ */ |  | ||||||
| #define BLE_GATT_HVX_INVALID               0x00  /**< Invalid Operation. */ |  | ||||||
| #define BLE_GATT_HVX_NOTIFICATION          0x01  /**< Handle Value Notification. */ |  | ||||||
| #define BLE_GATT_HVX_INDICATION            0x02  /**< Handle Value Indication. */ |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
| /** @defgroup BLE_GATT_STATUS_CODES GATT Status Codes |  | ||||||
|  * @{ */ |  | ||||||
| #define BLE_GATT_STATUS_SUCCESS                           0x0000  /**< Success. */ |  | ||||||
| #define BLE_GATT_STATUS_UNKNOWN                           0x0001  /**< Unknown or not applicable status. */ |  | ||||||
| #define BLE_GATT_STATUS_ATTERR_INVALID                    0x0100  /**< ATT Error: Invalid Error Code. */ |  | ||||||
| #define BLE_GATT_STATUS_ATTERR_INVALID_HANDLE             0x0101  /**< ATT Error: Invalid Attribute Handle. */ |  | ||||||
| #define BLE_GATT_STATUS_ATTERR_READ_NOT_PERMITTED         0x0102  /**< ATT Error: Read not permitted. */ |  | ||||||
| #define BLE_GATT_STATUS_ATTERR_WRITE_NOT_PERMITTED        0x0103  /**< ATT Error: Write not permitted. */ |  | ||||||
| #define BLE_GATT_STATUS_ATTERR_INVALID_PDU                0x0104  /**< ATT Error: Used in ATT as Invalid PDU. */ |  | ||||||
| #define BLE_GATT_STATUS_ATTERR_INSUF_AUTHENTICATION       0x0105  /**< ATT Error: Authenticated link required. */ |  | ||||||
| #define BLE_GATT_STATUS_ATTERR_REQUEST_NOT_SUPPORTED      0x0106  /**< ATT Error: Used in ATT as Request Not Supported. */ |  | ||||||
| #define BLE_GATT_STATUS_ATTERR_INVALID_OFFSET             0x0107  /**< ATT Error: Offset specified was past the end of the attribute. */ |  | ||||||
| #define BLE_GATT_STATUS_ATTERR_INSUF_AUTHORIZATION        0x0108  /**< ATT Error: Used in ATT as Insufficient Authorization. */ |  | ||||||
| #define BLE_GATT_STATUS_ATTERR_PREPARE_QUEUE_FULL         0x0109  /**< ATT Error: Used in ATT as Prepare Queue Full. */ |  | ||||||
| #define BLE_GATT_STATUS_ATTERR_ATTRIBUTE_NOT_FOUND        0x010A  /**< ATT Error: Used in ATT as Attribute not found. */ |  | ||||||
| #define BLE_GATT_STATUS_ATTERR_ATTRIBUTE_NOT_LONG         0x010B  /**< ATT Error: Attribute cannot be read or written using read/write blob requests. */ |  | ||||||
| #define BLE_GATT_STATUS_ATTERR_INSUF_ENC_KEY_SIZE         0x010C  /**< ATT Error: Encryption key size used is insufficient. */ |  | ||||||
| #define BLE_GATT_STATUS_ATTERR_INVALID_ATT_VAL_LENGTH     0x010D  /**< ATT Error: Invalid value size. */ |  | ||||||
| #define BLE_GATT_STATUS_ATTERR_UNLIKELY_ERROR             0x010E  /**< ATT Error: Very unlikely error. */ |  | ||||||
| #define BLE_GATT_STATUS_ATTERR_INSUF_ENCRYPTION           0x010F  /**< ATT Error: Encrypted link required. */ |  | ||||||
| #define BLE_GATT_STATUS_ATTERR_UNSUPPORTED_GROUP_TYPE     0x0110  /**< ATT Error: Attribute type is not a supported grouping attribute. */ |  | ||||||
| #define BLE_GATT_STATUS_ATTERR_INSUF_RESOURCES            0x0111  /**< ATT Error: Encrypted link required. */ |  | ||||||
| #define BLE_GATT_STATUS_ATTERR_RFU_RANGE1_BEGIN           0x0112  /**< ATT Error: Reserved for Future Use range #1 begin. */ |  | ||||||
| #define BLE_GATT_STATUS_ATTERR_RFU_RANGE1_END             0x017F  /**< ATT Error: Reserved for Future Use range #1 end. */ |  | ||||||
| #define BLE_GATT_STATUS_ATTERR_APP_BEGIN                  0x0180  /**< ATT Error: Application range begin. */ |  | ||||||
| #define BLE_GATT_STATUS_ATTERR_APP_END                    0x019F  /**< ATT Error: Application range end. */ |  | ||||||
| #define BLE_GATT_STATUS_ATTERR_RFU_RANGE2_BEGIN           0x01A0  /**< ATT Error: Reserved for Future Use range #2 begin. */ |  | ||||||
| #define BLE_GATT_STATUS_ATTERR_RFU_RANGE2_END             0x01DF  /**< ATT Error: Reserved for Future Use range #2 end. */ |  | ||||||
| #define BLE_GATT_STATUS_ATTERR_RFU_RANGE3_BEGIN           0x01E0  /**< ATT Error: Reserved for Future Use range #3 begin. */ |  | ||||||
| #define BLE_GATT_STATUS_ATTERR_RFU_RANGE3_END             0x01FC  /**< ATT Error: Reserved for Future Use range #3 end. */ |  | ||||||
| #define BLE_GATT_STATUS_ATTERR_CPS_CCCD_CONFIG_ERROR      0x01FD  /**< ATT Common Profile and Service Error: Client Characteristic Configuration Descriptor improperly configured. */ |  | ||||||
| #define BLE_GATT_STATUS_ATTERR_CPS_PROC_ALR_IN_PROG       0x01FE  /**< ATT Common Profile and Service Error: Procedure Already in Progress. */ |  | ||||||
| #define BLE_GATT_STATUS_ATTERR_CPS_OUT_OF_RANGE           0x01FF  /**< ATT Common Profile and Service Error: Out Of Range. */ |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /** @defgroup BLE_GATT_CPF_FORMATS Characteristic Presentation Formats |  | ||||||
|  *  @note Found at http://developer.bluetooth.org/gatt/descriptors/Pages/DescriptorViewer.aspx?u=org.bluetooth.descriptor.gatt.characteristic_presentation_format.xml |  | ||||||
|  * @{ */ |  | ||||||
| #define BLE_GATT_CPF_FORMAT_RFU                 0x00 /**< Reserved For Future Use. */ |  | ||||||
| #define BLE_GATT_CPF_FORMAT_BOOLEAN             0x01 /**< Boolean. */ |  | ||||||
| #define BLE_GATT_CPF_FORMAT_2BIT                0x02 /**< Unsigned 2-bit integer. */ |  | ||||||
| #define BLE_GATT_CPF_FORMAT_NIBBLE              0x03 /**< Unsigned 4-bit integer. */ |  | ||||||
| #define BLE_GATT_CPF_FORMAT_UINT8               0x04 /**< Unsigned 8-bit integer. */ |  | ||||||
| #define BLE_GATT_CPF_FORMAT_UINT12              0x05 /**< Unsigned 12-bit integer. */ |  | ||||||
| #define BLE_GATT_CPF_FORMAT_UINT16              0x06 /**< Unsigned 16-bit integer. */ |  | ||||||
| #define BLE_GATT_CPF_FORMAT_UINT24              0x07 /**< Unsigned 24-bit integer. */ |  | ||||||
| #define BLE_GATT_CPF_FORMAT_UINT32              0x08 /**< Unsigned 32-bit integer. */ |  | ||||||
| #define BLE_GATT_CPF_FORMAT_UINT48              0x09 /**< Unsigned 48-bit integer. */ |  | ||||||
| #define BLE_GATT_CPF_FORMAT_UINT64              0x0A /**< Unsigned 64-bit integer. */ |  | ||||||
| #define BLE_GATT_CPF_FORMAT_UINT128             0x0B /**< Unsigned 128-bit integer. */ |  | ||||||
| #define BLE_GATT_CPF_FORMAT_SINT8               0x0C /**< Signed 2-bit integer. */ |  | ||||||
| #define BLE_GATT_CPF_FORMAT_SINT12              0x0D /**< Signed 12-bit integer. */ |  | ||||||
| #define BLE_GATT_CPF_FORMAT_SINT16              0x0E /**< Signed 16-bit integer. */ |  | ||||||
| #define BLE_GATT_CPF_FORMAT_SINT24              0x0F /**< Signed 24-bit integer. */ |  | ||||||
| #define BLE_GATT_CPF_FORMAT_SINT32              0x10 /**< Signed 32-bit integer. */ |  | ||||||
| #define BLE_GATT_CPF_FORMAT_SINT48              0x11 /**< Signed 48-bit integer. */ |  | ||||||
| #define BLE_GATT_CPF_FORMAT_SINT64              0x12 /**< Signed 64-bit integer. */ |  | ||||||
| #define BLE_GATT_CPF_FORMAT_SINT128             0x13 /**< Signed 128-bit integer. */ |  | ||||||
| #define BLE_GATT_CPF_FORMAT_FLOAT32             0x14 /**< IEEE-754 32-bit floating point. */ |  | ||||||
| #define BLE_GATT_CPF_FORMAT_FLOAT64             0x15 /**< IEEE-754 64-bit floating point. */ |  | ||||||
| #define BLE_GATT_CPF_FORMAT_SFLOAT              0x16 /**< IEEE-11073 16-bit SFLOAT. */ |  | ||||||
| #define BLE_GATT_CPF_FORMAT_FLOAT               0x17 /**< IEEE-11073 32-bit FLOAT. */ |  | ||||||
| #define BLE_GATT_CPF_FORMAT_DUINT16             0x18 /**< IEEE-20601 format. */ |  | ||||||
| #define BLE_GATT_CPF_FORMAT_UTF8S               0x19 /**< UTF-8 string. */ |  | ||||||
| #define BLE_GATT_CPF_FORMAT_UTF16S              0x1A /**< UTF-16 string. */ |  | ||||||
| #define BLE_GATT_CPF_FORMAT_STRUCT              0x1B /**< Opaque Structure. */ |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
| /** @defgroup BLE_GATT_CPF_NAMESPACES GATT Bluetooth Namespaces |  | ||||||
|  * @{ |  | ||||||
|  */ |  | ||||||
| #define BLE_GATT_CPF_NAMESPACE_BTSIG            0x01 /**< Bluetooth SIG defined Namespace. */ |  | ||||||
| #define BLE_GATT_CPF_NAMESPACE_DESCRIPTION_UNKNOWN 0x0000 /**< Namespace Description Unknown. */ |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
| /** @addtogroup BLE_GATT_STRUCTURES Structures |  | ||||||
|  * @{ */ |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|  * @brief BLE GATT connection configuration parameters, set with @ref sd_ble_cfg_set. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_PARAM att_mtu is smaller than @ref BLE_GATT_ATT_MTU_DEFAULT. |  | ||||||
|  */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint16_t  att_mtu;          /**< Maximum size of ATT packet the SoftDevice can send or receive. |  | ||||||
|                                    The default and minimum value is @ref BLE_GATT_ATT_MTU_DEFAULT. |  | ||||||
|                                    @mscs |  | ||||||
|                                    @mmsc{@ref BLE_GATTC_MTU_EXCHANGE} |  | ||||||
|                                    @mmsc{@ref BLE_GATTS_MTU_EXCHANGE} |  | ||||||
|                                    @endmscs |  | ||||||
|                               */ |  | ||||||
| } ble_gatt_conn_cfg_t; |  | ||||||
|  |  | ||||||
| /**@brief GATT Characteristic Properties. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   /* Standard properties */ |  | ||||||
|   uint8_t broadcast       :1; /**< Broadcasting of the value permitted. */ |  | ||||||
|   uint8_t read            :1; /**< Reading the value permitted. */ |  | ||||||
|   uint8_t write_wo_resp   :1; /**< Writing the value with Write Command permitted. */ |  | ||||||
|   uint8_t write           :1; /**< Writing the value with Write Request permitted. */ |  | ||||||
|   uint8_t notify          :1; /**< Notification of the value permitted. */ |  | ||||||
|   uint8_t indicate        :1; /**< Indications of the value permitted. */ |  | ||||||
|   uint8_t auth_signed_wr  :1; /**< Writing the value with Signed Write Command permitted. */ |  | ||||||
| } ble_gatt_char_props_t; |  | ||||||
|  |  | ||||||
| /**@brief GATT Characteristic Extended Properties. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   /* Extended properties */ |  | ||||||
|   uint8_t reliable_wr     :1; /**< Writing the value with Queued Write operations permitted. */ |  | ||||||
|   uint8_t wr_aux          :1; /**< Writing the Characteristic User Description descriptor permitted. */ |  | ||||||
| } ble_gatt_char_ext_props_t; |  | ||||||
|  |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
| #ifdef __cplusplus |  | ||||||
| } |  | ||||||
| #endif |  | ||||||
| #endif // BLE_GATT_H__ |  | ||||||
|  |  | ||||||
| /** @} */ |  | ||||||
| @@ -1,715 +0,0 @@ | |||||||
| /* |  | ||||||
|  * Copyright (c) 2011 - 2017, Nordic Semiconductor ASA |  | ||||||
|  * All rights reserved. |  | ||||||
|  * |  | ||||||
|  * Redistribution and use in source and binary forms, with or without modification, |  | ||||||
|  * are permitted provided that the following conditions are met: |  | ||||||
|  * |  | ||||||
|  * 1. Redistributions of source code must retain the above copyright notice, this |  | ||||||
|  *    list of conditions and the following disclaimer. |  | ||||||
|  * |  | ||||||
|  * 2. Redistributions in binary form, except as embedded into a Nordic |  | ||||||
|  *    Semiconductor ASA integrated circuit in a product or a software update for |  | ||||||
|  *    such product, must reproduce the above copyright notice, this list of |  | ||||||
|  *    conditions and the following disclaimer in the documentation and/or other |  | ||||||
|  *    materials provided with the distribution. |  | ||||||
|  * |  | ||||||
|  * 3. Neither the name of Nordic Semiconductor ASA nor the names of its |  | ||||||
|  *    contributors may be used to endorse or promote products derived from this |  | ||||||
|  *    software without specific prior written permission. |  | ||||||
|  * |  | ||||||
|  * 4. This software, with or without modification, must only be used with a |  | ||||||
|  *    Nordic Semiconductor ASA integrated circuit. |  | ||||||
|  * |  | ||||||
|  * 5. Any software provided in binary form under this license must not be reverse |  | ||||||
|  *    engineered, decompiled, modified and/or disassembled. |  | ||||||
|  * |  | ||||||
|  * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS |  | ||||||
|  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |  | ||||||
|  * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE |  | ||||||
|  * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE |  | ||||||
|  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |  | ||||||
|  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE |  | ||||||
|  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |  | ||||||
|  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |  | ||||||
|  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT |  | ||||||
|  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |  | ||||||
|  */ |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|   @addtogroup BLE_GATTC Generic Attribute Profile (GATT) Client |  | ||||||
|   @{ |  | ||||||
|   @brief  Definitions and prototypes for the GATT Client interface. |  | ||||||
|  */ |  | ||||||
|  |  | ||||||
| #ifndef BLE_GATTC_H__ |  | ||||||
| #define BLE_GATTC_H__ |  | ||||||
|  |  | ||||||
| #include <stdint.h> |  | ||||||
| #include "nrf.h" |  | ||||||
| #include "nrf_svc.h" |  | ||||||
| #include "nrf_error.h" |  | ||||||
| #include "ble_ranges.h" |  | ||||||
| #include "ble_types.h" |  | ||||||
| #include "ble_err.h" |  | ||||||
| #include "ble_gatt.h" |  | ||||||
|  |  | ||||||
| #ifdef __cplusplus |  | ||||||
| extern "C" { |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| /** @addtogroup BLE_GATTC_ENUMERATIONS Enumerations |  | ||||||
|  * @{ */ |  | ||||||
|  |  | ||||||
| /**@brief GATTC API SVC numbers. */ |  | ||||||
| enum BLE_GATTC_SVCS |  | ||||||
| { |  | ||||||
|   SD_BLE_GATTC_PRIMARY_SERVICES_DISCOVER = BLE_GATTC_SVC_BASE, /**< Primary Service Discovery. */ |  | ||||||
|   SD_BLE_GATTC_RELATIONSHIPS_DISCOVER,                         /**< Relationship Discovery. */ |  | ||||||
|   SD_BLE_GATTC_CHARACTERISTICS_DISCOVER,                       /**< Characteristic Discovery. */ |  | ||||||
|   SD_BLE_GATTC_DESCRIPTORS_DISCOVER,                           /**< Characteristic Descriptor Discovery. */ |  | ||||||
|   SD_BLE_GATTC_ATTR_INFO_DISCOVER,                             /**< Attribute Information Discovery. */ |  | ||||||
|   SD_BLE_GATTC_CHAR_VALUE_BY_UUID_READ,                        /**< Read Characteristic Value by UUID. */ |  | ||||||
|   SD_BLE_GATTC_READ,                                           /**< Generic read. */ |  | ||||||
|   SD_BLE_GATTC_CHAR_VALUES_READ,                               /**< Read multiple Characteristic Values. */ |  | ||||||
|   SD_BLE_GATTC_WRITE,                                          /**< Generic write. */ |  | ||||||
|   SD_BLE_GATTC_HV_CONFIRM,                                     /**< Handle Value Confirmation. */ |  | ||||||
|   SD_BLE_GATTC_EXCHANGE_MTU_REQUEST,                           /**< Exchange MTU Request. */ |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|  * @brief GATT Client Event IDs. |  | ||||||
|  */ |  | ||||||
| enum BLE_GATTC_EVTS |  | ||||||
| { |  | ||||||
|   BLE_GATTC_EVT_PRIM_SRVC_DISC_RSP = BLE_GATTC_EVT_BASE,  /**< Primary Service Discovery Response event.          \n See @ref ble_gattc_evt_prim_srvc_disc_rsp_t.          */ |  | ||||||
|   BLE_GATTC_EVT_REL_DISC_RSP,                             /**< Relationship Discovery Response event.             \n See @ref ble_gattc_evt_rel_disc_rsp_t.                */ |  | ||||||
|   BLE_GATTC_EVT_CHAR_DISC_RSP,                            /**< Characteristic Discovery Response event.           \n See @ref ble_gattc_evt_char_disc_rsp_t.               */ |  | ||||||
|   BLE_GATTC_EVT_DESC_DISC_RSP,                            /**< Descriptor Discovery Response event.               \n See @ref ble_gattc_evt_desc_disc_rsp_t.               */ |  | ||||||
|   BLE_GATTC_EVT_ATTR_INFO_DISC_RSP,                       /**< Attribute Information Response event.              \n See @ref ble_gattc_evt_attr_info_disc_rsp_t. */ |  | ||||||
|   BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP,                /**< Read By UUID Response event.                       \n See @ref ble_gattc_evt_char_val_by_uuid_read_rsp_t.   */ |  | ||||||
|   BLE_GATTC_EVT_READ_RSP,                                 /**< Read Response event.                               \n See @ref ble_gattc_evt_read_rsp_t.                    */ |  | ||||||
|   BLE_GATTC_EVT_CHAR_VALS_READ_RSP,                       /**< Read multiple Response event.                      \n See @ref ble_gattc_evt_char_vals_read_rsp_t.          */ |  | ||||||
|   BLE_GATTC_EVT_WRITE_RSP,                                /**< Write Response event.                              \n See @ref ble_gattc_evt_write_rsp_t.                   */ |  | ||||||
|   BLE_GATTC_EVT_HVX,                                      /**< Handle Value Notification or Indication event.     \n Confirm indication with @ref sd_ble_gattc_hv_confirm.  \n See @ref ble_gattc_evt_hvx_t. */ |  | ||||||
|   BLE_GATTC_EVT_EXCHANGE_MTU_RSP,                         /**< Exchange MTU Response event.                       \n See @ref ble_gattc_evt_exchange_mtu_rsp_t.            */ |  | ||||||
|   BLE_GATTC_EVT_TIMEOUT,                                  /**< Timeout event.                                     \n See @ref ble_gattc_evt_timeout_t.                     */ |  | ||||||
|   BLE_GATTC_EVT_WRITE_CMD_TX_COMPLETE                     /**< Write without Response transmission complete.      \n See @ref ble_gattc_evt_write_cmd_tx_complete_t.       */ |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
| /** @addtogroup BLE_GATTC_DEFINES Defines |  | ||||||
|  * @{ */ |  | ||||||
|  |  | ||||||
| /** @defgroup BLE_ERRORS_GATTC SVC return values specific to GATTC |  | ||||||
|  * @{ */ |  | ||||||
| #define BLE_ERROR_GATTC_PROC_NOT_PERMITTED    (NRF_GATTC_ERR_BASE + 0x000) /**< Procedure not Permitted. */ |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
| /** @defgroup BLE_GATTC_ATTR_INFO_FORMAT Attribute Information Formats |  | ||||||
|  * @{ */ |  | ||||||
| #define BLE_GATTC_ATTR_INFO_FORMAT_16BIT    1 /**< 16-bit Attribute Information Format. */ |  | ||||||
| #define BLE_GATTC_ATTR_INFO_FORMAT_128BIT   2 /**< 128-bit Attribute Information Format. */ |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
| /** @defgroup BLE_GATTC_DEFAULTS GATT Client defaults |  | ||||||
|  * @{ */ |  | ||||||
| #define BLE_GATTC_WRITE_CMD_TX_QUEUE_SIZE_DEFAULT  1 /**< Default number of Write without Response that can be queued for transmission. */ |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
| /** @addtogroup BLE_GATTC_STRUCTURES Structures |  | ||||||
|  * @{ */ |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|  * @brief BLE GATTC connection configuration parameters, set with @ref sd_ble_cfg_set. |  | ||||||
|  */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint8_t  write_cmd_tx_queue_size; /**< The guaranteed minimum number of Write without Response that can be queued for transmission. |  | ||||||
|                                           The default value is @ref BLE_GATTC_WRITE_CMD_TX_QUEUE_SIZE_DEFAULT */ |  | ||||||
| } ble_gattc_conn_cfg_t; |  | ||||||
|  |  | ||||||
| /**@brief Operation Handle Range. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint16_t          start_handle; /**< Start Handle. */ |  | ||||||
|   uint16_t          end_handle;   /**< End Handle. */ |  | ||||||
| } ble_gattc_handle_range_t; |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /**@brief GATT service. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   ble_uuid_t               uuid;          /**< Service UUID. */ |  | ||||||
|   ble_gattc_handle_range_t handle_range;  /**< Service Handle Range. */ |  | ||||||
| } ble_gattc_service_t; |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /**@brief  GATT include. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint16_t            handle;           /**< Include Handle. */ |  | ||||||
|   ble_gattc_service_t included_srvc;    /**< Handle of the included service. */ |  | ||||||
| } ble_gattc_include_t; |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /**@brief GATT characteristic. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   ble_uuid_t              uuid;                 /**< Characteristic UUID. */ |  | ||||||
|   ble_gatt_char_props_t   char_props;           /**< Characteristic Properties. */ |  | ||||||
|   uint8_t                 char_ext_props : 1;   /**< Extended properties present. */ |  | ||||||
|   uint16_t                handle_decl;          /**< Handle of the Characteristic Declaration. */ |  | ||||||
|   uint16_t                handle_value;         /**< Handle of the Characteristic Value. */ |  | ||||||
| } ble_gattc_char_t; |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /**@brief GATT descriptor. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint16_t          handle;         /**< Descriptor Handle. */ |  | ||||||
|   ble_uuid_t        uuid;           /**< Descriptor UUID. */ |  | ||||||
| } ble_gattc_desc_t; |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /**@brief Write Parameters. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint8_t        write_op;             /**< Write Operation to be performed, see @ref BLE_GATT_WRITE_OPS. */ |  | ||||||
|   uint8_t        flags;                /**< Flags, see @ref BLE_GATT_EXEC_WRITE_FLAGS. */ |  | ||||||
|   uint16_t       handle;               /**< Handle to the attribute to be written. */ |  | ||||||
|   uint16_t       offset;               /**< Offset in bytes. @note For WRITE_CMD and WRITE_REQ, offset must be 0. */ |  | ||||||
|   uint16_t       len;                  /**< Length of data in bytes. */ |  | ||||||
|   uint8_t const *p_value;              /**< Pointer to the value data. */ |  | ||||||
| } ble_gattc_write_params_t; |  | ||||||
|  |  | ||||||
| /**@brief Attribute Information for 16-bit Attribute UUID. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint16_t       handle;               /**< Attribute handle. */ |  | ||||||
|   ble_uuid_t     uuid;                 /**< 16-bit Attribute UUID. */ |  | ||||||
| } ble_gattc_attr_info16_t; |  | ||||||
|  |  | ||||||
| /**@brief Attribute Information for 128-bit Attribute UUID. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint16_t       handle;               /**< Attribute handle. */ |  | ||||||
|   ble_uuid128_t  uuid;                 /**< 128-bit Attribute UUID. */ |  | ||||||
| } ble_gattc_attr_info128_t; |  | ||||||
|  |  | ||||||
| /**@brief Event structure for @ref BLE_GATTC_EVT_PRIM_SRVC_DISC_RSP. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint16_t             count;           /**< Service count. */ |  | ||||||
|   ble_gattc_service_t services[1];      /**< Service data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. |  | ||||||
|                                              See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ |  | ||||||
| } ble_gattc_evt_prim_srvc_disc_rsp_t; |  | ||||||
|  |  | ||||||
| /**@brief Event structure for @ref BLE_GATTC_EVT_REL_DISC_RSP. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint16_t             count;           /**< Include count. */ |  | ||||||
|   ble_gattc_include_t includes[1];      /**< Include data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. |  | ||||||
|                                              See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ |  | ||||||
| } ble_gattc_evt_rel_disc_rsp_t; |  | ||||||
|  |  | ||||||
| /**@brief Event structure for @ref BLE_GATTC_EVT_CHAR_DISC_RSP. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint16_t            count;          /**< Characteristic count. */ |  | ||||||
|   ble_gattc_char_t    chars[1];       /**< Characteristic data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. |  | ||||||
|                                            See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ |  | ||||||
| } ble_gattc_evt_char_disc_rsp_t; |  | ||||||
|  |  | ||||||
| /**@brief Event structure for @ref BLE_GATTC_EVT_DESC_DISC_RSP. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint16_t            count;          /**< Descriptor count. */ |  | ||||||
|   ble_gattc_desc_t    descs[1];       /**< Descriptor data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. |  | ||||||
|                                            See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ |  | ||||||
| } ble_gattc_evt_desc_disc_rsp_t; |  | ||||||
|  |  | ||||||
| /**@brief Event structure for @ref BLE_GATTC_EVT_ATTR_INFO_DISC_RSP. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint16_t                     count;            /**< Attribute count. */ |  | ||||||
|   uint8_t                      format;           /**< Attribute information format, see @ref BLE_GATTC_ATTR_INFO_FORMAT. */ |  | ||||||
|   union { |  | ||||||
|     ble_gattc_attr_info16_t  attr_info16[1];     /**< Attribute information for 16-bit Attribute UUID. |  | ||||||
|                                                       @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. |  | ||||||
|                                                       See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ |  | ||||||
|     ble_gattc_attr_info128_t attr_info128[1];    /**< Attribute information for 128-bit Attribute UUID. |  | ||||||
|                                                       @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. |  | ||||||
|                                                       See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ |  | ||||||
|   } info;                                        /**< Attribute information union. */ |  | ||||||
| } ble_gattc_evt_attr_info_disc_rsp_t; |  | ||||||
|  |  | ||||||
| /**@brief GATT read by UUID handle value pair. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint16_t            handle;          /**< Attribute Handle. */ |  | ||||||
|   uint8_t            *p_value;         /**< Pointer to the Attribute Value, length is available in @ref ble_gattc_evt_char_val_by_uuid_read_rsp_t::value_len. */ |  | ||||||
| } ble_gattc_handle_value_t; |  | ||||||
|  |  | ||||||
| /**@brief Event structure for @ref BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint16_t                  count;            /**< Handle-Value Pair Count. */ |  | ||||||
|   uint16_t                  value_len;        /**< Length of the value in Handle-Value(s) list. */ |  | ||||||
|   uint8_t                   handle_value[1];  /**< Handle-Value(s) list. To iterate through the list use @ref sd_ble_gattc_evt_char_val_by_uuid_read_rsp_iter. |  | ||||||
|                                                    @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. |  | ||||||
|                                                    See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ |  | ||||||
| } ble_gattc_evt_char_val_by_uuid_read_rsp_t; |  | ||||||
|  |  | ||||||
| /**@brief Event structure for @ref BLE_GATTC_EVT_READ_RSP. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint16_t            handle;         /**< Attribute Handle. */ |  | ||||||
|   uint16_t            offset;         /**< Offset of the attribute data. */ |  | ||||||
|   uint16_t            len;            /**< Attribute data length. */ |  | ||||||
|   uint8_t             data[1];        /**< Attribute data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. |  | ||||||
|                                            See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ |  | ||||||
| } ble_gattc_evt_read_rsp_t; |  | ||||||
|  |  | ||||||
| /**@brief Event structure for @ref BLE_GATTC_EVT_CHAR_VALS_READ_RSP. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint16_t            len;            /**< Concatenated Attribute values length. */ |  | ||||||
|   uint8_t             values[1];      /**< Attribute values. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. |  | ||||||
|                                            See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ |  | ||||||
| } ble_gattc_evt_char_vals_read_rsp_t; |  | ||||||
|  |  | ||||||
| /**@brief Event structure for @ref BLE_GATTC_EVT_WRITE_RSP. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint16_t            handle;           /**< Attribute Handle. */ |  | ||||||
|   uint8_t             write_op;         /**< Type of write operation, see @ref BLE_GATT_WRITE_OPS. */ |  | ||||||
|   uint16_t            offset;           /**< Data offset. */ |  | ||||||
|   uint16_t            len;              /**< Data length. */ |  | ||||||
|   uint8_t             data[1];          /**< Data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. |  | ||||||
|                                              See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ |  | ||||||
| } ble_gattc_evt_write_rsp_t; |  | ||||||
|  |  | ||||||
| /**@brief Event structure for @ref BLE_GATTC_EVT_HVX. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint16_t            handle;         /**< Handle to which the HVx operation applies. */ |  | ||||||
|   uint8_t             type;           /**< Indication or Notification, see @ref BLE_GATT_HVX_TYPES. */ |  | ||||||
|   uint16_t            len;            /**< Attribute data length. */ |  | ||||||
|   uint8_t             data[1];        /**< Attribute data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. |  | ||||||
|                                            See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ |  | ||||||
| } ble_gattc_evt_hvx_t; |  | ||||||
|  |  | ||||||
| /**@brief Event structure for @ref BLE_GATTC_EVT_EXCHANGE_MTU_RSP. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint16_t          server_rx_mtu;            /**< Server RX MTU size. */ |  | ||||||
| } ble_gattc_evt_exchange_mtu_rsp_t; |  | ||||||
|  |  | ||||||
| /**@brief Event structure for @ref BLE_GATTC_EVT_TIMEOUT. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint8_t          src;                       /**< Timeout source, see @ref BLE_GATT_TIMEOUT_SOURCES. */ |  | ||||||
| } ble_gattc_evt_timeout_t; |  | ||||||
|  |  | ||||||
| /**@brief Event structure for @ref BLE_GATTC_EVT_WRITE_CMD_TX_COMPLETE. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint8_t             count;            /**< Number of write without response transmissions completed. */ |  | ||||||
| } ble_gattc_evt_write_cmd_tx_complete_t; |  | ||||||
|  |  | ||||||
| /**@brief GATTC event structure. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint16_t            conn_handle;                /**< Connection Handle on which event occurred. */ |  | ||||||
|   uint16_t            gatt_status;                /**< GATT status code for the operation, see @ref BLE_GATT_STATUS_CODES. */ |  | ||||||
|   uint16_t            error_handle;               /**< In case of error: The handle causing the error. In all other cases @ref BLE_GATT_HANDLE_INVALID. */ |  | ||||||
|   union |  | ||||||
|   { |  | ||||||
|     ble_gattc_evt_prim_srvc_disc_rsp_t          prim_srvc_disc_rsp;         /**< Primary Service Discovery Response Event Parameters. */ |  | ||||||
|     ble_gattc_evt_rel_disc_rsp_t                rel_disc_rsp;               /**< Relationship Discovery Response Event Parameters. */ |  | ||||||
|     ble_gattc_evt_char_disc_rsp_t               char_disc_rsp;              /**< Characteristic Discovery Response Event Parameters. */ |  | ||||||
|     ble_gattc_evt_desc_disc_rsp_t               desc_disc_rsp;              /**< Descriptor Discovery Response Event Parameters. */ |  | ||||||
|     ble_gattc_evt_char_val_by_uuid_read_rsp_t   char_val_by_uuid_read_rsp;  /**< Characteristic Value Read by UUID Response Event Parameters. */ |  | ||||||
|     ble_gattc_evt_read_rsp_t                    read_rsp;                   /**< Read Response Event Parameters. */ |  | ||||||
|     ble_gattc_evt_char_vals_read_rsp_t          char_vals_read_rsp;         /**< Characteristic Values Read Response Event Parameters. */ |  | ||||||
|     ble_gattc_evt_write_rsp_t                   write_rsp;                  /**< Write Response Event Parameters. */ |  | ||||||
|     ble_gattc_evt_hvx_t                         hvx;                        /**< Handle Value Notification/Indication Event Parameters. */ |  | ||||||
|     ble_gattc_evt_exchange_mtu_rsp_t            exchange_mtu_rsp;           /**< Exchange MTU Response Event Parameters. */ |  | ||||||
|     ble_gattc_evt_timeout_t                     timeout;                    /**< Timeout Event Parameters. */ |  | ||||||
|     ble_gattc_evt_attr_info_disc_rsp_t          attr_info_disc_rsp;         /**< Attribute Information Discovery Event Parameters. */ |  | ||||||
|     ble_gattc_evt_write_cmd_tx_complete_t       write_cmd_tx_complete;      /**< Write without Response transmission complete Event Parameters. */ |  | ||||||
|   } params;                                                                 /**< Event Parameters. @note Only valid if @ref gatt_status == @ref BLE_GATT_STATUS_SUCCESS. */ |  | ||||||
| } ble_gattc_evt_t; |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
| /** @addtogroup BLE_GATTC_FUNCTIONS Functions |  | ||||||
|  * @{ */ |  | ||||||
|  |  | ||||||
| /**@brief Initiate or continue a GATT Primary Service Discovery procedure. |  | ||||||
|  * |  | ||||||
|  * @details This function initiates or resumes a Primary Service discovery procedure, starting from the supplied handle. |  | ||||||
|  *          If the last service has not been reached, this function must be called again with an updated start handle value to continue the search. |  | ||||||
|  * |  | ||||||
|  * @note If any of the discovered services have 128-bit UUIDs which are not present in the table provided to ble_vs_uuids_assign, a UUID structure with |  | ||||||
|  *       type @ref BLE_UUID_TYPE_UNKNOWN will be received in the corresponding event. |  | ||||||
|  * |  | ||||||
|  * @events |  | ||||||
|  * @event{@ref BLE_GATTC_EVT_PRIM_SRVC_DISC_RSP} |  | ||||||
|  * @endevents |  | ||||||
|  * |  | ||||||
|  * @mscs |  | ||||||
|  * @mmsc{@ref BLE_GATTC_PRIM_SRVC_DISC_MSC} |  | ||||||
|  * @endmscs |  | ||||||
|  * |  | ||||||
|  * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. |  | ||||||
|  * @param[in] start_handle Handle to start searching from. |  | ||||||
|  * @param[in] p_srvc_uuid Pointer to the service UUID to be found. If it is NULL, all primary services will be returned. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS Successfully started or resumed the Primary Service Discovery procedure. |  | ||||||
|  * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. |  | ||||||
|  * @retval ::NRF_ERROR_BUSY Client procedure already in progress. |  | ||||||
|  * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_BLE_GATTC_PRIMARY_SERVICES_DISCOVER, uint32_t, sd_ble_gattc_primary_services_discover(uint16_t conn_handle, uint16_t start_handle, ble_uuid_t const *p_srvc_uuid)); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /**@brief Initiate or continue a GATT Relationship Discovery procedure. |  | ||||||
|  * |  | ||||||
|  * @details This function initiates or resumes the Find Included Services sub-procedure. If the last included service has not been reached, |  | ||||||
|  *          this must be called again with an updated handle range to continue the search. |  | ||||||
|  * |  | ||||||
|  * @events |  | ||||||
|  * @event{@ref BLE_GATTC_EVT_REL_DISC_RSP} |  | ||||||
|  * @endevents |  | ||||||
|  * |  | ||||||
|  * @mscs |  | ||||||
|  * @mmsc{@ref BLE_GATTC_REL_DISC_MSC} |  | ||||||
|  * @endmscs |  | ||||||
|  * |  | ||||||
|  * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. |  | ||||||
|  * @param[in] p_handle_range A pointer to the range of handles of the Service to perform this procedure on. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS Successfully started or resumed the Relationship Discovery procedure. |  | ||||||
|  * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. |  | ||||||
|  * @retval ::NRF_ERROR_BUSY Client procedure already in progress. |  | ||||||
|  * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_BLE_GATTC_RELATIONSHIPS_DISCOVER, uint32_t, sd_ble_gattc_relationships_discover(uint16_t conn_handle, ble_gattc_handle_range_t const *p_handle_range)); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /**@brief Initiate or continue a GATT Characteristic Discovery procedure. |  | ||||||
|  * |  | ||||||
|  * @details This function initiates or resumes a Characteristic discovery procedure. If the last Characteristic has not been reached, |  | ||||||
|  *          this must be called again with an updated handle range to continue the discovery. |  | ||||||
|  * |  | ||||||
|  * @note If any of the discovered characteristics have 128-bit UUIDs which are not present in the table provided to ble_vs_uuids_assign, a UUID structure with |  | ||||||
|  *       type @ref BLE_UUID_TYPE_UNKNOWN will be received in the corresponding event. |  | ||||||
|  * |  | ||||||
|  * @events |  | ||||||
|  * @event{@ref BLE_GATTC_EVT_CHAR_DISC_RSP} |  | ||||||
|  * @endevents |  | ||||||
|  * |  | ||||||
|  * @mscs |  | ||||||
|  * @mmsc{@ref BLE_GATTC_CHAR_DISC_MSC} |  | ||||||
|  * @endmscs |  | ||||||
|  * |  | ||||||
|  * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. |  | ||||||
|  * @param[in] p_handle_range A pointer to the range of handles of the Service to perform this procedure on. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS Successfully started or resumed the Characteristic Discovery procedure. |  | ||||||
|  * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. |  | ||||||
|  * @retval ::NRF_ERROR_BUSY Client procedure already in progress. |  | ||||||
|  * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_BLE_GATTC_CHARACTERISTICS_DISCOVER, uint32_t, sd_ble_gattc_characteristics_discover(uint16_t conn_handle, ble_gattc_handle_range_t const *p_handle_range)); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /**@brief Initiate or continue a GATT Characteristic Descriptor Discovery procedure. |  | ||||||
|  * |  | ||||||
|  * @details This function initiates or resumes a Characteristic Descriptor discovery procedure. If the last Descriptor has not been reached, |  | ||||||
|  *          this must be called again with an updated handle range to continue the discovery. |  | ||||||
|  * |  | ||||||
|  * @events |  | ||||||
|  * @event{@ref BLE_GATTC_EVT_DESC_DISC_RSP} |  | ||||||
|  * @endevents |  | ||||||
|  * |  | ||||||
|  * @mscs |  | ||||||
|  * @mmsc{@ref BLE_GATTC_DESC_DISC_MSC} |  | ||||||
|  * @endmscs |  | ||||||
|  * |  | ||||||
|  * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. |  | ||||||
|  * @param[in] p_handle_range A pointer to the range of handles of the Characteristic to perform this procedure on. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS Successfully started or resumed the Descriptor Discovery procedure. |  | ||||||
|  * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. |  | ||||||
|  * @retval ::NRF_ERROR_BUSY Client procedure already in progress. |  | ||||||
|  * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_BLE_GATTC_DESCRIPTORS_DISCOVER, uint32_t, sd_ble_gattc_descriptors_discover(uint16_t conn_handle, ble_gattc_handle_range_t const *p_handle_range)); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /**@brief Initiate or continue a GATT Read using Characteristic UUID procedure. |  | ||||||
|  * |  | ||||||
|  * @details This function initiates or resumes a Read using Characteristic UUID procedure. If the last Characteristic has not been reached, |  | ||||||
|  *          this must be called again with an updated handle range to continue the discovery. |  | ||||||
|  * |  | ||||||
|  * @events |  | ||||||
|  * @event{@ref BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP} |  | ||||||
|  * @endevents |  | ||||||
|  * |  | ||||||
|  * @mscs |  | ||||||
|  * @mmsc{@ref BLE_GATTC_READ_UUID_MSC} |  | ||||||
|  * @endmscs |  | ||||||
|  * |  | ||||||
|  * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. |  | ||||||
|  * @param[in] p_uuid Pointer to a Characteristic value UUID to read. |  | ||||||
|  * @param[in] p_handle_range A pointer to the range of handles to perform this procedure on. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS Successfully started or resumed the Read using Characteristic UUID procedure. |  | ||||||
|  * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. |  | ||||||
|  * @retval ::NRF_ERROR_BUSY Client procedure already in progress. |  | ||||||
|  * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_BLE_GATTC_CHAR_VALUE_BY_UUID_READ, uint32_t, sd_ble_gattc_char_value_by_uuid_read(uint16_t conn_handle, ble_uuid_t const *p_uuid, ble_gattc_handle_range_t const *p_handle_range)); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /**@brief Initiate or continue a GATT Read (Long) Characteristic or Descriptor procedure. |  | ||||||
|  * |  | ||||||
|  * @details This function initiates or resumes a GATT Read (Long) Characteristic or Descriptor procedure. If the Characteristic or Descriptor |  | ||||||
|  *          to be read is longer than ATT_MTU - 1, this function must be called multiple times with appropriate offset to read the |  | ||||||
|  *          complete value. |  | ||||||
|  * |  | ||||||
|  * @events |  | ||||||
|  * @event{@ref BLE_GATTC_EVT_READ_RSP} |  | ||||||
|  * @endevents |  | ||||||
|  * |  | ||||||
|  * @mscs |  | ||||||
|  * @mmsc{@ref BLE_GATTC_VALUE_READ_MSC} |  | ||||||
|  * @endmscs |  | ||||||
|  * |  | ||||||
|  * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. |  | ||||||
|  * @param[in] handle The handle of the attribute to be read. |  | ||||||
|  * @param[in] offset Offset into the attribute value to be read. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS Successfully started or resumed the Read (Long) procedure. |  | ||||||
|  * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. |  | ||||||
|  * @retval ::NRF_ERROR_BUSY Client procedure already in progress. |  | ||||||
|  * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_BLE_GATTC_READ, uint32_t, sd_ble_gattc_read(uint16_t conn_handle, uint16_t handle, uint16_t offset)); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /**@brief Initiate a GATT Read Multiple Characteristic Values procedure. |  | ||||||
|  * |  | ||||||
|  * @details This function initiates a GATT Read Multiple Characteristic Values procedure. |  | ||||||
|  * |  | ||||||
|  * @events |  | ||||||
|  * @event{@ref BLE_GATTC_EVT_CHAR_VALS_READ_RSP} |  | ||||||
|  * @endevents |  | ||||||
|  * |  | ||||||
|  * @mscs |  | ||||||
|  * @mmsc{@ref BLE_GATTC_READ_MULT_MSC} |  | ||||||
|  * @endmscs |  | ||||||
|  * |  | ||||||
|  * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. |  | ||||||
|  * @param[in] p_handles A pointer to the handle(s) of the attribute(s) to be read. |  | ||||||
|  * @param[in] handle_count The number of handles in p_handles. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS Successfully started the Read Multiple Characteristic Values procedure. |  | ||||||
|  * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. |  | ||||||
|  * @retval ::NRF_ERROR_BUSY Client procedure already in progress. |  | ||||||
|  * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_BLE_GATTC_CHAR_VALUES_READ, uint32_t, sd_ble_gattc_char_values_read(uint16_t conn_handle, uint16_t const *p_handles, uint16_t handle_count)); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /**@brief Perform a Write (Characteristic Value or Descriptor, with or without response, signed or not, long or reliable) procedure. |  | ||||||
|  * |  | ||||||
|  * @details This function can perform all write procedures described in GATT. |  | ||||||
|  * |  | ||||||
|  * @note    Only one write with response procedure can be ongoing per connection at a time. |  | ||||||
|  *          If the application tries to write with response while another write with response procedure is ongoing, |  | ||||||
|  *          the function call will return @ref NRF_ERROR_BUSY. |  | ||||||
|  *          A @ref BLE_GATTC_EVT_WRITE_RSP event will be issued as soon as the write response arrives from the peer. |  | ||||||
|  * |  | ||||||
|  * @note    The number of Write without Response that can be queued is configured by @ref ble_gattc_conn_cfg_t::write_cmd_tx_queue_size |  | ||||||
|  *          When the queue is full, the function call will return @ref NRF_ERROR_RESOURCES. |  | ||||||
|  *          A @ref BLE_GATTC_EVT_WRITE_CMD_TX_COMPLETE event will be issued as soon as the transmission of the write without response is complete. |  | ||||||
|  * |  | ||||||
|  * @note    The application can keep track of the available queue element count for writes without responses by following the procedure below: |  | ||||||
|  *          - Store initial queue element count in a variable. |  | ||||||
|  *          - Decrement the variable, which stores the currently available queue element count, by one when a call to this function returns @ref NRF_SUCCESS. |  | ||||||
|  *          - Increment the variable, which stores the current available queue element count, by the count variable in @ref BLE_GATTC_EVT_WRITE_CMD_TX_COMPLETE event. |  | ||||||
|  * |  | ||||||
|  * @events |  | ||||||
|  * @event{@ref BLE_GATTC_EVT_WRITE_CMD_TX_COMPLETE, Write without response transmission complete.} |  | ||||||
|  * @event{@ref BLE_GATTC_EVT_WRITE_RSP, Write response received from the peer.} |  | ||||||
|  * @endevents |  | ||||||
|  * |  | ||||||
|  * @mscs |  | ||||||
|  * @mmsc{@ref BLE_GATTC_VALUE_WRITE_WITHOUT_RESP_MSC} |  | ||||||
|  * @mmsc{@ref BLE_GATTC_VALUE_WRITE_MSC} |  | ||||||
|  * @mmsc{@ref BLE_GATTC_VALUE_LONG_WRITE_MSC} |  | ||||||
|  * @mmsc{@ref BLE_GATTC_VALUE_RELIABLE_WRITE_MSC} |  | ||||||
|  * @endmscs |  | ||||||
|  * |  | ||||||
|  * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. |  | ||||||
|  * @param[in] p_write_params A pointer to a write parameters structure. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS Successfully started the Write procedure. |  | ||||||
|  * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. |  | ||||||
|  * @retval ::NRF_ERROR_DATA_SIZE Invalid data size(s) supplied. |  | ||||||
|  * @retval ::NRF_ERROR_BUSY For write with response, procedure already in progress. Wait for a @ref BLE_GATTC_EVT_WRITE_RSP event and retry. |  | ||||||
|  * @retval ::NRF_ERROR_RESOURCES Too many writes without responses queued. |  | ||||||
|  *                               Wait for a @ref BLE_GATTC_EVT_WRITE_CMD_TX_COMPLETE event and retry. |  | ||||||
|  * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_BLE_GATTC_WRITE, uint32_t, sd_ble_gattc_write(uint16_t conn_handle, ble_gattc_write_params_t const *p_write_params)); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /**@brief Send a Handle Value Confirmation to the GATT Server. |  | ||||||
|  * |  | ||||||
|  * @mscs |  | ||||||
|  * @mmsc{@ref BLE_GATTC_HVI_MSC} |  | ||||||
|  * @endmscs |  | ||||||
|  * |  | ||||||
|  * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. |  | ||||||
|  * @param[in] handle The handle of the attribute in the indication. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS Successfully queued the Handle Value Confirmation for transmission. |  | ||||||
|  * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State or no Indication pending to be confirmed. |  | ||||||
|  * @retval ::BLE_ERROR_INVALID_ATTR_HANDLE Invalid attribute handle. |  | ||||||
|  * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_BLE_GATTC_HV_CONFIRM, uint32_t, sd_ble_gattc_hv_confirm(uint16_t conn_handle, uint16_t handle)); |  | ||||||
|  |  | ||||||
| /**@brief Discovers information about a range of attributes on a GATT server. |  | ||||||
|  * |  | ||||||
|  * @events |  | ||||||
|  * @event{@ref BLE_GATTC_EVT_ATTR_INFO_DISC_RSP, Generated when information about a range of attributes has been received.} |  | ||||||
|  * @endevents |  | ||||||
|  * |  | ||||||
|  * @param[in] conn_handle    The connection handle identifying the connection to perform this procedure on. |  | ||||||
|  * @param[in] p_handle_range The range of handles to request information about. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS Successfully started an attribute information discovery procedure. |  | ||||||
|  * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_STATE Invalid connection state |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_ADDR  Invalid pointer supplied. |  | ||||||
|  * @retval ::NRF_ERROR_BUSY Client procedure already in progress. |  | ||||||
|  * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_BLE_GATTC_ATTR_INFO_DISCOVER, uint32_t, sd_ble_gattc_attr_info_discover(uint16_t conn_handle, ble_gattc_handle_range_t const * p_handle_range)); |  | ||||||
|  |  | ||||||
| /**@brief Start an ATT_MTU exchange by sending an Exchange MTU Request to the server. |  | ||||||
|  * |  | ||||||
|  * @details The SoftDevice sets ATT_MTU to the minimum of: |  | ||||||
|  *          - The Client RX MTU value, and |  | ||||||
|  *          - The Server RX MTU value from @ref BLE_GATTC_EVT_EXCHANGE_MTU_RSP. |  | ||||||
|  * |  | ||||||
|  *          However, the SoftDevice never sets ATT_MTU lower than @ref BLE_GATT_ATT_MTU_DEFAULT. |  | ||||||
|  * |  | ||||||
|  * @events |  | ||||||
|  * @event{@ref BLE_GATTC_EVT_EXCHANGE_MTU_RSP} |  | ||||||
|  * @endevents |  | ||||||
|  * |  | ||||||
|  * @mscs |  | ||||||
|  * @mmsc{@ref BLE_GATTC_MTU_EXCHANGE} |  | ||||||
|  * @endmscs |  | ||||||
|  * |  | ||||||
|  * @param[in] conn_handle    The connection handle identifying the connection to perform this procedure on. |  | ||||||
|  * @param[in] client_rx_mtu  Client RX MTU size. |  | ||||||
|  *                           - The minimum value is @ref BLE_GATT_ATT_MTU_DEFAULT. |  | ||||||
|  *                           - The maximum value is @ref ble_gatt_conn_cfg_t::att_mtu in the connection configuration |  | ||||||
|                                used for this connection. |  | ||||||
|  *                           - The value must be equal to Server RX MTU size given in @ref sd_ble_gatts_exchange_mtu_reply |  | ||||||
|  *                             if an ATT_MTU exchange has already been performed in the other direction. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS Successfully sent request to the server. |  | ||||||
|  * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_STATE Invalid connection state or an ATT_MTU exchange was already requested once. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_PARAM Invalid Client RX MTU size supplied. |  | ||||||
|  * @retval ::NRF_ERROR_BUSY Client procedure already in progress. |  | ||||||
|  * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_BLE_GATTC_EXCHANGE_MTU_REQUEST, uint32_t, sd_ble_gattc_exchange_mtu_request(uint16_t conn_handle, uint16_t client_rx_mtu)); |  | ||||||
|  |  | ||||||
| /**@brief Iterate through Handle-Value(s) list in @ref BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP event. |  | ||||||
|  * |  | ||||||
|  * @param[in] p_gattc_evt  Pointer to event buffer containing @ref BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP event. |  | ||||||
|  *                         @note If the buffer contains different event, behavior is undefined. |  | ||||||
|  * @param[in,out] p_iter   Iterator, points to @ref ble_gattc_handle_value_t structure that will be filled in with |  | ||||||
|  *                         the next Handle-Value pair in each iteration. If the function returns other than |  | ||||||
|  *                         @ref NRF_SUCCESS, it will not be changed. |  | ||||||
|  *                         - To start iteration, initialize the structure to zero. |  | ||||||
|  *                         - To continue, pass the value from previous iteration. |  | ||||||
|  * |  | ||||||
|  * \code |  | ||||||
|  * ble_gattc_handle_value_t iter; |  | ||||||
|  * memset(&iter, 0, sizeof(ble_gattc_handle_value_t)); |  | ||||||
|  * while (sd_ble_gattc_evt_char_val_by_uuid_read_rsp_iter(&ble_evt.evt.gattc_evt, &iter) == NRF_SUCCESS) |  | ||||||
|  * { |  | ||||||
|  *   app_handle = iter.handle; |  | ||||||
|  *   memcpy(app_value, iter.p_value, ble_evt.evt.gattc_evt.params.char_val_by_uuid_read_rsp.value_len); |  | ||||||
|  * } |  | ||||||
|  * \endcode |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS Successfully retrieved the next Handle-Value pair. |  | ||||||
|  * @retval ::NRF_ERROR_NOT_FOUND No more Handle-Value pairs available in the list. |  | ||||||
|  */ |  | ||||||
| __STATIC_INLINE uint32_t sd_ble_gattc_evt_char_val_by_uuid_read_rsp_iter(ble_gattc_evt_t *p_gattc_evt, ble_gattc_handle_value_t *p_iter); |  | ||||||
|  |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
| #ifndef SUPPRESS_INLINE_IMPLEMENTATION |  | ||||||
|  |  | ||||||
| __STATIC_INLINE uint32_t sd_ble_gattc_evt_char_val_by_uuid_read_rsp_iter(ble_gattc_evt_t *p_gattc_evt, ble_gattc_handle_value_t *p_iter) |  | ||||||
| { |  | ||||||
|   uint32_t value_len = p_gattc_evt->params.char_val_by_uuid_read_rsp.value_len; |  | ||||||
|   uint8_t *p_first = p_gattc_evt->params.char_val_by_uuid_read_rsp.handle_value; |  | ||||||
|   uint8_t *p_next = p_iter->p_value ? p_iter->p_value + value_len : p_first; |  | ||||||
|  |  | ||||||
|   if ((p_next - p_first) / (sizeof(uint16_t) + value_len) < p_gattc_evt->params.char_val_by_uuid_read_rsp.count) |  | ||||||
|   { |  | ||||||
|     p_iter->handle = (uint16_t)p_next[1] << 8 | p_next[0]; |  | ||||||
|     p_iter->p_value = p_next + sizeof(uint16_t); |  | ||||||
|     return NRF_SUCCESS; |  | ||||||
|   } |  | ||||||
|   else |  | ||||||
|   { |  | ||||||
|     return NRF_ERROR_NOT_FOUND; |  | ||||||
|   } |  | ||||||
| } |  | ||||||
|  |  | ||||||
| #endif /* SUPPRESS_INLINE_IMPLEMENTATION */ |  | ||||||
|  |  | ||||||
| #ifdef __cplusplus |  | ||||||
| } |  | ||||||
| #endif |  | ||||||
| #endif /* BLE_GATTC_H__ */ |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|   @} |  | ||||||
| */ |  | ||||||
| @@ -1,845 +0,0 @@ | |||||||
| /* |  | ||||||
|  * Copyright (c) 2011 - 2017, Nordic Semiconductor ASA |  | ||||||
|  * All rights reserved. |  | ||||||
|  * |  | ||||||
|  * Redistribution and use in source and binary forms, with or without modification, |  | ||||||
|  * are permitted provided that the following conditions are met: |  | ||||||
|  * |  | ||||||
|  * 1. Redistributions of source code must retain the above copyright notice, this |  | ||||||
|  *    list of conditions and the following disclaimer. |  | ||||||
|  * |  | ||||||
|  * 2. Redistributions in binary form, except as embedded into a Nordic |  | ||||||
|  *    Semiconductor ASA integrated circuit in a product or a software update for |  | ||||||
|  *    such product, must reproduce the above copyright notice, this list of |  | ||||||
|  *    conditions and the following disclaimer in the documentation and/or other |  | ||||||
|  *    materials provided with the distribution. |  | ||||||
|  * |  | ||||||
|  * 3. Neither the name of Nordic Semiconductor ASA nor the names of its |  | ||||||
|  *    contributors may be used to endorse or promote products derived from this |  | ||||||
|  *    software without specific prior written permission. |  | ||||||
|  * |  | ||||||
|  * 4. This software, with or without modification, must only be used with a |  | ||||||
|  *    Nordic Semiconductor ASA integrated circuit. |  | ||||||
|  * |  | ||||||
|  * 5. Any software provided in binary form under this license must not be reverse |  | ||||||
|  *    engineered, decompiled, modified and/or disassembled. |  | ||||||
|  * |  | ||||||
|  * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS |  | ||||||
|  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |  | ||||||
|  * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE |  | ||||||
|  * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE |  | ||||||
|  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |  | ||||||
|  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE |  | ||||||
|  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |  | ||||||
|  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |  | ||||||
|  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT |  | ||||||
|  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |  | ||||||
|  */ |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|   @addtogroup BLE_GATTS Generic Attribute Profile (GATT) Server |  | ||||||
|   @{ |  | ||||||
|   @brief  Definitions and prototypes for the GATTS interface. |  | ||||||
|  */ |  | ||||||
|  |  | ||||||
| #ifndef BLE_GATTS_H__ |  | ||||||
| #define BLE_GATTS_H__ |  | ||||||
|  |  | ||||||
| #include <stdint.h> |  | ||||||
| #include "nrf_svc.h" |  | ||||||
| #include "nrf_error.h" |  | ||||||
| #include "ble_hci.h" |  | ||||||
| #include "ble_ranges.h" |  | ||||||
| #include "ble_types.h" |  | ||||||
| #include "ble_err.h" |  | ||||||
| #include "ble_gatt.h" |  | ||||||
| #include "ble_gap.h" |  | ||||||
|  |  | ||||||
| #ifdef __cplusplus |  | ||||||
| extern "C" { |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| /** @addtogroup BLE_GATTS_ENUMERATIONS Enumerations |  | ||||||
|  * @{ */ |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|  * @brief GATTS API SVC numbers. |  | ||||||
|  */ |  | ||||||
| enum BLE_GATTS_SVCS |  | ||||||
| { |  | ||||||
|   SD_BLE_GATTS_SERVICE_ADD = BLE_GATTS_SVC_BASE, /**< Add a service. */ |  | ||||||
|   SD_BLE_GATTS_INCLUDE_ADD,                      /**< Add an included service. */ |  | ||||||
|   SD_BLE_GATTS_CHARACTERISTIC_ADD,               /**< Add a characteristic. */ |  | ||||||
|   SD_BLE_GATTS_DESCRIPTOR_ADD,                   /**< Add a generic attribute. */ |  | ||||||
|   SD_BLE_GATTS_VALUE_SET,                        /**< Set an attribute value. */ |  | ||||||
|   SD_BLE_GATTS_VALUE_GET,                        /**< Get an attribute value. */ |  | ||||||
|   SD_BLE_GATTS_HVX,                              /**< Handle Value Notification or Indication. */ |  | ||||||
|   SD_BLE_GATTS_SERVICE_CHANGED,                  /**< Perform a Service Changed Indication to one or more peers. */ |  | ||||||
|   SD_BLE_GATTS_RW_AUTHORIZE_REPLY,               /**< Reply to an authorization request for a read or write operation on one or more attributes. */ |  | ||||||
|   SD_BLE_GATTS_SYS_ATTR_SET,                     /**< Set the persistent system attributes for a connection. */ |  | ||||||
|   SD_BLE_GATTS_SYS_ATTR_GET,                     /**< Retrieve the persistent system attributes. */ |  | ||||||
|   SD_BLE_GATTS_INITIAL_USER_HANDLE_GET,          /**< Retrieve the first valid user handle. */ |  | ||||||
|   SD_BLE_GATTS_ATTR_GET,                         /**< Retrieve the UUID and/or metadata of an attribute. */ |  | ||||||
|   SD_BLE_GATTS_EXCHANGE_MTU_REPLY                /**< Reply to Exchange MTU Request. */ |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|  * @brief GATT Server Event IDs. |  | ||||||
|  */ |  | ||||||
| enum BLE_GATTS_EVTS |  | ||||||
| { |  | ||||||
|   BLE_GATTS_EVT_WRITE = BLE_GATTS_EVT_BASE,       /**< Write operation performed.                                           \n See @ref ble_gatts_evt_write_t.                 */ |  | ||||||
|   BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST,             /**< Read/Write Authorization request.                                    \n Reply with @ref sd_ble_gatts_rw_authorize_reply. \n See @ref ble_gatts_evt_rw_authorize_request_t. */ |  | ||||||
|   BLE_GATTS_EVT_SYS_ATTR_MISSING,                 /**< A persistent system attribute access is pending.                     \n Respond with @ref sd_ble_gatts_sys_attr_set.     \n See @ref ble_gatts_evt_sys_attr_missing_t.     */ |  | ||||||
|   BLE_GATTS_EVT_HVC,                              /**< Handle Value Confirmation.                                           \n See @ref ble_gatts_evt_hvc_t.                   */ |  | ||||||
|   BLE_GATTS_EVT_SC_CONFIRM,                       /**< Service Changed Confirmation.                                        \n No additional event structure applies.          */ |  | ||||||
|   BLE_GATTS_EVT_EXCHANGE_MTU_REQUEST,             /**< Exchange MTU Request.                                                \n Reply with @ref sd_ble_gatts_exchange_mtu_reply. \n See @ref ble_gatts_evt_exchange_mtu_request_t. */ |  | ||||||
|   BLE_GATTS_EVT_TIMEOUT,                          /**< Peer failed to respond to an ATT request in time.                    \n See @ref ble_gatts_evt_timeout_t.               */ |  | ||||||
|   BLE_GATTS_EVT_HVN_TX_COMPLETE                   /**< Handle Value Notification transmission complete.                     \n See @ref ble_gatts_evt_hvn_tx_complete_t.       */ |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| /**@brief GATTS Configuration IDs. |  | ||||||
|  * |  | ||||||
|  * IDs that uniquely identify a GATTS configuration. |  | ||||||
|  */ |  | ||||||
| enum BLE_GATTS_CFGS |  | ||||||
| { |  | ||||||
|   BLE_GATTS_CFG_SERVICE_CHANGED = BLE_GATTS_CFG_BASE, /**< Service changed configuration. */ |  | ||||||
|   BLE_GATTS_CFG_ATTR_TAB_SIZE,                        /**< Attribute table size configuration. */ |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
| /** @addtogroup BLE_GATTS_DEFINES Defines |  | ||||||
|  * @{ */ |  | ||||||
|  |  | ||||||
| /** @defgroup BLE_ERRORS_GATTS SVC return values specific to GATTS |  | ||||||
|  * @{ */ |  | ||||||
| #define BLE_ERROR_GATTS_INVALID_ATTR_TYPE   (NRF_GATTS_ERR_BASE + 0x000) /**< Invalid attribute type. */ |  | ||||||
| #define BLE_ERROR_GATTS_SYS_ATTR_MISSING    (NRF_GATTS_ERR_BASE + 0x001) /**< System Attributes missing. */ |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
| /** @defgroup BLE_GATTS_ATTR_LENS_MAX Maximum attribute lengths |  | ||||||
|  * @{ */ |  | ||||||
| #define BLE_GATTS_FIX_ATTR_LEN_MAX (510)  /**< Maximum length for fixed length Attribute Values. */ |  | ||||||
| #define BLE_GATTS_VAR_ATTR_LEN_MAX (512)  /**< Maximum length for variable length Attribute Values. */ |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
| /** @defgroup BLE_GATTS_SRVC_TYPES GATT Server Service Types |  | ||||||
|  * @{ */ |  | ||||||
| #define BLE_GATTS_SRVC_TYPE_INVALID          0x00  /**< Invalid Service Type. */ |  | ||||||
| #define BLE_GATTS_SRVC_TYPE_PRIMARY          0x01  /**< Primary Service. */ |  | ||||||
| #define BLE_GATTS_SRVC_TYPE_SECONDARY        0x02  /**< Secondary Type. */ |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /** @defgroup BLE_GATTS_ATTR_TYPES GATT Server Attribute Types |  | ||||||
|  * @{ */ |  | ||||||
| #define BLE_GATTS_ATTR_TYPE_INVALID         0x00  /**< Invalid Attribute Type. */ |  | ||||||
| #define BLE_GATTS_ATTR_TYPE_PRIM_SRVC_DECL  0x01  /**< Primary Service Declaration. */ |  | ||||||
| #define BLE_GATTS_ATTR_TYPE_SEC_SRVC_DECL   0x02  /**< Secondary Service Declaration. */ |  | ||||||
| #define BLE_GATTS_ATTR_TYPE_INC_DECL        0x03  /**< Include Declaration. */ |  | ||||||
| #define BLE_GATTS_ATTR_TYPE_CHAR_DECL       0x04  /**< Characteristic Declaration. */ |  | ||||||
| #define BLE_GATTS_ATTR_TYPE_CHAR_VAL        0x05  /**< Characteristic Value. */ |  | ||||||
| #define BLE_GATTS_ATTR_TYPE_DESC            0x06  /**< Descriptor. */ |  | ||||||
| #define BLE_GATTS_ATTR_TYPE_OTHER           0x07  /**< Other, non-GATT specific type. */ |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /** @defgroup BLE_GATTS_OPS GATT Server Operations |  | ||||||
|  * @{ */ |  | ||||||
| #define BLE_GATTS_OP_INVALID                0x00  /**< Invalid Operation. */ |  | ||||||
| #define BLE_GATTS_OP_WRITE_REQ              0x01  /**< Write Request. */ |  | ||||||
| #define BLE_GATTS_OP_WRITE_CMD              0x02  /**< Write Command. */ |  | ||||||
| #define BLE_GATTS_OP_SIGN_WRITE_CMD         0x03  /**< Signed Write Command. */ |  | ||||||
| #define BLE_GATTS_OP_PREP_WRITE_REQ         0x04  /**< Prepare Write Request. */ |  | ||||||
| #define BLE_GATTS_OP_EXEC_WRITE_REQ_CANCEL  0x05  /**< Execute Write Request: Cancel all prepared writes. */ |  | ||||||
| #define BLE_GATTS_OP_EXEC_WRITE_REQ_NOW     0x06  /**< Execute Write Request: Immediately execute all prepared writes. */ |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
| /** @defgroup BLE_GATTS_VLOCS GATT Value Locations |  | ||||||
|  * @{ */ |  | ||||||
| #define BLE_GATTS_VLOC_INVALID       0x00  /**< Invalid Location. */ |  | ||||||
| #define BLE_GATTS_VLOC_STACK         0x01  /**< Attribute Value is located in stack memory, no user memory is required. */ |  | ||||||
| #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 |  | ||||||
|                                                 will read and write directly to the memory using the pointer provided in the APIs. There are no alignment requirements for the buffer. */ |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
| /** @defgroup BLE_GATTS_AUTHORIZE_TYPES GATT Server Authorization Types |  | ||||||
|  * @{ */ |  | ||||||
| #define BLE_GATTS_AUTHORIZE_TYPE_INVALID    0x00  /**< Invalid Type. */ |  | ||||||
| #define BLE_GATTS_AUTHORIZE_TYPE_READ       0x01  /**< Authorize a Read Operation. */ |  | ||||||
| #define BLE_GATTS_AUTHORIZE_TYPE_WRITE      0x02  /**< Authorize a Write Request Operation. */ |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
| /** @defgroup BLE_GATTS_SYS_ATTR_FLAGS System Attribute Flags |  | ||||||
|  * @{ */ |  | ||||||
| #define BLE_GATTS_SYS_ATTR_FLAG_SYS_SRVCS (1 << 0)  /**< Restrict system attributes to system services only. */ |  | ||||||
| #define BLE_GATTS_SYS_ATTR_FLAG_USR_SRVCS (1 << 1)  /**< Restrict system attributes to user services only. */ |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
| /** @defgroup BLE_GATTS_SERVICE_CHANGED Service Changed Inclusion Values |  | ||||||
|  * @{ |  | ||||||
|  */ |  | ||||||
| #define BLE_GATTS_SERVICE_CHANGED_DEFAULT   (1)   /**< Default is to include the Service Changed characteristic in the Attribute Table. */ |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
| /** @defgroup BLE_GATTS_ATTR_TAB_SIZE Attribute Table size |  | ||||||
|  * @{ |  | ||||||
|  */ |  | ||||||
| #define BLE_GATTS_ATTR_TAB_SIZE_MIN         (248)  /**< Minimum Attribute Table size */ |  | ||||||
| #define BLE_GATTS_ATTR_TAB_SIZE_DEFAULT     (1408) /**< Default Attribute Table size. */ |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
| /** @defgroup BLE_GATTS_DEFAULTS GATT Server defaults |  | ||||||
|  * @{ |  | ||||||
|  */ |  | ||||||
| #define BLE_GATTS_HVN_TX_QUEUE_SIZE_DEFAULT  1 /**< Default number of Handle Value Notifications that can be queued for transmission. */ |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
| /** @addtogroup BLE_GATTS_STRUCTURES Structures |  | ||||||
|  * @{ */ |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|  * @brief BLE GATTS connection configuration parameters, set with @ref sd_ble_cfg_set. |  | ||||||
|  */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint8_t  hvn_tx_queue_size; /**< Minimum guaranteed number of Handle Value Notifications that can be queued for transmission. |  | ||||||
|                                     The default value is @ref BLE_GATTS_HVN_TX_QUEUE_SIZE_DEFAULT */ |  | ||||||
| } ble_gatts_conn_cfg_t; |  | ||||||
|  |  | ||||||
| /**@brief Attribute metadata. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   ble_gap_conn_sec_mode_t read_perm;       /**< Read permissions. */ |  | ||||||
|   ble_gap_conn_sec_mode_t write_perm;      /**< Write permissions. */ |  | ||||||
|   uint8_t                 vlen       :1;   /**< Variable length attribute. */ |  | ||||||
|   uint8_t                 vloc       :2;   /**< Value location, see @ref BLE_GATTS_VLOCS.*/ |  | ||||||
|   uint8_t                 rd_auth    :1;   /**< Read authorization and value will be requested from the application on every read operation. */ |  | ||||||
|   uint8_t                 wr_auth    :1;   /**< Write authorization will be requested from the application on every Write Request operation (but not Write Command). */ |  | ||||||
| } ble_gatts_attr_md_t; |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /**@brief GATT Attribute. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   ble_uuid_t const          *p_uuid;        /**< Pointer to the attribute UUID. */ |  | ||||||
|   ble_gatts_attr_md_t const *p_attr_md;     /**< Pointer to the attribute metadata structure. */ |  | ||||||
|   uint16_t                   init_len;      /**< Initial attribute value length in bytes. */ |  | ||||||
|   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. */ |  | ||||||
|   uint16_t                   max_len;       /**< Maximum attribute value length in bytes, see @ref BLE_GATTS_ATTR_LENS_MAX for maximum values. */ |  | ||||||
|   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 |  | ||||||
|                                                  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. |  | ||||||
|                                                  The stack may access that memory directly without the application's knowledge. For writable characteristics, this value must not be a location in flash memory.*/ |  | ||||||
| } ble_gatts_attr_t; |  | ||||||
|  |  | ||||||
| /**@brief GATT Attribute Value. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint16_t  len;        /**< Length in bytes to be written or read. Length in bytes written or read after successful return.*/ |  | ||||||
|   uint16_t  offset;     /**< Attribute value offset. */ |  | ||||||
|   uint8_t  *p_value;    /**< Pointer to where value is stored or will be stored. |  | ||||||
|                              If value is stored in user memory, only the attribute length is updated when p_value == NULL. |  | ||||||
|                              Set to NULL when reading to obtain the complete length of the attribute value */ |  | ||||||
| } ble_gatts_value_t; |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /**@brief GATT Characteristic Presentation Format. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint8_t          format;      /**< Format of the value, see @ref BLE_GATT_CPF_FORMATS. */ |  | ||||||
|   int8_t           exponent;    /**< Exponent for integer data types. */ |  | ||||||
|   uint16_t         unit;        /**< Unit from Bluetooth Assigned Numbers. */ |  | ||||||
|   uint8_t          name_space;  /**< Namespace from Bluetooth Assigned Numbers, see @ref BLE_GATT_CPF_NAMESPACES. */ |  | ||||||
|   uint16_t         desc;        /**< Namespace description from Bluetooth Assigned Numbers, see @ref BLE_GATT_CPF_NAMESPACES. */ |  | ||||||
| } ble_gatts_char_pf_t; |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /**@brief GATT Characteristic metadata. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   ble_gatt_char_props_t       char_props;               /**< Characteristic Properties. */ |  | ||||||
|   ble_gatt_char_ext_props_t   char_ext_props;           /**< Characteristic Extended Properties. */ |  | ||||||
|   uint8_t const              *p_char_user_desc;         /**< Pointer to a UTF-8 encoded string (non-NULL terminated), NULL if the descriptor is not required. */ |  | ||||||
|   uint16_t                    char_user_desc_max_size;  /**< The maximum size in bytes of the user description descriptor. */ |  | ||||||
|   uint16_t                    char_user_desc_size;      /**< The size of the user description, must be smaller or equal to char_user_desc_max_size. */ |  | ||||||
|   ble_gatts_char_pf_t const  *p_char_pf;                /**< Pointer to a presentation format structure or NULL if the CPF descriptor is not required. */ |  | ||||||
|   ble_gatts_attr_md_t const  *p_user_desc_md;           /**< Attribute metadata for the User Description descriptor, or NULL for default values. */ |  | ||||||
|   ble_gatts_attr_md_t const  *p_cccd_md;                /**< Attribute metadata for the Client Characteristic Configuration Descriptor, or NULL for default values. */ |  | ||||||
|   ble_gatts_attr_md_t const  *p_sccd_md;                /**< Attribute metadata for the Server Characteristic Configuration Descriptor, or NULL for default values. */ |  | ||||||
| } ble_gatts_char_md_t; |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /**@brief GATT Characteristic Definition Handles. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint16_t          value_handle;       /**< Handle to the characteristic value. */ |  | ||||||
|   uint16_t          user_desc_handle;   /**< Handle to the User Description descriptor, or @ref BLE_GATT_HANDLE_INVALID if not present. */ |  | ||||||
|   uint16_t          cccd_handle;        /**< Handle to the Client Characteristic Configuration Descriptor, or @ref BLE_GATT_HANDLE_INVALID if not present. */ |  | ||||||
|   uint16_t          sccd_handle;        /**< Handle to the Server Characteristic Configuration Descriptor, or @ref BLE_GATT_HANDLE_INVALID if not present. */ |  | ||||||
| } ble_gatts_char_handles_t; |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /**@brief GATT HVx parameters. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint16_t          handle;             /**< Characteristic Value Handle. */ |  | ||||||
|   uint8_t           type;               /**< Indication or Notification, see @ref BLE_GATT_HVX_TYPES. */ |  | ||||||
|   uint16_t          offset;             /**< Offset within the attribute value. */ |  | ||||||
|   uint16_t         *p_len;              /**< Length in bytes to be written, length in bytes written after return. */ |  | ||||||
|   uint8_t const    *p_data;             /**< Actual data content, use NULL to use the current attribute value. */ |  | ||||||
| } ble_gatts_hvx_params_t; |  | ||||||
|  |  | ||||||
| /**@brief GATT Authorization parameters. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint16_t          gatt_status;        /**< GATT status code for the operation, see @ref BLE_GATT_STATUS_CODES. */ |  | ||||||
|   uint8_t           update : 1;         /**< If set, data supplied in p_data will be used to update the attribute value. |  | ||||||
|                                              Please note that for @ref BLE_GATTS_AUTHORIZE_TYPE_WRITE operations this bit must always be set, |  | ||||||
|                                              as the data to be written needs to be stored and later provided by the application. */ |  | ||||||
|   uint16_t          offset;             /**< Offset of the attribute value being updated. */ |  | ||||||
|   uint16_t          len;                /**< Length in bytes of the value in p_data pointer, see @ref BLE_GATTS_ATTR_LENS_MAX. */ |  | ||||||
|   uint8_t const    *p_data;             /**< Pointer to new value used to update the attribute value. */ |  | ||||||
| } ble_gatts_authorize_params_t; |  | ||||||
|  |  | ||||||
| /**@brief GATT Read or Write Authorize Reply parameters. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint8_t                               type;   /**< Type of authorize operation, see @ref BLE_GATTS_AUTHORIZE_TYPES. */ |  | ||||||
|   union { |  | ||||||
|     ble_gatts_authorize_params_t        read;   /**< Read authorization parameters. */ |  | ||||||
|     ble_gatts_authorize_params_t        write;  /**< Write authorization parameters. */ |  | ||||||
|   } params;                                     /**< Reply Parameters. */ |  | ||||||
| } ble_gatts_rw_authorize_reply_params_t; |  | ||||||
|  |  | ||||||
| /**@brief Service Changed Inclusion configuration parameters, set with @ref sd_ble_cfg_set. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint8_t service_changed : 1;       /**< If 1, include the Service Changed characteristic in the Attribute Table. Default is @ref BLE_GATTS_SERVICE_CHANGED_DEFAULT. */ |  | ||||||
| } ble_gatts_cfg_service_changed_t; |  | ||||||
|  |  | ||||||
| /**@brief Attribute table size configuration parameters, set with @ref sd_ble_cfg_set. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_LENGTH One or more of the following is true: |  | ||||||
|  *                                    - The specified Attribute Table size is too small. |  | ||||||
|  *                                      The minimum acceptable size is defined by @ref BLE_GATTS_ATTR_TAB_SIZE_MIN. |  | ||||||
|  *                                    - The specified Attribute Table size is not a multiple of 4. |  | ||||||
|  */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint32_t attr_tab_size; /**< Attribute table size. Default is @ref BLE_GATTS_ATTR_TAB_SIZE_DEFAULT, minimum is @ref BLE_GATTS_ATTR_TAB_SIZE_MIN. */ |  | ||||||
| } ble_gatts_cfg_attr_tab_size_t; |  | ||||||
|  |  | ||||||
| /**@brief Config structure for GATTS configurations. */ |  | ||||||
| typedef union |  | ||||||
| { |  | ||||||
|   ble_gatts_cfg_service_changed_t service_changed;  /**< Include service changed characteristic, cfg_id is @ref BLE_GATTS_CFG_SERVICE_CHANGED. */ |  | ||||||
|   ble_gatts_cfg_attr_tab_size_t attr_tab_size;      /**< Attribute table size, cfg_id is @ref BLE_GATTS_CFG_ATTR_TAB_SIZE. */ |  | ||||||
| } ble_gatts_cfg_t; |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /**@brief Event structure for @ref BLE_GATTS_EVT_WRITE. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint16_t                    handle;             /**< Attribute Handle. */ |  | ||||||
|   ble_uuid_t                  uuid;               /**< Attribute UUID. */ |  | ||||||
|   uint8_t                     op;                 /**< Type of write operation, see @ref BLE_GATTS_OPS. */ |  | ||||||
|   uint8_t                     auth_required;      /**< Writing operation deferred due to authorization requirement. Application may use @ref sd_ble_gatts_value_set to finalize the writing operation. */ |  | ||||||
|   uint16_t                    offset;             /**< Offset for the write operation. */ |  | ||||||
|   uint16_t                    len;                /**< Length of the received data. */ |  | ||||||
|   uint8_t                     data[1];            /**< Received data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. |  | ||||||
|                                                        See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ |  | ||||||
| } ble_gatts_evt_write_t; |  | ||||||
|  |  | ||||||
| /**@brief Event substructure for authorized read requests, see @ref ble_gatts_evt_rw_authorize_request_t. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint16_t                    handle;             /**< Attribute Handle. */ |  | ||||||
|   ble_uuid_t                  uuid;               /**< Attribute UUID. */ |  | ||||||
|   uint16_t                    offset;             /**< Offset for the read operation. */ |  | ||||||
| } ble_gatts_evt_read_t; |  | ||||||
|  |  | ||||||
| /**@brief Event structure for @ref BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint8_t                     type;             /**< Type of authorize operation, see @ref BLE_GATTS_AUTHORIZE_TYPES. */ |  | ||||||
|   union { |  | ||||||
|     ble_gatts_evt_read_t      read;             /**< Attribute Read Parameters. */ |  | ||||||
|     ble_gatts_evt_write_t     write;            /**< Attribute Write Parameters. */ |  | ||||||
|   } request;                                    /**< Request Parameters. */ |  | ||||||
| } ble_gatts_evt_rw_authorize_request_t; |  | ||||||
|  |  | ||||||
| /**@brief Event structure for @ref BLE_GATTS_EVT_SYS_ATTR_MISSING. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint8_t hint;                                 /**< Hint (currently unused). */ |  | ||||||
| } ble_gatts_evt_sys_attr_missing_t; |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /**@brief Event structure for @ref BLE_GATTS_EVT_HVC. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint16_t          handle;                       /**< Attribute Handle. */ |  | ||||||
| } ble_gatts_evt_hvc_t; |  | ||||||
|  |  | ||||||
| /**@brief Event structure for @ref BLE_GATTS_EVT_EXCHANGE_MTU_REQUEST. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint16_t          client_rx_mtu;              /**< Client RX MTU size. */ |  | ||||||
| } ble_gatts_evt_exchange_mtu_request_t; |  | ||||||
|  |  | ||||||
| /**@brief Event structure for @ref BLE_GATTS_EVT_TIMEOUT. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint8_t          src;                       /**< Timeout source, see @ref BLE_GATT_TIMEOUT_SOURCES. */ |  | ||||||
| } ble_gatts_evt_timeout_t; |  | ||||||
|  |  | ||||||
| /**@brief Event structure for @ref BLE_GATTS_EVT_HVN_TX_COMPLETE. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint8_t          count;                     /**< Number of notification transmissions completed. */ |  | ||||||
| } ble_gatts_evt_hvn_tx_complete_t; |  | ||||||
|  |  | ||||||
| /**@brief GATTS event structure. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint16_t conn_handle;                                       /**< Connection Handle on which the event occurred. */ |  | ||||||
|   union |  | ||||||
|   { |  | ||||||
|     ble_gatts_evt_write_t                 write;                 /**< Write Event Parameters. */ |  | ||||||
|     ble_gatts_evt_rw_authorize_request_t  authorize_request;     /**< Read or Write Authorize Request Parameters. */ |  | ||||||
|     ble_gatts_evt_sys_attr_missing_t      sys_attr_missing;      /**< System attributes missing. */ |  | ||||||
|     ble_gatts_evt_hvc_t                   hvc;                   /**< Handle Value Confirmation Event Parameters. */ |  | ||||||
|     ble_gatts_evt_exchange_mtu_request_t  exchange_mtu_request;  /**< Exchange MTU Request Event Parameters. */ |  | ||||||
|     ble_gatts_evt_timeout_t               timeout;               /**< Timeout Event. */ |  | ||||||
|     ble_gatts_evt_hvn_tx_complete_t       hvn_tx_complete;       /**< Handle Value Notification transmission complete Event Parameters. */ |  | ||||||
|   } params;                                                      /**< Event Parameters. */ |  | ||||||
| } ble_gatts_evt_t; |  | ||||||
|  |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
| /** @addtogroup BLE_GATTS_FUNCTIONS Functions |  | ||||||
|  * @{ */ |  | ||||||
|  |  | ||||||
| /**@brief Add a service declaration to the Attribute Table. |  | ||||||
|  * |  | ||||||
|  * @note Secondary Services are only relevant in the context of the entity that references them, it is therefore forbidden to |  | ||||||
|  *       add a secondary service declaration that is not referenced by another service later in the Attribute Table. |  | ||||||
|  * |  | ||||||
|  * @mscs |  | ||||||
|  * @mmsc{@ref BLE_GATTS_ATT_TABLE_POP_MSC} |  | ||||||
|  * @endmscs |  | ||||||
|  * |  | ||||||
|  * @param[in] type      Toggles between primary and secondary services, see @ref BLE_GATTS_SRVC_TYPES. |  | ||||||
|  * @param[in] p_uuid    Pointer to service UUID. |  | ||||||
|  * @param[out] p_handle Pointer to a 16-bit word where the assigned handle will be stored. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS Successfully added a service declaration. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, Vendor Specific UUIDs need to be present in the table. |  | ||||||
|  * @retval ::NRF_ERROR_FORBIDDEN Forbidden value supplied, certain UUIDs are reserved for the stack. |  | ||||||
|  * @retval ::NRF_ERROR_NO_MEM Not enough memory to complete operation. |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_BLE_GATTS_SERVICE_ADD, uint32_t, sd_ble_gatts_service_add(uint8_t type, ble_uuid_t const *p_uuid, uint16_t *p_handle)); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /**@brief Add an include declaration to the Attribute Table. |  | ||||||
|  * |  | ||||||
|  * @note It is currently only possible to add an include declaration to the last added service (i.e. only sequential population is supported at this time). |  | ||||||
|  * |  | ||||||
|  * @note The included service must already be present in the Attribute Table prior to this call. |  | ||||||
|  * |  | ||||||
|  * @mscs |  | ||||||
|  * @mmsc{@ref BLE_GATTS_ATT_TABLE_POP_MSC} |  | ||||||
|  * @endmscs |  | ||||||
|  * |  | ||||||
|  * @param[in] service_handle    Handle of the service where the included service is to be placed, if @ref BLE_GATT_HANDLE_INVALID is used, it will be placed sequentially. |  | ||||||
|  * @param[in] inc_srvc_handle   Handle of the included service. |  | ||||||
|  * @param[out] p_include_handle Pointer to a 16-bit word where the assigned handle will be stored. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS Successfully added an include declaration. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, handle values need to match previously added services. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. |  | ||||||
|  * @retval ::NRF_ERROR_NOT_SUPPORTED Feature is not supported, service_handle must be that of the last added service. |  | ||||||
|  * @retval ::NRF_ERROR_FORBIDDEN Forbidden value supplied, self inclusions are not allowed. |  | ||||||
|  * @retval ::NRF_ERROR_NO_MEM Not enough memory to complete operation. |  | ||||||
|  * @retval ::NRF_ERROR_NOT_FOUND Attribute not found. |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_BLE_GATTS_INCLUDE_ADD, uint32_t, sd_ble_gatts_include_add(uint16_t service_handle, uint16_t inc_srvc_handle, uint16_t *p_include_handle)); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /**@brief Add a characteristic declaration, a characteristic value declaration and optional characteristic descriptor declarations to the Attribute Table. |  | ||||||
|  * |  | ||||||
|  * @note It is currently only possible to add a characteristic to the last added service (i.e. only sequential population is supported at this time). |  | ||||||
|  * |  | ||||||
|  * @note Several restrictions apply to the parameters, such as matching permissions between the user description descriptor and the writable auxiliaries bits, |  | ||||||
|  *       readable (no security) and writable (selectable) CCCDs and SCCDs and valid presentation format values. |  | ||||||
|  * |  | ||||||
|  * @note If no metadata is provided for the optional descriptors, their permissions will be derived from the characteristic permissions. |  | ||||||
|  * |  | ||||||
|  * @mscs |  | ||||||
|  * @mmsc{@ref BLE_GATTS_ATT_TABLE_POP_MSC} |  | ||||||
|  * @endmscs |  | ||||||
|  * |  | ||||||
|  * @param[in] service_handle    Handle of the service where the characteristic is to be placed, if @ref BLE_GATT_HANDLE_INVALID is used, it will be placed sequentially. |  | ||||||
|  * @param[in] p_char_md         Characteristic metadata. |  | ||||||
|  * @param[in] p_attr_char_value Pointer to the attribute structure corresponding to the characteristic value. |  | ||||||
|  * @param[out] p_handles        Pointer to the structure where the assigned handles will be stored. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS Successfully added a characteristic. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, service handle, Vendor Specific UUIDs, lengths, and permissions need to adhere to the constraints. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation, a service context is required. |  | ||||||
|  * @retval ::NRF_ERROR_FORBIDDEN Forbidden value supplied, certain UUIDs are reserved for the stack. |  | ||||||
|  * @retval ::NRF_ERROR_NO_MEM Not enough memory to complete operation. |  | ||||||
|  * @retval ::NRF_ERROR_DATA_SIZE Invalid data size(s) supplied, attribute lengths are restricted by @ref BLE_GATTS_ATTR_LENS_MAX. |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_BLE_GATTS_CHARACTERISTIC_ADD, uint32_t, sd_ble_gatts_characteristic_add(uint16_t service_handle, ble_gatts_char_md_t const *p_char_md, ble_gatts_attr_t const *p_attr_char_value, ble_gatts_char_handles_t *p_handles)); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /**@brief Add a descriptor to the Attribute Table. |  | ||||||
|  * |  | ||||||
|  * @note It is currently only possible to add a descriptor to the last added characteristic (i.e. only sequential population is supported at this time). |  | ||||||
|  * |  | ||||||
|  * @mscs |  | ||||||
|  * @mmsc{@ref BLE_GATTS_ATT_TABLE_POP_MSC} |  | ||||||
|  * @endmscs |  | ||||||
|  * |  | ||||||
|  * @param[in] char_handle   Handle of the characteristic where the descriptor is to be placed, if @ref BLE_GATT_HANDLE_INVALID is used, it will be placed sequentially. |  | ||||||
|  * @param[in] p_attr        Pointer to the attribute structure. |  | ||||||
|  * @param[out] p_handle     Pointer to a 16-bit word where the assigned handle will be stored. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS Successfully added a descriptor. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, characteristic handle, Vendor Specific UUIDs, lengths, and permissions need to adhere to the constraints. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation, a characteristic context is required. |  | ||||||
|  * @retval ::NRF_ERROR_FORBIDDEN Forbidden value supplied, certain UUIDs are reserved for the stack. |  | ||||||
|  * @retval ::NRF_ERROR_NO_MEM Not enough memory to complete operation. |  | ||||||
|  * @retval ::NRF_ERROR_DATA_SIZE Invalid data size(s) supplied, attribute lengths are restricted by @ref BLE_GATTS_ATTR_LENS_MAX. |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_BLE_GATTS_DESCRIPTOR_ADD, uint32_t, sd_ble_gatts_descriptor_add(uint16_t char_handle, ble_gatts_attr_t const *p_attr, uint16_t *p_handle)); |  | ||||||
|  |  | ||||||
| /**@brief Set the value of a given attribute. |  | ||||||
|  * |  | ||||||
|  * @note Values other than system attributes can be set at any time, regardless of whether any active connections exist. |  | ||||||
|  * |  | ||||||
|  * @mscs |  | ||||||
|  * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_QUEUE_FULL_MSC} |  | ||||||
|  * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_NOBUF_NOAUTH_MSC} |  | ||||||
|  * @endmscs |  | ||||||
|  * |  | ||||||
|  * @param[in] conn_handle  Connection handle. Ignored if the value does not belong to a system attribute. |  | ||||||
|  * @param[in] handle       Attribute handle. |  | ||||||
|  * @param[in,out] p_value  Attribute value information. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS Successfully set the value of the attribute. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. |  | ||||||
|  * @retval ::NRF_ERROR_NOT_FOUND Attribute not found. |  | ||||||
|  * @retval ::NRF_ERROR_FORBIDDEN Forbidden handle supplied, certain attributes are not modifiable by the application. |  | ||||||
|  * @retval ::NRF_ERROR_DATA_SIZE Invalid data size(s) supplied, attribute lengths are restricted by @ref BLE_GATTS_ATTR_LENS_MAX. |  | ||||||
|  * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied on a system attribute. |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_BLE_GATTS_VALUE_SET, uint32_t, sd_ble_gatts_value_set(uint16_t conn_handle, uint16_t handle, ble_gatts_value_t *p_value)); |  | ||||||
|  |  | ||||||
| /**@brief Get the value of a given attribute. |  | ||||||
|  * |  | ||||||
|  * @note                 If the attribute value is longer than the size of the supplied buffer, |  | ||||||
|  *                       @ref ble_gatts_value_t::len will return the total attribute value length (excluding offset), |  | ||||||
|  *                       and not the number of bytes actually returned in @ref ble_gatts_value_t::p_value. |  | ||||||
|  *                       The application may use this information to allocate a suitable buffer size. |  | ||||||
|  * |  | ||||||
|  * @note                 When retrieving system attribute values with this function, the connection handle |  | ||||||
|  *                       may refer to an already disconnected connection. Refer to the documentation of |  | ||||||
|  *                       @ref sd_ble_gatts_sys_attr_get for further information. |  | ||||||
|  * |  | ||||||
|  * @param[in] conn_handle  Connection handle. Ignored if the value does not belong to a system attribute. |  | ||||||
|  * @param[in] handle       Attribute handle. |  | ||||||
|  * @param[in,out] p_value  Attribute value information. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS Successfully retrieved the value of the attribute. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. |  | ||||||
|  * @retval ::NRF_ERROR_NOT_FOUND Attribute not found. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_PARAM Invalid attribute offset supplied. |  | ||||||
|  * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied on a system attribute. |  | ||||||
|  * @retval ::BLE_ERROR_GATTS_SYS_ATTR_MISSING System attributes missing, use @ref sd_ble_gatts_sys_attr_set to set them to a known value. |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_BLE_GATTS_VALUE_GET, uint32_t, sd_ble_gatts_value_get(uint16_t conn_handle, uint16_t handle, ble_gatts_value_t *p_value)); |  | ||||||
|  |  | ||||||
| /**@brief Notify or Indicate an attribute value. |  | ||||||
|  * |  | ||||||
|  * @details This function checks for the relevant Client Characteristic Configuration descriptor value to verify that the relevant operation |  | ||||||
|  *          (notification or indication) has been enabled by the client. It is also able to update the attribute value before issuing the PDU, so that |  | ||||||
|  *          the application can atomically perform a value update and a server initiated transaction with a single API call. |  | ||||||
|  * |  | ||||||
|  * @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. |  | ||||||
|  *          The Attribute Table has been updated if one of the following error codes is returned: @ref NRF_ERROR_INVALID_STATE, @ref NRF_ERROR_BUSY, |  | ||||||
|  *          @ref NRF_ERROR_FORBIDDEN, @ref BLE_ERROR_GATTS_SYS_ATTR_MISSING and @ref NRF_ERROR_RESOURCES. |  | ||||||
|  *          The caller can check whether the value has been updated by looking at the contents of *(@ref ble_gatts_hvx_params_t::p_len). |  | ||||||
|  * |  | ||||||
|  * @note    Only one indication procedure can be ongoing per connection at a time. |  | ||||||
|  *          If the application tries to indicate an attribute value while another indication procedure is ongoing, |  | ||||||
|  *          the function call will return @ref NRF_ERROR_BUSY. |  | ||||||
|  *          A @ref BLE_GATTS_EVT_HVC event will be issued as soon as the confirmation arrives from the peer. |  | ||||||
|  * |  | ||||||
|  * @note    The number of Handle Value Notifications that can be queued is configured by @ref ble_gatts_conn_cfg_t::hvn_tx_queue_size |  | ||||||
|  *          When the queue is full, the function call will return @ref NRF_ERROR_RESOURCES. |  | ||||||
|  *          A @ref BLE_GATTS_EVT_HVN_TX_COMPLETE event will be issued as soon as the transmission of the notification is complete. |  | ||||||
|  * |  | ||||||
|  * @note    The application can keep track of the available queue element count for notifications by following the procedure below: |  | ||||||
|  *          - Store initial queue element count in a variable. |  | ||||||
|  *          - Decrement the variable, which stores the currently available queue element count, by one when a call to this function returns @ref NRF_SUCCESS. |  | ||||||
|  *          - Increment the variable, which stores the current available queue element count, by the count variable in @ref BLE_GATTS_EVT_HVN_TX_COMPLETE event. |  | ||||||
|  * |  | ||||||
|  * @events |  | ||||||
|  * @event{@ref BLE_GATTS_EVT_HVN_TX_COMPLETE, Notification transmission complete.} |  | ||||||
|  * @event{@ref BLE_GATTS_EVT_HVC, Confirmation received from the peer.} |  | ||||||
|  * @endevents |  | ||||||
|  * |  | ||||||
|  * @mscs |  | ||||||
|  * @mmsc{@ref BLE_GATTS_HVX_SYS_ATTRS_MISSING_MSC} |  | ||||||
|  * @mmsc{@ref BLE_GATTS_HVN_MSC} |  | ||||||
|  * @mmsc{@ref BLE_GATTS_HVI_MSC} |  | ||||||
|  * @mmsc{@ref BLE_GATTS_HVX_DISABLED_MSC} |  | ||||||
|  * @endmscs |  | ||||||
|  * |  | ||||||
|  * @param[in] conn_handle      Connection handle. |  | ||||||
|  * @param[in,out] p_hvx_params Pointer to an HVx parameters structure. If @ref ble_gatts_hvx_params_t::p_data |  | ||||||
|  *                             contains a non-NULL pointer the attribute value will be updated with the contents |  | ||||||
|  *                             pointed by it before sending the notification or indication. If the attribute value |  | ||||||
|  *                             is updated, @ref ble_gatts_hvx_params_t::p_len is updated by the SoftDevice to |  | ||||||
|  *                             contain the number of actual bytes written, else it will be set to 0. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS Successfully queued a notification or indication for transmission, and optionally updated the attribute value. |  | ||||||
|  * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_STATE One or more of the following is true: |  | ||||||
|  *                                   - Invalid Connection State |  | ||||||
|  *                                   - Notifications and/or indications not enabled in the CCCD |  | ||||||
|  *                                   - An ATT_MTU exchange is ongoing |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. |  | ||||||
|  * @retval ::BLE_ERROR_INVALID_ATTR_HANDLE Invalid attribute handle(s) supplied. Only attributes added directly by the application are available to notify and indicate. |  | ||||||
|  * @retval ::BLE_ERROR_GATTS_INVALID_ATTR_TYPE Invalid attribute type(s) supplied, only characteristic values may be notified and indicated. |  | ||||||
|  * @retval ::NRF_ERROR_NOT_FOUND Attribute not found. |  | ||||||
|  * @retval ::NRF_ERROR_FORBIDDEN The connection's current security level is lower than the one required by the write permissions of the CCCD associated with this characteristic. |  | ||||||
|  * @retval ::NRF_ERROR_DATA_SIZE Invalid data size(s) supplied. |  | ||||||
|  * @retval ::NRF_ERROR_BUSY For @ref BLE_GATT_HVX_INDICATION Procedure already in progress. Wait for a @ref BLE_GATTS_EVT_HVC event and retry. |  | ||||||
|  * @retval ::BLE_ERROR_GATTS_SYS_ATTR_MISSING System attributes missing, use @ref sd_ble_gatts_sys_attr_set to set them to a known value. |  | ||||||
|  * @retval ::NRF_ERROR_RESOURCES Too many notifications queued. |  | ||||||
|  *                               Wait for a @ref BLE_GATTS_EVT_HVN_TX_COMPLETE event and retry. |  | ||||||
|  * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_BLE_GATTS_HVX, uint32_t, sd_ble_gatts_hvx(uint16_t conn_handle, ble_gatts_hvx_params_t const *p_hvx_params)); |  | ||||||
|  |  | ||||||
| /**@brief Indicate the Service Changed attribute value. |  | ||||||
|  * |  | ||||||
|  * @details This call will send a Handle Value Indication to one or more peers connected to inform them that the Attribute |  | ||||||
|  *          Table layout has changed. As soon as the peer has confirmed the indication, a @ref BLE_GATTS_EVT_SC_CONFIRM event will |  | ||||||
|  *          be issued. |  | ||||||
|  * |  | ||||||
|  * @note    Some of the restrictions and limitations that apply to @ref sd_ble_gatts_hvx also apply here. |  | ||||||
|  * |  | ||||||
|  * @events |  | ||||||
|  * @event{@ref BLE_GATTS_EVT_SC_CONFIRM, Confirmation of attribute table change received from peer.} |  | ||||||
|  * @endevents |  | ||||||
|  * |  | ||||||
|  * @mscs |  | ||||||
|  * @mmsc{@ref BLE_GATTS_SC_MSC} |  | ||||||
|  * @endmscs |  | ||||||
|  * |  | ||||||
|  * @param[in] conn_handle  Connection handle. |  | ||||||
|  * @param[in] start_handle Start of affected attribute handle range. |  | ||||||
|  * @param[in] end_handle   End of affected attribute handle range. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS Successfully queued the Service Changed indication for transmission. |  | ||||||
|  * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. |  | ||||||
|  * @retval ::NRF_ERROR_NOT_SUPPORTED Service Changed not enabled at initialization. See @ref |  | ||||||
|  *                                   sd_ble_cfg_set and @ref ble_gatts_cfg_service_changed_t. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_STATE One or more of the following is true: |  | ||||||
|  *                                   - Invalid Connection State |  | ||||||
|  *                                   - Notifications and/or indications not enabled in the CCCD |  | ||||||
|  *                                   - An ATT_MTU exchange is ongoing |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. |  | ||||||
|  * @retval ::BLE_ERROR_INVALID_ATTR_HANDLE Invalid attribute handle(s) supplied, handles must be in the range populated by the application. |  | ||||||
|  * @retval ::NRF_ERROR_BUSY Procedure already in progress. |  | ||||||
|  * @retval ::BLE_ERROR_GATTS_SYS_ATTR_MISSING System attributes missing, use @ref sd_ble_gatts_sys_attr_set to set them to a known value. |  | ||||||
|  * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. |  | ||||||
|  */ |  | ||||||
| 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)); |  | ||||||
|  |  | ||||||
| /**@brief Respond to a Read/Write authorization request. |  | ||||||
|  * |  | ||||||
|  * @note This call should only be used as a response to a @ref BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST event issued to the application. |  | ||||||
|  * |  | ||||||
|  * @mscs |  | ||||||
|  * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_NOBUF_AUTH_MSC} |  | ||||||
|  * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_BUF_AUTH_MSC} |  | ||||||
|  * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_NOBUF_NOAUTH_MSC} |  | ||||||
|  * @mmsc{@ref BLE_GATTS_READ_REQ_AUTH_MSC} |  | ||||||
|  * @mmsc{@ref BLE_GATTS_WRITE_REQ_AUTH_MSC} |  | ||||||
|  * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_QUEUE_FULL_MSC} |  | ||||||
|  * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_PEER_CANCEL_MSC} |  | ||||||
|  * @endmscs |  | ||||||
|  * |  | ||||||
|  * @param[in] conn_handle                 Connection handle. |  | ||||||
|  * @param[in] p_rw_authorize_reply_params Pointer to a structure with the attribute provided by the application. |  | ||||||
|  * |  | ||||||
|  * @note @ref ble_gatts_authorize_params_t::p_data is ignored when this function is used to respond |  | ||||||
|  *       to a @ref BLE_GATTS_AUTHORIZE_TYPE_READ event if @ref ble_gatts_authorize_params_t::update |  | ||||||
|  *       is set to 0. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS               Successfully queued a response to the peer, and in the case of a write operation, Attribute Table updated. |  | ||||||
|  * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. |  | ||||||
|  * @retval ::NRF_ERROR_BUSY            The stack is busy, process pending events and retry. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_ADDR    Invalid pointer supplied. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_STATE   Invalid Connection State or no authorization request pending. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_PARAM   Authorization op invalid, |  | ||||||
|  *                                         handle supplied does not match requested handle, |  | ||||||
|  *                                         or invalid data to be written provided by the application. |  | ||||||
|  * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. |  | ||||||
|  */ |  | ||||||
| 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 *p_rw_authorize_reply_params)); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /**@brief Update persistent system attribute information. |  | ||||||
|  * |  | ||||||
|  * @details Supply information about persistent system attributes to the stack, |  | ||||||
|  *          previously obtained using @ref sd_ble_gatts_sys_attr_get. |  | ||||||
|  *          This call is only allowed for active connections, and is usually |  | ||||||
|  *          made immediately after a connection is established with an known bonded device, |  | ||||||
|  *          often as a response to a @ref BLE_GATTS_EVT_SYS_ATTR_MISSING. |  | ||||||
|  * |  | ||||||
|  *          p_sysattrs may point directly to the application's stored copy of the system attributes |  | ||||||
|  *          obtained using @ref sd_ble_gatts_sys_attr_get. |  | ||||||
|  *          If the pointer is NULL, the system attribute info is initialized, assuming that |  | ||||||
|  *          the application does not have any previously saved system attribute data for this device. |  | ||||||
|  * |  | ||||||
|  * @note The state of persistent system attributes is reset upon connection establishment and then remembered for its duration. |  | ||||||
|  * |  | ||||||
|  * @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. |  | ||||||
|  *       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 |  | ||||||
|  *       reset the SoftDevice to return to a known state. |  | ||||||
|  * |  | ||||||
|  * @note When the @ref BLE_GATTS_SYS_ATTR_FLAG_SYS_SRVCS is used with this function, only the system attributes included in system services will be modified. |  | ||||||
|  * @note When the @ref BLE_GATTS_SYS_ATTR_FLAG_USR_SRVCS is used with this function, only the system attributes included in user services will be modified. |  | ||||||
|  * |  | ||||||
|  * @mscs |  | ||||||
|  * @mmsc{@ref BLE_GATTS_HVX_SYS_ATTRS_MISSING_MSC} |  | ||||||
|  * @mmsc{@ref BLE_GATTS_SYS_ATTRS_UNK_PEER_MSC} |  | ||||||
|  * @mmsc{@ref BLE_GATTS_SYS_ATTRS_BONDED_PEER_MSC} |  | ||||||
|  * @endmscs |  | ||||||
|  * |  | ||||||
|  * @param[in]  conn_handle        Connection handle. |  | ||||||
|  * @param[in]  p_sys_attr_data    Pointer to a saved copy of system attributes supplied to the stack, or NULL. |  | ||||||
|  * @param[in]  len                Size of data pointed by p_sys_attr_data, in octets. |  | ||||||
|  * @param[in]  flags              Optional additional flags, see @ref BLE_GATTS_SYS_ATTR_FLAGS |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS Successfully set the system attribute information. |  | ||||||
|  * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_PARAM Invalid flags supplied. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_DATA Invalid data supplied, the data should be exactly the same as retrieved with @ref sd_ble_gatts_sys_attr_get. |  | ||||||
|  * @retval ::NRF_ERROR_NO_MEM Not enough memory to complete operation. |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_BLE_GATTS_SYS_ATTR_SET, uint32_t, sd_ble_gatts_sys_attr_set(uint16_t conn_handle, uint8_t const *p_sys_attr_data, uint16_t len, uint32_t flags)); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /**@brief Retrieve persistent system attribute information from the stack. |  | ||||||
|  * |  | ||||||
|  * @details This call is used to retrieve information about values to be stored persistently by the application |  | ||||||
|  *          during the lifetime of a connection or after it has been terminated. When a new connection is established with the same bonded device, |  | ||||||
|  *          the system attribute information retrieved with this function should be restored using using @ref sd_ble_gatts_sys_attr_set. |  | ||||||
|  *          If retrieved after disconnection, the data should be read before a new connection established. The connection handle for |  | ||||||
|  *          the previous, now disconnected, connection will remain valid until a new one is created to allow this API call to refer to it. |  | ||||||
|  *          Connection handles belonging to active connections can be used as well, but care should be taken since the system attributes |  | ||||||
|  *          may be written to at any time by the peer during a connection's lifetime. |  | ||||||
|  * |  | ||||||
|  * @note When the @ref BLE_GATTS_SYS_ATTR_FLAG_SYS_SRVCS is used with this function, only the system attributes included in system services will be returned. |  | ||||||
|  * @note When the @ref BLE_GATTS_SYS_ATTR_FLAG_USR_SRVCS is used with this function, only the system attributes included in user services will be returned. |  | ||||||
|  * |  | ||||||
|  * @mscs |  | ||||||
|  * @mmsc{@ref BLE_GATTS_SYS_ATTRS_BONDED_PEER_MSC} |  | ||||||
|  * @endmscs |  | ||||||
|  * |  | ||||||
|  * @param[in]     conn_handle       Connection handle of the recently terminated connection. |  | ||||||
|  * @param[out]    p_sys_attr_data   Pointer to a buffer where updated information about system attributes will be filled in. The format of the data is described |  | ||||||
|  *                                  in @ref BLE_GATTS_SYS_ATTRS_FORMAT. NULL can be provided to obtain the length of the data. |  | ||||||
|  * @param[in,out] p_len             Size of application buffer if p_sys_attr_data is not NULL. Unconditionally updated to actual length of system attribute data. |  | ||||||
|  * @param[in]     flags             Optional additional flags, see @ref BLE_GATTS_SYS_ATTR_FLAGS |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS Successfully retrieved the system attribute information. |  | ||||||
|  * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_PARAM Invalid flags supplied. |  | ||||||
|  * @retval ::NRF_ERROR_DATA_SIZE The system attribute information did not fit into the provided buffer. |  | ||||||
|  * @retval ::NRF_ERROR_NOT_FOUND No system attributes found. |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_BLE_GATTS_SYS_ATTR_GET, uint32_t, sd_ble_gatts_sys_attr_get(uint16_t conn_handle, uint8_t *p_sys_attr_data, uint16_t *p_len, uint32_t flags)); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /**@brief Retrieve the first valid user attribute handle. |  | ||||||
|  * |  | ||||||
|  * @param[out] p_handle   Pointer to an integer where the handle will be stored. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS Successfully retrieved the handle. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_BLE_GATTS_INITIAL_USER_HANDLE_GET, uint32_t, sd_ble_gatts_initial_user_handle_get(uint16_t *p_handle)); |  | ||||||
|  |  | ||||||
| /**@brief Retrieve the attribute UUID and/or metadata. |  | ||||||
|  * |  | ||||||
|  * @param[in]  handle Attribute handle |  | ||||||
|  * @param[out] p_uuid UUID of the attribute. Use NULL to omit this field. |  | ||||||
|  * @param[out] p_md Metadata of the attribute. Use NULL to omit this field. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS Successfully retrieved the attribute metadata, |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameters supplied. Returned when both @c p_uuid and @c p_md are NULL. |  | ||||||
|  * @retval ::NRF_ERROR_NOT_FOUND Attribute was not found. |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_BLE_GATTS_ATTR_GET, uint32_t, sd_ble_gatts_attr_get(uint16_t handle, ble_uuid_t * p_uuid, ble_gatts_attr_md_t * p_md)); |  | ||||||
|  |  | ||||||
| /**@brief Reply to an ATT_MTU exchange request by sending an Exchange MTU Response to the client. |  | ||||||
|  * |  | ||||||
|  * @details This function is only used to reply to a @ref BLE_GATTS_EVT_EXCHANGE_MTU_REQUEST event. |  | ||||||
|  * |  | ||||||
|  * @details The SoftDevice sets ATT_MTU to the minimum of: |  | ||||||
|  *          - The Client RX MTU value from @ref BLE_GATTS_EVT_EXCHANGE_MTU_REQUEST, and |  | ||||||
|  *          - The Server RX MTU value. |  | ||||||
|  * |  | ||||||
|  *          However, the SoftDevice never sets ATT_MTU lower than @ref BLE_GATT_ATT_MTU_DEFAULT. |  | ||||||
|  * |  | ||||||
|  * @mscs |  | ||||||
|  * @mmsc{@ref BLE_GATTS_MTU_EXCHANGE} |  | ||||||
|  * @endmscs |  | ||||||
|  * |  | ||||||
|  * @param[in] conn_handle    The connection handle identifying the connection to perform this procedure on. |  | ||||||
|  * @param[in] server_rx_mtu  Server RX MTU size. |  | ||||||
|  *                           - The minimum value is @ref BLE_GATT_ATT_MTU_DEFAULT. |  | ||||||
|  *                           - The maximum value is @ref ble_gatt_conn_cfg_t::att_mtu in the connection configuration |  | ||||||
|  *                             used for this connection. |  | ||||||
|  *                           - The value must be equal to Client RX MTU size given in @ref sd_ble_gattc_exchange_mtu_request |  | ||||||
|  *                             if an ATT_MTU exchange has already been performed in the other direction. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS Successfully sent response to the client. |  | ||||||
|  * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State or no ATT_MTU exchange request pending. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_PARAM Invalid Server RX MTU size supplied. |  | ||||||
|  * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_BLE_GATTS_EXCHANGE_MTU_REPLY, uint32_t, sd_ble_gatts_exchange_mtu_reply(uint16_t conn_handle, uint16_t server_rx_mtu)); |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
| #ifdef __cplusplus |  | ||||||
| } |  | ||||||
| #endif |  | ||||||
| #endif // BLE_GATTS_H__ |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|   @} |  | ||||||
| */ |  | ||||||
| @@ -1,135 +0,0 @@ | |||||||
| /* |  | ||||||
|  * Copyright (c) 2012 - 2017, Nordic Semiconductor ASA |  | ||||||
|  * All rights reserved. |  | ||||||
|  * |  | ||||||
|  * Redistribution and use in source and binary forms, with or without modification, |  | ||||||
|  * are permitted provided that the following conditions are met: |  | ||||||
|  * |  | ||||||
|  * 1. Redistributions of source code must retain the above copyright notice, this |  | ||||||
|  *    list of conditions and the following disclaimer. |  | ||||||
|  * |  | ||||||
|  * 2. Redistributions in binary form, except as embedded into a Nordic |  | ||||||
|  *    Semiconductor ASA integrated circuit in a product or a software update for |  | ||||||
|  *    such product, must reproduce the above copyright notice, this list of |  | ||||||
|  *    conditions and the following disclaimer in the documentation and/or other |  | ||||||
|  *    materials provided with the distribution. |  | ||||||
|  * |  | ||||||
|  * 3. Neither the name of Nordic Semiconductor ASA nor the names of its |  | ||||||
|  *    contributors may be used to endorse or promote products derived from this |  | ||||||
|  *    software without specific prior written permission. |  | ||||||
|  * |  | ||||||
|  * 4. This software, with or without modification, must only be used with a |  | ||||||
|  *    Nordic Semiconductor ASA integrated circuit. |  | ||||||
|  * |  | ||||||
|  * 5. Any software provided in binary form under this license must not be reverse |  | ||||||
|  *    engineered, decompiled, modified and/or disassembled. |  | ||||||
|  * |  | ||||||
|  * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS |  | ||||||
|  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |  | ||||||
|  * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE |  | ||||||
|  * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE |  | ||||||
|  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |  | ||||||
|  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE |  | ||||||
|  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |  | ||||||
|  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |  | ||||||
|  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT |  | ||||||
|  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |  | ||||||
|  */ |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|   @addtogroup BLE_COMMON |  | ||||||
|   @{ |  | ||||||
| */ |  | ||||||
|  |  | ||||||
|  |  | ||||||
| #ifndef BLE_HCI_H__ |  | ||||||
| #define BLE_HCI_H__ |  | ||||||
| #ifdef __cplusplus |  | ||||||
| extern "C" { |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| /** @defgroup BLE_HCI_STATUS_CODES Bluetooth status codes |  | ||||||
|  * @{ */ |  | ||||||
|  |  | ||||||
| #define BLE_HCI_STATUS_CODE_SUCCESS                        0x00   /**< Success. */ |  | ||||||
| #define BLE_HCI_STATUS_CODE_UNKNOWN_BTLE_COMMAND           0x01   /**< Unknown BLE Command. */ |  | ||||||
| #define BLE_HCI_STATUS_CODE_UNKNOWN_CONNECTION_IDENTIFIER  0x02   /**< Unknown Connection Identifier. */ |  | ||||||
| /*0x03 Hardware Failure |  | ||||||
| 0x04 Page Timeout |  | ||||||
| */ |  | ||||||
| #define BLE_HCI_AUTHENTICATION_FAILURE                     0x05   /**< Authentication Failure. */ |  | ||||||
| #define BLE_HCI_STATUS_CODE_PIN_OR_KEY_MISSING             0x06   /**< Pin or Key missing. */ |  | ||||||
| #define BLE_HCI_MEMORY_CAPACITY_EXCEEDED                   0x07   /**< Memory Capacity Exceeded. */ |  | ||||||
| #define BLE_HCI_CONNECTION_TIMEOUT                         0x08   /**< Connection Timeout. */ |  | ||||||
| /*0x09 Connection Limit Exceeded |  | ||||||
| 0x0A Synchronous Connection Limit To A Device Exceeded |  | ||||||
| 0x0B ACL Connection Already Exists*/ |  | ||||||
| #define BLE_HCI_STATUS_CODE_COMMAND_DISALLOWED             0x0C   /**< Command Disallowed. */ |  | ||||||
| /*0x0D Connection Rejected due to Limited Resources |  | ||||||
| 0x0E Connection Rejected Due To Security Reasons |  | ||||||
| 0x0F Connection Rejected due to Unacceptable BD_ADDR |  | ||||||
| 0x10 Connection Accept Timeout Exceeded |  | ||||||
| 0x11 Unsupported Feature or Parameter Value*/ |  | ||||||
| #define BLE_HCI_STATUS_CODE_INVALID_BTLE_COMMAND_PARAMETERS 0x12  /**< Invalid BLE Command Parameters. */ |  | ||||||
| #define BLE_HCI_REMOTE_USER_TERMINATED_CONNECTION           0x13  /**< Remote User Terminated Connection. */ |  | ||||||
| #define BLE_HCI_REMOTE_DEV_TERMINATION_DUE_TO_LOW_RESOURCES 0x14  /**< Remote Device Terminated Connection due to low resources.*/ |  | ||||||
| #define BLE_HCI_REMOTE_DEV_TERMINATION_DUE_TO_POWER_OFF     0x15  /**< Remote Device Terminated Connection due to power off. */ |  | ||||||
| #define BLE_HCI_LOCAL_HOST_TERMINATED_CONNECTION            0x16  /**< Local Host Terminated Connection. */ |  | ||||||
| /* |  | ||||||
| 0x17 Repeated Attempts |  | ||||||
| 0x18 Pairing Not Allowed |  | ||||||
| 0x19 Unknown LMP PDU |  | ||||||
| */ |  | ||||||
| #define BLE_HCI_UNSUPPORTED_REMOTE_FEATURE 0x1A                   /**< Unsupported Remote Feature. */ |  | ||||||
| /* |  | ||||||
| 0x1B SCO Offset Rejected |  | ||||||
| 0x1C SCO Interval Rejected |  | ||||||
| 0x1D SCO Air Mode Rejected*/ |  | ||||||
| #define BLE_HCI_STATUS_CODE_INVALID_LMP_PARAMETERS     0x1E       /**< Invalid LMP Parameters. */ |  | ||||||
| #define BLE_HCI_STATUS_CODE_UNSPECIFIED_ERROR          0x1F       /**< Unspecified Error. */ |  | ||||||
| /*0x20 Unsupported LMP Parameter Value |  | ||||||
| 0x21 Role Change Not Allowed |  | ||||||
| */ |  | ||||||
| #define BLE_HCI_STATUS_CODE_LMP_RESPONSE_TIMEOUT            0x22       /**< LMP Response Timeout. */ |  | ||||||
| #define BLE_HCI_STATUS_CODE_LMP_ERROR_TRANSACTION_COLLISION 0x23  /**< LMP Error Transaction Collision/LL Procedure Collision. */ |  | ||||||
| #define BLE_HCI_STATUS_CODE_LMP_PDU_NOT_ALLOWED             0x24       /**< LMP PDU Not Allowed. */ |  | ||||||
| /*0x25 Encryption Mode Not Acceptable |  | ||||||
| 0x26 Link Key Can Not be Changed |  | ||||||
| 0x27 Requested QoS Not Supported |  | ||||||
| */ |  | ||||||
| #define BLE_HCI_INSTANT_PASSED                         0x28       /**< Instant Passed. */ |  | ||||||
| #define BLE_HCI_PAIRING_WITH_UNIT_KEY_UNSUPPORTED      0x29       /**< Pairing with Unit Key Unsupported. */ |  | ||||||
| #define BLE_HCI_DIFFERENT_TRANSACTION_COLLISION        0x2A       /**< Different Transaction Collision. */ |  | ||||||
| /* |  | ||||||
| 0x2B Reserved |  | ||||||
| 0x2C QoS Unacceptable Parameter |  | ||||||
| 0x2D QoS Rejected |  | ||||||
| 0x2E Channel Classification Not Supported |  | ||||||
| 0x2F Insufficient Security |  | ||||||
| */ |  | ||||||
| #define BLE_HCI_PARAMETER_OUT_OF_MANDATORY_RANGE       0x30            /**< Parameter Out Of Mandatory Range. */ |  | ||||||
| /* |  | ||||||
| 0x31 Reserved |  | ||||||
| 0x32 Role Switch Pending |  | ||||||
| 0x33 Reserved |  | ||||||
| 0x34 Reserved Slot Violation |  | ||||||
| 0x35 Role Switch Failed |  | ||||||
| 0x36 Extended Inquiry Response Too Large |  | ||||||
| 0x37 Secure Simple Pairing Not Supported By Host. |  | ||||||
| 0x38 Host Busy - Pairing |  | ||||||
| 0x39 Connection Rejected due to No Suitable Channel Found*/ |  | ||||||
| #define BLE_HCI_CONTROLLER_BUSY                        0x3A       /**< Controller Busy. */ |  | ||||||
| #define BLE_HCI_CONN_INTERVAL_UNACCEPTABLE             0x3B       /**< Connection Interval Unacceptable. */ |  | ||||||
| #define BLE_HCI_DIRECTED_ADVERTISER_TIMEOUT            0x3C       /**< Directed Advertisement Timeout. */ |  | ||||||
| #define BLE_HCI_CONN_TERMINATED_DUE_TO_MIC_FAILURE     0x3D       /**< Connection Terminated due to MIC Failure. */ |  | ||||||
| #define BLE_HCI_CONN_FAILED_TO_BE_ESTABLISHED          0x3E       /**< Connection Failed to be Established. */ |  | ||||||
|  |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
|  |  | ||||||
| #ifdef __cplusplus |  | ||||||
| } |  | ||||||
| #endif |  | ||||||
| #endif // BLE_HCI_H__ |  | ||||||
|  |  | ||||||
| /** @} */ |  | ||||||
| @@ -1,506 +0,0 @@ | |||||||
| /* |  | ||||||
|  * Copyright (c) 2011 - 2017, Nordic Semiconductor ASA |  | ||||||
|  * All rights reserved. |  | ||||||
|  * |  | ||||||
|  * Redistribution and use in source and binary forms, with or without modification, |  | ||||||
|  * are permitted provided that the following conditions are met: |  | ||||||
|  * |  | ||||||
|  * 1. Redistributions of source code must retain the above copyright notice, this |  | ||||||
|  *    list of conditions and the following disclaimer. |  | ||||||
|  * |  | ||||||
|  * 2. Redistributions in binary form, except as embedded into a Nordic |  | ||||||
|  *    Semiconductor ASA integrated circuit in a product or a software update for |  | ||||||
|  *    such product, must reproduce the above copyright notice, this list of |  | ||||||
|  *    conditions and the following disclaimer in the documentation and/or other |  | ||||||
|  *    materials provided with the distribution. |  | ||||||
|  * |  | ||||||
|  * 3. Neither the name of Nordic Semiconductor ASA nor the names of its |  | ||||||
|  *    contributors may be used to endorse or promote products derived from this |  | ||||||
|  *    software without specific prior written permission. |  | ||||||
|  * |  | ||||||
|  * 4. This software, with or without modification, must only be used with a |  | ||||||
|  *    Nordic Semiconductor ASA integrated circuit. |  | ||||||
|  * |  | ||||||
|  * 5. Any software provided in binary form under this license must not be reverse |  | ||||||
|  *    engineered, decompiled, modified and/or disassembled. |  | ||||||
|  * |  | ||||||
|  * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS |  | ||||||
|  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |  | ||||||
|  * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE |  | ||||||
|  * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE |  | ||||||
|  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |  | ||||||
|  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE |  | ||||||
|  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |  | ||||||
|  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |  | ||||||
|  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT |  | ||||||
|  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |  | ||||||
|  */ |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|   @addtogroup BLE_L2CAP Logical Link Control and Adaptation Protocol (L2CAP) |  | ||||||
|   @{ |  | ||||||
|   @brief Definitions and prototypes for the L2CAP interface. |  | ||||||
|  */ |  | ||||||
|  |  | ||||||
| #ifndef BLE_L2CAP_H__ |  | ||||||
| #define BLE_L2CAP_H__ |  | ||||||
|  |  | ||||||
| #include <stdint.h> |  | ||||||
| #include "nrf_svc.h" |  | ||||||
| #include "nrf_error.h" |  | ||||||
| #include "ble_ranges.h" |  | ||||||
| #include "ble_types.h" |  | ||||||
| #include "ble_err.h" |  | ||||||
|  |  | ||||||
| #ifdef __cplusplus |  | ||||||
| extern "C" { |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| /**@addtogroup BLE_L2CAP_TERMINOLOGY Terminology |  | ||||||
|  * @{ |  | ||||||
|  * @details |  | ||||||
|  * |  | ||||||
|  * L2CAP SDU |  | ||||||
|  * - A data unit that the application can send/receive to/from a peer. |  | ||||||
|  * |  | ||||||
|  * L2CAP PDU |  | ||||||
|  * - A data unit that is exchanged between local and remote L2CAP entities. |  | ||||||
|  *   It consists of L2CAP protocol control information and payload fields. |  | ||||||
|  *   The payload field can contain an L2CAP SDU or a part of an L2CAP SDU. |  | ||||||
|  * |  | ||||||
|  * L2CAP MTU |  | ||||||
|  * - The maximum length of an L2CAP SDU. |  | ||||||
|  * |  | ||||||
|  * L2CAP MPS |  | ||||||
|  * - The maximum length of an L2CAP PDU payload field. |  | ||||||
|  * |  | ||||||
|  * Credits |  | ||||||
|  * - A value indicating the number of L2CAP PDUs that the receiver of the credit can send to the peer. |  | ||||||
|  * @} */ |  | ||||||
|  |  | ||||||
| /**@addtogroup BLE_L2CAP_ENUMERATIONS Enumerations |  | ||||||
|  * @{ */ |  | ||||||
|  |  | ||||||
| /**@brief L2CAP API SVC numbers. */ |  | ||||||
| enum BLE_L2CAP_SVCS |  | ||||||
| { |  | ||||||
|   SD_BLE_L2CAP_CH_SETUP        = BLE_L2CAP_SVC_BASE + 0, /**< Set up an L2CAP channel. */ |  | ||||||
|   SD_BLE_L2CAP_CH_RELEASE      = BLE_L2CAP_SVC_BASE + 1, /**< Release an L2CAP channel. */ |  | ||||||
|   SD_BLE_L2CAP_CH_RX           = BLE_L2CAP_SVC_BASE + 2, /**< Receive an SDU on an L2CAP channel. */ |  | ||||||
|   SD_BLE_L2CAP_CH_TX           = BLE_L2CAP_SVC_BASE + 3, /**< Transmit an SDU on an L2CAP channel. */ |  | ||||||
|   SD_BLE_L2CAP_CH_FLOW_CONTROL = BLE_L2CAP_SVC_BASE + 4, /**< Advanced SDU reception flow control. */ |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| /**@brief L2CAP Event IDs. */ |  | ||||||
| enum BLE_L2CAP_EVTS |  | ||||||
| { |  | ||||||
|   BLE_L2CAP_EVT_CH_SETUP_REQUEST    = BLE_L2CAP_EVT_BASE + 0,    /**< L2CAP Channel Setup Request event. |  | ||||||
|                                                                    \n See @ref ble_l2cap_evt_ch_setup_request_t. */ |  | ||||||
|   BLE_L2CAP_EVT_CH_SETUP_REFUSED    = BLE_L2CAP_EVT_BASE + 1,    /**< L2CAP Channel Setup Refused event. |  | ||||||
|                                                                    \n See @ref ble_l2cap_evt_ch_setup_refused_t. */ |  | ||||||
|   BLE_L2CAP_EVT_CH_SETUP            = BLE_L2CAP_EVT_BASE + 2,    /**< L2CAP Channel Setup Completed event. |  | ||||||
|                                                                    \n See @ref ble_l2cap_evt_ch_setup_t. */ |  | ||||||
|   BLE_L2CAP_EVT_CH_RELEASED         = BLE_L2CAP_EVT_BASE + 3,    /**< L2CAP Channel Released event. |  | ||||||
|                                                                    \n No additional event structure applies. */ |  | ||||||
|   BLE_L2CAP_EVT_CH_SDU_BUF_RELEASED = BLE_L2CAP_EVT_BASE + 4,    /**< L2CAP Channel SDU data buffer released event. |  | ||||||
|                                                                    \n See @ref ble_l2cap_evt_ch_sdu_buf_released_t. */ |  | ||||||
|   BLE_L2CAP_EVT_CH_CREDIT           = BLE_L2CAP_EVT_BASE + 5,    /**< L2CAP Channel Credit received. |  | ||||||
|                                                                    \n See @ref ble_l2cap_evt_ch_credit_t. */ |  | ||||||
|   BLE_L2CAP_EVT_CH_RX               = BLE_L2CAP_EVT_BASE + 6,    /**< L2CAP Channel SDU received. |  | ||||||
|                                                                    \n See @ref ble_l2cap_evt_ch_rx_t. */ |  | ||||||
|   BLE_L2CAP_EVT_CH_TX               = BLE_L2CAP_EVT_BASE + 7,   /**< L2CAP Channel SDU transmitted. |  | ||||||
|                                                                    \n See @ref ble_l2cap_evt_ch_tx_t. */ |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
| /**@addtogroup BLE_L2CAP_DEFINES Defines |  | ||||||
|  * @{ */ |  | ||||||
|  |  | ||||||
| /**@brief Maximum number of L2CAP channels per connection. */ |  | ||||||
| #define BLE_L2CAP_CH_COUNT_MAX    (64) |  | ||||||
|  |  | ||||||
| /**@brief Minimum L2CAP MTU, in bytes. */ |  | ||||||
| #define BLE_L2CAP_MTU_MIN         (23) |  | ||||||
|  |  | ||||||
| /**@brief Minimum L2CAP MPS, in bytes. */ |  | ||||||
| #define BLE_L2CAP_MPS_MIN         (23) |  | ||||||
|  |  | ||||||
| /**@brief Invalid CID. */ |  | ||||||
| #define BLE_L2CAP_CID_INVALID     (0x0000) |  | ||||||
|  |  | ||||||
| /**@brief Default number of credits for @ref sd_ble_l2cap_ch_flow_control. */ |  | ||||||
| #define BLE_L2CAP_CREDITS_DEFAULT (1) |  | ||||||
|  |  | ||||||
| /**@defgroup BLE_L2CAP_CH_SETUP_REFUSED_SRCS L2CAP channel setup refused sources |  | ||||||
|  * @{ */ |  | ||||||
| #define BLE_L2CAP_CH_SETUP_REFUSED_SRC_LOCAL            (0x01)    /**< Local. */ |  | ||||||
| #define BLE_L2CAP_CH_SETUP_REFUSED_SRC_REMOTE           (0x02)    /**< Remote. */ |  | ||||||
|  /** @}  */ |  | ||||||
|  |  | ||||||
|  /** @defgroup BLE_L2CAP_CH_STATUS_CODES L2CAP channel status codes |  | ||||||
|  * @{ */ |  | ||||||
| #define BLE_L2CAP_CH_STATUS_CODE_SUCCESS                (0x0000)  /**< Success. */ |  | ||||||
| #define BLE_L2CAP_CH_STATUS_CODE_LE_PSM_NOT_SUPPORTED   (0x0002)  /**< LE_PSM not supported. */ |  | ||||||
| #define BLE_L2CAP_CH_STATUS_CODE_NO_RESOURCES           (0x0004)  /**< No resources available. */ |  | ||||||
| #define BLE_L2CAP_CH_STATUS_CODE_INSUFF_AUTHENTICATION  (0x0005)  /**< Insufficient authentication. */ |  | ||||||
| #define BLE_L2CAP_CH_STATUS_CODE_INSUFF_AUTHORIZATION   (0x0006)  /**< Insufficient authorization. */ |  | ||||||
| #define BLE_L2CAP_CH_STATUS_CODE_INSUFF_ENC_KEY_SIZE    (0x0007)  /**< Insufficient encryption key size. */ |  | ||||||
| #define BLE_L2CAP_CH_STATUS_CODE_INSUFF_ENC             (0x0008)  /**< Insufficient encryption. */ |  | ||||||
| #define BLE_L2CAP_CH_STATUS_CODE_INVALID_SCID           (0x0009)  /**< Invalid Source CID. */ |  | ||||||
| #define BLE_L2CAP_CH_STATUS_CODE_SCID_ALLOCATED         (0x000A)  /**< Source CID already allocated. */ |  | ||||||
| #define BLE_L2CAP_CH_STATUS_CODE_UNACCEPTABLE_PARAMS    (0x000B)  /**< Unacceptable parameters. */ |  | ||||||
| #define BLE_L2CAP_CH_STATUS_CODE_NOT_UNDERSTOOD         (0x8000)  /**< Command Reject received instead of LE Credit Based Connection Response. */ |  | ||||||
| #define BLE_L2CAP_CH_STATUS_CODE_TIMEOUT                (0xC000)  /**< Operation timed out. */ |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
| /**@addtogroup BLE_L2CAP_STRUCTURES Structures |  | ||||||
|  * @{ */ |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|  * @brief BLE L2CAP connection configuration parameters, set with @ref sd_ble_cfg_set. |  | ||||||
|  * |  | ||||||
|  * @note  These parameters are set per connection, so all L2CAP channels created on this connection |  | ||||||
|  *        will have the same parameters. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_PARAM  One or more of the following is true: |  | ||||||
|  *                                    - rx_mps is smaller than @ref BLE_L2CAP_MPS_MIN. |  | ||||||
|  *                                    - tx_mps is smaller than @ref BLE_L2CAP_MPS_MIN. |  | ||||||
|  *                                    - ch_count is greater than @ref BLE_L2CAP_CH_COUNT_MAX. |  | ||||||
|  * @retval ::NRF_ERROR_NO_MEM         rx_mps or tx_mps is set too high. |  | ||||||
|  */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint16_t    rx_mps;        /**< The maximum L2CAP PDU payload size, in bytes, that L2CAP shall |  | ||||||
|                                   be able to receive on L2CAP channels on connections with this |  | ||||||
|                                   configuration. The minimum value is @ref BLE_L2CAP_MPS_MIN. */ |  | ||||||
|   uint16_t    tx_mps;        /**< The maximum L2CAP PDU payload size, in bytes, that L2CAP shall |  | ||||||
|                                   be able to transmit on L2CAP channels on connections with this |  | ||||||
|                                   configuration. The minimum value is @ref BLE_L2CAP_MPS_MIN. */ |  | ||||||
|   uint8_t     rx_queue_size; /**< Number of SDU data buffers that can be queued for reception per |  | ||||||
|                                   L2CAP channel. The minimum value is one. */ |  | ||||||
|   uint8_t     tx_queue_size; /**< Number of SDU data buffers that can be queued for transmission |  | ||||||
|                                   per L2CAP channel. The minimum value is one. */ |  | ||||||
|   uint8_t     ch_count;      /**< Number of L2CAP channels the application can create per connection |  | ||||||
|                                   with this configuration. The default value is zero, the maximum |  | ||||||
|                                   value is @ref BLE_L2CAP_CH_COUNT_MAX. |  | ||||||
|                                   @note if this parameter is set to zero, all other parameters in |  | ||||||
|                                   @ref ble_l2cap_conn_cfg_t are ignored. */ |  | ||||||
| } ble_l2cap_conn_cfg_t; |  | ||||||
|  |  | ||||||
| /**@brief L2CAP channel RX parameters. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint16_t    rx_mtu;        /**< The maximum L2CAP SDU size, in bytes, that L2CAP shall be able to |  | ||||||
|                                   receive on this L2CAP channel. |  | ||||||
|                                   - Must be equal to or greater than @ref BLE_L2CAP_MTU_MIN. */ |  | ||||||
|   uint16_t    rx_mps;        /**< The maximum L2CAP PDU payload size, in bytes, that L2CAP shall be |  | ||||||
|                                   able to receive on this L2CAP channel. |  | ||||||
|                                   - Must be equal to or greater than @ref BLE_L2CAP_MPS_MIN. |  | ||||||
|                                   - Must be equal to or less than @ref ble_l2cap_conn_cfg_t::rx_mps. */ |  | ||||||
|   ble_data_t  sdu_buf;       /**< SDU data buffer for reception. |  | ||||||
|                                   - If @ref ble_data_t::p_data is non-NULL, initial credits are |  | ||||||
|                                     issued to the peer. |  | ||||||
|                                   - If @ref ble_data_t::p_data is NULL, no initial credits are |  | ||||||
|                                     issued to the peer. */ |  | ||||||
| } ble_l2cap_ch_rx_params_t; |  | ||||||
|  |  | ||||||
| /**@brief L2CAP channel setup parameters. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   ble_l2cap_ch_rx_params_t      rx_params;  /**< L2CAP channel RX parameters. */ |  | ||||||
|   uint16_t                      le_psm;     /**< LE Protocol/Service Multiplexer. Used when requesting |  | ||||||
|                                                  setup of an L2CAP channel, ignored otherwise. */ |  | ||||||
|   uint16_t                      status;     /**< Status code, see @ref BLE_L2CAP_CH_STATUS_CODES. |  | ||||||
|                                                  Used when replying to a setup request of an L2CAP |  | ||||||
|                                                  channel, ignored otherwise. */ |  | ||||||
| } ble_l2cap_ch_setup_params_t; |  | ||||||
|  |  | ||||||
| /**@brief L2CAP channel TX parameters. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint16_t    tx_mtu;        /**< The maximum L2CAP SDU size, in bytes, that L2CAP is able to |  | ||||||
|                                   transmit on this L2CAP channel. */ |  | ||||||
|   uint16_t    peer_mps;      /**< The maximum L2CAP PDU payload size, in bytes, that the peer is |  | ||||||
|                                   able to receive on this L2CAP channel. */ |  | ||||||
|   uint16_t    tx_mps;        /**< The maximum L2CAP PDU payload size, in bytes, that L2CAP is able |  | ||||||
|                                   to transmit on this L2CAP channel. This is effective tx_mps, |  | ||||||
|                                   selected by the SoftDevice as |  | ||||||
|                                   MIN( @ref ble_l2cap_ch_tx_params_t::peer_mps, @ref ble_l2cap_conn_cfg_t::tx_mps ) */ |  | ||||||
|   uint16_t    credits;       /**< Initial credits given by the peer. */ |  | ||||||
| } ble_l2cap_ch_tx_params_t; |  | ||||||
|  |  | ||||||
| /**@brief L2CAP Channel Setup Request event. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   ble_l2cap_ch_tx_params_t  tx_params;  /**< L2CAP channel TX parameters. */ |  | ||||||
|   uint16_t                  le_psm;     /**< LE Protocol/Service Multiplexer. */ |  | ||||||
| } ble_l2cap_evt_ch_setup_request_t; |  | ||||||
|  |  | ||||||
| /**@brief L2CAP Channel Setup Refused event. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint8_t  source;           /**< Source, see @ref BLE_L2CAP_CH_SETUP_REFUSED_SRCS */ |  | ||||||
|   uint16_t status;           /**< Status code, see @ref BLE_L2CAP_CH_STATUS_CODES */ |  | ||||||
| } ble_l2cap_evt_ch_setup_refused_t; |  | ||||||
|  |  | ||||||
| /**@brief L2CAP Channel Setup Completed event. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   ble_l2cap_ch_tx_params_t tx_params;  /**< L2CAP channel TX parameters. */ |  | ||||||
| } ble_l2cap_evt_ch_setup_t; |  | ||||||
|  |  | ||||||
| /**@brief L2CAP Channel SDU Data Duffer Released event. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   ble_data_t  sdu_buf;       /**< Returned reception or transmission SDU data buffer. The SoftDevice |  | ||||||
|                                   returns SDU data buffers supplied by the application, which have |  | ||||||
|                                   not yet been returned previously via a @ref BLE_L2CAP_EVT_CH_RX or |  | ||||||
|                                   @ref BLE_L2CAP_EVT_CH_TX event. */ |  | ||||||
| } ble_l2cap_evt_ch_sdu_buf_released_t; |  | ||||||
|  |  | ||||||
| /**@brief L2CAP Channel Credit received event. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint16_t  credits;         /**< Additional credits given by the peer. */ |  | ||||||
| } ble_l2cap_evt_ch_credit_t; |  | ||||||
|  |  | ||||||
| /**@brief L2CAP Channel received SDU event. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint16_t    sdu_len;       /**< Total SDU length, in bytes. */ |  | ||||||
|   ble_data_t  sdu_buf;       /**< SDU data buffer. |  | ||||||
|                                   @note If there is not enough space in the buffer |  | ||||||
|                                         (sdu_buf.len < sdu_len) then the rest of the SDU will be |  | ||||||
|                                         silently discarded by the SoftDevice. */ |  | ||||||
| } ble_l2cap_evt_ch_rx_t; |  | ||||||
|  |  | ||||||
| /**@brief L2CAP Channel transmitted SDU event. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   ble_data_t  sdu_buf;       /**< SDU data buffer. */ |  | ||||||
| } ble_l2cap_evt_ch_tx_t; |  | ||||||
|  |  | ||||||
| /**@brief L2CAP event structure. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint16_t conn_handle;                                     /**< Connection Handle on which the event occured. */ |  | ||||||
|   uint16_t local_cid;                                       /**< Local Channel ID of the L2CAP channel, or |  | ||||||
|                                                                  @ref BLE_L2CAP_CID_INVALID if not present. */ |  | ||||||
|   union |  | ||||||
|   { |  | ||||||
|     ble_l2cap_evt_ch_setup_request_t    ch_setup_request;   /**< L2CAP Channel Setup Request Event Parameters. */ |  | ||||||
|     ble_l2cap_evt_ch_setup_refused_t    ch_setup_refused;   /**< L2CAP Channel Setup Refused Event Parameters. */ |  | ||||||
|     ble_l2cap_evt_ch_setup_t            ch_setup;           /**< L2CAP Channel Setup Completed Event Parameters. */ |  | ||||||
|     ble_l2cap_evt_ch_sdu_buf_released_t ch_sdu_buf_released;/**< L2CAP Channel SDU Data Buffer Released Event Parameters. */ |  | ||||||
|     ble_l2cap_evt_ch_credit_t           credit;             /**< L2CAP Channel Credit Received Event Parameters. */ |  | ||||||
|     ble_l2cap_evt_ch_rx_t               rx;                 /**< L2CAP Channel SDU Received Event Parameters. */ |  | ||||||
|     ble_l2cap_evt_ch_tx_t               tx;                 /**< L2CAP Channel SDU Transmitted Event Parameters. */ |  | ||||||
|   } params;                                                 /**< Event Parameters. */ |  | ||||||
| } ble_l2cap_evt_t; |  | ||||||
|  |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
| /**@addtogroup BLE_L2CAP_FUNCTIONS Functions |  | ||||||
|  * @{ */ |  | ||||||
|  |  | ||||||
| /**@brief Set up an L2CAP channel. |  | ||||||
|  * |  | ||||||
|  * @details This function is used to: |  | ||||||
|  *          - Request setup of an L2CAP channel: sends an LE Credit Based Connection Request packet to a peer. |  | ||||||
|  *          - Reply to a setup request of an L2CAP channel (if called in response to a |  | ||||||
|  *            @ref BLE_L2CAP_EVT_CH_SETUP_REQUEST event): sends an LE Credit Based Connection |  | ||||||
|  *            Response packet to a peer. |  | ||||||
|  * |  | ||||||
|  * @note    A call to this function will require the application to keep the SDU data buffer alive |  | ||||||
|  *          until the SDU data buffer is returned in @ref BLE_L2CAP_EVT_CH_RX or |  | ||||||
|  *          @ref BLE_L2CAP_EVT_CH_SDU_BUF_RELEASED event. |  | ||||||
|  * |  | ||||||
|  * @events |  | ||||||
|  * @event{@ref BLE_L2CAP_EVT_CH_SETUP, Setup successful.} |  | ||||||
|  * @event{@ref BLE_L2CAP_EVT_CH_SETUP_REFUSED, Setup failed.} |  | ||||||
|  * @endevents |  | ||||||
|  * |  | ||||||
|  * @mscs |  | ||||||
|  * @mmsc{@ref BLE_L2CAP_CH_SETUP_MSC} |  | ||||||
|  * @endmscs |  | ||||||
|  * |  | ||||||
|  * @param[in] conn_handle      Connection Handle. |  | ||||||
|  * @param[in,out] p_local_cid  Pointer to a uint16_t containing Local Channel ID of the L2CAP channel: |  | ||||||
|  *                             - As input: @ref BLE_L2CAP_CID_INVALID when requesting setup of an L2CAP |  | ||||||
|  *                               channel or local_cid provided in the @ref BLE_L2CAP_EVT_CH_SETUP_REQUEST |  | ||||||
|  *                               event when replying to a setup request of an L2CAP channel. |  | ||||||
|  *                             - As output: local_cid for this channel. |  | ||||||
|  * @param[in] p_params         L2CAP channel parameters. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS                    Successfully queued request or response for transmission. |  | ||||||
|  * @retval ::NRF_ERROR_BUSY                 The stack is busy, process pending events and retry. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_ADDR         Invalid pointer supplied. |  | ||||||
|  * @retval ::BLE_ERROR_INVALID_CONN_HANDLE  Invalid Connection Handle. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_PARAM        Invalid parameter(s) supplied. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_LENGTH       Supplied higher rx_mps than has been configured on this link. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_STATE        Invalid State to perform operation (L2CAP channel already set up). |  | ||||||
|  * @retval ::NRF_ERROR_NOT_FOUND            CID not found. |  | ||||||
|  * @retval ::NRF_ERROR_RESOURCES            The limit has been reached for available L2CAP channels, |  | ||||||
|  *                                          see @ref ble_l2cap_conn_cfg_t::ch_count. |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_BLE_L2CAP_CH_SETUP, uint32_t, sd_ble_l2cap_ch_setup(uint16_t conn_handle, uint16_t *p_local_cid, ble_l2cap_ch_setup_params_t const *p_params)); |  | ||||||
|  |  | ||||||
| /**@brief Release an L2CAP channel. |  | ||||||
|  * |  | ||||||
|  * @details This sends a Disconnection Request packet to a peer. |  | ||||||
|  * |  | ||||||
|  * @events |  | ||||||
|  * @event{@ref BLE_L2CAP_EVT_CH_RELEASED, Release complete.} |  | ||||||
|  * @endevents |  | ||||||
|  * |  | ||||||
|  * @mscs |  | ||||||
|  * @mmsc{@ref BLE_L2CAP_CH_RELEASE_MSC} |  | ||||||
|  * @endmscs |  | ||||||
|  * |  | ||||||
|  * @param[in] conn_handle   Connection Handle. |  | ||||||
|  * @param[in] local_cid     Local Channel ID of the L2CAP channel. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS                    Successfully queued request for transmission. |  | ||||||
|  * @retval ::BLE_ERROR_INVALID_CONN_HANDLE  Invalid Connection Handle. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_STATE        Invalid State to perform operation (Setup or release is |  | ||||||
|  *                                          in progress for the L2CAP channel). |  | ||||||
|  * @retval ::NRF_ERROR_NOT_FOUND            CID not found. |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_BLE_L2CAP_CH_RELEASE, uint32_t, sd_ble_l2cap_ch_release(uint16_t conn_handle, uint16_t local_cid)); |  | ||||||
|  |  | ||||||
| /**@brief Receive an SDU on an L2CAP channel. |  | ||||||
|  * |  | ||||||
|  * @details This may issue additional credits to the peer using an LE Flow Control Credit packet. |  | ||||||
|  * |  | ||||||
|  * @note    A call to this function will require the application to keep the memory pointed by |  | ||||||
|  *          @ref ble_data_t::p_data alive until the SDU data buffer is returned in @ref BLE_L2CAP_EVT_CH_RX |  | ||||||
|  *          or @ref BLE_L2CAP_EVT_CH_SDU_BUF_RELEASED event. |  | ||||||
|  * |  | ||||||
|  * @note    The SoftDevice can queue up to @ref ble_l2cap_conn_cfg_t::rx_queue_size SDU data buffers |  | ||||||
|  *          for reception per L2CAP channel. |  | ||||||
|  * |  | ||||||
|  * @events |  | ||||||
|  * @event{@ref BLE_L2CAP_EVT_CH_RX, The SDU is received.} |  | ||||||
|  * @endevents |  | ||||||
|  * |  | ||||||
|  * @mscs |  | ||||||
|  * @mmsc{@ref BLE_L2CAP_CH_RX_MSC} |  | ||||||
|  * @endmscs |  | ||||||
|  * |  | ||||||
|  * @param[in] conn_handle Connection Handle. |  | ||||||
|  * @param[in] local_cid   Local Channel ID of the L2CAP channel. |  | ||||||
|  * @param[in] p_sdu_buf   Pointer to the SDU data buffer. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS                    Buffer accepted. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_ADDR         Invalid pointer supplied. |  | ||||||
|  * @retval ::BLE_ERROR_INVALID_CONN_HANDLE  Invalid Connection Handle. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_STATE        Invalid State to perform operation (Setup or release is |  | ||||||
|  *                                          in progress for an L2CAP channel). |  | ||||||
|  * @retval ::NRF_ERROR_NOT_FOUND            CID not found. |  | ||||||
|  * @retval ::NRF_ERROR_RESOURCES            Too many SDU data buffers supplied. Wait for a |  | ||||||
|  *                                          @ref BLE_L2CAP_EVT_CH_RX event and retry. |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_BLE_L2CAP_CH_RX, uint32_t, sd_ble_l2cap_ch_rx(uint16_t conn_handle, uint16_t local_cid, ble_data_t const *p_sdu_buf)); |  | ||||||
|  |  | ||||||
| /**@brief Transmit an SDU on an L2CAP channel. |  | ||||||
|  * |  | ||||||
|  * @note    A call to this function will require the application to keep the memory pointed by |  | ||||||
|  *          @ref ble_data_t::p_data alive until the SDU data buffer is returned in @ref BLE_L2CAP_EVT_CH_TX |  | ||||||
|  *          or @ref BLE_L2CAP_EVT_CH_SDU_BUF_RELEASED event. |  | ||||||
|  * |  | ||||||
|  * @note    The SoftDevice can queue up to @ref ble_l2cap_conn_cfg_t::tx_queue_size SDUs for |  | ||||||
|  *          transmission per L2CAP channel. |  | ||||||
|  * |  | ||||||
|  * @note    The application can keep track of the available credits for transmission by following |  | ||||||
|  *          the procedure below: |  | ||||||
|  *          - Store initial credits given by the peer in a variable. |  | ||||||
|  *            (Initial credits are provided in a @ref BLE_L2CAP_EVT_CH_SETUP event.) |  | ||||||
|  *          - Decrement the variable, which stores the currently available credits, by |  | ||||||
|  *            ceiling((@ref ble_data_t::len + 2) / tx_mps) when a call to this function returns |  | ||||||
|  *            @ref NRF_SUCCESS. (tx_mps is provided in a @ref BLE_L2CAP_EVT_CH_SETUP event.) |  | ||||||
|  *          - Increment the variable, which stores the currently available credits, by additional |  | ||||||
|  *            credits given by the peer in a @ref BLE_L2CAP_EVT_CH_CREDIT event. |  | ||||||
|  * |  | ||||||
|  * @events |  | ||||||
|  * @event{@ref BLE_L2CAP_EVT_CH_TX, The SDU is transmitted.} |  | ||||||
|  * @endevents |  | ||||||
|  * |  | ||||||
|  * @mscs |  | ||||||
|  * @mmsc{@ref BLE_L2CAP_CH_TX_MSC} |  | ||||||
|  * @endmscs |  | ||||||
|  * |  | ||||||
|  * @param[in] conn_handle Connection Handle. |  | ||||||
|  * @param[in] local_cid   Local Channel ID of the L2CAP channel. |  | ||||||
|  * @param[in] p_sdu_buf   Pointer to the SDU data buffer. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS                    Successfully queued L2CAP SDU for transmission. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_ADDR         Invalid pointer supplied. |  | ||||||
|  * @retval ::BLE_ERROR_INVALID_CONN_HANDLE  Invalid Connection Handle. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_STATE        Invalid State to perform operation (Setup or release is |  | ||||||
|  *                                          in progress for the L2CAP channel). |  | ||||||
|  * @retval ::NRF_ERROR_NOT_FOUND            CID not found. |  | ||||||
|  * @retval ::NRF_ERROR_DATA_SIZE            Invalid SDU length supplied, must not be more than |  | ||||||
|  *                                          @ref ble_l2cap_ch_tx_params_t::tx_mtu provided in |  | ||||||
|  *                                          @ref BLE_L2CAP_EVT_CH_SETUP event. |  | ||||||
|  * @retval ::NRF_ERROR_RESOURCES            Too many SDUs queued for transmission. Wait for a |  | ||||||
|  *                                          @ref BLE_L2CAP_EVT_CH_TX event and retry. |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_BLE_L2CAP_CH_TX, uint32_t, sd_ble_l2cap_ch_tx(uint16_t conn_handle, uint16_t local_cid, ble_data_t const *p_sdu_buf)); |  | ||||||
|  |  | ||||||
| /**@brief Advanced SDU reception flow control. |  | ||||||
|  * |  | ||||||
|  * @details Adjust the way the SoftDevice issues credits to the peer. |  | ||||||
|  *          This may issue additional credits to the peer using an LE Flow Control Credit packet. |  | ||||||
|  * |  | ||||||
|  * @mscs |  | ||||||
|  * @mmsc{@ref BLE_L2CAP_CH_FLOW_CONTROL_MSC} |  | ||||||
|  * @endmscs |  | ||||||
|  * |  | ||||||
|  * @param[in] conn_handle Connection Handle. |  | ||||||
|  * @param[in] local_cid   Local Channel ID of the L2CAP channel or @ref BLE_L2CAP_CID_INVALID to set |  | ||||||
|  *                        the value that will be used for newly created channels. |  | ||||||
|  * @param[in] credits     Number of credits that the SoftDevice will make sure the peer has every |  | ||||||
|  *                        time it starts using a new reception buffer. |  | ||||||
|  *                        - @ref BLE_L2CAP_CREDITS_DEFAULT is the default value the SoftDevice will |  | ||||||
|  *                          use if this function is not called. |  | ||||||
|  *                        - If set to zero, the SoftDevice will stop issuing credits for new reception |  | ||||||
|  *                          buffers the application provides or has provided. SDU reception that is |  | ||||||
|  *                          currently ongoing will be allowed to complete. |  | ||||||
|  * @param[out] p_credits  NULL or pointer to a uint16_t. If a valid pointer is provided, it will be |  | ||||||
|  *                        written by the SoftDevice with the number of credits that is or will be |  | ||||||
|  *                        available to the peer. If the value written by the SoftDevice is 0 when |  | ||||||
|  *                        credits parameter was set to 0, the peer will not be able to send more |  | ||||||
|  *                        data until more credits are provided by calling this function again with |  | ||||||
|  *                        credits > 0. This parameter is ignored when local_cid is set to |  | ||||||
|  *                        @ref BLE_L2CAP_CID_INVALID. |  | ||||||
|  * |  | ||||||
|  * @note Application should take care when setting number of credits higher than default value. In |  | ||||||
|  *       this case the application must make sure that the SoftDevice always has reception buffers |  | ||||||
|  *       available (see @ref sd_ble_l2cap_ch_rx) for that channel. If the SoftDevice does not have |  | ||||||
|  *       such buffers available, packets may be NACKed on the Link Layer and all Bluetooth traffic |  | ||||||
|  *       on the connection handle may be stalled until the SoftDevice again has an available |  | ||||||
|  *       reception buffer. This applies even if the application has used this call to set the |  | ||||||
|  *       credits back to default, or zero. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS                    Flow control parameters accepted. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_ADDR         Invalid pointer supplied. |  | ||||||
|  * @retval ::BLE_ERROR_INVALID_CONN_HANDLE  Invalid Connection Handle. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_STATE        Invalid State to perform operation (Setup or release is |  | ||||||
|  *                                          in progress for an L2CAP channel). |  | ||||||
|  * @retval ::NRF_ERROR_NOT_FOUND            CID not found. |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_BLE_L2CAP_CH_FLOW_CONTROL, uint32_t, sd_ble_l2cap_ch_flow_control(uint16_t conn_handle, uint16_t local_cid, uint16_t credits, uint16_t *p_credits)); |  | ||||||
|  |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
| #ifdef __cplusplus |  | ||||||
| } |  | ||||||
| #endif |  | ||||||
| #endif // BLE_L2CAP_H__ |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|   @} |  | ||||||
| */ |  | ||||||
| @@ -1,156 +0,0 @@ | |||||||
| /* |  | ||||||
|  * Copyright (c) 2012 - 2018, Nordic Semiconductor ASA |  | ||||||
|  * All rights reserved. |  | ||||||
|  * |  | ||||||
|  * Redistribution and use in source and binary forms, with or without modification, |  | ||||||
|  * are permitted provided that the following conditions are met: |  | ||||||
|  * |  | ||||||
|  * 1. Redistributions of source code must retain the above copyright notice, this |  | ||||||
|  *    list of conditions and the following disclaimer. |  | ||||||
|  * |  | ||||||
|  * 2. Redistributions in binary form, except as embedded into a Nordic |  | ||||||
|  *    Semiconductor ASA integrated circuit in a product or a software update for |  | ||||||
|  *    such product, must reproduce the above copyright notice, this list of |  | ||||||
|  *    conditions and the following disclaimer in the documentation and/or other |  | ||||||
|  *    materials provided with the distribution. |  | ||||||
|  * |  | ||||||
|  * 3. Neither the name of Nordic Semiconductor ASA nor the names of its |  | ||||||
|  *    contributors may be used to endorse or promote products derived from this |  | ||||||
|  *    software without specific prior written permission. |  | ||||||
|  * |  | ||||||
|  * 4. This software, with or without modification, must only be used with a |  | ||||||
|  *    Nordic Semiconductor ASA integrated circuit. |  | ||||||
|  * |  | ||||||
|  * 5. Any software provided in binary form under this license must not be reverse |  | ||||||
|  *    engineered, decompiled, modified and/or disassembled. |  | ||||||
|  * |  | ||||||
|  * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS |  | ||||||
|  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |  | ||||||
|  * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE |  | ||||||
|  * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE |  | ||||||
|  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |  | ||||||
|  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE |  | ||||||
|  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |  | ||||||
|  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |  | ||||||
|  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT |  | ||||||
|  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |  | ||||||
|  */ |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|   @addtogroup BLE_COMMON |  | ||||||
|   @{ |  | ||||||
|   @defgroup ble_ranges Module specific SVC, event and option number subranges |  | ||||||
|   @{ |  | ||||||
|  |  | ||||||
|   @brief Definition of SVC, event and option number subranges for each API module. |  | ||||||
|  |  | ||||||
|   @note |  | ||||||
|   SVCs, event and option numbers are split into subranges for each API module. |  | ||||||
|   Each module receives its entire allocated range of SVC calls, whether implemented or not, |  | ||||||
|   but return BLE_ERROR_NOT_SUPPORTED for unimplemented or undefined calls in its range. |  | ||||||
|  |  | ||||||
|   Note that the symbols BLE_<module>_SVC_LAST is the end of the allocated SVC range, |  | ||||||
|   rather than the last SVC function call actually defined and implemented. |  | ||||||
|  |  | ||||||
|   Specific SVC, event and option values are defined in each module's ble_<module>.h file, |  | ||||||
|   which defines names of each individual SVC code based on the range start value. |  | ||||||
| */ |  | ||||||
|  |  | ||||||
| #ifndef BLE_RANGES_H__ |  | ||||||
| #define BLE_RANGES_H__ |  | ||||||
|  |  | ||||||
| #ifdef __cplusplus |  | ||||||
| extern "C" { |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| #define BLE_SVC_BASE           0x60       /**< Common BLE SVC base. */ |  | ||||||
| #define BLE_SVC_LAST           0x6B       /**< Common BLE SVC last. */ |  | ||||||
|  |  | ||||||
| #define BLE_GAP_SVC_BASE       0x6C       /**< GAP BLE SVC base. */ |  | ||||||
| #define BLE_GAP_SVC_LAST       0x9A       /**< GAP BLE SVC last. */ |  | ||||||
|  |  | ||||||
| #define BLE_GATTC_SVC_BASE     0x9B       /**< GATTC BLE SVC base. */ |  | ||||||
| #define BLE_GATTC_SVC_LAST     0xA7       /**< GATTC BLE SVC last. */ |  | ||||||
|  |  | ||||||
| #define BLE_GATTS_SVC_BASE     0xA8       /**< GATTS BLE SVC base. */ |  | ||||||
| #define BLE_GATTS_SVC_LAST     0xB7       /**< GATTS BLE SVC last. */ |  | ||||||
|  |  | ||||||
| #define BLE_L2CAP_SVC_BASE     0xB8       /**< L2CAP BLE SVC base. */ |  | ||||||
| #define BLE_L2CAP_SVC_LAST     0xBF       /**< L2CAP BLE SVC last. */ |  | ||||||
|  |  | ||||||
|  |  | ||||||
| #define BLE_EVT_INVALID        0x00       /**< Invalid BLE Event. */ |  | ||||||
|  |  | ||||||
| #define BLE_EVT_BASE           0x01       /**< Common BLE Event base. */ |  | ||||||
| #define BLE_EVT_LAST           0x0F       /**< Common BLE Event last. */ |  | ||||||
|  |  | ||||||
| #define BLE_GAP_EVT_BASE       0x10       /**< GAP BLE Event base. */ |  | ||||||
| #define BLE_GAP_EVT_LAST       0x2F       /**< GAP BLE Event last. */ |  | ||||||
|  |  | ||||||
| #define BLE_GATTC_EVT_BASE     0x30       /**< GATTC BLE Event base. */ |  | ||||||
| #define BLE_GATTC_EVT_LAST     0x4F       /**< GATTC BLE Event last. */ |  | ||||||
|  |  | ||||||
| #define BLE_GATTS_EVT_BASE     0x50       /**< GATTS BLE Event base. */ |  | ||||||
| #define BLE_GATTS_EVT_LAST     0x6F       /**< GATTS BLE Event last. */ |  | ||||||
|  |  | ||||||
| #define BLE_L2CAP_EVT_BASE     0x70       /**< L2CAP BLE Event base. */ |  | ||||||
| #define BLE_L2CAP_EVT_LAST     0x8F       /**< L2CAP BLE Event last. */ |  | ||||||
|  |  | ||||||
|  |  | ||||||
| #define BLE_OPT_INVALID        0x00       /**< Invalid BLE Option. */ |  | ||||||
|  |  | ||||||
| #define BLE_OPT_BASE           0x01       /**< Common BLE Option base. */ |  | ||||||
| #define BLE_OPT_LAST           0x1F       /**< Common BLE Option last. */ |  | ||||||
|  |  | ||||||
| #define BLE_GAP_OPT_BASE       0x20       /**< GAP BLE Option base. */ |  | ||||||
| #define BLE_GAP_OPT_LAST       0x3F       /**< GAP BLE Option last. */ |  | ||||||
|  |  | ||||||
| #define BLE_GATT_OPT_BASE      0x40       /**< GATT BLE Option base. */ |  | ||||||
| #define BLE_GATT_OPT_LAST      0x5F       /**< GATT BLE Option last. */ |  | ||||||
|  |  | ||||||
| #define BLE_GATTC_OPT_BASE     0x60       /**< GATTC BLE Option base. */ |  | ||||||
| #define BLE_GATTC_OPT_LAST     0x7F       /**< GATTC BLE Option last. */ |  | ||||||
|  |  | ||||||
| #define BLE_GATTS_OPT_BASE     0x80       /**< GATTS BLE Option base. */ |  | ||||||
| #define BLE_GATTS_OPT_LAST     0x9F       /**< GATTS BLE Option last. */ |  | ||||||
|  |  | ||||||
| #define BLE_L2CAP_OPT_BASE     0xA0       /**< L2CAP BLE Option base. */ |  | ||||||
| #define BLE_L2CAP_OPT_LAST     0xBF       /**< L2CAP BLE Option last. */ |  | ||||||
|  |  | ||||||
|  |  | ||||||
| #define BLE_CFG_INVALID        0x00       /**< Invalid BLE configuration. */ |  | ||||||
|  |  | ||||||
| #define BLE_CFG_BASE           0x01       /**< Common BLE configuration base. */ |  | ||||||
| #define BLE_CFG_LAST           0x1F       /**< Common BLE configuration last. */ |  | ||||||
|  |  | ||||||
| #define BLE_CONN_CFG_BASE      0x20       /**< BLE connection configuration base. */ |  | ||||||
| #define BLE_CONN_CFG_LAST      0x3F       /**< BLE connection configuration last. */ |  | ||||||
|  |  | ||||||
| #define BLE_GAP_CFG_BASE       0x40       /**< GAP BLE configuration base. */ |  | ||||||
| #define BLE_GAP_CFG_LAST       0x5F       /**< GAP BLE configuration last. */ |  | ||||||
|  |  | ||||||
| #define BLE_GATT_CFG_BASE      0x60       /**< GATT BLE configuration base. */ |  | ||||||
| #define BLE_GATT_CFG_LAST      0x7F       /**< GATT BLE configuration last. */ |  | ||||||
|  |  | ||||||
| #define BLE_GATTC_CFG_BASE     0x80       /**< GATTC BLE configuration base. */ |  | ||||||
| #define BLE_GATTC_CFG_LAST     0x9F       /**< GATTC BLE configuration last. */ |  | ||||||
|  |  | ||||||
| #define BLE_GATTS_CFG_BASE     0xA0       /**< GATTS BLE configuration base. */ |  | ||||||
| #define BLE_GATTS_CFG_LAST     0xBF       /**< GATTS BLE configuration last. */ |  | ||||||
|  |  | ||||||
| #define BLE_L2CAP_CFG_BASE     0xC0       /**< L2CAP BLE configuration base. */ |  | ||||||
| #define BLE_L2CAP_CFG_LAST     0xDF       /**< L2CAP BLE configuration last. */ |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| #ifdef __cplusplus |  | ||||||
| } |  | ||||||
| #endif |  | ||||||
| #endif /* BLE_RANGES_H__ */ |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|   @} |  | ||||||
|   @} |  | ||||||
| */ |  | ||||||
| @@ -1,215 +0,0 @@ | |||||||
| /* |  | ||||||
|  * Copyright (c) 2012 - 2017, Nordic Semiconductor ASA |  | ||||||
|  * All rights reserved. |  | ||||||
|  * |  | ||||||
|  * Redistribution and use in source and binary forms, with or without modification, |  | ||||||
|  * are permitted provided that the following conditions are met: |  | ||||||
|  * |  | ||||||
|  * 1. Redistributions of source code must retain the above copyright notice, this |  | ||||||
|  *    list of conditions and the following disclaimer. |  | ||||||
|  * |  | ||||||
|  * 2. Redistributions in binary form, except as embedded into a Nordic |  | ||||||
|  *    Semiconductor ASA integrated circuit in a product or a software update for |  | ||||||
|  *    such product, must reproduce the above copyright notice, this list of |  | ||||||
|  *    conditions and the following disclaimer in the documentation and/or other |  | ||||||
|  *    materials provided with the distribution. |  | ||||||
|  * |  | ||||||
|  * 3. Neither the name of Nordic Semiconductor ASA nor the names of its |  | ||||||
|  *    contributors may be used to endorse or promote products derived from this |  | ||||||
|  *    software without specific prior written permission. |  | ||||||
|  * |  | ||||||
|  * 4. This software, with or without modification, must only be used with a |  | ||||||
|  *    Nordic Semiconductor ASA integrated circuit. |  | ||||||
|  * |  | ||||||
|  * 5. Any software provided in binary form under this license must not be reverse |  | ||||||
|  *    engineered, decompiled, modified and/or disassembled. |  | ||||||
|  * |  | ||||||
|  * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS |  | ||||||
|  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |  | ||||||
|  * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE |  | ||||||
|  * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE |  | ||||||
|  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |  | ||||||
|  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE |  | ||||||
|  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |  | ||||||
|  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |  | ||||||
|  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT |  | ||||||
|  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |  | ||||||
|  */ |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|   @addtogroup BLE_COMMON |  | ||||||
|   @{ |  | ||||||
|   @defgroup ble_types Common types and macro definitions |  | ||||||
|   @{ |  | ||||||
|  |  | ||||||
|   @brief Common types and macro definitions for the BLE SoftDevice. |  | ||||||
|  */ |  | ||||||
|  |  | ||||||
| #ifndef BLE_TYPES_H__ |  | ||||||
| #define BLE_TYPES_H__ |  | ||||||
|  |  | ||||||
| #include <stdint.h> |  | ||||||
|  |  | ||||||
| #ifdef __cplusplus |  | ||||||
| extern "C" { |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| /** @addtogroup BLE_TYPES_DEFINES Defines |  | ||||||
|  * @{ */ |  | ||||||
|  |  | ||||||
| /** @defgroup BLE_CONN_HANDLES BLE Connection Handles |  | ||||||
|  * @{ */ |  | ||||||
| #define BLE_CONN_HANDLE_INVALID 0xFFFF  /**< Invalid Connection Handle. */ |  | ||||||
| #define BLE_CONN_HANDLE_ALL     0xFFFE  /**< Applies to all Connection Handles. */ |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /** @defgroup BLE_UUID_VALUES Assigned Values for BLE UUIDs |  | ||||||
|  * @{ */ |  | ||||||
| /* Generic UUIDs, applicable to all services */ |  | ||||||
| #define BLE_UUID_UNKNOWN                              0x0000 /**< Reserved UUID. */ |  | ||||||
| #define BLE_UUID_SERVICE_PRIMARY                      0x2800 /**< Primary Service. */ |  | ||||||
| #define BLE_UUID_SERVICE_SECONDARY                    0x2801 /**< Secondary Service. */ |  | ||||||
| #define BLE_UUID_SERVICE_INCLUDE                      0x2802 /**< Include. */ |  | ||||||
| #define BLE_UUID_CHARACTERISTIC                       0x2803 /**< Characteristic. */ |  | ||||||
| #define BLE_UUID_DESCRIPTOR_CHAR_EXT_PROP             0x2900 /**< Characteristic Extended Properties Descriptor. */ |  | ||||||
| #define BLE_UUID_DESCRIPTOR_CHAR_USER_DESC            0x2901 /**< Characteristic User Description Descriptor. */ |  | ||||||
| #define BLE_UUID_DESCRIPTOR_CLIENT_CHAR_CONFIG        0x2902 /**< Client Characteristic Configuration Descriptor. */ |  | ||||||
| #define BLE_UUID_DESCRIPTOR_SERVER_CHAR_CONFIG        0x2903 /**< Server Characteristic Configuration Descriptor. */ |  | ||||||
| #define BLE_UUID_DESCRIPTOR_CHAR_PRESENTATION_FORMAT  0x2904 /**< Characteristic Presentation Format Descriptor. */ |  | ||||||
| #define BLE_UUID_DESCRIPTOR_CHAR_AGGREGATE_FORMAT     0x2905 /**< Characteristic Aggregate Format Descriptor. */ |  | ||||||
| /* GATT specific UUIDs */ |  | ||||||
| #define BLE_UUID_GATT                                 0x1801 /**< Generic Attribute Profile. */ |  | ||||||
| #define BLE_UUID_GATT_CHARACTERISTIC_SERVICE_CHANGED  0x2A05 /**< Service Changed Characteristic. */ |  | ||||||
| /* GAP specific UUIDs */ |  | ||||||
| #define BLE_UUID_GAP                                  0x1800 /**< Generic Access Profile. */ |  | ||||||
| #define BLE_UUID_GAP_CHARACTERISTIC_DEVICE_NAME       0x2A00 /**< Device Name Characteristic. */ |  | ||||||
| #define BLE_UUID_GAP_CHARACTERISTIC_APPEARANCE        0x2A01 /**< Appearance Characteristic. */ |  | ||||||
| #define BLE_UUID_GAP_CHARACTERISTIC_RECONN_ADDR       0x2A03 /**< Reconnection Address Characteristic. */ |  | ||||||
| #define BLE_UUID_GAP_CHARACTERISTIC_PPCP              0x2A04 /**< Peripheral Preferred Connection Parameters Characteristic. */ |  | ||||||
| #define BLE_UUID_GAP_CHARACTERISTIC_CAR               0x2AA6 /**< Central Address Resolution Characteristic. */ |  | ||||||
| #define BLE_UUID_GAP_CHARACTERISTIC_RPA_ONLY          0x2AC9 /**< Resolvable Private Address Only Characteristic. */ |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /** @defgroup BLE_UUID_TYPES Types of UUID |  | ||||||
|  * @{ */ |  | ||||||
| #define BLE_UUID_TYPE_UNKNOWN       0x00 /**< Invalid UUID type. */ |  | ||||||
| #define BLE_UUID_TYPE_BLE           0x01 /**< Bluetooth SIG UUID (16-bit). */ |  | ||||||
| #define BLE_UUID_TYPE_VENDOR_BEGIN  0x02 /**< Vendor UUID types start at this index (128-bit). */ |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /** @defgroup BLE_APPEARANCES Bluetooth Appearance values |  | ||||||
|  *  @note Retrieved from http://developer.bluetooth.org/gatt/characteristics/Pages/CharacteristicViewer.aspx?u=org.bluetooth.characteristic.gap.appearance.xml |  | ||||||
|  * @{ */ |  | ||||||
| #define BLE_APPEARANCE_UNKNOWN                                0 /**< Unknown. */ |  | ||||||
| #define BLE_APPEARANCE_GENERIC_PHONE                         64 /**< Generic Phone. */ |  | ||||||
| #define BLE_APPEARANCE_GENERIC_COMPUTER                     128 /**< Generic Computer. */ |  | ||||||
| #define BLE_APPEARANCE_GENERIC_WATCH                        192 /**< Generic Watch. */ |  | ||||||
| #define BLE_APPEARANCE_WATCH_SPORTS_WATCH                   193 /**< Watch: Sports Watch. */ |  | ||||||
| #define BLE_APPEARANCE_GENERIC_CLOCK                        256 /**< Generic Clock. */ |  | ||||||
| #define BLE_APPEARANCE_GENERIC_DISPLAY                      320 /**< Generic Display. */ |  | ||||||
| #define BLE_APPEARANCE_GENERIC_REMOTE_CONTROL               384 /**< Generic Remote Control. */ |  | ||||||
| #define BLE_APPEARANCE_GENERIC_EYE_GLASSES                  448 /**< Generic Eye-glasses. */ |  | ||||||
| #define BLE_APPEARANCE_GENERIC_TAG                          512 /**< Generic Tag. */ |  | ||||||
| #define BLE_APPEARANCE_GENERIC_KEYRING                      576 /**< Generic Keyring. */ |  | ||||||
| #define BLE_APPEARANCE_GENERIC_MEDIA_PLAYER                 640 /**< Generic Media Player. */ |  | ||||||
| #define BLE_APPEARANCE_GENERIC_BARCODE_SCANNER              704 /**< Generic Barcode Scanner. */ |  | ||||||
| #define BLE_APPEARANCE_GENERIC_THERMOMETER                  768 /**< Generic Thermometer. */ |  | ||||||
| #define BLE_APPEARANCE_THERMOMETER_EAR                      769 /**< Thermometer: Ear. */ |  | ||||||
| #define BLE_APPEARANCE_GENERIC_HEART_RATE_SENSOR            832 /**< Generic Heart rate Sensor. */ |  | ||||||
| #define BLE_APPEARANCE_HEART_RATE_SENSOR_HEART_RATE_BELT    833 /**< Heart Rate Sensor: Heart Rate Belt. */ |  | ||||||
| #define BLE_APPEARANCE_GENERIC_BLOOD_PRESSURE               896 /**< Generic Blood Pressure. */ |  | ||||||
| #define BLE_APPEARANCE_BLOOD_PRESSURE_ARM                   897 /**< Blood Pressure: Arm. */ |  | ||||||
| #define BLE_APPEARANCE_BLOOD_PRESSURE_WRIST                 898 /**< Blood Pressure: Wrist. */ |  | ||||||
| #define BLE_APPEARANCE_GENERIC_HID                          960 /**< Human Interface Device (HID). */ |  | ||||||
| #define BLE_APPEARANCE_HID_KEYBOARD                         961 /**< Keyboard (HID Subtype). */ |  | ||||||
| #define BLE_APPEARANCE_HID_MOUSE                            962 /**< Mouse (HID Subtype). */ |  | ||||||
| #define BLE_APPEARANCE_HID_JOYSTICK                         963 /**< Joystick (HID Subtype). */ |  | ||||||
| #define BLE_APPEARANCE_HID_GAMEPAD                          964 /**< Gamepad (HID Subtype). */ |  | ||||||
| #define BLE_APPEARANCE_HID_DIGITIZERSUBTYPE                 965 /**< Digitizer Tablet (HID Subtype). */ |  | ||||||
| #define BLE_APPEARANCE_HID_CARD_READER                      966 /**< Card Reader (HID Subtype). */ |  | ||||||
| #define BLE_APPEARANCE_HID_DIGITAL_PEN                      967 /**< Digital Pen (HID Subtype). */ |  | ||||||
| #define BLE_APPEARANCE_HID_BARCODE                          968 /**< Barcode Scanner (HID Subtype). */ |  | ||||||
| #define BLE_APPEARANCE_GENERIC_GLUCOSE_METER               1024 /**< Generic Glucose Meter. */ |  | ||||||
| #define BLE_APPEARANCE_GENERIC_RUNNING_WALKING_SENSOR      1088 /**< Generic Running Walking Sensor. */ |  | ||||||
| #define BLE_APPEARANCE_RUNNING_WALKING_SENSOR_IN_SHOE      1089 /**< Running Walking Sensor: In-Shoe. */ |  | ||||||
| #define BLE_APPEARANCE_RUNNING_WALKING_SENSOR_ON_SHOE      1090 /**< Running Walking Sensor: On-Shoe. */ |  | ||||||
| #define BLE_APPEARANCE_RUNNING_WALKING_SENSOR_ON_HIP       1091 /**< Running Walking Sensor: On-Hip. */ |  | ||||||
| #define BLE_APPEARANCE_GENERIC_CYCLING                     1152 /**< Generic Cycling. */ |  | ||||||
| #define BLE_APPEARANCE_CYCLING_CYCLING_COMPUTER            1153 /**< Cycling: Cycling Computer. */ |  | ||||||
| #define BLE_APPEARANCE_CYCLING_SPEED_SENSOR                1154 /**< Cycling: Speed Sensor. */ |  | ||||||
| #define BLE_APPEARANCE_CYCLING_CADENCE_SENSOR              1155 /**< Cycling: Cadence Sensor. */ |  | ||||||
| #define BLE_APPEARANCE_CYCLING_POWER_SENSOR                1156 /**< Cycling: Power Sensor. */ |  | ||||||
| #define BLE_APPEARANCE_CYCLING_SPEED_CADENCE_SENSOR        1157 /**< Cycling: Speed and Cadence Sensor. */ |  | ||||||
| #define BLE_APPEARANCE_GENERIC_PULSE_OXIMETER              3136 /**< Generic Pulse Oximeter. */ |  | ||||||
| #define BLE_APPEARANCE_PULSE_OXIMETER_FINGERTIP            3137 /**< Fingertip (Pulse Oximeter subtype). */ |  | ||||||
| #define BLE_APPEARANCE_PULSE_OXIMETER_WRIST_WORN           3138 /**< Wrist Worn(Pulse Oximeter subtype). */ |  | ||||||
| #define BLE_APPEARANCE_GENERIC_WEIGHT_SCALE                3200 /**< Generic Weight Scale. */ |  | ||||||
| #define BLE_APPEARANCE_GENERIC_OUTDOOR_SPORTS_ACT          5184 /**< Generic Outdoor Sports Activity. */ |  | ||||||
| #define BLE_APPEARANCE_OUTDOOR_SPORTS_ACT_LOC_DISP         5185 /**< Location Display Device (Outdoor Sports Activity subtype). */ |  | ||||||
| #define BLE_APPEARANCE_OUTDOOR_SPORTS_ACT_LOC_AND_NAV_DISP 5186 /**< Location and Navigation Display Device (Outdoor Sports Activity subtype). */ |  | ||||||
| #define BLE_APPEARANCE_OUTDOOR_SPORTS_ACT_LOC_POD          5187 /**< Location Pod (Outdoor Sports Activity subtype). */ |  | ||||||
| #define BLE_APPEARANCE_OUTDOOR_SPORTS_ACT_LOC_AND_NAV_POD  5188 /**< Location and Navigation Pod (Outdoor Sports Activity subtype). */ |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
| /** @brief Set .type and .uuid fields of ble_uuid_struct to specified UUID value. */ |  | ||||||
| #define BLE_UUID_BLE_ASSIGN(instance, value) do {\ |  | ||||||
|             instance.type = BLE_UUID_TYPE_BLE; \ |  | ||||||
|             instance.uuid = value;} while(0) |  | ||||||
|  |  | ||||||
| /** @brief Copy type and uuid members from src to dst ble_uuid_t pointer. Both pointers must be valid/non-null. */ |  | ||||||
| #define BLE_UUID_COPY_PTR(dst, src) do {\ |  | ||||||
|             (dst)->type = (src)->type; \ |  | ||||||
|             (dst)->uuid = (src)->uuid;} while(0) |  | ||||||
|  |  | ||||||
| /** @brief Copy type and uuid members from src to dst ble_uuid_t struct. */ |  | ||||||
| #define BLE_UUID_COPY_INST(dst, src) do {\ |  | ||||||
|             (dst).type = (src).type; \ |  | ||||||
|             (dst).uuid = (src).uuid;} while(0) |  | ||||||
|  |  | ||||||
| /** @brief Compare for equality both type and uuid members of two (valid, non-null) ble_uuid_t pointers. */ |  | ||||||
| #define BLE_UUID_EQ(p_uuid1, p_uuid2) \ |  | ||||||
|             (((p_uuid1)->type == (p_uuid2)->type) && ((p_uuid1)->uuid == (p_uuid2)->uuid)) |  | ||||||
|  |  | ||||||
| /** @brief Compare for difference both type and uuid members of two (valid, non-null) ble_uuid_t pointers. */ |  | ||||||
| #define BLE_UUID_NEQ(p_uuid1, p_uuid2) \ |  | ||||||
|             (((p_uuid1)->type != (p_uuid2)->type) || ((p_uuid1)->uuid != (p_uuid2)->uuid)) |  | ||||||
|  |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
| /** @addtogroup BLE_TYPES_STRUCTURES Structures |  | ||||||
|  * @{ */ |  | ||||||
|  |  | ||||||
| /** @brief 128 bit UUID values. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint8_t uuid128[16]; /**< Little-Endian UUID bytes. */ |  | ||||||
| } ble_uuid128_t; |  | ||||||
|  |  | ||||||
| /** @brief  Bluetooth Low Energy UUID type, encapsulates both 16-bit and 128-bit UUIDs. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint16_t    uuid; /**< 16-bit UUID value or octets 12-13 of 128-bit UUID. */ |  | ||||||
|   uint8_t     type; /**< UUID type, see @ref BLE_UUID_TYPES. If type is @ref BLE_UUID_TYPE_UNKNOWN, the value of uuid is undefined. */ |  | ||||||
| } ble_uuid_t; |  | ||||||
|  |  | ||||||
| /**@brief Data structure. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint8_t     *p_data;  /**< Pointer to the data buffer provided to/from the application. */ |  | ||||||
|   uint16_t     len;     /**< Length of the data buffer, in bytes. */ |  | ||||||
| } ble_data_t; |  | ||||||
|  |  | ||||||
| /** @} */ |  | ||||||
| #ifdef __cplusplus |  | ||||||
| } |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| #endif /* BLE_TYPES_H__ */ |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|   @} |  | ||||||
|   @} |  | ||||||
| */ |  | ||||||
| @@ -1,241 +0,0 @@ | |||||||
| /* |  | ||||||
|  * Copyright (c) 2014 - 2017, Nordic Semiconductor ASA |  | ||||||
|  * All rights reserved. |  | ||||||
|  * |  | ||||||
|  * Redistribution and use in source and binary forms, with or without modification, |  | ||||||
|  * are permitted provided that the following conditions are met: |  | ||||||
|  * |  | ||||||
|  * 1. Redistributions of source code must retain the above copyright notice, this |  | ||||||
|  *    list of conditions and the following disclaimer. |  | ||||||
|  * |  | ||||||
|  * 2. Redistributions in binary form, except as embedded into a Nordic |  | ||||||
|  *    Semiconductor ASA integrated circuit in a product or a software update for |  | ||||||
|  *    such product, must reproduce the above copyright notice, this list of |  | ||||||
|  *    conditions and the following disclaimer in the documentation and/or other |  | ||||||
|  *    materials provided with the distribution. |  | ||||||
|  * |  | ||||||
|  * 3. Neither the name of Nordic Semiconductor ASA nor the names of its |  | ||||||
|  *    contributors may be used to endorse or promote products derived from this |  | ||||||
|  *    software without specific prior written permission. |  | ||||||
|  * |  | ||||||
|  * 4. This software, with or without modification, must only be used with a |  | ||||||
|  *    Nordic Semiconductor ASA integrated circuit. |  | ||||||
|  * |  | ||||||
|  * 5. Any software provided in binary form under this license must not be reverse |  | ||||||
|  *    engineered, decompiled, modified and/or disassembled. |  | ||||||
|  * |  | ||||||
|  * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS |  | ||||||
|  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |  | ||||||
|  * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE |  | ||||||
|  * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE |  | ||||||
|  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |  | ||||||
|  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE |  | ||||||
|  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |  | ||||||
|  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |  | ||||||
|  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT |  | ||||||
|  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |  | ||||||
|  */ |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|   @defgroup nrf_mbr_api Master Boot Record API |  | ||||||
|   @{ |  | ||||||
|  |  | ||||||
|   @brief APIs for updating SoftDevice and BootLoader |  | ||||||
|  |  | ||||||
| */ |  | ||||||
|  |  | ||||||
| #ifndef NRF_MBR_H__ |  | ||||||
| #define NRF_MBR_H__ |  | ||||||
|  |  | ||||||
| #include "nrf_svc.h" |  | ||||||
| #include <stdint.h> |  | ||||||
|  |  | ||||||
| #ifdef __cplusplus |  | ||||||
| extern "C" { |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| /** @addtogroup NRF_MBR_DEFINES Defines |  | ||||||
|  * @{ */ |  | ||||||
|  |  | ||||||
| /**@brief MBR SVC Base number. */ |  | ||||||
| #define MBR_SVC_BASE            (0x18) |  | ||||||
|  |  | ||||||
| /**@brief Page size in words. */ |  | ||||||
| #define MBR_PAGE_SIZE_IN_WORDS  (1024) |  | ||||||
|  |  | ||||||
| /** @brief The size that must be reserved for the MBR when a SoftDevice is written to flash. |  | ||||||
| This is the offset where the first byte of the SoftDevice hex file is written.*/ |  | ||||||
| #define MBR_SIZE                (0x1000) |  | ||||||
|  |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
| /** @addtogroup NRF_MBR_ENUMS Enumerations |  | ||||||
|  * @{ */ |  | ||||||
|  |  | ||||||
| /**@brief nRF Master Boot Record API SVC numbers. */ |  | ||||||
| enum NRF_MBR_SVCS |  | ||||||
| { |  | ||||||
|   SD_MBR_COMMAND = MBR_SVC_BASE, /**< ::sd_mbr_command */ |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| /**@brief Possible values for ::sd_mbr_command_t.command */ |  | ||||||
| enum NRF_MBR_COMMANDS |  | ||||||
| { |  | ||||||
|   SD_MBR_COMMAND_COPY_BL,                 /**< Copy a new BootLoader. @see ::sd_mbr_command_copy_bl_t*/ |  | ||||||
|   SD_MBR_COMMAND_COPY_SD,                 /**< Copy a new SoftDevice. @see ::sd_mbr_command_copy_sd_t*/ |  | ||||||
|   SD_MBR_COMMAND_INIT_SD,                 /**< Initialize forwarding interrupts to SD, and run reset function in SD. Does not require any parameters in ::sd_mbr_command_t params.*/ |  | ||||||
|   SD_MBR_COMMAND_COMPARE,                 /**< This command works like memcmp. @see ::sd_mbr_command_compare_t*/ |  | ||||||
|   SD_MBR_COMMAND_VECTOR_TABLE_BASE_SET,   /**< Change the address the MBR starts after a reset. @see ::sd_mbr_command_vector_table_base_set_t*/ |  | ||||||
|   SD_MBR_COMMAND_RESERVED, |  | ||||||
|   SD_MBR_COMMAND_IRQ_FORWARD_ADDRESS_SET, /**< Start forwarding all interrupts to this address. @see ::sd_mbr_command_irq_forward_address_set_t*/ |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
| /** @addtogroup NRF_MBR_TYPES Types |  | ||||||
|  * @{ */ |  | ||||||
|  |  | ||||||
| /**@brief This command copies part of a new SoftDevice |  | ||||||
|  * |  | ||||||
|  * The destination area is erased before copying. |  | ||||||
|  * If dst is in the middle of a flash page, that whole flash page will be erased. |  | ||||||
|  * If (dst+len) is in the middle of a flash page, that whole flash page will be erased. |  | ||||||
|  * |  | ||||||
|  * The user of this function is responsible for setting the BPROT registers. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS indicates that the contents of the memory blocks where copied correctly. |  | ||||||
|  * @retval ::NRF_ERROR_INTERNAL indicates that the contents of the memory blocks where not verified correctly after copying. |  | ||||||
|  */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint32_t *src;  /**< Pointer to the source of data to be copied.*/ |  | ||||||
|   uint32_t *dst;  /**< Pointer to the destination where the content is to be copied.*/ |  | ||||||
|   uint32_t len;   /**< Number of 32 bit words to copy. Must be a multiple of @ref MBR_PAGE_SIZE_IN_WORDS words.*/ |  | ||||||
| } sd_mbr_command_copy_sd_t; |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /**@brief This command works like memcmp, but takes the length in words. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS indicates that the contents of both memory blocks are equal. |  | ||||||
|  * @retval ::NRF_ERROR_NULL indicates that the contents of the memory blocks are not equal. |  | ||||||
|  */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint32_t *ptr1; /**< Pointer to block of memory. */ |  | ||||||
|   uint32_t *ptr2; /**< Pointer to block of memory. */ |  | ||||||
|   uint32_t len;   /**< Number of 32 bit words to compare.*/ |  | ||||||
| } sd_mbr_command_compare_t; |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /**@brief This command copies a new BootLoader. |  | ||||||
|  * |  | ||||||
|  * With this command, destination of BootLoader is always the address written in |  | ||||||
|  * NRF_UICR->BOOTADDR. |  | ||||||
|  * |  | ||||||
|  * Destination is erased by this function. |  | ||||||
|  * If (destination+bl_len) is in the middle of a flash page, that whole flash page will be erased. |  | ||||||
|  * |  | ||||||
|  * This function will use PROTENSET to protect the flash that is not intended to be written. |  | ||||||
|  * |  | ||||||
|  * On success, this function will not return. It will start the new BootLoader from reset-vector as normal. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_ERROR_INTERNAL indicates an internal error that should not happen. |  | ||||||
|  * @retval ::NRF_ERROR_FORBIDDEN if NRF_UICR->BOOTADDR is not set. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_LENGTH if parameters attempts to read or write outside flash area. |  | ||||||
|  * @retval ::NRF_ERROR_NO_MEM if no parameter page is provided (see SoftDevice Specification for more info) |  | ||||||
|  */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint32_t *bl_src;  /**< Pointer to the source of the Bootloader to be be copied.*/ |  | ||||||
|   uint32_t bl_len;   /**< Number of 32 bit words to copy for BootLoader. */ |  | ||||||
| } sd_mbr_command_copy_bl_t; |  | ||||||
|  |  | ||||||
| /**@brief Change the address the MBR starts after a reset |  | ||||||
|  * |  | ||||||
|  * Once this function has been called, this address is where the MBR will start to forward |  | ||||||
|  * interrupts to after a reset. |  | ||||||
|  * |  | ||||||
|  * To restore default forwarding this function should be called with @ref address set to 0. The |  | ||||||
|  * MBR will then start forwarding interrupts to the address in NFR_UICR->BOOTADDR or to the |  | ||||||
|  * SoftDevice if the BOOTADDR is not set. |  | ||||||
|  * |  | ||||||
|  * On success, this function will not return. It will reset the device. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_ERROR_INTERNAL indicates an internal error that should not happen. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_ADDR if parameter address is outside of the flash size. |  | ||||||
|  * @retval ::NRF_ERROR_NO_MEM if no parameter page is provided (see SoftDevice Specification for more info) |  | ||||||
|  */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint32_t address; /**< The base address of the interrupt vector table for forwarded interrupts.*/ |  | ||||||
| } sd_mbr_command_vector_table_base_set_t; |  | ||||||
|  |  | ||||||
| /**@brief Sets the base address of the interrupt vector table for interrupts forwarded from the MBR |  | ||||||
|  * |  | ||||||
|  * Unlike sd_mbr_command_vector_table_base_set_t, this function does not reset, and it does not |  | ||||||
|  * change where the MBR starts after reset. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS |  | ||||||
|  */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint32_t address; /**< The base address of the interrupt vector table for forwarded interrupts.*/ |  | ||||||
| } sd_mbr_command_irq_forward_address_set_t; |  | ||||||
|  |  | ||||||
| /**@brief Input structure containing data used when calling ::sd_mbr_command |  | ||||||
|  * |  | ||||||
|  * Depending on what command value that is set, the corresponding params value type must also be |  | ||||||
|  * set. See @ref NRF_MBR_COMMANDS for command types and corresponding params value type. If command |  | ||||||
|  * @ref SD_MBR_COMMAND_INIT_SD is set, it is not necessary to set any values under params. |  | ||||||
|  */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint32_t command;  /**< Type of command to be issued. See @ref NRF_MBR_COMMANDS. */ |  | ||||||
|   union |  | ||||||
|   { |  | ||||||
|     sd_mbr_command_copy_sd_t copy_sd;  /**< Parameters for copy SoftDevice.*/ |  | ||||||
|     sd_mbr_command_compare_t compare;  /**< Parameters for verify.*/ |  | ||||||
|     sd_mbr_command_copy_bl_t copy_bl;  /**< Parameters for copy BootLoader. Requires parameter page. */ |  | ||||||
|     sd_mbr_command_vector_table_base_set_t base_set; /**< Parameters for vector table base set. Requires parameter page.*/ |  | ||||||
|     sd_mbr_command_irq_forward_address_set_t irq_forward_address_set; /**< Parameters for irq forward address set*/ |  | ||||||
|   } params; /**< Command parameters. */ |  | ||||||
| } sd_mbr_command_t; |  | ||||||
|  |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
| /** @addtogroup NRF_MBR_FUNCTIONS Functions |  | ||||||
|  * @{ */ |  | ||||||
|  |  | ||||||
| /**@brief Issue Master Boot Record commands |  | ||||||
|  * |  | ||||||
|  * Commands used when updating a SoftDevice and bootloader. |  | ||||||
|  * |  | ||||||
|  * The @ref SD_MBR_COMMAND_COPY_BL and @ref SD_MBR_COMMAND_VECTOR_TABLE_BASE_SET requires |  | ||||||
|  * parameters to be retained by the MBR when resetting the IC. This is done in a separate flash |  | ||||||
|  * page provided by the application. The UICR register UICR.NRFFW[1] must be set to an address |  | ||||||
|  * corresponding to a page in the application flash space. This page will be cleared by the MBR and |  | ||||||
|  * used to store the command before reset. When the UICR.NRFFW[1] field is set the page it refers |  | ||||||
|  * to must not be used by the application. If the UICR.NRFFW[1] is set to 0xFFFFFFFF (the default) |  | ||||||
|  * MBR commands which use flash will be unavailable and return @ref NRF_ERROR_NO_MEM. |  | ||||||
|  * |  | ||||||
|  * @param[in]  param Pointer to a struct describing the command. |  | ||||||
|  * |  | ||||||
|  * @note For return values, see ::sd_mbr_command_copy_sd_t, ::sd_mbr_command_copy_bl_t, |  | ||||||
|  *       ::sd_mbr_command_compare_t, ::sd_mbr_command_vector_table_base_set_t, |  | ||||||
|  *       ::sd_mbr_command_irq_forward_address_set_t |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_ERROR_NO_MEM if UICR.NRFFW[1] is not set (i.e. is 0xFFFFFFFF). |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_PARAM if an invalid command is given. |  | ||||||
| */ |  | ||||||
| SVCALL(SD_MBR_COMMAND, uint32_t, sd_mbr_command(sd_mbr_command_t* param)); |  | ||||||
|  |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
| #ifdef __cplusplus |  | ||||||
| } |  | ||||||
| #endif |  | ||||||
| #endif // NRF_MBR_H__ |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|   @} |  | ||||||
| */ |  | ||||||
| @@ -1,90 +0,0 @@ | |||||||
| /* |  | ||||||
|  * Copyright (c) 2014 - 2017, Nordic Semiconductor ASA |  | ||||||
|  * All rights reserved. |  | ||||||
|  * |  | ||||||
|  * Redistribution and use in source and binary forms, with or without modification, |  | ||||||
|  * are permitted provided that the following conditions are met: |  | ||||||
|  * |  | ||||||
|  * 1. Redistributions of source code must retain the above copyright notice, this |  | ||||||
|  *    list of conditions and the following disclaimer. |  | ||||||
|  * |  | ||||||
|  * 2. Redistributions in binary form, except as embedded into a Nordic |  | ||||||
|  *    Semiconductor ASA integrated circuit in a product or a software update for |  | ||||||
|  *    such product, must reproduce the above copyright notice, this list of |  | ||||||
|  *    conditions and the following disclaimer in the documentation and/or other |  | ||||||
|  *    materials provided with the distribution. |  | ||||||
|  * |  | ||||||
|  * 3. Neither the name of Nordic Semiconductor ASA nor the names of its |  | ||||||
|  *    contributors may be used to endorse or promote products derived from this |  | ||||||
|  *    software without specific prior written permission. |  | ||||||
|  * |  | ||||||
|  * 4. This software, with or without modification, must only be used with a |  | ||||||
|  *    Nordic Semiconductor ASA integrated circuit. |  | ||||||
|  * |  | ||||||
|  * 5. Any software provided in binary form under this license must not be reverse |  | ||||||
|  *    engineered, decompiled, modified and/or disassembled. |  | ||||||
|  * |  | ||||||
|  * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS |  | ||||||
|  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |  | ||||||
|  * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE |  | ||||||
|  * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE |  | ||||||
|  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |  | ||||||
|  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE |  | ||||||
|  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |  | ||||||
|  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |  | ||||||
|  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT |  | ||||||
|  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |  | ||||||
|  */ |  | ||||||
|  |  | ||||||
|  /** |  | ||||||
|   @defgroup nrf_error SoftDevice Global Error Codes |  | ||||||
|   @{ |  | ||||||
|  |  | ||||||
|   @brief Global Error definitions |  | ||||||
| */ |  | ||||||
|  |  | ||||||
| /* Header guard */ |  | ||||||
| #ifndef NRF_ERROR_H__ |  | ||||||
| #define NRF_ERROR_H__ |  | ||||||
|  |  | ||||||
| #ifdef __cplusplus |  | ||||||
| extern "C" { |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| /** @defgroup NRF_ERRORS_BASE Error Codes Base number definitions |  | ||||||
|  * @{ */ |  | ||||||
| #define NRF_ERROR_BASE_NUM      (0x0)       ///< Global error base |  | ||||||
| #define NRF_ERROR_SDM_BASE_NUM  (0x1000)    ///< SDM error base |  | ||||||
| #define NRF_ERROR_SOC_BASE_NUM  (0x2000)    ///< SoC error base |  | ||||||
| #define NRF_ERROR_STK_BASE_NUM  (0x3000)    ///< STK error base |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
| #define NRF_SUCCESS                           (NRF_ERROR_BASE_NUM + 0)  ///< Successful command |  | ||||||
| #define NRF_ERROR_SVC_HANDLER_MISSING         (NRF_ERROR_BASE_NUM + 1)  ///< SVC handler is missing |  | ||||||
| #define NRF_ERROR_SOFTDEVICE_NOT_ENABLED      (NRF_ERROR_BASE_NUM + 2)  ///< SoftDevice has not been enabled |  | ||||||
| #define NRF_ERROR_INTERNAL                    (NRF_ERROR_BASE_NUM + 3)  ///< Internal Error |  | ||||||
| #define NRF_ERROR_NO_MEM                      (NRF_ERROR_BASE_NUM + 4)  ///< No Memory for operation |  | ||||||
| #define NRF_ERROR_NOT_FOUND                   (NRF_ERROR_BASE_NUM + 5)  ///< Not found |  | ||||||
| #define NRF_ERROR_NOT_SUPPORTED               (NRF_ERROR_BASE_NUM + 6)  ///< Not supported |  | ||||||
| #define NRF_ERROR_INVALID_PARAM               (NRF_ERROR_BASE_NUM + 7)  ///< Invalid Parameter |  | ||||||
| #define NRF_ERROR_INVALID_STATE               (NRF_ERROR_BASE_NUM + 8)  ///< Invalid state, operation disallowed in this state |  | ||||||
| #define NRF_ERROR_INVALID_LENGTH              (NRF_ERROR_BASE_NUM + 9)  ///< Invalid Length |  | ||||||
| #define NRF_ERROR_INVALID_FLAGS               (NRF_ERROR_BASE_NUM + 10) ///< Invalid Flags |  | ||||||
| #define NRF_ERROR_INVALID_DATA                (NRF_ERROR_BASE_NUM + 11) ///< Invalid Data |  | ||||||
| #define NRF_ERROR_DATA_SIZE                   (NRF_ERROR_BASE_NUM + 12) ///< Invalid Data size |  | ||||||
| #define NRF_ERROR_TIMEOUT                     (NRF_ERROR_BASE_NUM + 13) ///< Operation timed out |  | ||||||
| #define NRF_ERROR_NULL                        (NRF_ERROR_BASE_NUM + 14) ///< Null Pointer |  | ||||||
| #define NRF_ERROR_FORBIDDEN                   (NRF_ERROR_BASE_NUM + 15) ///< Forbidden Operation |  | ||||||
| #define NRF_ERROR_INVALID_ADDR                (NRF_ERROR_BASE_NUM + 16) ///< Bad Memory Address |  | ||||||
| #define NRF_ERROR_BUSY                        (NRF_ERROR_BASE_NUM + 17) ///< Busy |  | ||||||
| #define NRF_ERROR_CONN_COUNT                  (NRF_ERROR_BASE_NUM + 18) ///< Maximum connection count exceeded. |  | ||||||
| #define NRF_ERROR_RESOURCES                   (NRF_ERROR_BASE_NUM + 19) ///< Not enough resources for operation |  | ||||||
|  |  | ||||||
| #ifdef __cplusplus |  | ||||||
| } |  | ||||||
| #endif |  | ||||||
| #endif // NRF_ERROR_H__ |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|   @} |  | ||||||
| */ |  | ||||||
| @@ -1,70 +0,0 @@ | |||||||
| /* |  | ||||||
|  * Copyright (c) 2012 - 2017, Nordic Semiconductor ASA |  | ||||||
|  * All rights reserved. |  | ||||||
|  * |  | ||||||
|  * Redistribution and use in source and binary forms, with or without modification, |  | ||||||
|  * are permitted provided that the following conditions are met: |  | ||||||
|  * |  | ||||||
|  * 1. Redistributions of source code must retain the above copyright notice, this |  | ||||||
|  *    list of conditions and the following disclaimer. |  | ||||||
|  * |  | ||||||
|  * 2. Redistributions in binary form, except as embedded into a Nordic |  | ||||||
|  *    Semiconductor ASA integrated circuit in a product or a software update for |  | ||||||
|  *    such product, must reproduce the above copyright notice, this list of |  | ||||||
|  *    conditions and the following disclaimer in the documentation and/or other |  | ||||||
|  *    materials provided with the distribution. |  | ||||||
|  * |  | ||||||
|  * 3. Neither the name of Nordic Semiconductor ASA nor the names of its |  | ||||||
|  *    contributors may be used to endorse or promote products derived from this |  | ||||||
|  *    software without specific prior written permission. |  | ||||||
|  * |  | ||||||
|  * 4. This software, with or without modification, must only be used with a |  | ||||||
|  *    Nordic Semiconductor ASA integrated circuit. |  | ||||||
|  * |  | ||||||
|  * 5. Any software provided in binary form under this license must not be reverse |  | ||||||
|  *    engineered, decompiled, modified and/or disassembled. |  | ||||||
|  * |  | ||||||
|  * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS |  | ||||||
|  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |  | ||||||
|  * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE |  | ||||||
|  * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE |  | ||||||
|  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |  | ||||||
|  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE |  | ||||||
|  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |  | ||||||
|  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |  | ||||||
|  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT |  | ||||||
|  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |  | ||||||
|  */ |  | ||||||
|  |  | ||||||
|  /** |  | ||||||
|   @addtogroup nrf_sdm_api |  | ||||||
|   @{ |  | ||||||
|   @defgroup nrf_sdm_error SoftDevice Manager Error Codes |  | ||||||
|   @{ |  | ||||||
|  |  | ||||||
|   @brief Error definitions for the SDM API |  | ||||||
| */ |  | ||||||
|  |  | ||||||
| /* Header guard */ |  | ||||||
| #ifndef NRF_ERROR_SDM_H__ |  | ||||||
| #define NRF_ERROR_SDM_H__ |  | ||||||
|  |  | ||||||
| #include "nrf_error.h" |  | ||||||
|  |  | ||||||
| #ifdef __cplusplus |  | ||||||
| extern "C" { |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| #define NRF_ERROR_SDM_LFCLK_SOURCE_UNKNOWN              (NRF_ERROR_SDM_BASE_NUM + 0)  ///< Unknown LFCLK source. |  | ||||||
| #define NRF_ERROR_SDM_INCORRECT_INTERRUPT_CONFIGURATION (NRF_ERROR_SDM_BASE_NUM + 1)  ///< Incorrect interrupt configuration (can be caused by using illegal priority levels, or having enabled SoftDevice interrupts). |  | ||||||
| #define NRF_ERROR_SDM_INCORRECT_CLENR0                  (NRF_ERROR_SDM_BASE_NUM + 2)  ///< Incorrect CLENR0 (can be caused by erroneous SoftDevice flashing). |  | ||||||
|  |  | ||||||
| #ifdef __cplusplus |  | ||||||
| } |  | ||||||
| #endif |  | ||||||
| #endif // NRF_ERROR_SDM_H__ |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|   @} |  | ||||||
|   @} |  | ||||||
| */ |  | ||||||
| @@ -1,85 +0,0 @@ | |||||||
| /* |  | ||||||
|  * Copyright (c) 2012 - 2017, Nordic Semiconductor ASA |  | ||||||
|  * All rights reserved. |  | ||||||
|  * |  | ||||||
|  * Redistribution and use in source and binary forms, with or without modification, |  | ||||||
|  * are permitted provided that the following conditions are met: |  | ||||||
|  * |  | ||||||
|  * 1. Redistributions of source code must retain the above copyright notice, this |  | ||||||
|  *    list of conditions and the following disclaimer. |  | ||||||
|  * |  | ||||||
|  * 2. Redistributions in binary form, except as embedded into a Nordic |  | ||||||
|  *    Semiconductor ASA integrated circuit in a product or a software update for |  | ||||||
|  *    such product, must reproduce the above copyright notice, this list of |  | ||||||
|  *    conditions and the following disclaimer in the documentation and/or other |  | ||||||
|  *    materials provided with the distribution. |  | ||||||
|  * |  | ||||||
|  * 3. Neither the name of Nordic Semiconductor ASA nor the names of its |  | ||||||
|  *    contributors may be used to endorse or promote products derived from this |  | ||||||
|  *    software without specific prior written permission. |  | ||||||
|  * |  | ||||||
|  * 4. This software, with or without modification, must only be used with a |  | ||||||
|  *    Nordic Semiconductor ASA integrated circuit. |  | ||||||
|  * |  | ||||||
|  * 5. Any software provided in binary form under this license must not be reverse |  | ||||||
|  *    engineered, decompiled, modified and/or disassembled. |  | ||||||
|  * |  | ||||||
|  * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS |  | ||||||
|  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |  | ||||||
|  * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE |  | ||||||
|  * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE |  | ||||||
|  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |  | ||||||
|  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE |  | ||||||
|  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |  | ||||||
|  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |  | ||||||
|  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT |  | ||||||
|  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |  | ||||||
|  */ |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|   @addtogroup nrf_soc_api |  | ||||||
|   @{ |  | ||||||
|   @defgroup nrf_soc_error SoC Library Error Codes |  | ||||||
|   @{ |  | ||||||
|  |  | ||||||
|   @brief Error definitions for the SoC library |  | ||||||
|  |  | ||||||
| */ |  | ||||||
|  |  | ||||||
| /* Header guard */ |  | ||||||
| #ifndef NRF_ERROR_SOC_H__ |  | ||||||
| #define NRF_ERROR_SOC_H__ |  | ||||||
|  |  | ||||||
| #include "nrf_error.h" |  | ||||||
| #ifdef __cplusplus |  | ||||||
| extern "C" { |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| /* Mutex Errors */ |  | ||||||
| #define NRF_ERROR_SOC_MUTEX_ALREADY_TAKEN                 (NRF_ERROR_SOC_BASE_NUM + 0)  ///< Mutex already taken |  | ||||||
|  |  | ||||||
| /* NVIC errors */ |  | ||||||
| #define NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE        (NRF_ERROR_SOC_BASE_NUM + 1)  ///< NVIC interrupt not available |  | ||||||
| #define NRF_ERROR_SOC_NVIC_INTERRUPT_PRIORITY_NOT_ALLOWED (NRF_ERROR_SOC_BASE_NUM + 2)  ///< NVIC interrupt priority not allowed |  | ||||||
| #define NRF_ERROR_SOC_NVIC_SHOULD_NOT_RETURN              (NRF_ERROR_SOC_BASE_NUM + 3)  ///< NVIC should not return |  | ||||||
|  |  | ||||||
| /* Power errors */ |  | ||||||
| #define NRF_ERROR_SOC_POWER_MODE_UNKNOWN                  (NRF_ERROR_SOC_BASE_NUM + 4)  ///< Power mode unknown |  | ||||||
| #define NRF_ERROR_SOC_POWER_POF_THRESHOLD_UNKNOWN         (NRF_ERROR_SOC_BASE_NUM + 5)  ///< Power POF threshold unknown |  | ||||||
| #define NRF_ERROR_SOC_POWER_OFF_SHOULD_NOT_RETURN         (NRF_ERROR_SOC_BASE_NUM + 6)  ///< Power off should not return |  | ||||||
|  |  | ||||||
| /* Rand errors */ |  | ||||||
| #define NRF_ERROR_SOC_RAND_NOT_ENOUGH_VALUES              (NRF_ERROR_SOC_BASE_NUM + 7)  ///< RAND not enough values |  | ||||||
|  |  | ||||||
| /* PPI errors */ |  | ||||||
| #define NRF_ERROR_SOC_PPI_INVALID_CHANNEL                 (NRF_ERROR_SOC_BASE_NUM + 8)  ///< Invalid PPI Channel |  | ||||||
| #define NRF_ERROR_SOC_PPI_INVALID_GROUP                   (NRF_ERROR_SOC_BASE_NUM + 9)  ///< Invalid PPI Group |  | ||||||
|  |  | ||||||
| #ifdef __cplusplus |  | ||||||
| } |  | ||||||
| #endif |  | ||||||
| #endif // NRF_ERROR_SOC_H__ |  | ||||||
| /** |  | ||||||
|   @} |  | ||||||
|   @} |  | ||||||
| */ |  | ||||||
| @@ -1,486 +0,0 @@ | |||||||
| /* |  | ||||||
|  * Copyright (c) 2016 - 2017, Nordic Semiconductor ASA |  | ||||||
|  * All rights reserved. |  | ||||||
|  * |  | ||||||
|  * Redistribution and use in source and binary forms, with or without modification, |  | ||||||
|  * are permitted provided that the following conditions are met: |  | ||||||
|  * |  | ||||||
|  * 1. Redistributions of source code must retain the above copyright notice, this |  | ||||||
|  *    list of conditions and the following disclaimer. |  | ||||||
|  * |  | ||||||
|  * 2. Redistributions in binary form, except as embedded into a Nordic |  | ||||||
|  *    Semiconductor ASA integrated circuit in a product or a software update for |  | ||||||
|  *    such product, must reproduce the above copyright notice, this list of |  | ||||||
|  *    conditions and the following disclaimer in the documentation and/or other |  | ||||||
|  *    materials provided with the distribution. |  | ||||||
|  * |  | ||||||
|  * 3. Neither the name of Nordic Semiconductor ASA nor the names of its |  | ||||||
|  *    contributors may be used to endorse or promote products derived from this |  | ||||||
|  *    software without specific prior written permission. |  | ||||||
|  * |  | ||||||
|  * 4. This software, with or without modification, must only be used with a |  | ||||||
|  *    Nordic Semiconductor ASA integrated circuit. |  | ||||||
|  * |  | ||||||
|  * 5. Any software provided in binary form under this license must not be reverse |  | ||||||
|  *    engineered, decompiled, modified and/or disassembled. |  | ||||||
|  * |  | ||||||
|  * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS |  | ||||||
|  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |  | ||||||
|  * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE |  | ||||||
|  * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE |  | ||||||
|  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |  | ||||||
|  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE |  | ||||||
|  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |  | ||||||
|  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |  | ||||||
|  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT |  | ||||||
|  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |  | ||||||
|  */ |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|  * @defgroup nrf_nvic_api SoftDevice NVIC API |  | ||||||
|  * @{ |  | ||||||
|  * |  | ||||||
|  * @note In order to use this module, the following code has to be added to a .c file: |  | ||||||
|  *     \code |  | ||||||
|  *     nrf_nvic_state_t nrf_nvic_state = {0}; |  | ||||||
|  *     \endcode |  | ||||||
|  * |  | ||||||
|  * @note Definitions and declarations starting with __ (double underscore) in this header file are |  | ||||||
|  * not intended for direct use by the application. |  | ||||||
|  * |  | ||||||
|  * @brief APIs for the accessing NVIC when using a SoftDevice. |  | ||||||
|  * |  | ||||||
|  */ |  | ||||||
|  |  | ||||||
| #ifndef NRF_NVIC_H__ |  | ||||||
| #define NRF_NVIC_H__ |  | ||||||
|  |  | ||||||
| #include <stdint.h> |  | ||||||
| #include "nrf.h" |  | ||||||
| #include "nrf_svc.h" |  | ||||||
| #include "nrf_error.h" |  | ||||||
| #include "nrf_error_soc.h" |  | ||||||
|  |  | ||||||
| #ifdef __cplusplus |  | ||||||
| extern "C" { |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| /**@addtogroup NRF_NVIC_DEFINES Defines |  | ||||||
|  * @{ */ |  | ||||||
|  |  | ||||||
| /**@defgroup NRF_NVIC_ISER_DEFINES SoftDevice NVIC internal definitions |  | ||||||
|  * @{ */ |  | ||||||
|  |  | ||||||
| #define __NRF_NVIC_NVMC_IRQn (30) /**< The peripheral ID of the NVMC. IRQ numbers are used to identify peripherals, but the NVMC doesn't have an IRQ number in the MDK. */ |  | ||||||
|  |  | ||||||
| #define __NRF_NVIC_ISER_COUNT (2) /**< The number of ISER/ICER registers in the NVIC that are used. */ |  | ||||||
|  |  | ||||||
| /**@brief Interrupts used by the SoftDevice, with IRQn in the range 0-31. */ |  | ||||||
| #define __NRF_NVIC_SD_IRQS_0 ((uint32_t)( \ |  | ||||||
|       (1U << POWER_CLOCK_IRQn) \ |  | ||||||
|     | (1U << RADIO_IRQn) \ |  | ||||||
|     | (1U << RTC0_IRQn) \ |  | ||||||
|     | (1U << TIMER0_IRQn) \ |  | ||||||
|     | (1U << RNG_IRQn) \ |  | ||||||
|     | (1U << ECB_IRQn) \ |  | ||||||
|     | (1U << CCM_AAR_IRQn) \ |  | ||||||
|     | (1U << TEMP_IRQn) \ |  | ||||||
|     | (1U << __NRF_NVIC_NVMC_IRQn) \ |  | ||||||
|     | (1U << (uint32_t)SWI5_IRQn) \ |  | ||||||
|   )) |  | ||||||
|  |  | ||||||
| /**@brief Interrupts used by the SoftDevice, with IRQn in the range 32-63. */ |  | ||||||
| #define __NRF_NVIC_SD_IRQS_1 ((uint32_t)0) |  | ||||||
|  |  | ||||||
| /**@brief Interrupts available for to application, with IRQn in the range 0-31. */ |  | ||||||
| #define __NRF_NVIC_APP_IRQS_0 (~__NRF_NVIC_SD_IRQS_0) |  | ||||||
|  |  | ||||||
| /**@brief Interrupts available for to application, with IRQn in the range 32-63. */ |  | ||||||
| #define __NRF_NVIC_APP_IRQS_1 (~__NRF_NVIC_SD_IRQS_1) |  | ||||||
|  |  | ||||||
| /**@} */ |  | ||||||
|  |  | ||||||
| /**@} */ |  | ||||||
|  |  | ||||||
| /**@addtogroup NRF_NVIC_VARIABLES Variables |  | ||||||
|  * @{ */ |  | ||||||
|  |  | ||||||
| /**@brief Type representing the state struct for the SoftDevice NVIC module. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint32_t volatile __irq_masks[__NRF_NVIC_ISER_COUNT]; /**< IRQs enabled by the application in the NVIC. */ |  | ||||||
|   uint32_t volatile __cr_flag;                          /**< Non-zero if already in a critical region */ |  | ||||||
| } nrf_nvic_state_t; |  | ||||||
|  |  | ||||||
| /**@brief Variable keeping the state for the SoftDevice NVIC module. This must be declared in an |  | ||||||
|  * application source file. */ |  | ||||||
| extern nrf_nvic_state_t nrf_nvic_state; |  | ||||||
|  |  | ||||||
| /**@} */ |  | ||||||
|  |  | ||||||
| /**@addtogroup NRF_NVIC_INTERNAL_FUNCTIONS SoftDevice NVIC internal functions |  | ||||||
|  * @{ */ |  | ||||||
|  |  | ||||||
| /**@brief Disables IRQ interrupts globally, including the SoftDevice's interrupts. |  | ||||||
|  * |  | ||||||
|  * @retval  The value of PRIMASK prior to disabling the interrupts. |  | ||||||
|  */ |  | ||||||
| __STATIC_INLINE int __sd_nvic_irq_disable(void); |  | ||||||
|  |  | ||||||
| /**@brief Enables IRQ interrupts globally, including the SoftDevice's interrupts. |  | ||||||
|  */ |  | ||||||
| __STATIC_INLINE void __sd_nvic_irq_enable(void); |  | ||||||
|  |  | ||||||
| /**@brief Checks if IRQn is available to application |  | ||||||
|  * @param[in]  IRQn  IRQ to check |  | ||||||
|  * |  | ||||||
|  * @retval  1 (true) if the IRQ to check is available to the application |  | ||||||
|  */ |  | ||||||
| __STATIC_INLINE uint32_t __sd_nvic_app_accessible_irq(IRQn_Type IRQn); |  | ||||||
|  |  | ||||||
| /**@brief Checks if priority is available to application |  | ||||||
|  * @param[in]  priority  priority to check |  | ||||||
|  * |  | ||||||
|  * @retval  1 (true) if the priority to check is available to the application |  | ||||||
|  */ |  | ||||||
| __STATIC_INLINE uint32_t __sd_nvic_is_app_accessible_priority(uint32_t priority); |  | ||||||
|  |  | ||||||
| /**@} */ |  | ||||||
|  |  | ||||||
| /**@addtogroup NRF_NVIC_FUNCTIONS SoftDevice NVIC public functions |  | ||||||
|  * @{ */ |  | ||||||
|  |  | ||||||
| /**@brief Enable External Interrupt. |  | ||||||
|  * @note Corresponds to NVIC_EnableIRQ in CMSIS. |  | ||||||
|  * |  | ||||||
|  * @pre IRQn is valid and not reserved by the stack. |  | ||||||
|  * |  | ||||||
|  * @param[in] IRQn See the NVIC_EnableIRQ documentation in CMSIS. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS The interrupt was enabled. |  | ||||||
|  * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE The interrupt is not available for the application. |  | ||||||
|  * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_PRIORITY_NOT_ALLOWED The interrupt has a priority not available for the application. |  | ||||||
|  */ |  | ||||||
| __STATIC_INLINE uint32_t sd_nvic_EnableIRQ(IRQn_Type IRQn); |  | ||||||
|  |  | ||||||
| /**@brief  Disable External Interrupt. |  | ||||||
|  * @note Corresponds to NVIC_DisableIRQ in CMSIS. |  | ||||||
|  * |  | ||||||
|  * @pre IRQn is valid and not reserved by the stack. |  | ||||||
|  * |  | ||||||
|  * @param[in] IRQn See the NVIC_DisableIRQ documentation in CMSIS. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS The interrupt was disabled. |  | ||||||
|  * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE The interrupt is not available for the application. |  | ||||||
|  */ |  | ||||||
| __STATIC_INLINE uint32_t sd_nvic_DisableIRQ(IRQn_Type IRQn); |  | ||||||
|  |  | ||||||
| /**@brief  Get Pending Interrupt. |  | ||||||
|  * @note Corresponds to NVIC_GetPendingIRQ in CMSIS. |  | ||||||
|  * |  | ||||||
|  * @pre IRQn is valid and not reserved by the stack. |  | ||||||
|  * |  | ||||||
|  * @param[in]   IRQn          See the NVIC_GetPendingIRQ documentation in CMSIS. |  | ||||||
|  * @param[out]  p_pending_irq Return value from NVIC_GetPendingIRQ. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS The interrupt is available for the application. |  | ||||||
|  * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE IRQn is not available for the application. |  | ||||||
|  */ |  | ||||||
| __STATIC_INLINE uint32_t sd_nvic_GetPendingIRQ(IRQn_Type IRQn, uint32_t * p_pending_irq); |  | ||||||
|  |  | ||||||
| /**@brief  Set Pending Interrupt. |  | ||||||
|  * @note Corresponds to NVIC_SetPendingIRQ in CMSIS. |  | ||||||
|  * |  | ||||||
|  * @pre IRQn is valid and not reserved by the stack. |  | ||||||
|  * |  | ||||||
|  * @param[in] IRQn See the NVIC_SetPendingIRQ documentation in CMSIS. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS The interrupt is set pending. |  | ||||||
|  * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE IRQn is not available for the application. |  | ||||||
|  */ |  | ||||||
| __STATIC_INLINE uint32_t sd_nvic_SetPendingIRQ(IRQn_Type IRQn); |  | ||||||
|  |  | ||||||
| /**@brief  Clear Pending Interrupt. |  | ||||||
|  * @note Corresponds to NVIC_ClearPendingIRQ in CMSIS. |  | ||||||
|  * |  | ||||||
|  * @pre IRQn is valid and not reserved by the stack. |  | ||||||
|  * |  | ||||||
|  * @param[in] IRQn See the NVIC_ClearPendingIRQ documentation in CMSIS. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS The interrupt pending flag is cleared. |  | ||||||
|  * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE IRQn is not available for the application. |  | ||||||
|  */ |  | ||||||
| __STATIC_INLINE uint32_t sd_nvic_ClearPendingIRQ(IRQn_Type IRQn); |  | ||||||
|  |  | ||||||
| /**@brief Set Interrupt Priority. |  | ||||||
|  * @note Corresponds to NVIC_SetPriority in CMSIS. |  | ||||||
|  * |  | ||||||
|  * @pre IRQn is valid and not reserved by the stack. |  | ||||||
|  * @pre Priority is valid and not reserved by the stack. |  | ||||||
|  * |  | ||||||
|  * @param[in] IRQn      See the NVIC_SetPriority documentation in CMSIS. |  | ||||||
|  * @param[in] priority  A valid IRQ priority for use by the application. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS The interrupt and priority level is available for the application. |  | ||||||
|  * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE IRQn is not available for the application. |  | ||||||
|  * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_PRIORITY_NOT_ALLOWED The interrupt priority is not available for the application. |  | ||||||
|  */ |  | ||||||
| __STATIC_INLINE uint32_t sd_nvic_SetPriority(IRQn_Type IRQn, uint32_t priority); |  | ||||||
|  |  | ||||||
| /**@brief Get Interrupt Priority. |  | ||||||
|  * @note Corresponds to NVIC_GetPriority in CMSIS. |  | ||||||
|  * |  | ||||||
|  * @pre IRQn is valid and not reserved by the stack. |  | ||||||
|  * |  | ||||||
|  * @param[in]  IRQn         See the NVIC_GetPriority documentation in CMSIS. |  | ||||||
|  * @param[out] p_priority   Return value from NVIC_GetPriority. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS The interrupt priority is returned in p_priority. |  | ||||||
|  * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE - IRQn is not available for the application. |  | ||||||
|  */ |  | ||||||
| __STATIC_INLINE uint32_t sd_nvic_GetPriority(IRQn_Type IRQn, uint32_t * p_priority); |  | ||||||
|  |  | ||||||
| /**@brief System Reset. |  | ||||||
|  * @note Corresponds to NVIC_SystemReset in CMSIS. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_ERROR_SOC_NVIC_SHOULD_NOT_RETURN |  | ||||||
|  */ |  | ||||||
| __STATIC_INLINE uint32_t sd_nvic_SystemReset(void); |  | ||||||
|  |  | ||||||
| /**@brief Enter critical region. |  | ||||||
|  * |  | ||||||
|  * @post Application interrupts will be disabled. |  | ||||||
|  * @note sd_nvic_critical_region_enter() and ::sd_nvic_critical_region_exit() must be called in matching pairs inside each |  | ||||||
|  * execution context |  | ||||||
|  * @sa sd_nvic_critical_region_exit |  | ||||||
|  * |  | ||||||
|  * @param[out] p_is_nested_critical_region If 1, the application is now in a nested critical region. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS |  | ||||||
|  */ |  | ||||||
| __STATIC_INLINE uint32_t sd_nvic_critical_region_enter(uint8_t * p_is_nested_critical_region); |  | ||||||
|  |  | ||||||
| /**@brief Exit critical region. |  | ||||||
|  * |  | ||||||
|  * @pre Application has entered a critical region using ::sd_nvic_critical_region_enter. |  | ||||||
|  * @post If not in a nested critical region, the application interrupts will restored to the state before ::sd_nvic_critical_region_enter was called. |  | ||||||
|  * |  | ||||||
|  * @param[in] is_nested_critical_region If this is set to 1, the critical region won't be exited. @sa sd_nvic_critical_region_enter. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS |  | ||||||
|  */ |  | ||||||
| __STATIC_INLINE uint32_t sd_nvic_critical_region_exit(uint8_t is_nested_critical_region); |  | ||||||
|  |  | ||||||
| /**@} */ |  | ||||||
|  |  | ||||||
| #ifndef SUPPRESS_INLINE_IMPLEMENTATION |  | ||||||
|  |  | ||||||
| __STATIC_INLINE int __sd_nvic_irq_disable(void) |  | ||||||
| { |  | ||||||
|   int pm = __get_PRIMASK(); |  | ||||||
|   __disable_irq(); |  | ||||||
|   return pm; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| __STATIC_INLINE void __sd_nvic_irq_enable(void) |  | ||||||
| { |  | ||||||
|   __enable_irq(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| __STATIC_INLINE uint32_t __sd_nvic_app_accessible_irq(IRQn_Type IRQn) |  | ||||||
| { |  | ||||||
|   if (IRQn < 32) |  | ||||||
|   { |  | ||||||
|     return ((1UL<<IRQn) & __NRF_NVIC_APP_IRQS_0) != 0; |  | ||||||
|   } |  | ||||||
|   else if (IRQn < 64) |  | ||||||
|   { |  | ||||||
|     return ((1UL<<(IRQn-32)) & __NRF_NVIC_APP_IRQS_1) != 0; |  | ||||||
|   } |  | ||||||
|   else |  | ||||||
|   { |  | ||||||
|     return 1; |  | ||||||
|   } |  | ||||||
| } |  | ||||||
|  |  | ||||||
| __STATIC_INLINE uint32_t __sd_nvic_is_app_accessible_priority(uint32_t priority) |  | ||||||
| { |  | ||||||
|   if(priority >= (1 << __NVIC_PRIO_BITS)) |  | ||||||
|   { |  | ||||||
|     return 0; |  | ||||||
|   } |  | ||||||
|   if(   priority == 0 |  | ||||||
|      || priority == 1 |  | ||||||
|      || priority == 4 |  | ||||||
|      ) |  | ||||||
|   { |  | ||||||
|     return 0; |  | ||||||
|   } |  | ||||||
|   return 1; |  | ||||||
| } |  | ||||||
|  |  | ||||||
|  |  | ||||||
| __STATIC_INLINE uint32_t sd_nvic_EnableIRQ(IRQn_Type IRQn) |  | ||||||
| { |  | ||||||
|   if (!__sd_nvic_app_accessible_irq(IRQn)) |  | ||||||
|   { |  | ||||||
|     return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE; |  | ||||||
|   } |  | ||||||
|   if (!__sd_nvic_is_app_accessible_priority(NVIC_GetPriority(IRQn))) |  | ||||||
|   { |  | ||||||
|     return NRF_ERROR_SOC_NVIC_INTERRUPT_PRIORITY_NOT_ALLOWED; |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   if (nrf_nvic_state.__cr_flag) |  | ||||||
|   { |  | ||||||
|     nrf_nvic_state.__irq_masks[(uint32_t)((int32_t)IRQn) >> 5] |= (uint32_t)(1 << ((uint32_t)((int32_t)IRQn) & (uint32_t)0x1F)); |  | ||||||
|   } |  | ||||||
|   else |  | ||||||
|   { |  | ||||||
|     NVIC_EnableIRQ(IRQn); |  | ||||||
|   } |  | ||||||
|   return NRF_SUCCESS; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| __STATIC_INLINE uint32_t sd_nvic_DisableIRQ(IRQn_Type IRQn) |  | ||||||
| { |  | ||||||
|   if (!__sd_nvic_app_accessible_irq(IRQn)) |  | ||||||
|   { |  | ||||||
|     return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE; |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   if (nrf_nvic_state.__cr_flag) |  | ||||||
|   { |  | ||||||
|     nrf_nvic_state.__irq_masks[(uint32_t)((int32_t)IRQn) >> 5] &= ~(1UL << ((uint32_t)(IRQn) & 0x1F)); |  | ||||||
|   } |  | ||||||
|   else |  | ||||||
|   { |  | ||||||
|     NVIC_DisableIRQ(IRQn); |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   return NRF_SUCCESS; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| __STATIC_INLINE uint32_t sd_nvic_GetPendingIRQ(IRQn_Type IRQn, uint32_t * p_pending_irq) |  | ||||||
| { |  | ||||||
|   if (__sd_nvic_app_accessible_irq(IRQn)) |  | ||||||
|   { |  | ||||||
|     *p_pending_irq = NVIC_GetPendingIRQ(IRQn); |  | ||||||
|     return NRF_SUCCESS; |  | ||||||
|   } |  | ||||||
|   else |  | ||||||
|   { |  | ||||||
|     return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE; |  | ||||||
|   } |  | ||||||
| } |  | ||||||
|  |  | ||||||
| __STATIC_INLINE uint32_t sd_nvic_SetPendingIRQ(IRQn_Type IRQn) |  | ||||||
| { |  | ||||||
|   if (__sd_nvic_app_accessible_irq(IRQn)) |  | ||||||
|   { |  | ||||||
|     NVIC_SetPendingIRQ(IRQn); |  | ||||||
|     return NRF_SUCCESS; |  | ||||||
|   } |  | ||||||
|   else |  | ||||||
|   { |  | ||||||
|     return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE; |  | ||||||
|   } |  | ||||||
| } |  | ||||||
|  |  | ||||||
| __STATIC_INLINE uint32_t sd_nvic_ClearPendingIRQ(IRQn_Type IRQn) |  | ||||||
| { |  | ||||||
|   if (__sd_nvic_app_accessible_irq(IRQn)) |  | ||||||
|   { |  | ||||||
|     NVIC_ClearPendingIRQ(IRQn); |  | ||||||
|     return NRF_SUCCESS; |  | ||||||
|   } |  | ||||||
|   else |  | ||||||
|   { |  | ||||||
|     return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE; |  | ||||||
|   } |  | ||||||
| } |  | ||||||
|  |  | ||||||
| __STATIC_INLINE uint32_t sd_nvic_SetPriority(IRQn_Type IRQn, uint32_t priority) |  | ||||||
| { |  | ||||||
|   if (!__sd_nvic_app_accessible_irq(IRQn)) |  | ||||||
|   { |  | ||||||
|     return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE; |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   if (!__sd_nvic_is_app_accessible_priority(priority)) |  | ||||||
|   { |  | ||||||
|     return NRF_ERROR_SOC_NVIC_INTERRUPT_PRIORITY_NOT_ALLOWED; |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   NVIC_SetPriority(IRQn, (uint32_t)priority); |  | ||||||
|   return NRF_SUCCESS; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| __STATIC_INLINE uint32_t sd_nvic_GetPriority(IRQn_Type IRQn, uint32_t * p_priority) |  | ||||||
| { |  | ||||||
|   if (__sd_nvic_app_accessible_irq(IRQn)) |  | ||||||
|   { |  | ||||||
|     *p_priority = (NVIC_GetPriority(IRQn) & 0xFF); |  | ||||||
|     return NRF_SUCCESS; |  | ||||||
|   } |  | ||||||
|   else |  | ||||||
|   { |  | ||||||
|     return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE; |  | ||||||
|   } |  | ||||||
| } |  | ||||||
|  |  | ||||||
| __STATIC_INLINE uint32_t sd_nvic_SystemReset(void) |  | ||||||
| { |  | ||||||
|   NVIC_SystemReset(); |  | ||||||
|   return NRF_ERROR_SOC_NVIC_SHOULD_NOT_RETURN; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| __STATIC_INLINE uint32_t sd_nvic_critical_region_enter(uint8_t * p_is_nested_critical_region) |  | ||||||
| { |  | ||||||
|   int was_masked = __sd_nvic_irq_disable(); |  | ||||||
|   if (!nrf_nvic_state.__cr_flag) |  | ||||||
|   { |  | ||||||
|     nrf_nvic_state.__cr_flag = 1; |  | ||||||
|     nrf_nvic_state.__irq_masks[0] = ( NVIC->ICER[0] & __NRF_NVIC_APP_IRQS_0 ); |  | ||||||
|     NVIC->ICER[0] = __NRF_NVIC_APP_IRQS_0; |  | ||||||
|     nrf_nvic_state.__irq_masks[1] = ( NVIC->ICER[1] & __NRF_NVIC_APP_IRQS_1 ); |  | ||||||
|     NVIC->ICER[1] = __NRF_NVIC_APP_IRQS_1; |  | ||||||
|     *p_is_nested_critical_region = 0; |  | ||||||
|   } |  | ||||||
|   else |  | ||||||
|   { |  | ||||||
|     *p_is_nested_critical_region = 1; |  | ||||||
|   } |  | ||||||
|   if (!was_masked) |  | ||||||
|   { |  | ||||||
|     __sd_nvic_irq_enable(); |  | ||||||
|   } |  | ||||||
|   return NRF_SUCCESS; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| __STATIC_INLINE uint32_t sd_nvic_critical_region_exit(uint8_t is_nested_critical_region) |  | ||||||
| { |  | ||||||
|   if (nrf_nvic_state.__cr_flag && (is_nested_critical_region == 0)) |  | ||||||
|   { |  | ||||||
|     int was_masked = __sd_nvic_irq_disable(); |  | ||||||
|     NVIC->ISER[0] = nrf_nvic_state.__irq_masks[0]; |  | ||||||
|     NVIC->ISER[1] = nrf_nvic_state.__irq_masks[1]; |  | ||||||
|     nrf_nvic_state.__cr_flag = 0; |  | ||||||
|     if (!was_masked) |  | ||||||
|     { |  | ||||||
|       __sd_nvic_irq_enable(); |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   return NRF_SUCCESS; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| #endif /* SUPPRESS_INLINE_IMPLEMENTATION */ |  | ||||||
|  |  | ||||||
| #ifdef __cplusplus |  | ||||||
| } |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| #endif // NRF_NVIC_H__ |  | ||||||
|  |  | ||||||
| /**@} */ |  | ||||||
| @@ -1,358 +0,0 @@ | |||||||
| /* |  | ||||||
|  * Copyright (c) 2015 - 2017, Nordic Semiconductor ASA |  | ||||||
|  * All rights reserved. |  | ||||||
|  * |  | ||||||
|  * Redistribution and use in source and binary forms, with or without modification, |  | ||||||
|  * are permitted provided that the following conditions are met: |  | ||||||
|  * |  | ||||||
|  * 1. Redistributions of source code must retain the above copyright notice, this |  | ||||||
|  *    list of conditions and the following disclaimer. |  | ||||||
|  * |  | ||||||
|  * 2. Redistributions in binary form, except as embedded into a Nordic |  | ||||||
|  *    Semiconductor ASA integrated circuit in a product or a software update for |  | ||||||
|  *    such product, must reproduce the above copyright notice, this list of |  | ||||||
|  *    conditions and the following disclaimer in the documentation and/or other |  | ||||||
|  *    materials provided with the distribution. |  | ||||||
|  * |  | ||||||
|  * 3. Neither the name of Nordic Semiconductor ASA nor the names of its |  | ||||||
|  *    contributors may be used to endorse or promote products derived from this |  | ||||||
|  *    software without specific prior written permission. |  | ||||||
|  * |  | ||||||
|  * 4. This software, with or without modification, must only be used with a |  | ||||||
|  *    Nordic Semiconductor ASA integrated circuit. |  | ||||||
|  * |  | ||||||
|  * 5. Any software provided in binary form under this license must not be reverse |  | ||||||
|  *    engineered, decompiled, modified and/or disassembled. |  | ||||||
|  * |  | ||||||
|  * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS |  | ||||||
|  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |  | ||||||
|  * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE |  | ||||||
|  * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE |  | ||||||
|  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |  | ||||||
|  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE |  | ||||||
|  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |  | ||||||
|  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |  | ||||||
|  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT |  | ||||||
|  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |  | ||||||
|  */ |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|   @defgroup nrf_sdm_api SoftDevice Manager API |  | ||||||
|   @{ |  | ||||||
|  |  | ||||||
|   @brief APIs for SoftDevice management. |  | ||||||
|  |  | ||||||
| */ |  | ||||||
|  |  | ||||||
| #ifndef NRF_SDM_H__ |  | ||||||
| #define NRF_SDM_H__ |  | ||||||
|  |  | ||||||
| #include <stdint.h> |  | ||||||
| #include "nrf.h" |  | ||||||
| #include "nrf_svc.h" |  | ||||||
| #include "nrf_error.h" |  | ||||||
| #include "nrf_error_sdm.h" |  | ||||||
| #include "nrf_soc.h" |  | ||||||
|  |  | ||||||
| #ifdef __cplusplus |  | ||||||
| extern "C" { |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| /** @addtogroup NRF_SDM_DEFINES Defines |  | ||||||
|  * @{ */ |  | ||||||
| #ifdef NRFSOC_DOXYGEN |  | ||||||
| /// Declared in nrf_mbr.h |  | ||||||
| #define MBR_SIZE 0 |  | ||||||
| #warning test |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| /** @brief The major version for the SoftDevice binary distributed with this header file. */ |  | ||||||
| #define SD_MAJOR_VERSION  (6) |  | ||||||
|  |  | ||||||
| /** @brief The minor version for the SoftDevice binary distributed with this header file. */ |  | ||||||
| #define SD_MINOR_VERSION  (0) |  | ||||||
|  |  | ||||||
| /** @brief The bugfix version for the SoftDevice binary distributed with this header file. */ |  | ||||||
| #define SD_BUGFIX_VERSION (0) |  | ||||||
|  |  | ||||||
| /** @brief The full version number for the SoftDevice binary this header file was distributed |  | ||||||
|  *         with, as a decimal number in the form Mmmmbbb, where: |  | ||||||
|  *           - M is major version (one or more digits) |  | ||||||
|  *           - mmm is minor version (three digits) |  | ||||||
|  *           - bbb is bugfix version (three digits). */ |  | ||||||
| #define SD_VERSION (SD_MAJOR_VERSION * 1000000 + SD_MINOR_VERSION * 1000 + SD_BUGFIX_VERSION) |  | ||||||
|  |  | ||||||
| /** @brief SoftDevice Manager SVC Base number. */ |  | ||||||
| #define SDM_SVC_BASE 0x10 |  | ||||||
|  |  | ||||||
| /** @brief SoftDevice unique string size in bytes. */ |  | ||||||
| #define SD_UNIQUE_STR_SIZE 20 |  | ||||||
|  |  | ||||||
| /** @brief Invalid info field. Returned when an info field does not exist. */ |  | ||||||
| #define SDM_INFO_FIELD_INVALID (0) |  | ||||||
|  |  | ||||||
| /** @brief Defines the SoftDevice Information Structure location (address) as an offset from |  | ||||||
| the start of the SoftDevice (without MBR)*/ |  | ||||||
| #define SOFTDEVICE_INFO_STRUCT_OFFSET (0x2000) |  | ||||||
|  |  | ||||||
| /** @brief Defines the absolute SoftDevice Information Structure location (address) when the |  | ||||||
|  *         SoftDevice is installed just above the MBR (the usual case). */ |  | ||||||
| #define SOFTDEVICE_INFO_STRUCT_ADDRESS (SOFTDEVICE_INFO_STRUCT_OFFSET + MBR_SIZE) |  | ||||||
|  |  | ||||||
| /** @brief Defines the offset for the SoftDevice Information Structure size value relative to the |  | ||||||
|  *         SoftDevice base address. The size value is of type uint8_t. */ |  | ||||||
| #define SD_INFO_STRUCT_SIZE_OFFSET (SOFTDEVICE_INFO_STRUCT_OFFSET) |  | ||||||
|  |  | ||||||
| /** @brief Defines the offset for the SoftDevice size value relative to the SoftDevice base address. |  | ||||||
|  *         The size value is of type uint32_t. */ |  | ||||||
| #define SD_SIZE_OFFSET (SOFTDEVICE_INFO_STRUCT_OFFSET + 0x08) |  | ||||||
|  |  | ||||||
| /** @brief Defines the offset for FWID value relative to the SoftDevice base address. The FWID value |  | ||||||
|  *         is of type uint16_t.  */ |  | ||||||
| #define SD_FWID_OFFSET (SOFTDEVICE_INFO_STRUCT_OFFSET + 0x0C) |  | ||||||
|  |  | ||||||
| /** @brief Defines the offset for the SoftDevice ID relative to the SoftDevice base address. The ID |  | ||||||
|  *         is of type uint32_t. */ |  | ||||||
| #define SD_ID_OFFSET (SOFTDEVICE_INFO_STRUCT_OFFSET + 0x10) |  | ||||||
|  |  | ||||||
| /** @brief Defines the offset for the SoftDevice version relative to the SoftDevice base address in |  | ||||||
|  *         the same format as @ref SD_VERSION, stored as an uint32_t. */ |  | ||||||
| #define SD_VERSION_OFFSET (SOFTDEVICE_INFO_STRUCT_OFFSET + 0x14) |  | ||||||
|  |  | ||||||
| /** @brief Defines the offset for the SoftDevice unique string relative to the SoftDevice base address. |  | ||||||
|  *         The SD_UNIQUE_STR is stored as an array of uint8_t. The size of array is @ref SD_UNIQUE_STR_SIZE. |  | ||||||
|  */ |  | ||||||
| #define SD_UNIQUE_STR_OFFSET (SOFTDEVICE_INFO_STRUCT_OFFSET + 0x18) |  | ||||||
|  |  | ||||||
| /** @brief Defines a macro for retrieving the actual SoftDevice Information Structure size value |  | ||||||
|  *         from a given base address. Use @ref MBR_SIZE as the argument when the SoftDevice is |  | ||||||
|  *         installed just above the MBR (the usual case). */ |  | ||||||
| #define SD_INFO_STRUCT_SIZE_GET(baseaddr) (*((uint8_t *) ((baseaddr) + SD_INFO_STRUCT_SIZE_OFFSET))) |  | ||||||
|  |  | ||||||
| /** @brief Defines a macro for retrieving the actual SoftDevice size value from a given base |  | ||||||
|  *         address. Use @ref MBR_SIZE as the argument when the SoftDevice is installed just above |  | ||||||
|  *         the MBR (the usual case). */ |  | ||||||
| #define SD_SIZE_GET(baseaddr) (*((uint32_t *) ((baseaddr) + SD_SIZE_OFFSET))) |  | ||||||
|  |  | ||||||
| /** @brief Defines a macro for retrieving the actual FWID value from a given base address. Use |  | ||||||
|  *         @ref MBR_SIZE as the argument when the SoftDevice is installed just above the MBR (the usual |  | ||||||
|  *         case). */ |  | ||||||
| #define SD_FWID_GET(baseaddr) (*((uint16_t *) ((baseaddr) + SD_FWID_OFFSET))) |  | ||||||
|  |  | ||||||
| /** @brief Defines a macro for retrieving the actual SoftDevice ID from a given base address. Use |  | ||||||
|  *         @ref MBR_SIZE as the argument when the SoftDevice is installed just above the MBR (the |  | ||||||
|  *         usual case). */ |  | ||||||
| #define SD_ID_GET(baseaddr) ((SD_INFO_STRUCT_SIZE_GET(baseaddr) > (SD_ID_OFFSET - SOFTDEVICE_INFO_STRUCT_OFFSET)) \ |  | ||||||
|         ? (*((uint32_t *) ((baseaddr) + SD_ID_OFFSET))) : SDM_INFO_FIELD_INVALID) |  | ||||||
|  |  | ||||||
| /** @brief Defines a macro for retrieving the actual SoftDevice version from a given base address. |  | ||||||
|  *         Use @ref MBR_SIZE as the argument when the SoftDevice is installed just above the MBR |  | ||||||
|  *         (the usual case). */ |  | ||||||
| #define SD_VERSION_GET(baseaddr) ((SD_INFO_STRUCT_SIZE_GET(baseaddr) > (SD_VERSION_OFFSET - SOFTDEVICE_INFO_STRUCT_OFFSET)) \ |  | ||||||
|         ? (*((uint32_t *) ((baseaddr) + SD_VERSION_OFFSET))) : SDM_INFO_FIELD_INVALID) |  | ||||||
|  |  | ||||||
| /** @brief Defines a macro for retrieving the address of SoftDevice unique str based on a given base address. |  | ||||||
|  *         Use @ref MBR_SIZE as the argument when the SoftDevice is installed just above the MBR |  | ||||||
|  *         (the usual case). */ |  | ||||||
| #define SD_UNIQUE_STR_ADDR_GET(baseaddr) ((SD_INFO_STRUCT_SIZE_GET(baseaddr) > (SD_UNIQUE_STR_OFFSET - SOFTDEVICE_INFO_STRUCT_OFFSET)) \ |  | ||||||
|         ? (((uint8_t *) ((baseaddr) + SD_UNIQUE_STR_OFFSET))) : SDM_INFO_FIELD_INVALID) |  | ||||||
|  |  | ||||||
| /**@defgroup NRF_FAULT_ID_RANGES Fault ID ranges |  | ||||||
|  * @{ */ |  | ||||||
| #define NRF_FAULT_ID_SD_RANGE_START     0x00000000            /**< SoftDevice ID range start. */ |  | ||||||
| #define NRF_FAULT_ID_APP_RANGE_START    0x00001000            /**< Application ID range start. */ |  | ||||||
| /**@} */ |  | ||||||
|  |  | ||||||
| /**@defgroup NRF_FAULT_IDS Fault ID types |  | ||||||
|  * @{ */ |  | ||||||
| #define NRF_FAULT_ID_SD_ASSERT    (NRF_FAULT_ID_SD_RANGE_START  + 1)          /**< SoftDevice assertion. The info parameter is reserved for future used. */ |  | ||||||
| #define NRF_FAULT_ID_APP_MEMACC   (NRF_FAULT_ID_APP_RANGE_START + 1)          /**< Application invalid memory access. The info parameter will contain 0x00000000, |  | ||||||
|                                                                                    in case of SoftDevice RAM access violation. In case of SoftDevice peripheral |  | ||||||
|                                                                                    register violation the info parameter will contain the sub-region number of |  | ||||||
|                                                                                    PREGION[0], on whose address range the disallowed write access caused the |  | ||||||
|                                                                                    memory access fault. */ |  | ||||||
| /**@} */ |  | ||||||
|  |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
| /** @addtogroup NRF_SDM_ENUMS Enumerations |  | ||||||
|  * @{ */ |  | ||||||
|  |  | ||||||
| /**@brief nRF SoftDevice Manager API SVC numbers. */ |  | ||||||
| enum NRF_SD_SVCS |  | ||||||
| { |  | ||||||
|   SD_SOFTDEVICE_ENABLE = SDM_SVC_BASE, /**< ::sd_softdevice_enable */ |  | ||||||
|   SD_SOFTDEVICE_DISABLE,               /**< ::sd_softdevice_disable */ |  | ||||||
|   SD_SOFTDEVICE_IS_ENABLED,            /**< ::sd_softdevice_is_enabled */ |  | ||||||
|   SD_SOFTDEVICE_VECTOR_TABLE_BASE_SET, /**< ::sd_softdevice_vector_table_base_set */ |  | ||||||
|   SVC_SDM_LAST                         /**< Placeholder for last SDM SVC */ |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
| /** @addtogroup NRF_SDM_DEFINES Defines |  | ||||||
|  * @{ */ |  | ||||||
|  |  | ||||||
| /**@defgroup NRF_CLOCK_LF_ACCURACY Clock accuracy |  | ||||||
|  * @{ */ |  | ||||||
|  |  | ||||||
| #define NRF_CLOCK_LF_ACCURACY_250_PPM (0) /**< Default: 250 ppm */ |  | ||||||
| #define NRF_CLOCK_LF_ACCURACY_500_PPM (1) /**< 500 ppm */ |  | ||||||
| #define NRF_CLOCK_LF_ACCURACY_150_PPM (2) /**< 150 ppm */ |  | ||||||
| #define NRF_CLOCK_LF_ACCURACY_100_PPM (3) /**< 100 ppm */ |  | ||||||
| #define NRF_CLOCK_LF_ACCURACY_75_PPM  (4) /**< 75 ppm */ |  | ||||||
| #define NRF_CLOCK_LF_ACCURACY_50_PPM  (5) /**< 50 ppm */ |  | ||||||
| #define NRF_CLOCK_LF_ACCURACY_30_PPM  (6) /**< 30 ppm */ |  | ||||||
| #define NRF_CLOCK_LF_ACCURACY_20_PPM  (7) /**< 20 ppm */ |  | ||||||
| #define NRF_CLOCK_LF_ACCURACY_10_PPM  (8) /**< 10 ppm */ |  | ||||||
| #define NRF_CLOCK_LF_ACCURACY_5_PPM   (9) /**<  5 ppm */ |  | ||||||
| #define NRF_CLOCK_LF_ACCURACY_2_PPM  (10) /**<  2 ppm */ |  | ||||||
| #define NRF_CLOCK_LF_ACCURACY_1_PPM  (11) /**<  1 ppm */ |  | ||||||
|  |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
| /**@defgroup NRF_CLOCK_LF_SRC Possible LFCLK oscillator sources |  | ||||||
|  * @{ */ |  | ||||||
|  |  | ||||||
| #define NRF_CLOCK_LF_SRC_RC      (0)                        /**< LFCLK RC oscillator. */ |  | ||||||
| #define NRF_CLOCK_LF_SRC_XTAL    (1)                        /**< LFCLK crystal oscillator. */ |  | ||||||
| #define NRF_CLOCK_LF_SRC_SYNTH   (2)                        /**< LFCLK Synthesized from HFCLK. */ |  | ||||||
|  |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
| /** @addtogroup NRF_SDM_TYPES Types |  | ||||||
|  * @{ */ |  | ||||||
|  |  | ||||||
| /**@brief Type representing LFCLK oscillator source. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint8_t source;         /**< LF oscillator clock source, see @ref NRF_CLOCK_LF_SRC. */ |  | ||||||
|   uint8_t rc_ctiv;        /**< Only for ::NRF_CLOCK_LF_SRC_RC: Calibration timer interval in 1/4 second |  | ||||||
|                                units (nRF52: 1-32). |  | ||||||
|                                @note To avoid excessive clock drift, 0.5 degrees Celsius is the |  | ||||||
|                                      maximum temperature change allowed in one calibration timer |  | ||||||
|                                      interval. The interval should be selected to ensure this. |  | ||||||
|  |  | ||||||
|                                   @note Must be 0 if source is not ::NRF_CLOCK_LF_SRC_RC.  */ |  | ||||||
|   uint8_t rc_temp_ctiv;   /**<  Only for ::NRF_CLOCK_LF_SRC_RC: How often (in number of calibration |  | ||||||
|                                 intervals) the RC oscillator shall be calibrated if the temperature |  | ||||||
|                                 hasn't changed. |  | ||||||
|                                      0: Always calibrate even if the temperature hasn't changed. |  | ||||||
|                                      1: Only calibrate if the temperature has changed (legacy - nRF51 only). |  | ||||||
|                                      2-33: Check the temperature and only calibrate if it has changed, |  | ||||||
|                                            however calibration will take place every rc_temp_ctiv |  | ||||||
|                                            intervals in any case. |  | ||||||
|  |  | ||||||
|                                 @note Must be 0 if source is not ::NRF_CLOCK_LF_SRC_RC. |  | ||||||
|  |  | ||||||
|                                 @note For nRF52, the application must ensure calibration at least once |  | ||||||
|                                       every 8 seconds to ensure +/-500 ppm clock stability. The |  | ||||||
|                                       recommended configuration for ::NRF_CLOCK_LF_SRC_RC on nRF52 is |  | ||||||
|                                       rc_ctiv=16 and rc_temp_ctiv=2. This will ensure calibration at |  | ||||||
|                                       least once every 8 seconds and for temperature changes of 0.5 |  | ||||||
|                                       degrees Celsius every 4 seconds. See the Product Specification |  | ||||||
|                                       for the nRF52 device being used for more information.*/ |  | ||||||
|   uint8_t accuracy;       /**< External clock accuracy used in the LL to compute timing |  | ||||||
|                                windows, see @ref NRF_CLOCK_LF_ACCURACY.*/ |  | ||||||
| } nrf_clock_lf_cfg_t; |  | ||||||
|  |  | ||||||
| /**@brief Fault Handler type. |  | ||||||
|  * |  | ||||||
|  * When certain unrecoverable errors occur within the application or SoftDevice the fault handler will be called back. |  | ||||||
|  * The protocol stack will be in an undefined state when this happens and the only way to recover will be to |  | ||||||
|  * perform a reset, using e.g. CMSIS NVIC_SystemReset(). |  | ||||||
|  * If the application returns from the fault handler the SoftDevice will call NVIC_SystemReset(). |  | ||||||
|  * |  | ||||||
|  * @note This callback is executed in HardFault context, thus SVC functions cannot be called from the fault callback. |  | ||||||
|  * |  | ||||||
|  * @param[in] id Fault identifier. See @ref NRF_FAULT_IDS. |  | ||||||
|  * @param[in] pc The program counter of the instruction that triggered the fault. |  | ||||||
|  * @param[in] info Optional additional information regarding the fault. Refer to each Fault identifier for details. |  | ||||||
|  * |  | ||||||
|  * @note When id is set to @ref NRF_FAULT_ID_APP_MEMACC, pc will contain the address of the instruction being executed at the time when |  | ||||||
|  * the fault is detected by the CPU. The CPU program counter may have advanced up to 2 instructions (no branching) after the one that triggered the fault. |  | ||||||
|  */ |  | ||||||
| typedef void (*nrf_fault_handler_t)(uint32_t id, uint32_t pc, uint32_t info); |  | ||||||
|  |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
| /** @addtogroup NRF_SDM_FUNCTIONS Functions |  | ||||||
|  * @{ */ |  | ||||||
|  |  | ||||||
| /**@brief Enables the SoftDevice and by extension the protocol stack. |  | ||||||
|  * |  | ||||||
|  * @note Some care must be taken if a low frequency clock source is already running when calling this function: |  | ||||||
|  *       If the LF clock has a different source then the one currently running, it will be stopped. Then, the new |  | ||||||
|  *       clock source will be started. |  | ||||||
|  * |  | ||||||
|  * @note This function has no effect when returning with an error. |  | ||||||
|  * |  | ||||||
|  * @post If return code is ::NRF_SUCCESS |  | ||||||
|  *       - SoC library and protocol stack APIs are made available. |  | ||||||
|  *       - A portion of RAM will be unavailable (see relevant SDS documentation). |  | ||||||
|  *       - Some peripherals will be unavailable or available only through the SoC API (see relevant SDS documentation). |  | ||||||
|  *       - Interrupts will not arrive from protected peripherals or interrupts. |  | ||||||
|  *       - nrf_nvic_ functions must be used instead of CMSIS NVIC_ functions for reliable usage of the SoftDevice. |  | ||||||
|  *       - Interrupt latency may be affected by the SoftDevice  (see relevant SDS documentation). |  | ||||||
|  *       - Chosen low frequency clock source will be running. |  | ||||||
|  * |  | ||||||
|  * @param p_clock_lf_cfg Low frequency clock source and accuracy. |  | ||||||
|                          If NULL the clock will be configured as an RC source with rc_ctiv = 16 and .rc_temp_ctiv = 2 |  | ||||||
|                          In the case of XTAL source, the PPM accuracy of the chosen clock source must be greater than or equal to the actual characteristics of your XTAL clock. |  | ||||||
|  * @param fault_handler Callback to be invoked in case of fault, cannot be NULL. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_ADDR  Invalid or NULL pointer supplied. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_STATE SoftDevice is already enabled, and the clock source and fault handler cannot be updated. |  | ||||||
|  * @retval ::NRF_ERROR_SDM_INCORRECT_INTERRUPT_CONFIGURATION SoftDevice interrupt is already enabled, or an enabled interrupt has an illegal priority level. |  | ||||||
|  * @retval ::NRF_ERROR_SDM_LFCLK_SOURCE_UNKNOWN Unknown low frequency clock source selected. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_PARAM Invalid clock source configuration supplied in p_clock_lf_cfg. |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_SOFTDEVICE_ENABLE, uint32_t, sd_softdevice_enable(nrf_clock_lf_cfg_t const * p_clock_lf_cfg, nrf_fault_handler_t fault_handler)); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /**@brief Disables the SoftDevice and by extension the protocol stack. |  | ||||||
|  * |  | ||||||
|  * Idempotent function to disable the SoftDevice. |  | ||||||
|  * |  | ||||||
|  * @post SoC library and protocol stack APIs are made unavailable. |  | ||||||
|  * @post All interrupts that was protected by the SoftDevice will be disabled and initialized to priority 0 (highest). |  | ||||||
|  * @post All peripherals used by the SoftDevice will be reset to default values. |  | ||||||
|  * @post All of RAM become available. |  | ||||||
|  * @post All interrupts are forwarded to the application. |  | ||||||
|  * @post LFCLK source chosen in ::sd_softdevice_enable will be left running. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_SOFTDEVICE_DISABLE, uint32_t, sd_softdevice_disable(void)); |  | ||||||
|  |  | ||||||
| /**@brief Check if the SoftDevice is enabled. |  | ||||||
|  * |  | ||||||
|  * @param[out]  p_softdevice_enabled If the SoftDevice is enabled: 1 else 0. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_SOFTDEVICE_IS_ENABLED, uint32_t, sd_softdevice_is_enabled(uint8_t * p_softdevice_enabled)); |  | ||||||
|  |  | ||||||
| /**@brief Sets the base address of the interrupt vector table for interrupts forwarded from the SoftDevice |  | ||||||
|  * |  | ||||||
|  * This function is only intended to be called when a bootloader is enabled. |  | ||||||
|  * |  | ||||||
|  * @param[in] address The base address of the interrupt vector table for forwarded interrupts. |  | ||||||
|  |  | ||||||
|  * @retval ::NRF_SUCCESS |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_SOFTDEVICE_VECTOR_TABLE_BASE_SET, uint32_t, sd_softdevice_vector_table_base_set(uint32_t address)); |  | ||||||
|  |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
| #ifdef __cplusplus |  | ||||||
| } |  | ||||||
| #endif |  | ||||||
| #endif // NRF_SDM_H__ |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|   @} |  | ||||||
| */ |  | ||||||
| @@ -1,964 +0,0 @@ | |||||||
| /* |  | ||||||
|  * Copyright (c) 2015 - 2018, Nordic Semiconductor ASA |  | ||||||
|  * All rights reserved. |  | ||||||
|  * |  | ||||||
|  * Redistribution and use in source and binary forms, with or without modification, |  | ||||||
|  * are permitted provided that the following conditions are met: |  | ||||||
|  * |  | ||||||
|  * 1. Redistributions of source code must retain the above copyright notice, this |  | ||||||
|  *    list of conditions and the following disclaimer. |  | ||||||
|  * |  | ||||||
|  * 2. Redistributions in binary form, except as embedded into a Nordic |  | ||||||
|  *    Semiconductor ASA integrated circuit in a product or a software update for |  | ||||||
|  *    such product, must reproduce the above copyright notice, this list of |  | ||||||
|  *    conditions and the following disclaimer in the documentation and/or other |  | ||||||
|  *    materials provided with the distribution. |  | ||||||
|  * |  | ||||||
|  * 3. Neither the name of Nordic Semiconductor ASA nor the names of its |  | ||||||
|  *    contributors may be used to endorse or promote products derived from this |  | ||||||
|  *    software without specific prior written permission. |  | ||||||
|  * |  | ||||||
|  * 4. This software, with or without modification, must only be used with a |  | ||||||
|  *    Nordic Semiconductor ASA integrated circuit. |  | ||||||
|  * |  | ||||||
|  * 5. Any software provided in binary form under this license must not be reverse |  | ||||||
|  *    engineered, decompiled, modified and/or disassembled. |  | ||||||
|  * |  | ||||||
|  * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS |  | ||||||
|  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |  | ||||||
|  * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE |  | ||||||
|  * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE |  | ||||||
|  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |  | ||||||
|  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE |  | ||||||
|  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |  | ||||||
|  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |  | ||||||
|  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT |  | ||||||
|  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |  | ||||||
|  */ |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|  * @defgroup nrf_soc_api SoC Library API |  | ||||||
|  * @{ |  | ||||||
|  * |  | ||||||
|  * @brief APIs for the SoC library. |  | ||||||
|  * |  | ||||||
|  */ |  | ||||||
|  |  | ||||||
| #ifndef NRF_SOC_H__ |  | ||||||
| #define NRF_SOC_H__ |  | ||||||
|  |  | ||||||
| #include <stdint.h> |  | ||||||
| #include "nrf.h" |  | ||||||
| #include "nrf_svc.h" |  | ||||||
| #include "nrf_error.h" |  | ||||||
| #include "nrf_error_soc.h" |  | ||||||
|  |  | ||||||
| #ifdef __cplusplus |  | ||||||
| extern "C" { |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| /**@addtogroup NRF_SOC_DEFINES Defines |  | ||||||
|  * @{ */ |  | ||||||
|  |  | ||||||
| /**@brief The number of the lowest SVC number reserved for the SoC library. */ |  | ||||||
| #define SOC_SVC_BASE               (0x20)                   /**< Base value for SVCs that are available when the SoftDevice is disabled. */ |  | ||||||
| #define SOC_SVC_BASE_NOT_AVAILABLE (0x2C)                   /**< Base value for SVCs that are not available when the SoftDevice is disabled. */ |  | ||||||
|  |  | ||||||
| /**@brief Guaranteed time for application to process radio inactive notification. */ |  | ||||||
| #define NRF_RADIO_NOTIFICATION_INACTIVE_GUARANTEED_TIME_US  (62) |  | ||||||
|  |  | ||||||
| /**@brief The minimum allowed timeslot extension time. */ |  | ||||||
| #define NRF_RADIO_MINIMUM_TIMESLOT_LENGTH_EXTENSION_TIME_US (200) |  | ||||||
|  |  | ||||||
| /**@brief The maximum processing time to handle a timeslot extension. */ |  | ||||||
| #define NRF_RADIO_MAX_EXTENSION_PROCESSING_TIME_US           (17) |  | ||||||
|  |  | ||||||
| /**@brief The latest time before the end of a timeslot the timeslot can be extended. */ |  | ||||||
| #define NRF_RADIO_MIN_EXTENSION_MARGIN_US                    (79) |  | ||||||
|  |  | ||||||
| #define SOC_ECB_KEY_LENGTH                (16)                       /**< ECB key length. */ |  | ||||||
| #define SOC_ECB_CLEARTEXT_LENGTH          (16)                       /**< ECB cleartext length. */ |  | ||||||
| #define SOC_ECB_CIPHERTEXT_LENGTH         (SOC_ECB_CLEARTEXT_LENGTH) /**< ECB ciphertext length. */ |  | ||||||
|  |  | ||||||
| #define SD_EVT_IRQn                       (SWI2_IRQn)        /**< SoftDevice Event IRQ number. Used for both protocol events and SoC events. */ |  | ||||||
| #define SD_EVT_IRQHandler                 (SWI2_IRQHandler)  /**< SoftDevice Event IRQ handler. Used for both protocol events and SoC events. |  | ||||||
|                                                                        The default interrupt priority for this handler is set to 4 */ |  | ||||||
| #define RADIO_NOTIFICATION_IRQn           (SWI1_IRQn)        /**< The radio notification IRQ number. */ |  | ||||||
| #define RADIO_NOTIFICATION_IRQHandler     (SWI1_IRQHandler)  /**< The radio notification IRQ handler. |  | ||||||
|                                                                        The default interrupt priority for this handler is set to 4 */ |  | ||||||
| #define NRF_RADIO_LENGTH_MIN_US           (100)               /**< The shortest allowed radio timeslot, in microseconds. */ |  | ||||||
| #define NRF_RADIO_LENGTH_MAX_US           (100000)            /**< The longest allowed radio timeslot, in microseconds. */ |  | ||||||
|  |  | ||||||
| #define NRF_RADIO_DISTANCE_MAX_US         (128000000UL - 1UL) /**< The longest timeslot distance, in microseconds, allowed for the distance parameter (see @ref nrf_radio_request_normal_t) in the request. */ |  | ||||||
|  |  | ||||||
| #define NRF_RADIO_EARLIEST_TIMEOUT_MAX_US (128000000UL - 1UL) /**< The longest timeout, in microseconds, allowed when requesting the earliest possible timeslot. */ |  | ||||||
|  |  | ||||||
| #define NRF_RADIO_START_JITTER_US         (2)                 /**< The maximum jitter in @ref NRF_RADIO_CALLBACK_SIGNAL_TYPE_START relative to the requested start time. */ |  | ||||||
|  |  | ||||||
| /**@} */ |  | ||||||
|  |  | ||||||
| /**@addtogroup NRF_SOC_ENUMS Enumerations |  | ||||||
|  * @{ */ |  | ||||||
|  |  | ||||||
| /**@brief The SVC numbers used by the SVC functions in the SoC library. */ |  | ||||||
| enum NRF_SOC_SVCS |  | ||||||
| { |  | ||||||
|   SD_PPI_CHANNEL_ENABLE_GET   = SOC_SVC_BASE, |  | ||||||
|   SD_PPI_CHANNEL_ENABLE_SET   = SOC_SVC_BASE + 1, |  | ||||||
|   SD_PPI_CHANNEL_ENABLE_CLR   = SOC_SVC_BASE + 2, |  | ||||||
|   SD_PPI_CHANNEL_ASSIGN       = SOC_SVC_BASE + 3, |  | ||||||
|   SD_PPI_GROUP_TASK_ENABLE    = SOC_SVC_BASE + 4, |  | ||||||
|   SD_PPI_GROUP_TASK_DISABLE   = SOC_SVC_BASE + 5, |  | ||||||
|   SD_PPI_GROUP_ASSIGN         = SOC_SVC_BASE + 6, |  | ||||||
|   SD_PPI_GROUP_GET            = SOC_SVC_BASE + 7, |  | ||||||
|   SD_FLASH_PAGE_ERASE         = SOC_SVC_BASE + 8, |  | ||||||
|   SD_FLASH_WRITE              = SOC_SVC_BASE + 9, |  | ||||||
|   SD_FLASH_PROTECT            = SOC_SVC_BASE + 10, |  | ||||||
|   SD_PROTECTED_REGISTER_WRITE = SOC_SVC_BASE + 11, |  | ||||||
|   SD_MUTEX_NEW                            = SOC_SVC_BASE_NOT_AVAILABLE, |  | ||||||
|   SD_MUTEX_ACQUIRE                        = SOC_SVC_BASE_NOT_AVAILABLE + 1, |  | ||||||
|   SD_MUTEX_RELEASE                        = SOC_SVC_BASE_NOT_AVAILABLE + 2, |  | ||||||
|   SD_RAND_APPLICATION_POOL_CAPACITY_GET   = SOC_SVC_BASE_NOT_AVAILABLE + 3, |  | ||||||
|   SD_RAND_APPLICATION_BYTES_AVAILABLE_GET = SOC_SVC_BASE_NOT_AVAILABLE + 4, |  | ||||||
|   SD_RAND_APPLICATION_VECTOR_GET          = SOC_SVC_BASE_NOT_AVAILABLE + 5, |  | ||||||
|   SD_POWER_MODE_SET                       = SOC_SVC_BASE_NOT_AVAILABLE + 6, |  | ||||||
|   SD_POWER_SYSTEM_OFF                     = SOC_SVC_BASE_NOT_AVAILABLE + 7, |  | ||||||
|   SD_POWER_RESET_REASON_GET               = SOC_SVC_BASE_NOT_AVAILABLE + 8, |  | ||||||
|   SD_POWER_RESET_REASON_CLR               = SOC_SVC_BASE_NOT_AVAILABLE + 9, |  | ||||||
|   SD_POWER_POF_ENABLE                     = SOC_SVC_BASE_NOT_AVAILABLE + 10, |  | ||||||
|   SD_POWER_POF_THRESHOLD_SET              = SOC_SVC_BASE_NOT_AVAILABLE + 11, |  | ||||||
|   SD_POWER_RAM_POWER_SET                  = SOC_SVC_BASE_NOT_AVAILABLE + 13, |  | ||||||
|   SD_POWER_RAM_POWER_CLR                  = SOC_SVC_BASE_NOT_AVAILABLE + 14, |  | ||||||
|   SD_POWER_RAM_POWER_GET                  = SOC_SVC_BASE_NOT_AVAILABLE + 15, |  | ||||||
|   SD_POWER_GPREGRET_SET                   = SOC_SVC_BASE_NOT_AVAILABLE + 16, |  | ||||||
|   SD_POWER_GPREGRET_CLR                   = SOC_SVC_BASE_NOT_AVAILABLE + 17, |  | ||||||
|   SD_POWER_GPREGRET_GET                   = SOC_SVC_BASE_NOT_AVAILABLE + 18, |  | ||||||
|   SD_POWER_DCDC_MODE_SET                  = SOC_SVC_BASE_NOT_AVAILABLE + 19, |  | ||||||
|   SD_APP_EVT_WAIT                         = SOC_SVC_BASE_NOT_AVAILABLE + 21, |  | ||||||
|   SD_CLOCK_HFCLK_REQUEST                  = SOC_SVC_BASE_NOT_AVAILABLE + 22, |  | ||||||
|   SD_CLOCK_HFCLK_RELEASE                  = SOC_SVC_BASE_NOT_AVAILABLE + 23, |  | ||||||
|   SD_CLOCK_HFCLK_IS_RUNNING               = SOC_SVC_BASE_NOT_AVAILABLE + 24, |  | ||||||
|   SD_RADIO_NOTIFICATION_CFG_SET           = SOC_SVC_BASE_NOT_AVAILABLE + 25, |  | ||||||
|   SD_ECB_BLOCK_ENCRYPT                    = SOC_SVC_BASE_NOT_AVAILABLE + 26, |  | ||||||
|   SD_ECB_BLOCKS_ENCRYPT                   = SOC_SVC_BASE_NOT_AVAILABLE + 27, |  | ||||||
|   SD_RADIO_SESSION_OPEN                   = SOC_SVC_BASE_NOT_AVAILABLE + 28, |  | ||||||
|   SD_RADIO_SESSION_CLOSE                  = SOC_SVC_BASE_NOT_AVAILABLE + 29, |  | ||||||
|   SD_RADIO_REQUEST                        = SOC_SVC_BASE_NOT_AVAILABLE + 30, |  | ||||||
|   SD_EVT_GET                              = SOC_SVC_BASE_NOT_AVAILABLE + 31, |  | ||||||
|   SD_TEMP_GET                             = SOC_SVC_BASE_NOT_AVAILABLE + 32, |  | ||||||
|   SVC_SOC_LAST                            = SOC_SVC_BASE_NOT_AVAILABLE + 37 |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| /**@brief Possible values of a ::nrf_mutex_t. */ |  | ||||||
| enum NRF_MUTEX_VALUES |  | ||||||
| { |  | ||||||
|   NRF_MUTEX_FREE, |  | ||||||
|   NRF_MUTEX_TAKEN |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| /**@brief Power modes. */ |  | ||||||
| enum NRF_POWER_MODES |  | ||||||
| { |  | ||||||
|   NRF_POWER_MODE_CONSTLAT,  /**< Constant latency mode. See power management in the reference manual. */ |  | ||||||
|   NRF_POWER_MODE_LOWPWR     /**< Low power mode. See power management in the reference manual. */ |  | ||||||
| }; |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /**@brief Power failure thresholds */ |  | ||||||
| enum NRF_POWER_THRESHOLDS |  | ||||||
| { |  | ||||||
|   NRF_POWER_THRESHOLD_V17 = 4UL, /**< 1.7 Volts power failure threshold. */ |  | ||||||
|   NRF_POWER_THRESHOLD_V18,       /**< 1.8 Volts power failure threshold. */ |  | ||||||
|   NRF_POWER_THRESHOLD_V19,       /**< 1.9 Volts power failure threshold. */ |  | ||||||
|   NRF_POWER_THRESHOLD_V20,       /**< 2.0 Volts power failure threshold. */ |  | ||||||
|   NRF_POWER_THRESHOLD_V21,       /**< 2.1 Volts power failure threshold. */ |  | ||||||
|   NRF_POWER_THRESHOLD_V22,       /**< 2.2 Volts power failure threshold. */ |  | ||||||
|   NRF_POWER_THRESHOLD_V23,       /**< 2.3 Volts power failure threshold. */ |  | ||||||
|   NRF_POWER_THRESHOLD_V24,       /**< 2.4 Volts power failure threshold. */ |  | ||||||
|   NRF_POWER_THRESHOLD_V25,       /**< 2.5 Volts power failure threshold. */ |  | ||||||
|   NRF_POWER_THRESHOLD_V26,       /**< 2.6 Volts power failure threshold. */ |  | ||||||
|   NRF_POWER_THRESHOLD_V27,       /**< 2.7 Volts power failure threshold. */ |  | ||||||
|   NRF_POWER_THRESHOLD_V28        /**< 2.8 Volts power failure threshold. */ |  | ||||||
| }; |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /**@brief DC/DC converter modes. */ |  | ||||||
| enum NRF_POWER_DCDC_MODES |  | ||||||
| { |  | ||||||
|   NRF_POWER_DCDC_DISABLE,          /**< The DCDC is disabled. */ |  | ||||||
|   NRF_POWER_DCDC_ENABLE            /**< The DCDC is enabled.  */ |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| /**@brief Radio notification distances. */ |  | ||||||
| enum NRF_RADIO_NOTIFICATION_DISTANCES |  | ||||||
| { |  | ||||||
|   NRF_RADIO_NOTIFICATION_DISTANCE_NONE = 0, /**< The event does not have a notification. */ |  | ||||||
|   NRF_RADIO_NOTIFICATION_DISTANCE_800US,    /**< The distance from the active notification to start of radio activity. */ |  | ||||||
|   NRF_RADIO_NOTIFICATION_DISTANCE_1740US,   /**< The distance from the active notification to start of radio activity. */ |  | ||||||
|   NRF_RADIO_NOTIFICATION_DISTANCE_2680US,   /**< The distance from the active notification to start of radio activity. */ |  | ||||||
|   NRF_RADIO_NOTIFICATION_DISTANCE_3620US,   /**< The distance from the active notification to start of radio activity. */ |  | ||||||
|   NRF_RADIO_NOTIFICATION_DISTANCE_4560US,   /**< The distance from the active notification to start of radio activity. */ |  | ||||||
|   NRF_RADIO_NOTIFICATION_DISTANCE_5500US    /**< The distance from the active notification to start of radio activity. */ |  | ||||||
| }; |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /**@brief Radio notification types. */ |  | ||||||
| enum NRF_RADIO_NOTIFICATION_TYPES |  | ||||||
| { |  | ||||||
|   NRF_RADIO_NOTIFICATION_TYPE_NONE = 0,        /**< The event does not have a radio notification signal. */ |  | ||||||
|   NRF_RADIO_NOTIFICATION_TYPE_INT_ON_ACTIVE,   /**< Using interrupt for notification when the radio will be enabled. */ |  | ||||||
|   NRF_RADIO_NOTIFICATION_TYPE_INT_ON_INACTIVE, /**< Using interrupt for notification when the radio has been disabled. */ |  | ||||||
|   NRF_RADIO_NOTIFICATION_TYPE_INT_ON_BOTH,     /**< Using interrupt for notification both when the radio will be enabled and disabled. */ |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| /**@brief The Radio signal callback types. */ |  | ||||||
| enum NRF_RADIO_CALLBACK_SIGNAL_TYPE |  | ||||||
| { |  | ||||||
|   NRF_RADIO_CALLBACK_SIGNAL_TYPE_START,             /**< This signal indicates the start of the radio timeslot. */ |  | ||||||
|   NRF_RADIO_CALLBACK_SIGNAL_TYPE_TIMER0,            /**< This signal indicates the NRF_TIMER0 interrupt. */ |  | ||||||
|   NRF_RADIO_CALLBACK_SIGNAL_TYPE_RADIO,             /**< This signal indicates the NRF_RADIO interrupt. */ |  | ||||||
|   NRF_RADIO_CALLBACK_SIGNAL_TYPE_EXTEND_FAILED,     /**< This signal indicates extend action failed. */ |  | ||||||
|   NRF_RADIO_CALLBACK_SIGNAL_TYPE_EXTEND_SUCCEEDED   /**< This signal indicates extend action succeeded. */ |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| /**@brief The actions requested by the signal callback. |  | ||||||
|  * |  | ||||||
|  *  This code gives the SOC instructions about what action to take when the signal callback has |  | ||||||
|  *  returned. |  | ||||||
|  */ |  | ||||||
| enum NRF_RADIO_SIGNAL_CALLBACK_ACTION |  | ||||||
| { |  | ||||||
|   NRF_RADIO_SIGNAL_CALLBACK_ACTION_NONE,            /**< Return without action. */ |  | ||||||
|   NRF_RADIO_SIGNAL_CALLBACK_ACTION_EXTEND,          /**< Request an extension of the current |  | ||||||
|                                                          timeslot. Maximum execution time for this action: |  | ||||||
|                                                          @ref NRF_RADIO_MAX_EXTENSION_PROCESSING_TIME_US. |  | ||||||
|                                                          This action must be started at least |  | ||||||
|                                                          @ref NRF_RADIO_MIN_EXTENSION_MARGIN_US before |  | ||||||
|                                                          the end of the timeslot. */ |  | ||||||
|   NRF_RADIO_SIGNAL_CALLBACK_ACTION_END,             /**< End the current radio timeslot. */ |  | ||||||
|   NRF_RADIO_SIGNAL_CALLBACK_ACTION_REQUEST_AND_END  /**< Request a new radio timeslot and end the current timeslot. */ |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| /**@brief Radio timeslot high frequency clock source configuration. */ |  | ||||||
| enum NRF_RADIO_HFCLK_CFG |  | ||||||
| { |  | ||||||
|   NRF_RADIO_HFCLK_CFG_XTAL_GUARANTEED, /**< The SoftDevice will guarantee that the high frequency clock source is the |  | ||||||
|                                            external crystal for the whole duration of the timeslot. This should be the |  | ||||||
|                                            preferred option for events that use the radio or require high timing accuracy. |  | ||||||
|                                            @note The SoftDevice will automatically turn on and off the external crystal, |  | ||||||
|                                            at the beginning and end of the timeslot, respectively. The crystal may also |  | ||||||
|                                            intentionally be left running after the timeslot, in cases where it is needed |  | ||||||
|                                            by the SoftDevice shortly after the end of the timeslot. */ |  | ||||||
|   NRF_RADIO_HFCLK_CFG_NO_GUARANTEE    /**< This configuration allows for earlier and tighter scheduling of timeslots. |  | ||||||
|                                            The RC oscillator may be the clock source in part or for the whole duration of the timeslot. |  | ||||||
|                                            The RC oscillator's accuracy must therefore be taken into consideration. |  | ||||||
|                                            @note If the application will use the radio peripheral in timeslots with this configuration, |  | ||||||
|                                            it must make sure that the crystal is running and stable before starting the radio. */ |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| /**@brief Radio timeslot priorities. */ |  | ||||||
| enum NRF_RADIO_PRIORITY |  | ||||||
| { |  | ||||||
|   NRF_RADIO_PRIORITY_HIGH,                          /**< High (equal priority as the normal connection priority of the SoftDevice stack(s)). */ |  | ||||||
|   NRF_RADIO_PRIORITY_NORMAL,                        /**< Normal (equal priority as the priority of secondary activities of the SoftDevice stack(s)). */ |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| /**@brief Radio timeslot request type. */ |  | ||||||
| enum NRF_RADIO_REQUEST_TYPE |  | ||||||
| { |  | ||||||
|   NRF_RADIO_REQ_TYPE_EARLIEST,                      /**< Request radio timeslot as early as possible. This should always be used for the first request in a session. */ |  | ||||||
|   NRF_RADIO_REQ_TYPE_NORMAL                         /**< Normal radio timeslot request. */ |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| /**@brief SoC Events. */ |  | ||||||
| enum NRF_SOC_EVTS |  | ||||||
| { |  | ||||||
|   NRF_EVT_HFCLKSTARTED,                         /**< Event indicating that the HFCLK has started. */ |  | ||||||
|   NRF_EVT_POWER_FAILURE_WARNING,                /**< Event indicating that a power failure warning has occurred. */ |  | ||||||
|   NRF_EVT_FLASH_OPERATION_SUCCESS,              /**< Event indicating that the ongoing flash operation has completed successfully. */ |  | ||||||
|   NRF_EVT_FLASH_OPERATION_ERROR,                /**< Event indicating that the ongoing flash operation has timed out with an error. */ |  | ||||||
|   NRF_EVT_RADIO_BLOCKED,                        /**< Event indicating that a radio timeslot was blocked. */ |  | ||||||
|   NRF_EVT_RADIO_CANCELED,                       /**< Event indicating that a radio timeslot was canceled by SoftDevice. */ |  | ||||||
|   NRF_EVT_RADIO_SIGNAL_CALLBACK_INVALID_RETURN, /**< Event indicating that a radio timeslot signal callback handler return was invalid. */ |  | ||||||
|   NRF_EVT_RADIO_SESSION_IDLE,                   /**< Event indicating that a radio timeslot session is idle. */ |  | ||||||
|   NRF_EVT_RADIO_SESSION_CLOSED,                 /**< Event indicating that a radio timeslot session is closed. */ |  | ||||||
|   NRF_EVT_NUMBER_OF_EVTS |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| /**@} */ |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /**@addtogroup NRF_SOC_STRUCTURES Structures |  | ||||||
|  * @{ */ |  | ||||||
|  |  | ||||||
| /**@brief Represents a mutex for use with the nrf_mutex functions. |  | ||||||
|  * @note Accessing the value directly is not safe, use the mutex functions! |  | ||||||
|  */ |  | ||||||
| typedef volatile uint8_t nrf_mutex_t; |  | ||||||
|  |  | ||||||
| /**@brief Parameters for a request for a timeslot as early as possible. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint8_t       hfclk;                              /**< High frequency clock source, see @ref NRF_RADIO_HFCLK_CFG. */ |  | ||||||
|   uint8_t       priority;                           /**< The radio timeslot priority, see @ref NRF_RADIO_PRIORITY. */ |  | ||||||
|   uint32_t      length_us;                          /**< The radio timeslot length (in the range 100 to 100,000] microseconds). */ |  | ||||||
|   uint32_t      timeout_us;                         /**< Longest acceptable delay until the start of the requested timeslot (up to @ref NRF_RADIO_EARLIEST_TIMEOUT_MAX_US microseconds). */ |  | ||||||
| } nrf_radio_request_earliest_t; |  | ||||||
|  |  | ||||||
| /**@brief Parameters for a normal radio timeslot request. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint8_t       hfclk;                              /**< High frequency clock source, see @ref NRF_RADIO_HFCLK_CFG. */ |  | ||||||
|   uint8_t       priority;                           /**< The radio timeslot priority, see @ref NRF_RADIO_PRIORITY. */ |  | ||||||
|   uint32_t      distance_us;                        /**< Distance from the start of the previous radio timeslot (up to @ref NRF_RADIO_DISTANCE_MAX_US microseconds). */ |  | ||||||
|   uint32_t      length_us;                          /**< The radio timeslot length (in the range [100..100,000] microseconds). */ |  | ||||||
| } nrf_radio_request_normal_t; |  | ||||||
|  |  | ||||||
| /**@brief Radio timeslot request parameters. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint8_t                         request_type;     /**< Type of request, see @ref NRF_RADIO_REQUEST_TYPE. */ |  | ||||||
|   union |  | ||||||
|   { |  | ||||||
|     nrf_radio_request_earliest_t  earliest;         /**< Parameters for requesting a radio timeslot as early as possible. */ |  | ||||||
|     nrf_radio_request_normal_t    normal;           /**< Parameters for requesting a normal radio timeslot. */ |  | ||||||
|   } params;                                         /**< Parameter union. */ |  | ||||||
| } nrf_radio_request_t; |  | ||||||
|  |  | ||||||
| /**@brief Return parameters of the radio timeslot signal callback. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint8_t               callback_action;            /**< The action requested by the application when returning from the signal callback, see @ref NRF_RADIO_SIGNAL_CALLBACK_ACTION. */ |  | ||||||
|   union |  | ||||||
|   { |  | ||||||
|     struct |  | ||||||
|     { |  | ||||||
|       nrf_radio_request_t * p_next;                 /**< The request parameters for the next radio timeslot. */ |  | ||||||
|     } request;                                      /**< Additional parameters for return_code @ref NRF_RADIO_SIGNAL_CALLBACK_ACTION_REQUEST_AND_END. */ |  | ||||||
|     struct |  | ||||||
|     { |  | ||||||
|       uint32_t              length_us;              /**< Requested extension of the radio timeslot duration (microseconds) (for minimum time see @ref NRF_RADIO_MINIMUM_TIMESLOT_LENGTH_EXTENSION_TIME_US). */ |  | ||||||
|     } extend;                                       /**< Additional parameters for return_code @ref NRF_RADIO_SIGNAL_CALLBACK_ACTION_EXTEND. */ |  | ||||||
|   } params;                                         /**< Parameter union. */ |  | ||||||
| } nrf_radio_signal_callback_return_param_t; |  | ||||||
|  |  | ||||||
| /**@brief The radio timeslot signal callback type. |  | ||||||
|  * |  | ||||||
|  * @note In case of invalid return parameters, the radio timeslot will automatically end |  | ||||||
|  *       immediately after returning from the signal callback and the |  | ||||||
|  *       @ref NRF_EVT_RADIO_SIGNAL_CALLBACK_INVALID_RETURN event will be sent. |  | ||||||
|  * @note The returned struct pointer must remain valid after the signal callback |  | ||||||
|  *       function returns. For instance, this means that it must not point to a stack variable. |  | ||||||
|  * |  | ||||||
|  * @param[in] signal_type Type of signal, see @ref NRF_RADIO_CALLBACK_SIGNAL_TYPE. |  | ||||||
|  * |  | ||||||
|  * @return Pointer to structure containing action requested by the application. |  | ||||||
|  */ |  | ||||||
| typedef nrf_radio_signal_callback_return_param_t * (*nrf_radio_signal_callback_t) (uint8_t signal_type); |  | ||||||
|  |  | ||||||
| /**@brief AES ECB parameter typedefs */ |  | ||||||
| typedef uint8_t soc_ecb_key_t[SOC_ECB_KEY_LENGTH];                /**< Encryption key type. */ |  | ||||||
| typedef uint8_t soc_ecb_cleartext_t[SOC_ECB_CLEARTEXT_LENGTH];    /**< Cleartext data type. */ |  | ||||||
| typedef uint8_t soc_ecb_ciphertext_t[SOC_ECB_CIPHERTEXT_LENGTH];  /**< Ciphertext data type. */ |  | ||||||
|  |  | ||||||
| /**@brief AES ECB data structure */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   soc_ecb_key_t        key;            /**< Encryption key. */ |  | ||||||
|   soc_ecb_cleartext_t  cleartext;      /**< Cleartext data. */ |  | ||||||
|   soc_ecb_ciphertext_t ciphertext;     /**< Ciphertext data. */ |  | ||||||
| } nrf_ecb_hal_data_t; |  | ||||||
|  |  | ||||||
| /**@brief AES ECB block. Used to provide multiple blocks in a single call |  | ||||||
|           to @ref sd_ecb_blocks_encrypt.*/ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   soc_ecb_key_t const *       p_key;           /**< Pointer to the Encryption key. */ |  | ||||||
|   soc_ecb_cleartext_t const * p_cleartext;     /**< Pointer to the Cleartext data. */ |  | ||||||
|   soc_ecb_ciphertext_t *      p_ciphertext;    /**< Pointer to the Ciphertext data. */ |  | ||||||
| } nrf_ecb_hal_data_block_t; |  | ||||||
|  |  | ||||||
| /**@} */ |  | ||||||
|  |  | ||||||
| /**@addtogroup NRF_SOC_FUNCTIONS Functions |  | ||||||
|  * @{ */ |  | ||||||
|  |  | ||||||
| /**@brief Initialize a mutex. |  | ||||||
|  * |  | ||||||
|  * @param[in] p_mutex Pointer to the mutex to initialize. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_MUTEX_NEW, uint32_t, sd_mutex_new(nrf_mutex_t * p_mutex)); |  | ||||||
|  |  | ||||||
| /**@brief Attempt to acquire a mutex. |  | ||||||
|  * |  | ||||||
|  * @param[in] p_mutex Pointer to the mutex to acquire. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS The mutex was successfully acquired. |  | ||||||
|  * @retval ::NRF_ERROR_SOC_MUTEX_ALREADY_TAKEN The mutex could not be acquired. |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_MUTEX_ACQUIRE, uint32_t, sd_mutex_acquire(nrf_mutex_t * p_mutex)); |  | ||||||
|  |  | ||||||
| /**@brief Release a mutex. |  | ||||||
|  * |  | ||||||
|  * @param[in] p_mutex Pointer to the mutex to release. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_MUTEX_RELEASE, uint32_t, sd_mutex_release(nrf_mutex_t * p_mutex)); |  | ||||||
|  |  | ||||||
| /**@brief Query the capacity of the application random pool. |  | ||||||
|  * |  | ||||||
|  * @param[out] p_pool_capacity The capacity of the pool. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_RAND_APPLICATION_POOL_CAPACITY_GET, uint32_t, sd_rand_application_pool_capacity_get(uint8_t * p_pool_capacity)); |  | ||||||
|  |  | ||||||
| /**@brief Get number of random bytes available to the application. |  | ||||||
|  * |  | ||||||
|  * @param[out] p_bytes_available The number of bytes currently available in the pool. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_RAND_APPLICATION_BYTES_AVAILABLE_GET, uint32_t, sd_rand_application_bytes_available_get(uint8_t * p_bytes_available)); |  | ||||||
|  |  | ||||||
| /**@brief Get random bytes from the application pool. |  | ||||||
|  * |  | ||||||
|  * @param[out]  p_buff  Pointer to unit8_t buffer for storing the bytes. |  | ||||||
|  * @param[in]   length  Number of bytes to take from pool and place in p_buff. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS The requested bytes were written to p_buff. |  | ||||||
|  * @retval ::NRF_ERROR_SOC_RAND_NOT_ENOUGH_VALUES No bytes were written to the buffer, because there were not enough bytes available. |  | ||||||
| */ |  | ||||||
| SVCALL(SD_RAND_APPLICATION_VECTOR_GET, uint32_t, sd_rand_application_vector_get(uint8_t * p_buff, uint8_t length)); |  | ||||||
|  |  | ||||||
| /**@brief Gets the reset reason register. |  | ||||||
|  * |  | ||||||
|  * @param[out]  p_reset_reason  Contents of the NRF_POWER->RESETREAS register. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_POWER_RESET_REASON_GET, uint32_t, sd_power_reset_reason_get(uint32_t * p_reset_reason)); |  | ||||||
|  |  | ||||||
| /**@brief Clears the bits of the reset reason register. |  | ||||||
|  * |  | ||||||
|  * @param[in] reset_reason_clr_msk Contains the bits to clear from the reset reason register. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_POWER_RESET_REASON_CLR, uint32_t, sd_power_reset_reason_clr(uint32_t reset_reason_clr_msk)); |  | ||||||
|  |  | ||||||
| /**@brief Sets the power mode when in CPU sleep. |  | ||||||
|  * |  | ||||||
|  * @param[in] power_mode The power mode to use when in CPU sleep, see @ref NRF_POWER_MODES. @sa sd_app_evt_wait |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS The power mode was set. |  | ||||||
|  * @retval ::NRF_ERROR_SOC_POWER_MODE_UNKNOWN The power mode was unknown. |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_POWER_MODE_SET, uint32_t, sd_power_mode_set(uint8_t power_mode)); |  | ||||||
|  |  | ||||||
| /**@brief Puts the chip in System OFF mode. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_ERROR_SOC_POWER_OFF_SHOULD_NOT_RETURN |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_POWER_SYSTEM_OFF, uint32_t, sd_power_system_off(void)); |  | ||||||
|  |  | ||||||
| /**@brief Enables or disables the power-fail comparator. |  | ||||||
|  * |  | ||||||
|  * Enabling this will give a SoftDevice event (NRF_EVT_POWER_FAILURE_WARNING) when the power failure warning occurs. |  | ||||||
|  * The event can be retrieved with sd_evt_get(); |  | ||||||
|  * |  | ||||||
|  * @param[in] pof_enable    True if the power-fail comparator should be enabled, false if it should be disabled. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_POWER_POF_ENABLE, uint32_t, sd_power_pof_enable(uint8_t pof_enable)); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /**@brief Sets the power failure comparator threshold value. |  | ||||||
|  * |  | ||||||
|  * |  | ||||||
|  * @param[in] threshold The power-fail threshold value to use, see @ref NRF_POWER_THRESHOLDS. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS The power failure threshold was set. |  | ||||||
|  * @retval ::NRF_ERROR_SOC_POWER_POF_THRESHOLD_UNKNOWN The power failure threshold is unknown. |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_POWER_POF_THRESHOLD_SET, uint32_t, sd_power_pof_threshold_set(uint8_t threshold)); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /**@brief Writes the NRF_POWER->RAM[index].POWERSET register. |  | ||||||
|  * |  | ||||||
|  * @param[in] index Contains the index in the NRF_POWER->RAM[index].POWERSET register to write to. |  | ||||||
|  * @param[in] ram_powerset Contains the word to write to the NRF_POWER->RAM[index].POWERSET register. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_POWER_RAM_POWER_SET, uint32_t, sd_power_ram_power_set(uint8_t index, uint32_t ram_powerset)); |  | ||||||
|  |  | ||||||
| /**@brief Writes the NRF_POWER->RAM[index].POWERCLR register. |  | ||||||
|  * |  | ||||||
|  * @param[in] index Contains the index in the NRF_POWER->RAM[index].POWERCLR register to write to. |  | ||||||
|  * @param[in] ram_powerclr Contains the word to write to the NRF_POWER->RAM[index].POWERCLR register. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_POWER_RAM_POWER_CLR, uint32_t, sd_power_ram_power_clr(uint8_t index, uint32_t ram_powerclr)); |  | ||||||
|  |  | ||||||
| /**@brief Get contents of NRF_POWER->RAM[index].POWER register, indicates power status of RAM[index] blocks. |  | ||||||
|  * |  | ||||||
|  * @param[in] index Contains the index in the NRF_POWER->RAM[index].POWER register to read from. |  | ||||||
|  * @param[out] p_ram_power Content of NRF_POWER->RAM[index].POWER register. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_POWER_RAM_POWER_GET, uint32_t, sd_power_ram_power_get(uint8_t index, uint32_t * p_ram_power)); |  | ||||||
|  |  | ||||||
| /**@brief Set bits in the general purpose retention registers (NRF_POWER->GPREGRET*). |  | ||||||
|  * |  | ||||||
|  * @param[in] gpregret_id 0 for GPREGRET, 1 for GPREGRET2. |  | ||||||
|  * @param[in] gpregret_msk Bits to be set in the GPREGRET register. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_POWER_GPREGRET_SET, uint32_t, sd_power_gpregret_set(uint32_t gpregret_id, uint32_t gpregret_msk)); |  | ||||||
|  |  | ||||||
| /**@brief Clear bits in the general purpose retention registers (NRF_POWER->GPREGRET*). |  | ||||||
|  * |  | ||||||
|  * @param[in] gpregret_id 0 for GPREGRET, 1 for GPREGRET2. |  | ||||||
|  * @param[in] gpregret_msk Bits to be clear in the GPREGRET register. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_POWER_GPREGRET_CLR, uint32_t, sd_power_gpregret_clr(uint32_t gpregret_id, uint32_t gpregret_msk)); |  | ||||||
|  |  | ||||||
| /**@brief Get contents of the general purpose retention registers (NRF_POWER->GPREGRET*). |  | ||||||
|  * |  | ||||||
|  * @param[in] gpregret_id 0 for GPREGRET, 1 for GPREGRET2. |  | ||||||
|  * @param[out] p_gpregret Contents of the GPREGRET register. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_POWER_GPREGRET_GET, uint32_t, sd_power_gpregret_get(uint32_t gpregret_id, uint32_t *p_gpregret)); |  | ||||||
|  |  | ||||||
| /**@brief Enable or disable the DC/DC regulator. |  | ||||||
|  * |  | ||||||
|  * @param[in] dcdc_mode The mode of the DCDC, see @ref NRF_POWER_DCDC_MODES. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_PARAM The DCDC mode is invalid. |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_POWER_DCDC_MODE_SET, uint32_t, sd_power_dcdc_mode_set(uint8_t dcdc_mode)); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /**@brief Request the high frequency crystal oscillator. |  | ||||||
|  * |  | ||||||
|  * Will start the high frequency crystal oscillator, the startup time of the crystal varies |  | ||||||
|  * and the ::sd_clock_hfclk_is_running function can be polled to check if it has started. |  | ||||||
|  * |  | ||||||
|  * @see sd_clock_hfclk_is_running |  | ||||||
|  * @see sd_clock_hfclk_release |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_CLOCK_HFCLK_REQUEST, uint32_t, sd_clock_hfclk_request(void)); |  | ||||||
|  |  | ||||||
| /**@brief Releases the high frequency crystal oscillator. |  | ||||||
|  * |  | ||||||
|  * Will stop the high frequency crystal oscillator, this happens immediately. |  | ||||||
|  * |  | ||||||
|  * @see sd_clock_hfclk_is_running |  | ||||||
|  * @see sd_clock_hfclk_request |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_CLOCK_HFCLK_RELEASE, uint32_t, sd_clock_hfclk_release(void)); |  | ||||||
|  |  | ||||||
| /**@brief Checks if the high frequency crystal oscillator is running. |  | ||||||
|  * |  | ||||||
|  * @see sd_clock_hfclk_request |  | ||||||
|  * @see sd_clock_hfclk_release |  | ||||||
|  * |  | ||||||
|  * @param[out] p_is_running 1 if the external crystal oscillator is running, 0 if not. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_CLOCK_HFCLK_IS_RUNNING, uint32_t, sd_clock_hfclk_is_running(uint32_t * p_is_running)); |  | ||||||
|  |  | ||||||
| /**@brief Waits for an application event. |  | ||||||
|  * |  | ||||||
|  * An application event is either an application interrupt or a pended interrupt when the interrupt |  | ||||||
|  * is disabled. |  | ||||||
|  * |  | ||||||
|  * When the application waits for an application event by calling this function, an interrupt that |  | ||||||
|  * is enabled will be taken immediately on pending since this function will wait in thread mode, |  | ||||||
|  * then the execution will return in the application's main thread. |  | ||||||
|  * |  | ||||||
|  * In order to wake up from disabled interrupts, the SEVONPEND flag has to be set in the Cortex-M |  | ||||||
|  * MCU's System Control Register (SCR), CMSIS_SCB. In that case, when a disabled interrupt gets |  | ||||||
|  * pended, this function will return to the application's main thread. |  | ||||||
|  * |  | ||||||
|  * @note The application must ensure that the pended flag is cleared using ::sd_nvic_ClearPendingIRQ |  | ||||||
|  *       in order to sleep using this function. This is only necessary for disabled interrupts, as |  | ||||||
|  *       the interrupt handler will clear the pending flag automatically for enabled interrupts. |  | ||||||
|  * |  | ||||||
|  * @note If an application interrupt has happened since the last time sd_app_evt_wait was |  | ||||||
|  *       called this function will return immediately and not go to sleep. This is to avoid race |  | ||||||
|  *       conditions that can occur when a flag is updated in the interrupt handler and processed |  | ||||||
|  *       in the main loop. |  | ||||||
|  * |  | ||||||
|  * @post An application interrupt has happened or a interrupt pending flag is set. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_APP_EVT_WAIT, uint32_t, sd_app_evt_wait(void)); |  | ||||||
|  |  | ||||||
| /**@brief Get PPI channel enable register contents. |  | ||||||
|  * |  | ||||||
|  * @param[out] p_channel_enable The contents of the PPI CHEN register. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_PPI_CHANNEL_ENABLE_GET, uint32_t, sd_ppi_channel_enable_get(uint32_t * p_channel_enable)); |  | ||||||
|  |  | ||||||
| /**@brief Set PPI channel enable register. |  | ||||||
|  * |  | ||||||
|  * @param[in] channel_enable_set_msk Mask containing the bits to set in the PPI CHEN register. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_PPI_CHANNEL_ENABLE_SET, uint32_t, sd_ppi_channel_enable_set(uint32_t channel_enable_set_msk)); |  | ||||||
|  |  | ||||||
| /**@brief Clear PPI channel enable register. |  | ||||||
|  * |  | ||||||
|  * @param[in] channel_enable_clr_msk Mask containing the bits to clear in the PPI CHEN register. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_PPI_CHANNEL_ENABLE_CLR, uint32_t, sd_ppi_channel_enable_clr(uint32_t channel_enable_clr_msk)); |  | ||||||
|  |  | ||||||
| /**@brief Assign endpoints to a PPI channel. |  | ||||||
|  * |  | ||||||
|  * @param[in] channel_num Number of the PPI channel to assign. |  | ||||||
|  * @param[in] evt_endpoint Event endpoint of the PPI channel. |  | ||||||
|  * @param[in] task_endpoint Task endpoint of the PPI channel. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_ERROR_SOC_PPI_INVALID_CHANNEL The channel number is invalid. |  | ||||||
|  * @retval ::NRF_SUCCESS |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_PPI_CHANNEL_ASSIGN, uint32_t, sd_ppi_channel_assign(uint8_t channel_num, const volatile void * evt_endpoint, const volatile void * task_endpoint)); |  | ||||||
|  |  | ||||||
| /**@brief Task to enable a channel group. |  | ||||||
|  * |  | ||||||
|  * @param[in] group_num Number of the channel group. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_ERROR_SOC_PPI_INVALID_GROUP The group number is invalid |  | ||||||
|  * @retval ::NRF_SUCCESS |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_PPI_GROUP_TASK_ENABLE, uint32_t, sd_ppi_group_task_enable(uint8_t group_num)); |  | ||||||
|  |  | ||||||
| /**@brief Task to disable a channel group. |  | ||||||
|  * |  | ||||||
|  * @param[in] group_num Number of the PPI group. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_ERROR_SOC_PPI_INVALID_GROUP The group number is invalid. |  | ||||||
|  * @retval ::NRF_SUCCESS |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_PPI_GROUP_TASK_DISABLE, uint32_t, sd_ppi_group_task_disable(uint8_t group_num)); |  | ||||||
|  |  | ||||||
| /**@brief Assign PPI channels to a channel group. |  | ||||||
|  * |  | ||||||
|  * @param[in] group_num Number of the channel group. |  | ||||||
|  * @param[in] channel_msk Mask of the channels to assign to the group. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_ERROR_SOC_PPI_INVALID_GROUP The group number is invalid. |  | ||||||
|  * @retval ::NRF_SUCCESS |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_PPI_GROUP_ASSIGN, uint32_t, sd_ppi_group_assign(uint8_t group_num, uint32_t channel_msk)); |  | ||||||
|  |  | ||||||
| /**@brief Gets the PPI channels of a channel group. |  | ||||||
|  * |  | ||||||
|  * @param[in]   group_num Number of the channel group. |  | ||||||
|  * @param[out]  p_channel_msk Mask of the channels assigned to the group. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_ERROR_SOC_PPI_INVALID_GROUP The group number is invalid. |  | ||||||
|  * @retval ::NRF_SUCCESS |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_PPI_GROUP_GET, uint32_t, sd_ppi_group_get(uint8_t group_num, uint32_t * p_channel_msk)); |  | ||||||
|  |  | ||||||
| /**@brief Configures the Radio Notification signal. |  | ||||||
|  * |  | ||||||
|  * @note |  | ||||||
|  *      - The notification signal latency depends on the interrupt priority settings of SWI used |  | ||||||
|  *        for notification signal. |  | ||||||
|  *      - To ensure that the radio notification signal behaves in a consistent way, the radio |  | ||||||
|  *        notifications must be configured when there is no protocol stack or other SoftDevice |  | ||||||
|  *        activity in progress. It is recommended that the radio notification signal is |  | ||||||
|  *        configured directly after the SoftDevice has been enabled. |  | ||||||
|  *      - In the period between the ACTIVE signal and the start of the Radio Event, the SoftDevice |  | ||||||
|  *        will interrupt the application to do Radio Event preparation. |  | ||||||
|  *      - Using the Radio Notification feature may limit the bandwidth, as the SoftDevice may have |  | ||||||
|  *        to shorten the connection events to have time for the Radio Notification signals. |  | ||||||
|  * |  | ||||||
|  * @param[in]  type      Type of notification signal, see @ref NRF_RADIO_NOTIFICATION_TYPES. |  | ||||||
|  *                       @ref NRF_RADIO_NOTIFICATION_TYPE_NONE shall be used to turn off radio |  | ||||||
|  *                       notification. Using @ref NRF_RADIO_NOTIFICATION_DISTANCE_NONE is |  | ||||||
|  *                       recommended (but not required) to be used with |  | ||||||
|  *                       @ref NRF_RADIO_NOTIFICATION_TYPE_NONE. |  | ||||||
|  * |  | ||||||
|  * @param[in]  distance  Distance between the notification signal and start of radio activity, see @ref NRF_RADIO_NOTIFICATION_DISTANCES. |  | ||||||
|  *                       This parameter is ignored when @ref NRF_RADIO_NOTIFICATION_TYPE_NONE or |  | ||||||
|  *                       @ref NRF_RADIO_NOTIFICATION_TYPE_INT_ON_INACTIVE is used. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_PARAM The group number is invalid. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_STATE A protocol stack or other SoftDevice is running. Stop all |  | ||||||
|  *                                   running activities and retry. |  | ||||||
|  * @retval ::NRF_SUCCESS |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_RADIO_NOTIFICATION_CFG_SET, uint32_t, sd_radio_notification_cfg_set(uint8_t type, uint8_t distance)); |  | ||||||
|  |  | ||||||
| /**@brief Encrypts a block according to the specified parameters. |  | ||||||
|  * |  | ||||||
|  * 128-bit AES encryption. |  | ||||||
|  * |  | ||||||
|  * @note: |  | ||||||
|  *    - The application may set the SEVONPEND bit in the SCR to 1 to make the SoftDevice sleep while |  | ||||||
|  *      the ECB is running. The SEVONPEND bit should only be cleared (set to 0) from application |  | ||||||
|  *      main or low interrupt level. |  | ||||||
|  * |  | ||||||
|  * @param[in, out] p_ecb_data Pointer to the ECB parameters' struct (two input |  | ||||||
|  *                            parameters and one output parameter). |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_ECB_BLOCK_ENCRYPT, uint32_t, sd_ecb_block_encrypt(nrf_ecb_hal_data_t * p_ecb_data)); |  | ||||||
|  |  | ||||||
| /**@brief Encrypts multiple data blocks provided as an array of data block structures. |  | ||||||
|  * |  | ||||||
|  * @details: Performs 128-bit AES encryption on multiple data blocks |  | ||||||
|  * |  | ||||||
|  * @note: |  | ||||||
|  *    - The application may set the SEVONPEND bit in the SCR to 1 to make the SoftDevice sleep while |  | ||||||
|  *      the ECB is running. The SEVONPEND bit should only be cleared (set to 0) from application |  | ||||||
|  *      main or low interrupt level. |  | ||||||
|  * |  | ||||||
|  * @param[in]     block_count     Count of blocks in the p_data_blocks array. |  | ||||||
|  * @param[in,out] p_data_blocks   Pointer to the first entry in a contiguous array of |  | ||||||
|  *                                @ref nrf_ecb_hal_data_block_t structures. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_ECB_BLOCKS_ENCRYPT, uint32_t, sd_ecb_blocks_encrypt(uint8_t block_count, nrf_ecb_hal_data_block_t * p_data_blocks)); |  | ||||||
|  |  | ||||||
| /**@brief Gets any pending events generated by the SoC API. |  | ||||||
|  * |  | ||||||
|  * The application should keep calling this function to get events, until ::NRF_ERROR_NOT_FOUND is returned. |  | ||||||
|  * |  | ||||||
|  * @param[out] p_evt_id Set to one of the values in @ref NRF_SOC_EVTS, if any events are pending. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS An event was pending. The event id is written in the p_evt_id parameter. |  | ||||||
|  * @retval ::NRF_ERROR_NOT_FOUND No pending events. |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_EVT_GET, uint32_t, sd_evt_get(uint32_t * p_evt_id)); |  | ||||||
|  |  | ||||||
| /**@brief Get the temperature measured on the chip |  | ||||||
|  * |  | ||||||
|  * This function will block until the temperature measurement is done. |  | ||||||
|  * It takes around 50 us from call to return. |  | ||||||
|  * |  | ||||||
|  * @param[out] p_temp Result of temperature measurement. Die temperature in 0.25 degrees Celsius. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS A temperature measurement was done, and the temperature was written to temp |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_TEMP_GET, uint32_t, sd_temp_get(int32_t * p_temp)); |  | ||||||
|  |  | ||||||
| /**@brief Flash Write |  | ||||||
| * |  | ||||||
| * Commands to write a buffer to flash |  | ||||||
| * |  | ||||||
| * If the SoftDevice is enabled: |  | ||||||
| *  This call initiates the flash access command, and its completion will be communicated to the |  | ||||||
| *  application with exactly one of the following events: |  | ||||||
| *      - @ref NRF_EVT_FLASH_OPERATION_SUCCESS - The command was successfully completed. |  | ||||||
| *      - @ref NRF_EVT_FLASH_OPERATION_ERROR   - The command could not be started. |  | ||||||
| * |  | ||||||
| * If the SoftDevice is not enabled no event will be generated, and this call will return @ref NRF_SUCCESS when the |  | ||||||
|  * write has been completed |  | ||||||
| * |  | ||||||
| * @note |  | ||||||
| *      - This call takes control over the radio and the CPU during flash erase and write to make sure that |  | ||||||
| *        they will not interfere with the flash access. This means that all interrupts will be blocked |  | ||||||
| *        for a predictable time (depending on the NVMC specification in the device's Product Specification |  | ||||||
| *        and the command parameters). |  | ||||||
| *      - The data in the p_src buffer should not be modified before the @ref NRF_EVT_FLASH_OPERATION_SUCCESS |  | ||||||
| *        or the @ref NRF_EVT_FLASH_OPERATION_ERROR have been received if the SoftDevice is enabled. |  | ||||||
| *      - This call will make the SoftDevice trigger a hardfault when the page is written, if it is |  | ||||||
| *        protected. |  | ||||||
| * |  | ||||||
| * |  | ||||||
| * @param[in]  p_dst Pointer to start of flash location to be written. |  | ||||||
| * @param[in]  p_src Pointer to buffer with data to be written. |  | ||||||
| * @param[in]  size  Number of 32-bit words to write. Maximum size is the number of words in one |  | ||||||
| *                   flash page. See the device's Product Specification for details. |  | ||||||
| * |  | ||||||
| * @retval ::NRF_ERROR_INVALID_ADDR   Tried to write to a non existing flash address, or p_dst or p_src was unaligned. |  | ||||||
| * @retval ::NRF_ERROR_BUSY           The previous command has not yet completed. |  | ||||||
| * @retval ::NRF_ERROR_INVALID_LENGTH Size was 0, or higher than the maximum allowed size. |  | ||||||
| * @retval ::NRF_ERROR_FORBIDDEN      Tried to write to an address outside the application flash area. |  | ||||||
| * @retval ::NRF_SUCCESS              The command was accepted. |  | ||||||
| */ |  | ||||||
| SVCALL(SD_FLASH_WRITE, uint32_t, sd_flash_write(uint32_t * p_dst, uint32_t const * p_src, uint32_t size)); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /**@brief Flash Erase page |  | ||||||
| * |  | ||||||
| * Commands to erase a flash page |  | ||||||
| * If the SoftDevice is enabled: |  | ||||||
| *  This call initiates the flash access command, and its completion will be communicated to the |  | ||||||
| *  application with exactly one of the following events: |  | ||||||
| *      - @ref NRF_EVT_FLASH_OPERATION_SUCCESS - The command was successfully completed. |  | ||||||
| *      - @ref NRF_EVT_FLASH_OPERATION_ERROR   - The command could not be started. |  | ||||||
| * |  | ||||||
| * If the SoftDevice is not enabled no event will be generated, and this call will return @ref NRF_SUCCESS when the |  | ||||||
| * erase has been completed |  | ||||||
| * |  | ||||||
| * @note |  | ||||||
| *      - This call takes control over the radio and the CPU during flash erase and write to make sure that |  | ||||||
| *        they will not interfere with the flash access. This means that all interrupts will be blocked |  | ||||||
| *        for a predictable time (depending on the NVMC specification in the device's Product Specification |  | ||||||
| *        and the command parameters). |  | ||||||
| *      - This call will make the SoftDevice trigger a hardfault when the page is erased, if it is |  | ||||||
| *        protected. |  | ||||||
| * |  | ||||||
| * |  | ||||||
| * @param[in]  page_number           Page number of the page to erase |  | ||||||
| * |  | ||||||
| * @retval ::NRF_ERROR_INTERNAL      If a new session could not be opened due to an internal error. |  | ||||||
| * @retval ::NRF_ERROR_INVALID_ADDR  Tried to erase to a non existing flash page. |  | ||||||
| * @retval ::NRF_ERROR_BUSY          The previous command has not yet completed. |  | ||||||
| * @retval ::NRF_ERROR_FORBIDDEN     Tried to erase a page outside the application flash area. |  | ||||||
| * @retval ::NRF_SUCCESS             The command was accepted. |  | ||||||
| */ |  | ||||||
| SVCALL(SD_FLASH_PAGE_ERASE, uint32_t, sd_flash_page_erase(uint32_t page_number)); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /**@brief Flash Protection set |  | ||||||
|  * |  | ||||||
|  * Commands to set the flash protection configuration registers. |  | ||||||
|    This sets the CONFIGx registers of the BPROT peripheral. |  | ||||||
|  * |  | ||||||
|  * @note Not all parameters are valid for all products. Some bits in each parameter may not be |  | ||||||
|  *       valid for your product. Please refer your Product Specification for more details. |  | ||||||
|  * |  | ||||||
|  * @note To read the values read them directly. They are only write-protected. |  | ||||||
|  * |  | ||||||
|  * @note It is possible to use @ref sd_protected_register_write instead of this function. |  | ||||||
|  * |  | ||||||
|  * @param[in]  block_cfg0 Value to be written to the configuration register. |  | ||||||
|  * @param[in]  block_cfg1 Value to be written to the configuration register. |  | ||||||
|  * @param[in]  block_cfg2 Value to be written to the configuration register. |  | ||||||
|  * @param[in]  block_cfg3 Value to be written to the configuration register. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_ERROR_NOT_SUPPORTED Non-zero value supplied to one or more of the unsupported parameters. |  | ||||||
|  * @retval ::NRF_SUCCESS Values successfully written to configuration registers. |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_FLASH_PROTECT, uint32_t, sd_flash_protect(uint32_t block_cfg0, uint32_t block_cfg1, uint32_t block_cfg2, uint32_t block_cfg3)); |  | ||||||
|  |  | ||||||
| /**@brief Opens a session for radio timeslot requests. |  | ||||||
|  * |  | ||||||
|  * @note Only one session can be open at a time. |  | ||||||
|  * @note p_radio_signal_callback(@ref NRF_RADIO_CALLBACK_SIGNAL_TYPE_START) will be called when the radio timeslot |  | ||||||
|  *       starts. From this point the NRF_RADIO and NRF_TIMER0 peripherals can be freely accessed |  | ||||||
|  *       by the application. |  | ||||||
|  * @note p_radio_signal_callback(@ref NRF_RADIO_CALLBACK_SIGNAL_TYPE_TIMER0) is called whenever the NRF_TIMER0 |  | ||||||
|  *       interrupt occurs. |  | ||||||
|  * @note p_radio_signal_callback(@ref NRF_RADIO_CALLBACK_SIGNAL_TYPE_RADIO) is called whenever the NRF_RADIO |  | ||||||
|  *       interrupt occurs. |  | ||||||
|  * @note p_radio_signal_callback() will be called at ARM interrupt priority level 0. This |  | ||||||
|  *       implies that none of the sd_* API calls can be used from p_radio_signal_callback(). |  | ||||||
|  * |  | ||||||
|  * @param[in] p_radio_signal_callback The signal callback. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_ADDR p_radio_signal_callback is an invalid function pointer. |  | ||||||
|  * @retval ::NRF_ERROR_BUSY If session cannot be opened. |  | ||||||
|  * @retval ::NRF_ERROR_INTERNAL If a new session could not be opened due to an internal error. |  | ||||||
|  * @retval ::NRF_SUCCESS Otherwise. |  | ||||||
|  */ |  | ||||||
|  SVCALL(SD_RADIO_SESSION_OPEN, uint32_t, sd_radio_session_open(nrf_radio_signal_callback_t p_radio_signal_callback)); |  | ||||||
|  |  | ||||||
| /**@brief Closes a session for radio timeslot requests. |  | ||||||
|  * |  | ||||||
|  * @note Any current radio timeslot will be finished before the session is closed. |  | ||||||
|  * @note If a radio timeslot is scheduled when the session is closed, it will be canceled. |  | ||||||
|  * @note The application cannot consider the session closed until the @ref NRF_EVT_RADIO_SESSION_CLOSED |  | ||||||
|  *       event is received. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_ERROR_FORBIDDEN If session not opened. |  | ||||||
|  * @retval ::NRF_ERROR_BUSY If session is currently being closed. |  | ||||||
|  * @retval ::NRF_SUCCESS Otherwise. |  | ||||||
|  */ |  | ||||||
|  SVCALL(SD_RADIO_SESSION_CLOSE, uint32_t, sd_radio_session_close(void)); |  | ||||||
|  |  | ||||||
| /**@brief Requests a radio timeslot. |  | ||||||
|  * |  | ||||||
|  * @note The request type is determined by p_request->request_type, and can be one of @ref NRF_RADIO_REQ_TYPE_EARLIEST |  | ||||||
|  *       and @ref NRF_RADIO_REQ_TYPE_NORMAL. The first request in a session must always be of type @ref NRF_RADIO_REQ_TYPE_EARLIEST. |  | ||||||
|  * @note For a normal request (@ref NRF_RADIO_REQ_TYPE_NORMAL), the start time of a radio timeslot is specified by |  | ||||||
|  *       p_request->distance_us and is given relative to the start of the previous timeslot. |  | ||||||
|  * @note A too small p_request->distance_us will lead to a @ref NRF_EVT_RADIO_BLOCKED event. |  | ||||||
|  * @note Timeslots scheduled too close will lead to a @ref NRF_EVT_RADIO_BLOCKED event. |  | ||||||
|  * @note See the SoftDevice Specification for more on radio timeslot scheduling, distances and lengths. |  | ||||||
|  * @note If an opportunity for the first radio timeslot is not found before 100 ms after the call to this |  | ||||||
|  *       function, it is not scheduled, and instead a @ref NRF_EVT_RADIO_BLOCKED event is sent. |  | ||||||
|  *       The application may then try to schedule the first radio timeslot again. |  | ||||||
|  * @note Successful requests will result in nrf_radio_signal_callback_t(@ref NRF_RADIO_CALLBACK_SIGNAL_TYPE_START). |  | ||||||
|  *       Unsuccessful requests will result in a @ref NRF_EVT_RADIO_BLOCKED event, see @ref NRF_SOC_EVTS. |  | ||||||
|  * @note The jitter in the start time of the radio timeslots is +/- @ref NRF_RADIO_START_JITTER_US us. |  | ||||||
|  * @note The nrf_radio_signal_callback_t(@ref NRF_RADIO_CALLBACK_SIGNAL_TYPE_START) call has a latency relative to the |  | ||||||
|  *       specified radio timeslot start, but this does not affect the actual start time of the timeslot. |  | ||||||
|  * @note NRF_TIMER0 is reset at the start of the radio timeslot, and is clocked at 1MHz from the high frequency |  | ||||||
|  *       (16 MHz) clock source. If p_request->hfclk_force_xtal is true, the high frequency clock is |  | ||||||
|  *       guaranteed to be clocked from the external crystal. |  | ||||||
|  * @note The SoftDevice will neither access the NRF_RADIO peripheral nor the NRF_TIMER0 peripheral |  | ||||||
|  *       during the radio timeslot. |  | ||||||
|  * |  | ||||||
|  * @param[in] p_request Pointer to the request parameters. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_ERROR_FORBIDDEN If session not opened or the session is not IDLE. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_ADDR If the p_request pointer is invalid. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_PARAM If the parameters of p_request are not valid. |  | ||||||
|  * @retval ::NRF_SUCCESS Otherwise. |  | ||||||
|  */ |  | ||||||
|  SVCALL(SD_RADIO_REQUEST, uint32_t, sd_radio_request(nrf_radio_request_t const * p_request)); |  | ||||||
|  |  | ||||||
| /**@brief Write register protected by the SoftDevice |  | ||||||
|  * |  | ||||||
|  * This function writes to a register that is write-protected by the SoftDevice. Please refer to your |  | ||||||
|  * SoftDevice Specification for more details about which registers that are protected by SoftDevice. |  | ||||||
|  * This function can write to the following protected peripheral: |  | ||||||
|  *  - BPROT |  | ||||||
|  * |  | ||||||
|  * @note Protected registers may be read directly. |  | ||||||
|  * @note Register that are write-once will return @ref NRF_SUCCESS on second set, even the value in |  | ||||||
|  *       the register has not changed. See the Product Specification for more details about register |  | ||||||
|  *       properties. |  | ||||||
|  * |  | ||||||
|  * @param[in]  p_register Pointer to register to be written. |  | ||||||
|  * @param[in]  value Value to be written to the register. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_ADDR This function can not write to the reguested register. |  | ||||||
|  * @retval ::NRF_SUCCESS Value successfully written to register. |  | ||||||
|  * |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_PROTECTED_REGISTER_WRITE, uint32_t, sd_protected_register_write(volatile uint32_t * p_register, uint32_t value)); |  | ||||||
|  |  | ||||||
| /**@} */ |  | ||||||
|  |  | ||||||
| #ifdef __cplusplus |  | ||||||
| } |  | ||||||
| #endif |  | ||||||
| #endif // NRF_SOC_H__ |  | ||||||
|  |  | ||||||
| /**@} */ |  | ||||||
| @@ -1,90 +0,0 @@ | |||||||
| /* |  | ||||||
|  * Copyright (c) 2012 - 2017, Nordic Semiconductor ASA |  | ||||||
|  * All rights reserved. |  | ||||||
|  * |  | ||||||
|  * Redistribution and use in source and binary forms, with or without modification, |  | ||||||
|  * are permitted provided that the following conditions are met: |  | ||||||
|  * |  | ||||||
|  * 1. Redistributions of source code must retain the above copyright notice, this |  | ||||||
|  *    list of conditions and the following disclaimer. |  | ||||||
|  * |  | ||||||
|  * 2. Redistributions in binary form, except as embedded into a Nordic |  | ||||||
|  *    Semiconductor ASA integrated circuit in a product or a software update for |  | ||||||
|  *    such product, must reproduce the above copyright notice, this list of |  | ||||||
|  *    conditions and the following disclaimer in the documentation and/or other |  | ||||||
|  *    materials provided with the distribution. |  | ||||||
|  * |  | ||||||
|  * 3. Neither the name of Nordic Semiconductor ASA nor the names of its |  | ||||||
|  *    contributors may be used to endorse or promote products derived from this |  | ||||||
|  *    software without specific prior written permission. |  | ||||||
|  * |  | ||||||
|  * 4. This software, with or without modification, must only be used with a |  | ||||||
|  *    Nordic Semiconductor ASA integrated circuit. |  | ||||||
|  * |  | ||||||
|  * 5. Any software provided in binary form under this license must not be reverse |  | ||||||
|  *    engineered, decompiled, modified and/or disassembled. |  | ||||||
|  * |  | ||||||
|  * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS |  | ||||||
|  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |  | ||||||
|  * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE |  | ||||||
|  * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE |  | ||||||
|  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |  | ||||||
|  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE |  | ||||||
|  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |  | ||||||
|  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |  | ||||||
|  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT |  | ||||||
|  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |  | ||||||
|  */ |  | ||||||
|  |  | ||||||
| #ifndef NRF_SVC__ |  | ||||||
| #define NRF_SVC__ |  | ||||||
|  |  | ||||||
| #include "stdint.h" |  | ||||||
|  |  | ||||||
| #ifdef __cplusplus |  | ||||||
| extern "C" { |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| #ifdef SVCALL_AS_NORMAL_FUNCTION |  | ||||||
| #define SVCALL(number, return_type, signature) return_type signature |  | ||||||
| #else |  | ||||||
|  |  | ||||||
| #ifndef SVCALL |  | ||||||
| #if defined (__CC_ARM) |  | ||||||
| #define SVCALL(number, return_type, signature) return_type __svc(number) signature |  | ||||||
| #elif defined (__GNUC__) |  | ||||||
| #ifdef __cplusplus |  | ||||||
| #define GCC_CAST_CPP (uint16_t) |  | ||||||
| #else |  | ||||||
| #define GCC_CAST_CPP |  | ||||||
| #endif |  | ||||||
| #define SVCALL(number, return_type, signature)          \ |  | ||||||
|   _Pragma("GCC diagnostic push")                        \ |  | ||||||
|   _Pragma("GCC diagnostic ignored \"-Wreturn-type\"")   \ |  | ||||||
|   __attribute__((naked))                                \ |  | ||||||
|   __attribute__((unused))                               \ |  | ||||||
|   static return_type signature                          \ |  | ||||||
|   {                                                     \ |  | ||||||
|     __asm(                                              \ |  | ||||||
|         "svc %0\n"                                      \ |  | ||||||
|         "bx r14" : : "I" (GCC_CAST_CPP number) : "r0"   \ |  | ||||||
|     );                                                  \ |  | ||||||
|   }                                                     \ |  | ||||||
|   _Pragma("GCC diagnostic pop") |  | ||||||
|  |  | ||||||
| #elif defined (__ICCARM__) |  | ||||||
| #define PRAGMA(x) _Pragma(#x) |  | ||||||
| #define SVCALL(number, return_type, signature)          \ |  | ||||||
| PRAGMA(swi_number = (number))                           \ |  | ||||||
|  __swi return_type signature; |  | ||||||
| #else |  | ||||||
| #define SVCALL(number, return_type, signature) return_type signature |  | ||||||
| #endif |  | ||||||
| #endif  // SVCALL |  | ||||||
|  |  | ||||||
| #endif  // SVCALL_AS_NORMAL_FUNCTION |  | ||||||
|  |  | ||||||
| #ifdef __cplusplus |  | ||||||
| } |  | ||||||
| #endif |  | ||||||
| #endif  // NRF_SVC__ |  | ||||||
| @@ -1,35 +0,0 @@ | |||||||
| Copyright (c) 2007 - 2018, Nordic Semiconductor ASA |  | ||||||
| All rights reserved. |  | ||||||
|  |  | ||||||
| Redistribution and use in source and binary forms, with or without modification, |  | ||||||
| are permitted provided that the following conditions are met: |  | ||||||
|  |  | ||||||
| 1. Redistributions of source code must retain the above copyright notice, this |  | ||||||
|    list of conditions and the following disclaimer. |  | ||||||
|  |  | ||||||
| 2. Redistributions in binary form, except as embedded into a Nordic |  | ||||||
|    Semiconductor ASA integrated circuit in a product or a software update for |  | ||||||
|    such product, must reproduce the above copyright notice, this list of |  | ||||||
|    conditions and the following disclaimer in the documentation and/or other |  | ||||||
|    materials provided with the distribution. |  | ||||||
|  |  | ||||||
| 3. Neither the name of Nordic Semiconductor ASA nor the names of its |  | ||||||
|    contributors may be used to endorse or promote products derived from this |  | ||||||
|    software without specific prior written permission. |  | ||||||
|  |  | ||||||
| 4. This software, with or without modification, must only be used with a |  | ||||||
|    Nordic Semiconductor ASA integrated circuit. |  | ||||||
|  |  | ||||||
| 5. Any software provided in binary form under this license must not be reverse |  | ||||||
|    engineered, decompiled, modified and/or disassembled. |  | ||||||
|  |  | ||||||
| THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS |  | ||||||
| OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |  | ||||||
| OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE |  | ||||||
| DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE |  | ||||||
| LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |  | ||||||
| CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE |  | ||||||
| GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |  | ||||||
| HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |  | ||||||
| LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT |  | ||||||
| OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |  | ||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -1,622 +0,0 @@ | |||||||
| /* |  | ||||||
|  * Copyright (c) 2012 - 2018, Nordic Semiconductor ASA |  | ||||||
|  * All rights reserved. |  | ||||||
|  * |  | ||||||
|  * Redistribution and use in source and binary forms, with or without modification, |  | ||||||
|  * are permitted provided that the following conditions are met: |  | ||||||
|  * |  | ||||||
|  * 1. Redistributions of source code must retain the above copyright notice, this |  | ||||||
|  *    list of conditions and the following disclaimer. |  | ||||||
|  * |  | ||||||
|  * 2. Redistributions in binary form, except as embedded into a Nordic |  | ||||||
|  *    Semiconductor ASA integrated circuit in a product or a software update for |  | ||||||
|  *    such product, must reproduce the above copyright notice, this list of |  | ||||||
|  *    conditions and the following disclaimer in the documentation and/or other |  | ||||||
|  *    materials provided with the distribution. |  | ||||||
|  * |  | ||||||
|  * 3. Neither the name of Nordic Semiconductor ASA nor the names of its |  | ||||||
|  *    contributors may be used to endorse or promote products derived from this |  | ||||||
|  *    software without specific prior written permission. |  | ||||||
|  * |  | ||||||
|  * 4. This software, with or without modification, must only be used with a |  | ||||||
|  *    Nordic Semiconductor ASA integrated circuit. |  | ||||||
|  * |  | ||||||
|  * 5. Any software provided in binary form under this license must not be reverse |  | ||||||
|  *    engineered, decompiled, modified and/or disassembled. |  | ||||||
|  * |  | ||||||
|  * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS |  | ||||||
|  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |  | ||||||
|  * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE |  | ||||||
|  * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE |  | ||||||
|  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |  | ||||||
|  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE |  | ||||||
|  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |  | ||||||
|  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |  | ||||||
|  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT |  | ||||||
|  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |  | ||||||
|  */ |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|   @addtogroup BLE_COMMON BLE SoftDevice Common |  | ||||||
|   @{ |  | ||||||
|   @defgroup ble_api Events, type definitions and API calls |  | ||||||
|   @{ |  | ||||||
|  |  | ||||||
|   @brief Module independent events, type definitions and API calls for the BLE SoftDevice. |  | ||||||
|  |  | ||||||
|  */ |  | ||||||
|  |  | ||||||
| #ifndef BLE_H__ |  | ||||||
| #define BLE_H__ |  | ||||||
|  |  | ||||||
| #include <stdint.h> |  | ||||||
| #include "nrf_svc.h" |  | ||||||
| #include "nrf_error.h" |  | ||||||
| #include "ble_err.h" |  | ||||||
| #include "ble_gap.h" |  | ||||||
| #include "ble_l2cap.h" |  | ||||||
| #include "ble_gatt.h" |  | ||||||
| #include "ble_gattc.h" |  | ||||||
| #include "ble_gatts.h" |  | ||||||
|  |  | ||||||
| #ifdef __cplusplus |  | ||||||
| extern "C" { |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| /** @addtogroup BLE_COMMON_ENUMERATIONS Enumerations |  | ||||||
|  * @{ */ |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|  * @brief Common API SVC numbers. |  | ||||||
|  */ |  | ||||||
| enum BLE_COMMON_SVCS |  | ||||||
| { |  | ||||||
|   SD_BLE_ENABLE = BLE_SVC_BASE,         /**< Enable and initialize the BLE stack */ |  | ||||||
|   SD_BLE_EVT_GET,                       /**< Get an event from the pending events queue. */ |  | ||||||
|   SD_BLE_UUID_VS_ADD,                   /**< Add a Vendor Specific UUID. */ |  | ||||||
|   SD_BLE_UUID_DECODE,                   /**< Decode UUID bytes. */ |  | ||||||
|   SD_BLE_UUID_ENCODE,                   /**< Encode UUID bytes. */ |  | ||||||
|   SD_BLE_VERSION_GET,                   /**< Get the local version information (company ID, Link Layer Version, Link Layer Subversion). */ |  | ||||||
|   SD_BLE_USER_MEM_REPLY,                /**< User Memory Reply. */ |  | ||||||
|   SD_BLE_OPT_SET,                       /**< Set a BLE option. */ |  | ||||||
|   SD_BLE_OPT_GET,                       /**< Get a BLE option. */ |  | ||||||
|   SD_BLE_CFG_SET,                       /**< Add a configuration to the BLE stack. */ |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|  * @brief BLE Module Independent Event IDs. |  | ||||||
|  */ |  | ||||||
| enum BLE_COMMON_EVTS |  | ||||||
| { |  | ||||||
|   BLE_EVT_USER_MEM_REQUEST = BLE_EVT_BASE + 0,   /**< User Memory request. @ref ble_evt_user_mem_request_t */ |  | ||||||
|   BLE_EVT_USER_MEM_RELEASE = BLE_EVT_BASE + 1,   /**< User Memory release. @ref ble_evt_user_mem_release_t */ |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| /**@brief BLE Connection Configuration IDs. |  | ||||||
|  * |  | ||||||
|  * IDs that uniquely identify a connection configuration. |  | ||||||
|  */ |  | ||||||
| enum BLE_CONN_CFGS |  | ||||||
| { |  | ||||||
|     BLE_CONN_CFG_GAP   = BLE_CONN_CFG_BASE + 0, /**< BLE GAP specific connection configuration. */ |  | ||||||
|     BLE_CONN_CFG_GATTC = BLE_CONN_CFG_BASE + 1, /**< BLE GATTC specific connection configuration. */ |  | ||||||
|     BLE_CONN_CFG_GATTS = BLE_CONN_CFG_BASE + 2, /**< BLE GATTS specific connection configuration. */ |  | ||||||
|     BLE_CONN_CFG_GATT  = BLE_CONN_CFG_BASE + 3, /**< BLE GATT specific connection configuration. */ |  | ||||||
|     BLE_CONN_CFG_L2CAP = BLE_CONN_CFG_BASE + 4, /**< BLE L2CAP specific connection configuration. */ |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| /**@brief BLE Common Configuration IDs. |  | ||||||
|  * |  | ||||||
|  * IDs that uniquely identify a common configuration. |  | ||||||
|  */ |  | ||||||
| enum BLE_COMMON_CFGS |  | ||||||
| { |  | ||||||
|   BLE_COMMON_CFG_VS_UUID = BLE_CFG_BASE, /**< Vendor specific UUID configuration */ |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| /**@brief Common Option IDs. |  | ||||||
|  * IDs that uniquely identify a common option. |  | ||||||
|  */ |  | ||||||
| enum BLE_COMMON_OPTS |  | ||||||
| { |  | ||||||
|   BLE_COMMON_OPT_PA_LNA       = BLE_OPT_BASE + 0, /**< PA and LNA options */ |  | ||||||
|   BLE_COMMON_OPT_CONN_EVT_EXT = BLE_OPT_BASE + 1, /**< Extended connection events option */ |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
| /** @addtogroup BLE_COMMON_DEFINES Defines |  | ||||||
|  * @{ */ |  | ||||||
|  |  | ||||||
| /** @brief  Required pointer alignment for BLE Events. |  | ||||||
| */ |  | ||||||
| #define BLE_EVT_PTR_ALIGNMENT    4 |  | ||||||
|  |  | ||||||
| /** @brief  Leaves the maximum of the two arguments. |  | ||||||
| */ |  | ||||||
| #define BLE_MAX(a, b) ((a) < (b) ? (b) : (a)) |  | ||||||
|  |  | ||||||
| /** @brief  Maximum possible length for BLE Events. |  | ||||||
|  * @note The highest value used for @ref ble_gatt_conn_cfg_t::att_mtu in any connection configuration shall be used as a parameter. |  | ||||||
|  * If that value has not been configured for any connections then @ref BLE_GATT_ATT_MTU_DEFAULT must be used instead. |  | ||||||
| */ |  | ||||||
| #define BLE_EVT_LEN_MAX(ATT_MTU) ( \ |  | ||||||
|     offsetof(ble_evt_t, evt.gattc_evt.params.prim_srvc_disc_rsp.services) + ((ATT_MTU) - 1) / 4 * sizeof(ble_gattc_service_t) \ |  | ||||||
| ) |  | ||||||
|  |  | ||||||
| /** @defgroup BLE_USER_MEM_TYPES User Memory Types |  | ||||||
|  * @{ */ |  | ||||||
| #define BLE_USER_MEM_TYPE_INVALID               0x00  /**< Invalid User Memory Types. */ |  | ||||||
| #define BLE_USER_MEM_TYPE_GATTS_QUEUED_WRITES   0x01  /**< User Memory for GATTS queued writes. */ |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
| /** @defgroup BLE_UUID_VS_COUNTS Vendor Specific UUID counts |  | ||||||
|  * @{ |  | ||||||
|  */ |  | ||||||
| #define BLE_UUID_VS_COUNT_DEFAULT 10  /**< Default VS UUID count. */ |  | ||||||
| #define BLE_UUID_VS_COUNT_MAX     254 /**< Maximum VS UUID count. */ |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
| /** @defgroup BLE_COMMON_CFG_DEFAULTS Configuration defaults. |  | ||||||
|  * @{ |  | ||||||
|  */ |  | ||||||
| #define BLE_CONN_CFG_TAG_DEFAULT  0    /**< Default configuration tag, SoftDevice default connection configuration. */ |  | ||||||
|  |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
| /** @addtogroup BLE_COMMON_STRUCTURES Structures |  | ||||||
|  * @{ */ |  | ||||||
|  |  | ||||||
| /**@brief User Memory Block. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint8_t          *p_mem;      /**< Pointer to the start of the user memory block. */ |  | ||||||
|   uint16_t          len;        /**< Length in bytes of the user memory block. */ |  | ||||||
| } ble_user_mem_block_t; |  | ||||||
|  |  | ||||||
| /**@brief Event structure for @ref BLE_EVT_USER_MEM_REQUEST. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint8_t                     type;     /**< User memory type, see @ref BLE_USER_MEM_TYPES. */ |  | ||||||
| } ble_evt_user_mem_request_t; |  | ||||||
|  |  | ||||||
| /**@brief Event structure for @ref BLE_EVT_USER_MEM_RELEASE. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint8_t                     type;       /**< User memory type, see @ref BLE_USER_MEM_TYPES. */ |  | ||||||
|   ble_user_mem_block_t        mem_block;  /**< User memory block */ |  | ||||||
| } ble_evt_user_mem_release_t; |  | ||||||
|  |  | ||||||
| /**@brief Event structure for events not associated with a specific function module. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint16_t conn_handle;                                 /**< Connection Handle on which this event occurred. */ |  | ||||||
|   union |  | ||||||
|   { |  | ||||||
|     ble_evt_user_mem_request_t      user_mem_request;    /**< User Memory Request Event Parameters. */ |  | ||||||
|     ble_evt_user_mem_release_t      user_mem_release;    /**< User Memory Release Event Parameters. */ |  | ||||||
|   } params;                                              /**< Event parameter union. */ |  | ||||||
| } ble_common_evt_t; |  | ||||||
|  |  | ||||||
| /**@brief BLE Event header. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint16_t evt_id;                /**< Value from a BLE_<module>_EVT series. */ |  | ||||||
|   uint16_t evt_len;               /**< Length in octets including this header. */ |  | ||||||
| } ble_evt_hdr_t; |  | ||||||
|  |  | ||||||
| /**@brief Common BLE Event type, wrapping the module specific event reports. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   ble_evt_hdr_t header;           /**< Event header. */ |  | ||||||
|   union |  | ||||||
|   { |  | ||||||
|     ble_common_evt_t  common_evt; /**< Common Event, evt_id in BLE_EVT_* series. */ |  | ||||||
|     ble_gap_evt_t     gap_evt;    /**< GAP originated event, evt_id in BLE_GAP_EVT_* series. */ |  | ||||||
|     ble_gattc_evt_t   gattc_evt;  /**< GATT client originated event, evt_id in BLE_GATTC_EVT* series. */ |  | ||||||
|     ble_gatts_evt_t   gatts_evt;  /**< GATT server originated event, evt_id in BLE_GATTS_EVT* series. */ |  | ||||||
|     ble_l2cap_evt_t   l2cap_evt;  /**< L2CAP originated event, evt_id in BLE_L2CAP_EVT* series. */ |  | ||||||
|   } evt;                          /**< Event union. */ |  | ||||||
| } ble_evt_t; |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|  * @brief Version Information. |  | ||||||
|  */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint8_t   version_number;    /**< Link Layer Version number. See https://www.bluetooth.org/en-us/specification/assigned-numbers/link-layer for assigned values. */ |  | ||||||
|   uint16_t  company_id;        /**< Company ID, Nordic Semiconductor's company ID is 89 (0x0059) (https://www.bluetooth.org/apps/content/Default.aspx?doc_id=49708). */ |  | ||||||
|   uint16_t  subversion_number; /**< Link Layer Sub Version number, corresponds to the SoftDevice Config ID or Firmware ID (FWID). */ |  | ||||||
| } ble_version_t; |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|  * @brief Configuration parameters for the PA and LNA. |  | ||||||
|  */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|      uint8_t enable :1;      /**< Enable toggling for this amplifier */ |  | ||||||
|      uint8_t active_high :1; /**< Set the pin to be active high */ |  | ||||||
|      uint8_t gpio_pin :6;    /**< The GPIO pin to toggle for this amplifier */ |  | ||||||
| } ble_pa_lna_cfg_t; |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|  * @brief PA & LNA GPIO toggle configuration |  | ||||||
|  * |  | ||||||
|  * This option configures the SoftDevice to toggle pins when the radio is active for use with a power amplifier and/or |  | ||||||
|  * a low noise amplifier. |  | ||||||
|  * |  | ||||||
|  * Toggling the pins is achieved by using two PPI channels and a GPIOTE channel. The hardware channel IDs are provided |  | ||||||
|  * by the application and should be regarded as reserved as long as any PA/LNA toggling is enabled. |  | ||||||
|  * |  | ||||||
|  * @note  @ref sd_ble_opt_get is not supported for this option. |  | ||||||
|  * @note  Setting this option while the radio is in use (i.e. any of the roles are active) may have undefined consequences |  | ||||||
|  * and must be avoided by the application. |  | ||||||
|  */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|    ble_pa_lna_cfg_t pa_cfg;   /**< Power Amplifier configuration */ |  | ||||||
|    ble_pa_lna_cfg_t lna_cfg;  /**< Low Noise Amplifier configuration */ |  | ||||||
|  |  | ||||||
|    uint8_t ppi_ch_id_set;     /**< PPI channel used for radio pin setting */ |  | ||||||
|    uint8_t ppi_ch_id_clr;     /**< PPI channel used for radio pin clearing */ |  | ||||||
|    uint8_t gpiote_ch_id;      /**< GPIOTE channel used for radio pin toggling */ |  | ||||||
| } ble_common_opt_pa_lna_t; |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|  * @brief Configuration of extended BLE connection events. |  | ||||||
|  * |  | ||||||
|  * When enabled the SoftDevice will dynamically extend the connection event when possible. |  | ||||||
|  * |  | ||||||
|  * The connection event length is controlled by the connection configuration as set by @ref ble_gap_conn_cfg_t::event_length. |  | ||||||
|  * The connection event can be extended if there is time to send another packet pair before the start of the next connection interval, |  | ||||||
|  * and if there are no conflicts with other BLE roles requesting radio time. |  | ||||||
|  * |  | ||||||
|  * @note @ref sd_ble_opt_get is not supported for this option. |  | ||||||
|  */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|    uint8_t enable : 1; /**< Enable extended BLE connection events, disabled by default. */ |  | ||||||
| } ble_common_opt_conn_evt_ext_t; |  | ||||||
|  |  | ||||||
| /**@brief Option structure for common options. */ |  | ||||||
| typedef union |  | ||||||
| { |  | ||||||
|   ble_common_opt_pa_lna_t       pa_lna;        /**< Parameters for controlling PA and LNA pin toggling. */ |  | ||||||
|   ble_common_opt_conn_evt_ext_t conn_evt_ext;  /**< Parameters for enabling extended connection events. */ |  | ||||||
| } ble_common_opt_t; |  | ||||||
|  |  | ||||||
| /**@brief Common BLE Option type, wrapping the module specific options. */ |  | ||||||
| typedef union |  | ||||||
| { |  | ||||||
|   ble_common_opt_t  common_opt;         /**< COMMON options, opt_id in @ref BLE_COMMON_OPTS series. */ |  | ||||||
|   ble_gap_opt_t     gap_opt;            /**< GAP option, opt_id in @ref BLE_GAP_OPTS series. */ |  | ||||||
| } ble_opt_t; |  | ||||||
|  |  | ||||||
| /**@brief BLE connection configuration type, wrapping the module specific configurations, set with |  | ||||||
|  * @ref sd_ble_cfg_set. |  | ||||||
|  * |  | ||||||
|  * @note Connection configurations don't have to be set. |  | ||||||
|  * In the case that no configurations has been set, or fewer connection configurations has been set than enabled connections, |  | ||||||
|  * the default connection configuration will be automatically added for the remaining connections. |  | ||||||
|  * When creating connections with the default configuration, @ref BLE_CONN_CFG_TAG_DEFAULT should be used in |  | ||||||
|  * place of @ref ble_conn_cfg_t::conn_cfg_tag. |  | ||||||
|  * |  | ||||||
|  * @sa sd_ble_gap_adv_start() |  | ||||||
|  * @sa sd_ble_gap_connect() |  | ||||||
|  * |  | ||||||
|  * @mscs |  | ||||||
|  * @mmsc{@ref BLE_CONN_CFG} |  | ||||||
|  * @endmscs |  | ||||||
|  |  | ||||||
|  */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint8_t              conn_cfg_tag;        /**< The application chosen tag it can use with the |  | ||||||
|                                                  @ref sd_ble_gap_adv_start() and @ref sd_ble_gap_connect() calls |  | ||||||
|                                                  to select this configuration when creating a connection. |  | ||||||
|                                                  Must be different for all connection configurations added and not @ref BLE_CONN_CFG_TAG_DEFAULT. */ |  | ||||||
|   union { |  | ||||||
|     ble_gap_conn_cfg_t   gap_conn_cfg;      /**< GAP connection configuration, cfg_id is @ref BLE_CONN_CFG_GAP. */ |  | ||||||
|     ble_gattc_conn_cfg_t gattc_conn_cfg;    /**< GATTC connection configuration, cfg_id is @ref BLE_CONN_CFG_GATTC. */ |  | ||||||
|     ble_gatts_conn_cfg_t gatts_conn_cfg;    /**< GATTS connection configuration, cfg_id is @ref BLE_CONN_CFG_GATTS. */ |  | ||||||
|     ble_gatt_conn_cfg_t  gatt_conn_cfg;     /**< GATT connection configuration, cfg_id is @ref BLE_CONN_CFG_GATT. */ |  | ||||||
|     ble_l2cap_conn_cfg_t l2cap_conn_cfg;    /**< L2CAP connection configuration, cfg_id is @ref BLE_CONN_CFG_L2CAP. */ |  | ||||||
|   } params;                                 /**< Connection configuration union. */ |  | ||||||
| } ble_conn_cfg_t; |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|  * @brief Configuration of Vendor Specific UUIDs, set with @ref sd_ble_cfg_set. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_PARAM Too many UUIDs configured. |  | ||||||
|  */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint8_t vs_uuid_count; /**< Number of 128-bit Vendor Specific UUID bases to allocate memory for. |  | ||||||
|                               Default value is @ref BLE_UUID_VS_COUNT_DEFAULT. Maximum value is |  | ||||||
|                               @ref BLE_UUID_VS_COUNT_MAX. */ |  | ||||||
| } ble_common_cfg_vs_uuid_t; |  | ||||||
|  |  | ||||||
| /**@brief Common BLE Configuration type, wrapping the common configurations. */ |  | ||||||
| typedef union |  | ||||||
| { |  | ||||||
|   ble_common_cfg_vs_uuid_t  vs_uuid_cfg;  /**< Vendor specific UUID configuration, cfg_id is @ref BLE_COMMON_CFG_VS_UUID. */ |  | ||||||
| } ble_common_cfg_t; |  | ||||||
|  |  | ||||||
| /**@brief BLE Configuration type, wrapping the module specific configurations. */ |  | ||||||
| typedef union |  | ||||||
| { |  | ||||||
|   ble_conn_cfg_t    conn_cfg;   /**< Connection specific configurations, cfg_id in @ref BLE_CONN_CFGS series. */ |  | ||||||
|   ble_common_cfg_t  common_cfg; /**< Global common configurations, cfg_id in @ref BLE_COMMON_CFGS series. */ |  | ||||||
|   ble_gap_cfg_t     gap_cfg;    /**< Global GAP configurations, cfg_id in @ref BLE_GAP_CFGS series. */ |  | ||||||
|   ble_gatts_cfg_t   gatts_cfg;  /**< Global GATTS configuration, cfg_id in @ref BLE_GATTS_CFGS series. */ |  | ||||||
| } ble_cfg_t; |  | ||||||
|  |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
| /** @addtogroup BLE_COMMON_FUNCTIONS Functions |  | ||||||
|  * @{ */ |  | ||||||
|  |  | ||||||
| /**@brief Enable the BLE stack |  | ||||||
|  * |  | ||||||
|  * @param[in, out] p_app_ram_base   Pointer to a variable containing the start address of the |  | ||||||
|  *                                  application RAM region (APP_RAM_BASE). On return, this will |  | ||||||
|  *                                  contain the minimum start address of the application RAM region |  | ||||||
|  *                                  required by the SoftDevice for this configuration. |  | ||||||
|  * |  | ||||||
|  * @note The memory requirement for a specific configuration will not increase between SoftDevices |  | ||||||
|  *       with the same major version number. |  | ||||||
|  * |  | ||||||
|  * @note The value of *p_app_ram_base when the app has done no custom configuration of the |  | ||||||
|  *       SoftDevice, i.e. the app has not called @ref sd_ble_cfg_set before @ref sd_ble_enable, can |  | ||||||
|  *       be found in the release notes. |  | ||||||
|  * |  | ||||||
|  * @note At runtime the IC's RAM is split into 2 regions: The SoftDevice RAM region is located |  | ||||||
|  *       between 0x20000000 and APP_RAM_BASE-1 and the application's RAM region is located between |  | ||||||
|  *       APP_RAM_BASE and the start of the call stack. |  | ||||||
|  * |  | ||||||
|  * @details This call initializes the BLE stack, no BLE related function other than @ref |  | ||||||
|  *          sd_ble_cfg_set can be called before this one. |  | ||||||
|  * |  | ||||||
|  * @mscs |  | ||||||
|  * @mmsc{@ref BLE_COMMON_ENABLE} |  | ||||||
|  * @endmscs |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS              The BLE stack has been initialized successfully. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_STATE  The BLE stack had already been initialized and cannot be reinitialized. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_ADDR   Invalid or not sufficiently aligned pointer supplied. |  | ||||||
|  * @retval ::NRF_ERROR_NO_MEM         The amount of memory assigned to the SoftDevice by *p_app_ram_base is not |  | ||||||
|  *                                    large enough to fit this configuration's memory requirement. Check *p_app_ram_base |  | ||||||
|  *                                    and set the start address of the application RAM region accordingly. |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_BLE_ENABLE, uint32_t, sd_ble_enable(uint32_t * p_app_ram_base)); |  | ||||||
|  |  | ||||||
| /**@brief Add configurations for the BLE stack |  | ||||||
|  * |  | ||||||
|  * @param[in] cfg_id              Config ID, see @ref BLE_CONN_CFGS, @ref BLE_COMMON_CFGS, @ref |  | ||||||
|  *                                BLE_GAP_CFGS or @ref BLE_GATTS_CFGS. |  | ||||||
|  * @param[in] p_cfg               Pointer to a ble_cfg_t structure containing the configuration value. |  | ||||||
|  * @param[in] app_ram_base        The start address of the application RAM region (APP_RAM_BASE). |  | ||||||
|  *                                See @ref sd_ble_enable for details about APP_RAM_BASE. |  | ||||||
|  * |  | ||||||
|  * @note The memory requirement for a specific configuration will not increase between SoftDevices |  | ||||||
|  *       with the same major version number. |  | ||||||
|  * |  | ||||||
|  * @note If a configuration is set more than once, the last one set is the one that takes effect on |  | ||||||
|  *       @ref sd_ble_enable. |  | ||||||
|  * |  | ||||||
|  * @note Any part of the BLE stack that is NOT configured with @ref sd_ble_cfg_set will have default |  | ||||||
|  *       configuration. |  | ||||||
|  * |  | ||||||
|  * @note @ref sd_ble_cfg_set may be called at any time when the SoftDevice is enabled (see @ref |  | ||||||
|  *       sd_softdevice_enable) while the BLE part of the SoftDevice is not enabled (see @ref |  | ||||||
|  *       sd_ble_enable). |  | ||||||
|  * |  | ||||||
|  * @note Error codes for the configurations are described in the configuration structs. |  | ||||||
|  * |  | ||||||
|  * @mscs |  | ||||||
|  * @mmsc{@ref BLE_COMMON_ENABLE} |  | ||||||
|  * @endmscs |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS              The configuration has been added successfully. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_STATE  The BLE stack had already been initialized. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_ADDR   Invalid or not sufficiently aligned pointer supplied. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_PARAM  Invalid cfg_id supplied. |  | ||||||
|  * @retval ::NRF_ERROR_NO_MEM         The amount of memory assigned to the SoftDevice by app_ram_base is not |  | ||||||
|  *                                    large enough to fit this configuration's memory requirement. |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_BLE_CFG_SET, uint32_t, sd_ble_cfg_set(uint32_t cfg_id, ble_cfg_t const * p_cfg, uint32_t app_ram_base)); |  | ||||||
|  |  | ||||||
| /**@brief Get an event from the pending events queue. |  | ||||||
|  * |  | ||||||
|  * @param[out] p_dest Pointer to buffer to be filled in with an event, or NULL to retrieve the event length. |  | ||||||
|  *                    This buffer <b>must be aligned to the extend defined by @ref BLE_EVT_PTR_ALIGNMENT</b>. |  | ||||||
|  *                    The buffer should be interpreted as a @ref ble_evt_t struct. |  | ||||||
|  * @param[in, out] p_len Pointer the length of the buffer, on return it is filled with the event length. |  | ||||||
|  * |  | ||||||
|  * @details This call allows the application to pull a BLE event from the BLE stack. The application is signaled that |  | ||||||
|  * an event is available from the BLE stack by the triggering of the SD_EVT_IRQn interrupt. |  | ||||||
|  * The application is free to choose whether to call this function from thread mode (main context) or directly from the |  | ||||||
|  * Interrupt Service Routine that maps to SD_EVT_IRQn. In any case however, and because the BLE stack runs at a higher |  | ||||||
|  * priority than the application, this function should be called in a loop (until @ref NRF_ERROR_NOT_FOUND is returned) |  | ||||||
|  * every time SD_EVT_IRQn is raised to ensure that all available events are pulled from the BLE stack. Failure to do so |  | ||||||
|  * could potentially leave events in the internal queue without the application being aware of this fact. |  | ||||||
|  * |  | ||||||
|  * Sizing the p_dest buffer is equally important, since the application needs to provide all the memory necessary for the event to |  | ||||||
|  * be copied into application memory. If the buffer provided is not large enough to fit the entire contents of the event, |  | ||||||
|  * @ref NRF_ERROR_DATA_SIZE will be returned and the application can then call again with a larger buffer size. |  | ||||||
|  * The maximum possible event length is defined by @ref BLE_EVT_LEN_MAX. The application may also "peek" the event length |  | ||||||
|  * by providing p_dest as a NULL pointer and inspecting the value of *p_len upon return: |  | ||||||
|  * |  | ||||||
|  *     \code |  | ||||||
|  *     uint16_t len; |  | ||||||
|  *     errcode = sd_ble_evt_get(NULL, &len); |  | ||||||
|  *     \endcode |  | ||||||
|  * |  | ||||||
|  * @mscs |  | ||||||
|  * @mmsc{@ref BLE_COMMON_IRQ_EVT_MSC} |  | ||||||
|  * @mmsc{@ref BLE_COMMON_THREAD_EVT_MSC} |  | ||||||
|  * @endmscs |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS Event pulled and stored into the supplied buffer. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_ADDR Invalid or not sufficiently aligned pointer supplied. |  | ||||||
|  * @retval ::NRF_ERROR_NOT_FOUND No events ready to be pulled. |  | ||||||
|  * @retval ::NRF_ERROR_DATA_SIZE Event ready but could not fit into the supplied buffer. |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_BLE_EVT_GET, uint32_t, sd_ble_evt_get(uint8_t *p_dest, uint16_t *p_len)); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /**@brief Add a Vendor Specific base UUID. |  | ||||||
|  * |  | ||||||
|  * @details This call enables the application to add a vendor specific base UUID to the BLE stack's table, for later |  | ||||||
|  * use with all other modules and APIs. This then allows the application to use the shorter, 24-bit @ref ble_uuid_t |  | ||||||
|  * format when dealing with both 16-bit and 128-bit UUIDs without having to check for lengths and having split code |  | ||||||
|  * paths. This is accomplished by extending the grouping mechanism that the Bluetooth SIG standard base UUID uses |  | ||||||
|  * for all other 128-bit UUIDs. The type field in the @ref ble_uuid_t structure is an index (relative to |  | ||||||
|  * @ref BLE_UUID_TYPE_VENDOR_BEGIN) to the table populated by multiple calls to this function, and the UUID field |  | ||||||
|  * in the same structure contains the 2 bytes at indexes 12 and 13. The number of possible 128-bit UUIDs available to |  | ||||||
|  * the application is therefore the number of Vendor Specific UUIDs added with the help of this function times 65536, |  | ||||||
|  * although restricted to modifying bytes 12 and 13 for each of the entries in the supplied array. |  | ||||||
|  * |  | ||||||
|  * @note Bytes 12 and 13 of the provided UUID will not be used internally, since those are always replaced by |  | ||||||
|  * the 16-bit uuid field in @ref ble_uuid_t. |  | ||||||
|  * |  | ||||||
|  * @note If a UUID is already present in the BLE stack's internal table, the corresponding index will be returned in |  | ||||||
|  * p_uuid_type along with an @ref NRF_SUCCESS error code. |  | ||||||
|  * |  | ||||||
|  * @param[in]  p_vs_uuid    Pointer to a 16-octet (128-bit) little endian Vendor Specific UUID disregarding |  | ||||||
|  *                          bytes 12 and 13. |  | ||||||
|  * @param[out] p_uuid_type  Pointer to a uint8_t where the type field in @ref ble_uuid_t corresponding to this UUID will be stored. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS Successfully added the Vendor Specific UUID. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_ADDR If p_vs_uuid or p_uuid_type is NULL or invalid. |  | ||||||
|  * @retval ::NRF_ERROR_NO_MEM If there are no more free slots for VS UUIDs. |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_BLE_UUID_VS_ADD, uint32_t, sd_ble_uuid_vs_add(ble_uuid128_t const *p_vs_uuid, uint8_t *p_uuid_type)); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /** @brief Decode little endian raw UUID bytes (16-bit or 128-bit) into a 24 bit @ref ble_uuid_t structure. |  | ||||||
|  * |  | ||||||
|  * @details The raw UUID bytes excluding bytes 12 and 13 (i.e. bytes 0-11 and 14-15) of p_uuid_le are compared |  | ||||||
|  * to the corresponding ones in each entry of the table of vendor specific UUIDs populated with @ref sd_ble_uuid_vs_add |  | ||||||
|  * to look for a match. If there is such a match, bytes 12 and 13 are returned as p_uuid->uuid and the index |  | ||||||
|  * relative to @ref BLE_UUID_TYPE_VENDOR_BEGIN as p_uuid->type. |  | ||||||
|  * |  | ||||||
|  * @note If the UUID length supplied is 2, then the type set by this call will always be @ref BLE_UUID_TYPE_BLE. |  | ||||||
|  * |  | ||||||
|  * @param[in]   uuid_le_len Length in bytes of the buffer pointed to by p_uuid_le (must be 2 or 16 bytes). |  | ||||||
|  * @param[in]   p_uuid_le   Pointer pointing to little endian raw UUID bytes. |  | ||||||
|  * @param[out]  p_uuid      Pointer to a @ref ble_uuid_t structure to be filled in. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS Successfully decoded into the @ref ble_uuid_t structure. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_LENGTH Invalid UUID length. |  | ||||||
|  * @retval ::NRF_ERROR_NOT_FOUND For a 128-bit UUID, no match in the populated table of UUIDs. |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_BLE_UUID_DECODE, uint32_t, sd_ble_uuid_decode(uint8_t uuid_le_len, uint8_t const *p_uuid_le, ble_uuid_t *p_uuid)); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /** @brief Encode a @ref ble_uuid_t structure into little endian raw UUID bytes (16-bit or 128-bit). |  | ||||||
|  * |  | ||||||
|  * @note The pointer to the destination buffer p_uuid_le may be NULL, in which case only the validity and size of p_uuid is computed. |  | ||||||
|  * |  | ||||||
|  * @param[in]   p_uuid        Pointer to a @ref ble_uuid_t structure that will be encoded into bytes. |  | ||||||
|  * @param[out]  p_uuid_le_len Pointer to a uint8_t that will be filled with the encoded length (2 or 16 bytes). |  | ||||||
|  * @param[out]  p_uuid_le     Pointer to a buffer where the little endian raw UUID bytes (2 or 16) will be stored. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS Successfully encoded into the buffer. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_PARAM Invalid UUID type. |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_BLE_UUID_ENCODE, uint32_t, sd_ble_uuid_encode(ble_uuid_t const *p_uuid, uint8_t *p_uuid_le_len, uint8_t *p_uuid_le)); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /**@brief Get Version Information. |  | ||||||
|  * |  | ||||||
|  * @details This call allows the application to get the BLE stack version information. |  | ||||||
|  * |  | ||||||
|  * @param[out] p_version Pointer to a ble_version_t structure to be filled in. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS  Version information stored successfully. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. |  | ||||||
|  * @retval ::NRF_ERROR_BUSY The BLE stack is busy (typically doing a locally-initiated disconnection procedure). |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_BLE_VERSION_GET, uint32_t, sd_ble_version_get(ble_version_t *p_version)); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /**@brief Provide a user memory block. |  | ||||||
|  * |  | ||||||
|  * @note This call can only be used as a response to a @ref BLE_EVT_USER_MEM_REQUEST event issued to the application. |  | ||||||
|  * |  | ||||||
|  * @param[in] conn_handle Connection handle. |  | ||||||
|  * @param[in] p_block Pointer to a user memory block structure or NULL if memory is managed by the application. |  | ||||||
|  * |  | ||||||
|  * @mscs |  | ||||||
|  * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_PEER_CANCEL_MSC} |  | ||||||
|  * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_NOBUF_AUTH_MSC} |  | ||||||
|  * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_NOBUF_NOAUTH_MSC} |  | ||||||
|  * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_BUF_AUTH_MSC} |  | ||||||
|  * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_BUF_NOAUTH_MSC} |  | ||||||
|  * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_QUEUE_FULL_MSC} |  | ||||||
|  * @endmscs |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS Successfully queued a response to the peer. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. |  | ||||||
|  * @retval ::NRF_ERROR_BUSY The stack is busy, process pending events and retry. |  | ||||||
|  * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_LENGTH Invalid user memory block length supplied. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection state or no user memory request pending. |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_BLE_USER_MEM_REPLY, uint32_t, sd_ble_user_mem_reply(uint16_t conn_handle, ble_user_mem_block_t const *p_block)); |  | ||||||
|  |  | ||||||
| /**@brief Set a BLE option. |  | ||||||
|  * |  | ||||||
|  * @details This call allows the application to set the value of an option. |  | ||||||
|  * |  | ||||||
|  * @mscs |  | ||||||
|  * @mmsc{@ref BLE_GAP_PERIPH_BONDING_STATIC_PK_MSC} |  | ||||||
|  * @endmscs |  | ||||||
|  * |  | ||||||
|  * @param[in] opt_id Option ID, see @ref BLE_COMMON_OPTS and @ref BLE_GAP_OPTS. |  | ||||||
|  * @param[in] p_opt Pointer to a ble_opt_t structure containing the option value. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS  Option set successfully. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. |  | ||||||
|  * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, check parameter limits and constraints. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_STATE Unable to set the parameter at this time. |  | ||||||
|  * @retval ::NRF_ERROR_BUSY The BLE stack is busy or the previous procedure has not completed. |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_BLE_OPT_SET, uint32_t, sd_ble_opt_set(uint32_t opt_id, ble_opt_t const *p_opt)); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /**@brief Get a BLE option. |  | ||||||
|  * |  | ||||||
|  * @details This call allows the application to retrieve the value of an option. |  | ||||||
|  * |  | ||||||
|  * @param[in] opt_id Option ID, see @ref BLE_COMMON_OPTS and @ref BLE_GAP_OPTS. |  | ||||||
|  * @param[out] p_opt Pointer to a ble_opt_t structure to be filled in. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS  Option retrieved successfully. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. |  | ||||||
|  * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, check parameter limits and constraints. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_STATE Unable to retrieve the parameter at this time. |  | ||||||
|  * @retval ::NRF_ERROR_BUSY The BLE stack is busy or the previous procedure has not completed. |  | ||||||
|  * @retval ::NRF_ERROR_NOT_SUPPORTED This option is not supported. |  | ||||||
|  * |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_BLE_OPT_GET, uint32_t, sd_ble_opt_get(uint32_t opt_id, ble_opt_t *p_opt)); |  | ||||||
|  |  | ||||||
| /** @} */ |  | ||||||
| #ifdef __cplusplus |  | ||||||
| } |  | ||||||
| #endif |  | ||||||
| #endif /* BLE_H__ */ |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|   @} |  | ||||||
|   @} |  | ||||||
| */ |  | ||||||
| @@ -1,93 +0,0 @@ | |||||||
| /* |  | ||||||
|  * Copyright (c) 2012 - 2018, Nordic Semiconductor ASA |  | ||||||
|  * All rights reserved. |  | ||||||
|  * |  | ||||||
|  * Redistribution and use in source and binary forms, with or without modification, |  | ||||||
|  * are permitted provided that the following conditions are met: |  | ||||||
|  * |  | ||||||
|  * 1. Redistributions of source code must retain the above copyright notice, this |  | ||||||
|  *    list of conditions and the following disclaimer. |  | ||||||
|  * |  | ||||||
|  * 2. Redistributions in binary form, except as embedded into a Nordic |  | ||||||
|  *    Semiconductor ASA integrated circuit in a product or a software update for |  | ||||||
|  *    such product, must reproduce the above copyright notice, this list of |  | ||||||
|  *    conditions and the following disclaimer in the documentation and/or other |  | ||||||
|  *    materials provided with the distribution. |  | ||||||
|  * |  | ||||||
|  * 3. Neither the name of Nordic Semiconductor ASA nor the names of its |  | ||||||
|  *    contributors may be used to endorse or promote products derived from this |  | ||||||
|  *    software without specific prior written permission. |  | ||||||
|  * |  | ||||||
|  * 4. This software, with or without modification, must only be used with a |  | ||||||
|  *    Nordic Semiconductor ASA integrated circuit. |  | ||||||
|  * |  | ||||||
|  * 5. Any software provided in binary form under this license must not be reverse |  | ||||||
|  *    engineered, decompiled, modified and/or disassembled. |  | ||||||
|  * |  | ||||||
|  * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS |  | ||||||
|  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |  | ||||||
|  * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE |  | ||||||
|  * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE |  | ||||||
|  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |  | ||||||
|  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE |  | ||||||
|  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |  | ||||||
|  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |  | ||||||
|  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT |  | ||||||
|  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |  | ||||||
|  */ |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|   @addtogroup BLE_COMMON |  | ||||||
|   @{ |  | ||||||
|   @addtogroup  nrf_error |  | ||||||
|   @{ |  | ||||||
|     @ingroup BLE_COMMON |  | ||||||
|   @} |  | ||||||
|  |  | ||||||
|   @defgroup ble_err General error codes |  | ||||||
|   @{ |  | ||||||
|  |  | ||||||
|   @brief General error code definitions for the BLE API. |  | ||||||
|  |  | ||||||
|   @ingroup BLE_COMMON |  | ||||||
| */ |  | ||||||
| #ifndef NRF_BLE_ERR_H__ |  | ||||||
| #define NRF_BLE_ERR_H__ |  | ||||||
|  |  | ||||||
| #include "nrf_error.h" |  | ||||||
|  |  | ||||||
| #ifdef __cplusplus |  | ||||||
| extern "C" { |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| /* @defgroup BLE_ERRORS Error Codes |  | ||||||
|  * @{ */ |  | ||||||
| #define BLE_ERROR_NOT_ENABLED            (NRF_ERROR_STK_BASE_NUM+0x001) /**< @ref sd_ble_enable has not been called. */ |  | ||||||
| #define BLE_ERROR_INVALID_CONN_HANDLE    (NRF_ERROR_STK_BASE_NUM+0x002) /**< Invalid connection handle. */ |  | ||||||
| #define BLE_ERROR_INVALID_ATTR_HANDLE    (NRF_ERROR_STK_BASE_NUM+0x003) /**< Invalid attribute handle. */ |  | ||||||
| #define BLE_ERROR_INVALID_ADV_HANDLE     (NRF_ERROR_STK_BASE_NUM+0x004) /**< Invalid advertising handle. */ |  | ||||||
| #define BLE_ERROR_INVALID_ROLE           (NRF_ERROR_STK_BASE_NUM+0x005) /**< Invalid role. */ |  | ||||||
| #define BLE_ERROR_BLOCKED_BY_OTHER_LINKS (NRF_ERROR_STK_BASE_NUM+0x006) /**< The attempt to change link settings failed due to the scheduling of other links. */ |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /** @defgroup BLE_ERROR_SUBRANGES Module specific error code subranges |  | ||||||
|  *  @brief Assignment of subranges for module specific error codes. |  | ||||||
|  *  @note For specific error codes, see ble_<module>.h or ble_error_<module>.h. |  | ||||||
|  * @{ */ |  | ||||||
| #define NRF_L2CAP_ERR_BASE             (NRF_ERROR_STK_BASE_NUM+0x100) /**< L2CAP specific errors. */ |  | ||||||
| #define NRF_GAP_ERR_BASE               (NRF_ERROR_STK_BASE_NUM+0x200) /**< GAP specific errors. */ |  | ||||||
| #define NRF_GATTC_ERR_BASE             (NRF_ERROR_STK_BASE_NUM+0x300) /**< GATT client specific errors. */ |  | ||||||
| #define NRF_GATTS_ERR_BASE             (NRF_ERROR_STK_BASE_NUM+0x400) /**< GATT server specific errors. */ |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
| #ifdef __cplusplus |  | ||||||
| } |  | ||||||
| #endif |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|   @} |  | ||||||
|   @} |  | ||||||
| */ |  | ||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -1,228 +0,0 @@ | |||||||
| /* |  | ||||||
|  * Copyright (c) 2013 - 2017, Nordic Semiconductor ASA |  | ||||||
|  * All rights reserved. |  | ||||||
|  * |  | ||||||
|  * Redistribution and use in source and binary forms, with or without modification, |  | ||||||
|  * are permitted provided that the following conditions are met: |  | ||||||
|  * |  | ||||||
|  * 1. Redistributions of source code must retain the above copyright notice, this |  | ||||||
|  *    list of conditions and the following disclaimer. |  | ||||||
|  * |  | ||||||
|  * 2. Redistributions in binary form, except as embedded into a Nordic |  | ||||||
|  *    Semiconductor ASA integrated circuit in a product or a software update for |  | ||||||
|  *    such product, must reproduce the above copyright notice, this list of |  | ||||||
|  *    conditions and the following disclaimer in the documentation and/or other |  | ||||||
|  *    materials provided with the distribution. |  | ||||||
|  * |  | ||||||
|  * 3. Neither the name of Nordic Semiconductor ASA nor the names of its |  | ||||||
|  *    contributors may be used to endorse or promote products derived from this |  | ||||||
|  *    software without specific prior written permission. |  | ||||||
|  * |  | ||||||
|  * 4. This software, with or without modification, must only be used with a |  | ||||||
|  *    Nordic Semiconductor ASA integrated circuit. |  | ||||||
|  * |  | ||||||
|  * 5. Any software provided in binary form under this license must not be reverse |  | ||||||
|  *    engineered, decompiled, modified and/or disassembled. |  | ||||||
|  * |  | ||||||
|  * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS |  | ||||||
|  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |  | ||||||
|  * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE |  | ||||||
|  * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE |  | ||||||
|  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |  | ||||||
|  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE |  | ||||||
|  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |  | ||||||
|  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |  | ||||||
|  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT |  | ||||||
|  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |  | ||||||
|  */ |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|   @addtogroup BLE_GATT Generic Attribute Profile (GATT) Common |  | ||||||
|   @{ |  | ||||||
|   @brief  Common definitions and prototypes for the GATT interfaces. |  | ||||||
|  */ |  | ||||||
|  |  | ||||||
| #ifndef BLE_GATT_H__ |  | ||||||
| #define BLE_GATT_H__ |  | ||||||
|  |  | ||||||
| #include <stdint.h> |  | ||||||
| #include "nrf_svc.h" |  | ||||||
| #include "nrf_error.h" |  | ||||||
| #include "ble_hci.h" |  | ||||||
| #include "ble_ranges.h" |  | ||||||
| #include "ble_types.h" |  | ||||||
| #include "ble_err.h" |  | ||||||
|  |  | ||||||
| #ifdef __cplusplus |  | ||||||
| extern "C" { |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| /** @addtogroup BLE_GATT_DEFINES Defines |  | ||||||
|  * @{ */ |  | ||||||
|  |  | ||||||
| /** @brief Default ATT MTU, in bytes. */ |  | ||||||
| #define BLE_GATT_ATT_MTU_DEFAULT          23 |  | ||||||
|  |  | ||||||
| /**@brief Invalid Attribute Handle. */ |  | ||||||
| #define BLE_GATT_HANDLE_INVALID            0x0000 |  | ||||||
|  |  | ||||||
| /**@brief First Attribute Handle. */ |  | ||||||
| #define BLE_GATT_HANDLE_START              0x0001 |  | ||||||
|  |  | ||||||
| /**@brief Last Attribute Handle. */ |  | ||||||
| #define BLE_GATT_HANDLE_END                0xFFFF |  | ||||||
|  |  | ||||||
| /** @defgroup BLE_GATT_TIMEOUT_SOURCES GATT Timeout sources |  | ||||||
|  * @{ */ |  | ||||||
| #define BLE_GATT_TIMEOUT_SRC_PROTOCOL      0x00  /**< ATT Protocol timeout. */ |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
| /** @defgroup BLE_GATT_WRITE_OPS GATT Write operations |  | ||||||
|  * @{ */ |  | ||||||
| #define BLE_GATT_OP_INVALID                0x00  /**< Invalid Operation. */ |  | ||||||
| #define BLE_GATT_OP_WRITE_REQ              0x01  /**< Write Request. */ |  | ||||||
| #define BLE_GATT_OP_WRITE_CMD              0x02  /**< Write Command. */ |  | ||||||
| #define BLE_GATT_OP_SIGN_WRITE_CMD         0x03  /**< Signed Write Command. */ |  | ||||||
| #define BLE_GATT_OP_PREP_WRITE_REQ         0x04  /**< Prepare Write Request. */ |  | ||||||
| #define BLE_GATT_OP_EXEC_WRITE_REQ         0x05  /**< Execute Write Request. */ |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
| /** @defgroup BLE_GATT_EXEC_WRITE_FLAGS GATT Execute Write flags |  | ||||||
|  * @{ */ |  | ||||||
| #define BLE_GATT_EXEC_WRITE_FLAG_PREPARED_CANCEL 0x00   /**< Cancel prepared write. */ |  | ||||||
| #define BLE_GATT_EXEC_WRITE_FLAG_PREPARED_WRITE  0x01   /**< Execute prepared write. */ |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
| /** @defgroup BLE_GATT_HVX_TYPES GATT Handle Value operations |  | ||||||
|  * @{ */ |  | ||||||
| #define BLE_GATT_HVX_INVALID               0x00  /**< Invalid Operation. */ |  | ||||||
| #define BLE_GATT_HVX_NOTIFICATION          0x01  /**< Handle Value Notification. */ |  | ||||||
| #define BLE_GATT_HVX_INDICATION            0x02  /**< Handle Value Indication. */ |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
| /** @defgroup BLE_GATT_STATUS_CODES GATT Status Codes |  | ||||||
|  * @{ */ |  | ||||||
| #define BLE_GATT_STATUS_SUCCESS                           0x0000  /**< Success. */ |  | ||||||
| #define BLE_GATT_STATUS_UNKNOWN                           0x0001  /**< Unknown or not applicable status. */ |  | ||||||
| #define BLE_GATT_STATUS_ATTERR_INVALID                    0x0100  /**< ATT Error: Invalid Error Code. */ |  | ||||||
| #define BLE_GATT_STATUS_ATTERR_INVALID_HANDLE             0x0101  /**< ATT Error: Invalid Attribute Handle. */ |  | ||||||
| #define BLE_GATT_STATUS_ATTERR_READ_NOT_PERMITTED         0x0102  /**< ATT Error: Read not permitted. */ |  | ||||||
| #define BLE_GATT_STATUS_ATTERR_WRITE_NOT_PERMITTED        0x0103  /**< ATT Error: Write not permitted. */ |  | ||||||
| #define BLE_GATT_STATUS_ATTERR_INVALID_PDU                0x0104  /**< ATT Error: Used in ATT as Invalid PDU. */ |  | ||||||
| #define BLE_GATT_STATUS_ATTERR_INSUF_AUTHENTICATION       0x0105  /**< ATT Error: Authenticated link required. */ |  | ||||||
| #define BLE_GATT_STATUS_ATTERR_REQUEST_NOT_SUPPORTED      0x0106  /**< ATT Error: Used in ATT as Request Not Supported. */ |  | ||||||
| #define BLE_GATT_STATUS_ATTERR_INVALID_OFFSET             0x0107  /**< ATT Error: Offset specified was past the end of the attribute. */ |  | ||||||
| #define BLE_GATT_STATUS_ATTERR_INSUF_AUTHORIZATION        0x0108  /**< ATT Error: Used in ATT as Insufficient Authorization. */ |  | ||||||
| #define BLE_GATT_STATUS_ATTERR_PREPARE_QUEUE_FULL         0x0109  /**< ATT Error: Used in ATT as Prepare Queue Full. */ |  | ||||||
| #define BLE_GATT_STATUS_ATTERR_ATTRIBUTE_NOT_FOUND        0x010A  /**< ATT Error: Used in ATT as Attribute not found. */ |  | ||||||
| #define BLE_GATT_STATUS_ATTERR_ATTRIBUTE_NOT_LONG         0x010B  /**< ATT Error: Attribute cannot be read or written using read/write blob requests. */ |  | ||||||
| #define BLE_GATT_STATUS_ATTERR_INSUF_ENC_KEY_SIZE         0x010C  /**< ATT Error: Encryption key size used is insufficient. */ |  | ||||||
| #define BLE_GATT_STATUS_ATTERR_INVALID_ATT_VAL_LENGTH     0x010D  /**< ATT Error: Invalid value size. */ |  | ||||||
| #define BLE_GATT_STATUS_ATTERR_UNLIKELY_ERROR             0x010E  /**< ATT Error: Very unlikely error. */ |  | ||||||
| #define BLE_GATT_STATUS_ATTERR_INSUF_ENCRYPTION           0x010F  /**< ATT Error: Encrypted link required. */ |  | ||||||
| #define BLE_GATT_STATUS_ATTERR_UNSUPPORTED_GROUP_TYPE     0x0110  /**< ATT Error: Attribute type is not a supported grouping attribute. */ |  | ||||||
| #define BLE_GATT_STATUS_ATTERR_INSUF_RESOURCES            0x0111  /**< ATT Error: Encrypted link required. */ |  | ||||||
| #define BLE_GATT_STATUS_ATTERR_RFU_RANGE1_BEGIN           0x0112  /**< ATT Error: Reserved for Future Use range #1 begin. */ |  | ||||||
| #define BLE_GATT_STATUS_ATTERR_RFU_RANGE1_END             0x017F  /**< ATT Error: Reserved for Future Use range #1 end. */ |  | ||||||
| #define BLE_GATT_STATUS_ATTERR_APP_BEGIN                  0x0180  /**< ATT Error: Application range begin. */ |  | ||||||
| #define BLE_GATT_STATUS_ATTERR_APP_END                    0x019F  /**< ATT Error: Application range end. */ |  | ||||||
| #define BLE_GATT_STATUS_ATTERR_RFU_RANGE2_BEGIN           0x01A0  /**< ATT Error: Reserved for Future Use range #2 begin. */ |  | ||||||
| #define BLE_GATT_STATUS_ATTERR_RFU_RANGE2_END             0x01DF  /**< ATT Error: Reserved for Future Use range #2 end. */ |  | ||||||
| #define BLE_GATT_STATUS_ATTERR_RFU_RANGE3_BEGIN           0x01E0  /**< ATT Error: Reserved for Future Use range #3 begin. */ |  | ||||||
| #define BLE_GATT_STATUS_ATTERR_RFU_RANGE3_END             0x01FC  /**< ATT Error: Reserved for Future Use range #3 end. */ |  | ||||||
| #define BLE_GATT_STATUS_ATTERR_CPS_CCCD_CONFIG_ERROR      0x01FD  /**< ATT Common Profile and Service Error: Client Characteristic Configuration Descriptor improperly configured. */ |  | ||||||
| #define BLE_GATT_STATUS_ATTERR_CPS_PROC_ALR_IN_PROG       0x01FE  /**< ATT Common Profile and Service Error: Procedure Already in Progress. */ |  | ||||||
| #define BLE_GATT_STATUS_ATTERR_CPS_OUT_OF_RANGE           0x01FF  /**< ATT Common Profile and Service Error: Out Of Range. */ |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /** @defgroup BLE_GATT_CPF_FORMATS Characteristic Presentation Formats |  | ||||||
|  *  @note Found at http://developer.bluetooth.org/gatt/descriptors/Pages/DescriptorViewer.aspx?u=org.bluetooth.descriptor.gatt.characteristic_presentation_format.xml |  | ||||||
|  * @{ */ |  | ||||||
| #define BLE_GATT_CPF_FORMAT_RFU                 0x00 /**< Reserved For Future Use. */ |  | ||||||
| #define BLE_GATT_CPF_FORMAT_BOOLEAN             0x01 /**< Boolean. */ |  | ||||||
| #define BLE_GATT_CPF_FORMAT_2BIT                0x02 /**< Unsigned 2-bit integer. */ |  | ||||||
| #define BLE_GATT_CPF_FORMAT_NIBBLE              0x03 /**< Unsigned 4-bit integer. */ |  | ||||||
| #define BLE_GATT_CPF_FORMAT_UINT8               0x04 /**< Unsigned 8-bit integer. */ |  | ||||||
| #define BLE_GATT_CPF_FORMAT_UINT12              0x05 /**< Unsigned 12-bit integer. */ |  | ||||||
| #define BLE_GATT_CPF_FORMAT_UINT16              0x06 /**< Unsigned 16-bit integer. */ |  | ||||||
| #define BLE_GATT_CPF_FORMAT_UINT24              0x07 /**< Unsigned 24-bit integer. */ |  | ||||||
| #define BLE_GATT_CPF_FORMAT_UINT32              0x08 /**< Unsigned 32-bit integer. */ |  | ||||||
| #define BLE_GATT_CPF_FORMAT_UINT48              0x09 /**< Unsigned 48-bit integer. */ |  | ||||||
| #define BLE_GATT_CPF_FORMAT_UINT64              0x0A /**< Unsigned 64-bit integer. */ |  | ||||||
| #define BLE_GATT_CPF_FORMAT_UINT128             0x0B /**< Unsigned 128-bit integer. */ |  | ||||||
| #define BLE_GATT_CPF_FORMAT_SINT8               0x0C /**< Signed 2-bit integer. */ |  | ||||||
| #define BLE_GATT_CPF_FORMAT_SINT12              0x0D /**< Signed 12-bit integer. */ |  | ||||||
| #define BLE_GATT_CPF_FORMAT_SINT16              0x0E /**< Signed 16-bit integer. */ |  | ||||||
| #define BLE_GATT_CPF_FORMAT_SINT24              0x0F /**< Signed 24-bit integer. */ |  | ||||||
| #define BLE_GATT_CPF_FORMAT_SINT32              0x10 /**< Signed 32-bit integer. */ |  | ||||||
| #define BLE_GATT_CPF_FORMAT_SINT48              0x11 /**< Signed 48-bit integer. */ |  | ||||||
| #define BLE_GATT_CPF_FORMAT_SINT64              0x12 /**< Signed 64-bit integer. */ |  | ||||||
| #define BLE_GATT_CPF_FORMAT_SINT128             0x13 /**< Signed 128-bit integer. */ |  | ||||||
| #define BLE_GATT_CPF_FORMAT_FLOAT32             0x14 /**< IEEE-754 32-bit floating point. */ |  | ||||||
| #define BLE_GATT_CPF_FORMAT_FLOAT64             0x15 /**< IEEE-754 64-bit floating point. */ |  | ||||||
| #define BLE_GATT_CPF_FORMAT_SFLOAT              0x16 /**< IEEE-11073 16-bit SFLOAT. */ |  | ||||||
| #define BLE_GATT_CPF_FORMAT_FLOAT               0x17 /**< IEEE-11073 32-bit FLOAT. */ |  | ||||||
| #define BLE_GATT_CPF_FORMAT_DUINT16             0x18 /**< IEEE-20601 format. */ |  | ||||||
| #define BLE_GATT_CPF_FORMAT_UTF8S               0x19 /**< UTF-8 string. */ |  | ||||||
| #define BLE_GATT_CPF_FORMAT_UTF16S              0x1A /**< UTF-16 string. */ |  | ||||||
| #define BLE_GATT_CPF_FORMAT_STRUCT              0x1B /**< Opaque Structure. */ |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
| /** @defgroup BLE_GATT_CPF_NAMESPACES GATT Bluetooth Namespaces |  | ||||||
|  * @{ |  | ||||||
|  */ |  | ||||||
| #define BLE_GATT_CPF_NAMESPACE_BTSIG            0x01 /**< Bluetooth SIG defined Namespace. */ |  | ||||||
| #define BLE_GATT_CPF_NAMESPACE_DESCRIPTION_UNKNOWN 0x0000 /**< Namespace Description Unknown. */ |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
| /** @addtogroup BLE_GATT_STRUCTURES Structures |  | ||||||
|  * @{ */ |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|  * @brief BLE GATT connection configuration parameters, set with @ref sd_ble_cfg_set. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_PARAM att_mtu is smaller than @ref BLE_GATT_ATT_MTU_DEFAULT. |  | ||||||
|  */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint16_t  att_mtu;          /**< Maximum size of ATT packet the SoftDevice can send or receive. |  | ||||||
|                                    The default and minimum value is @ref BLE_GATT_ATT_MTU_DEFAULT. |  | ||||||
|                                    @mscs |  | ||||||
|                                    @mmsc{@ref BLE_GATTC_MTU_EXCHANGE} |  | ||||||
|                                    @mmsc{@ref BLE_GATTS_MTU_EXCHANGE} |  | ||||||
|                                    @endmscs |  | ||||||
|                               */ |  | ||||||
| } ble_gatt_conn_cfg_t; |  | ||||||
|  |  | ||||||
| /**@brief GATT Characteristic Properties. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   /* Standard properties */ |  | ||||||
|   uint8_t broadcast       :1; /**< Broadcasting of the value permitted. */ |  | ||||||
|   uint8_t read            :1; /**< Reading the value permitted. */ |  | ||||||
|   uint8_t write_wo_resp   :1; /**< Writing the value with Write Command permitted. */ |  | ||||||
|   uint8_t write           :1; /**< Writing the value with Write Request permitted. */ |  | ||||||
|   uint8_t notify          :1; /**< Notification of the value permitted. */ |  | ||||||
|   uint8_t indicate        :1; /**< Indications of the value permitted. */ |  | ||||||
|   uint8_t auth_signed_wr  :1; /**< Writing the value with Signed Write Command permitted. */ |  | ||||||
| } ble_gatt_char_props_t; |  | ||||||
|  |  | ||||||
| /**@brief GATT Characteristic Extended Properties. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   /* Extended properties */ |  | ||||||
|   uint8_t reliable_wr     :1; /**< Writing the value with Queued Write operations permitted. */ |  | ||||||
|   uint8_t wr_aux          :1; /**< Writing the Characteristic User Description descriptor permitted. */ |  | ||||||
| } ble_gatt_char_ext_props_t; |  | ||||||
|  |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
| #ifdef __cplusplus |  | ||||||
| } |  | ||||||
| #endif |  | ||||||
| #endif // BLE_GATT_H__ |  | ||||||
|  |  | ||||||
| /** @} */ |  | ||||||
| @@ -1,715 +0,0 @@ | |||||||
| /* |  | ||||||
|  * Copyright (c) 2011 - 2017, Nordic Semiconductor ASA |  | ||||||
|  * All rights reserved. |  | ||||||
|  * |  | ||||||
|  * Redistribution and use in source and binary forms, with or without modification, |  | ||||||
|  * are permitted provided that the following conditions are met: |  | ||||||
|  * |  | ||||||
|  * 1. Redistributions of source code must retain the above copyright notice, this |  | ||||||
|  *    list of conditions and the following disclaimer. |  | ||||||
|  * |  | ||||||
|  * 2. Redistributions in binary form, except as embedded into a Nordic |  | ||||||
|  *    Semiconductor ASA integrated circuit in a product or a software update for |  | ||||||
|  *    such product, must reproduce the above copyright notice, this list of |  | ||||||
|  *    conditions and the following disclaimer in the documentation and/or other |  | ||||||
|  *    materials provided with the distribution. |  | ||||||
|  * |  | ||||||
|  * 3. Neither the name of Nordic Semiconductor ASA nor the names of its |  | ||||||
|  *    contributors may be used to endorse or promote products derived from this |  | ||||||
|  *    software without specific prior written permission. |  | ||||||
|  * |  | ||||||
|  * 4. This software, with or without modification, must only be used with a |  | ||||||
|  *    Nordic Semiconductor ASA integrated circuit. |  | ||||||
|  * |  | ||||||
|  * 5. Any software provided in binary form under this license must not be reverse |  | ||||||
|  *    engineered, decompiled, modified and/or disassembled. |  | ||||||
|  * |  | ||||||
|  * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS |  | ||||||
|  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |  | ||||||
|  * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE |  | ||||||
|  * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE |  | ||||||
|  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |  | ||||||
|  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE |  | ||||||
|  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |  | ||||||
|  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |  | ||||||
|  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT |  | ||||||
|  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |  | ||||||
|  */ |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|   @addtogroup BLE_GATTC Generic Attribute Profile (GATT) Client |  | ||||||
|   @{ |  | ||||||
|   @brief  Definitions and prototypes for the GATT Client interface. |  | ||||||
|  */ |  | ||||||
|  |  | ||||||
| #ifndef BLE_GATTC_H__ |  | ||||||
| #define BLE_GATTC_H__ |  | ||||||
|  |  | ||||||
| #include <stdint.h> |  | ||||||
| #include "nrf.h" |  | ||||||
| #include "nrf_svc.h" |  | ||||||
| #include "nrf_error.h" |  | ||||||
| #include "ble_ranges.h" |  | ||||||
| #include "ble_types.h" |  | ||||||
| #include "ble_err.h" |  | ||||||
| #include "ble_gatt.h" |  | ||||||
|  |  | ||||||
| #ifdef __cplusplus |  | ||||||
| extern "C" { |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| /** @addtogroup BLE_GATTC_ENUMERATIONS Enumerations |  | ||||||
|  * @{ */ |  | ||||||
|  |  | ||||||
| /**@brief GATTC API SVC numbers. */ |  | ||||||
| enum BLE_GATTC_SVCS |  | ||||||
| { |  | ||||||
|   SD_BLE_GATTC_PRIMARY_SERVICES_DISCOVER = BLE_GATTC_SVC_BASE, /**< Primary Service Discovery. */ |  | ||||||
|   SD_BLE_GATTC_RELATIONSHIPS_DISCOVER,                         /**< Relationship Discovery. */ |  | ||||||
|   SD_BLE_GATTC_CHARACTERISTICS_DISCOVER,                       /**< Characteristic Discovery. */ |  | ||||||
|   SD_BLE_GATTC_DESCRIPTORS_DISCOVER,                           /**< Characteristic Descriptor Discovery. */ |  | ||||||
|   SD_BLE_GATTC_ATTR_INFO_DISCOVER,                             /**< Attribute Information Discovery. */ |  | ||||||
|   SD_BLE_GATTC_CHAR_VALUE_BY_UUID_READ,                        /**< Read Characteristic Value by UUID. */ |  | ||||||
|   SD_BLE_GATTC_READ,                                           /**< Generic read. */ |  | ||||||
|   SD_BLE_GATTC_CHAR_VALUES_READ,                               /**< Read multiple Characteristic Values. */ |  | ||||||
|   SD_BLE_GATTC_WRITE,                                          /**< Generic write. */ |  | ||||||
|   SD_BLE_GATTC_HV_CONFIRM,                                     /**< Handle Value Confirmation. */ |  | ||||||
|   SD_BLE_GATTC_EXCHANGE_MTU_REQUEST,                           /**< Exchange MTU Request. */ |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|  * @brief GATT Client Event IDs. |  | ||||||
|  */ |  | ||||||
| enum BLE_GATTC_EVTS |  | ||||||
| { |  | ||||||
|   BLE_GATTC_EVT_PRIM_SRVC_DISC_RSP = BLE_GATTC_EVT_BASE,  /**< Primary Service Discovery Response event.          \n See @ref ble_gattc_evt_prim_srvc_disc_rsp_t.          */ |  | ||||||
|   BLE_GATTC_EVT_REL_DISC_RSP,                             /**< Relationship Discovery Response event.             \n See @ref ble_gattc_evt_rel_disc_rsp_t.                */ |  | ||||||
|   BLE_GATTC_EVT_CHAR_DISC_RSP,                            /**< Characteristic Discovery Response event.           \n See @ref ble_gattc_evt_char_disc_rsp_t.               */ |  | ||||||
|   BLE_GATTC_EVT_DESC_DISC_RSP,                            /**< Descriptor Discovery Response event.               \n See @ref ble_gattc_evt_desc_disc_rsp_t.               */ |  | ||||||
|   BLE_GATTC_EVT_ATTR_INFO_DISC_RSP,                       /**< Attribute Information Response event.              \n See @ref ble_gattc_evt_attr_info_disc_rsp_t. */ |  | ||||||
|   BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP,                /**< Read By UUID Response event.                       \n See @ref ble_gattc_evt_char_val_by_uuid_read_rsp_t.   */ |  | ||||||
|   BLE_GATTC_EVT_READ_RSP,                                 /**< Read Response event.                               \n See @ref ble_gattc_evt_read_rsp_t.                    */ |  | ||||||
|   BLE_GATTC_EVT_CHAR_VALS_READ_RSP,                       /**< Read multiple Response event.                      \n See @ref ble_gattc_evt_char_vals_read_rsp_t.          */ |  | ||||||
|   BLE_GATTC_EVT_WRITE_RSP,                                /**< Write Response event.                              \n See @ref ble_gattc_evt_write_rsp_t.                   */ |  | ||||||
|   BLE_GATTC_EVT_HVX,                                      /**< Handle Value Notification or Indication event.     \n Confirm indication with @ref sd_ble_gattc_hv_confirm.  \n See @ref ble_gattc_evt_hvx_t. */ |  | ||||||
|   BLE_GATTC_EVT_EXCHANGE_MTU_RSP,                         /**< Exchange MTU Response event.                       \n See @ref ble_gattc_evt_exchange_mtu_rsp_t.            */ |  | ||||||
|   BLE_GATTC_EVT_TIMEOUT,                                  /**< Timeout event.                                     \n See @ref ble_gattc_evt_timeout_t.                     */ |  | ||||||
|   BLE_GATTC_EVT_WRITE_CMD_TX_COMPLETE                     /**< Write without Response transmission complete.      \n See @ref ble_gattc_evt_write_cmd_tx_complete_t.       */ |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
| /** @addtogroup BLE_GATTC_DEFINES Defines |  | ||||||
|  * @{ */ |  | ||||||
|  |  | ||||||
| /** @defgroup BLE_ERRORS_GATTC SVC return values specific to GATTC |  | ||||||
|  * @{ */ |  | ||||||
| #define BLE_ERROR_GATTC_PROC_NOT_PERMITTED    (NRF_GATTC_ERR_BASE + 0x000) /**< Procedure not Permitted. */ |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
| /** @defgroup BLE_GATTC_ATTR_INFO_FORMAT Attribute Information Formats |  | ||||||
|  * @{ */ |  | ||||||
| #define BLE_GATTC_ATTR_INFO_FORMAT_16BIT    1 /**< 16-bit Attribute Information Format. */ |  | ||||||
| #define BLE_GATTC_ATTR_INFO_FORMAT_128BIT   2 /**< 128-bit Attribute Information Format. */ |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
| /** @defgroup BLE_GATTC_DEFAULTS GATT Client defaults |  | ||||||
|  * @{ */ |  | ||||||
| #define BLE_GATTC_WRITE_CMD_TX_QUEUE_SIZE_DEFAULT  1 /**< Default number of Write without Response that can be queued for transmission. */ |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
| /** @addtogroup BLE_GATTC_STRUCTURES Structures |  | ||||||
|  * @{ */ |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|  * @brief BLE GATTC connection configuration parameters, set with @ref sd_ble_cfg_set. |  | ||||||
|  */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint8_t  write_cmd_tx_queue_size; /**< The guaranteed minimum number of Write without Response that can be queued for transmission. |  | ||||||
|                                           The default value is @ref BLE_GATTC_WRITE_CMD_TX_QUEUE_SIZE_DEFAULT */ |  | ||||||
| } ble_gattc_conn_cfg_t; |  | ||||||
|  |  | ||||||
| /**@brief Operation Handle Range. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint16_t          start_handle; /**< Start Handle. */ |  | ||||||
|   uint16_t          end_handle;   /**< End Handle. */ |  | ||||||
| } ble_gattc_handle_range_t; |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /**@brief GATT service. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   ble_uuid_t               uuid;          /**< Service UUID. */ |  | ||||||
|   ble_gattc_handle_range_t handle_range;  /**< Service Handle Range. */ |  | ||||||
| } ble_gattc_service_t; |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /**@brief  GATT include. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint16_t            handle;           /**< Include Handle. */ |  | ||||||
|   ble_gattc_service_t included_srvc;    /**< Handle of the included service. */ |  | ||||||
| } ble_gattc_include_t; |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /**@brief GATT characteristic. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   ble_uuid_t              uuid;                 /**< Characteristic UUID. */ |  | ||||||
|   ble_gatt_char_props_t   char_props;           /**< Characteristic Properties. */ |  | ||||||
|   uint8_t                 char_ext_props : 1;   /**< Extended properties present. */ |  | ||||||
|   uint16_t                handle_decl;          /**< Handle of the Characteristic Declaration. */ |  | ||||||
|   uint16_t                handle_value;         /**< Handle of the Characteristic Value. */ |  | ||||||
| } ble_gattc_char_t; |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /**@brief GATT descriptor. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint16_t          handle;         /**< Descriptor Handle. */ |  | ||||||
|   ble_uuid_t        uuid;           /**< Descriptor UUID. */ |  | ||||||
| } ble_gattc_desc_t; |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /**@brief Write Parameters. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint8_t        write_op;             /**< Write Operation to be performed, see @ref BLE_GATT_WRITE_OPS. */ |  | ||||||
|   uint8_t        flags;                /**< Flags, see @ref BLE_GATT_EXEC_WRITE_FLAGS. */ |  | ||||||
|   uint16_t       handle;               /**< Handle to the attribute to be written. */ |  | ||||||
|   uint16_t       offset;               /**< Offset in bytes. @note For WRITE_CMD and WRITE_REQ, offset must be 0. */ |  | ||||||
|   uint16_t       len;                  /**< Length of data in bytes. */ |  | ||||||
|   uint8_t const *p_value;              /**< Pointer to the value data. */ |  | ||||||
| } ble_gattc_write_params_t; |  | ||||||
|  |  | ||||||
| /**@brief Attribute Information for 16-bit Attribute UUID. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint16_t       handle;               /**< Attribute handle. */ |  | ||||||
|   ble_uuid_t     uuid;                 /**< 16-bit Attribute UUID. */ |  | ||||||
| } ble_gattc_attr_info16_t; |  | ||||||
|  |  | ||||||
| /**@brief Attribute Information for 128-bit Attribute UUID. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint16_t       handle;               /**< Attribute handle. */ |  | ||||||
|   ble_uuid128_t  uuid;                 /**< 128-bit Attribute UUID. */ |  | ||||||
| } ble_gattc_attr_info128_t; |  | ||||||
|  |  | ||||||
| /**@brief Event structure for @ref BLE_GATTC_EVT_PRIM_SRVC_DISC_RSP. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint16_t             count;           /**< Service count. */ |  | ||||||
|   ble_gattc_service_t services[1];      /**< Service data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. |  | ||||||
|                                              See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ |  | ||||||
| } ble_gattc_evt_prim_srvc_disc_rsp_t; |  | ||||||
|  |  | ||||||
| /**@brief Event structure for @ref BLE_GATTC_EVT_REL_DISC_RSP. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint16_t             count;           /**< Include count. */ |  | ||||||
|   ble_gattc_include_t includes[1];      /**< Include data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. |  | ||||||
|                                              See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ |  | ||||||
| } ble_gattc_evt_rel_disc_rsp_t; |  | ||||||
|  |  | ||||||
| /**@brief Event structure for @ref BLE_GATTC_EVT_CHAR_DISC_RSP. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint16_t            count;          /**< Characteristic count. */ |  | ||||||
|   ble_gattc_char_t    chars[1];       /**< Characteristic data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. |  | ||||||
|                                            See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ |  | ||||||
| } ble_gattc_evt_char_disc_rsp_t; |  | ||||||
|  |  | ||||||
| /**@brief Event structure for @ref BLE_GATTC_EVT_DESC_DISC_RSP. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint16_t            count;          /**< Descriptor count. */ |  | ||||||
|   ble_gattc_desc_t    descs[1];       /**< Descriptor data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. |  | ||||||
|                                            See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ |  | ||||||
| } ble_gattc_evt_desc_disc_rsp_t; |  | ||||||
|  |  | ||||||
| /**@brief Event structure for @ref BLE_GATTC_EVT_ATTR_INFO_DISC_RSP. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint16_t                     count;            /**< Attribute count. */ |  | ||||||
|   uint8_t                      format;           /**< Attribute information format, see @ref BLE_GATTC_ATTR_INFO_FORMAT. */ |  | ||||||
|   union { |  | ||||||
|     ble_gattc_attr_info16_t  attr_info16[1];     /**< Attribute information for 16-bit Attribute UUID. |  | ||||||
|                                                       @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. |  | ||||||
|                                                       See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ |  | ||||||
|     ble_gattc_attr_info128_t attr_info128[1];    /**< Attribute information for 128-bit Attribute UUID. |  | ||||||
|                                                       @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. |  | ||||||
|                                                       See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ |  | ||||||
|   } info;                                        /**< Attribute information union. */ |  | ||||||
| } ble_gattc_evt_attr_info_disc_rsp_t; |  | ||||||
|  |  | ||||||
| /**@brief GATT read by UUID handle value pair. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint16_t            handle;          /**< Attribute Handle. */ |  | ||||||
|   uint8_t            *p_value;         /**< Pointer to the Attribute Value, length is available in @ref ble_gattc_evt_char_val_by_uuid_read_rsp_t::value_len. */ |  | ||||||
| } ble_gattc_handle_value_t; |  | ||||||
|  |  | ||||||
| /**@brief Event structure for @ref BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint16_t                  count;            /**< Handle-Value Pair Count. */ |  | ||||||
|   uint16_t                  value_len;        /**< Length of the value in Handle-Value(s) list. */ |  | ||||||
|   uint8_t                   handle_value[1];  /**< Handle-Value(s) list. To iterate through the list use @ref sd_ble_gattc_evt_char_val_by_uuid_read_rsp_iter. |  | ||||||
|                                                    @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. |  | ||||||
|                                                    See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ |  | ||||||
| } ble_gattc_evt_char_val_by_uuid_read_rsp_t; |  | ||||||
|  |  | ||||||
| /**@brief Event structure for @ref BLE_GATTC_EVT_READ_RSP. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint16_t            handle;         /**< Attribute Handle. */ |  | ||||||
|   uint16_t            offset;         /**< Offset of the attribute data. */ |  | ||||||
|   uint16_t            len;            /**< Attribute data length. */ |  | ||||||
|   uint8_t             data[1];        /**< Attribute data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. |  | ||||||
|                                            See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ |  | ||||||
| } ble_gattc_evt_read_rsp_t; |  | ||||||
|  |  | ||||||
| /**@brief Event structure for @ref BLE_GATTC_EVT_CHAR_VALS_READ_RSP. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint16_t            len;            /**< Concatenated Attribute values length. */ |  | ||||||
|   uint8_t             values[1];      /**< Attribute values. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. |  | ||||||
|                                            See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ |  | ||||||
| } ble_gattc_evt_char_vals_read_rsp_t; |  | ||||||
|  |  | ||||||
| /**@brief Event structure for @ref BLE_GATTC_EVT_WRITE_RSP. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint16_t            handle;           /**< Attribute Handle. */ |  | ||||||
|   uint8_t             write_op;         /**< Type of write operation, see @ref BLE_GATT_WRITE_OPS. */ |  | ||||||
|   uint16_t            offset;           /**< Data offset. */ |  | ||||||
|   uint16_t            len;              /**< Data length. */ |  | ||||||
|   uint8_t             data[1];          /**< Data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. |  | ||||||
|                                              See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ |  | ||||||
| } ble_gattc_evt_write_rsp_t; |  | ||||||
|  |  | ||||||
| /**@brief Event structure for @ref BLE_GATTC_EVT_HVX. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint16_t            handle;         /**< Handle to which the HVx operation applies. */ |  | ||||||
|   uint8_t             type;           /**< Indication or Notification, see @ref BLE_GATT_HVX_TYPES. */ |  | ||||||
|   uint16_t            len;            /**< Attribute data length. */ |  | ||||||
|   uint8_t             data[1];        /**< Attribute data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. |  | ||||||
|                                            See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ |  | ||||||
| } ble_gattc_evt_hvx_t; |  | ||||||
|  |  | ||||||
| /**@brief Event structure for @ref BLE_GATTC_EVT_EXCHANGE_MTU_RSP. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint16_t          server_rx_mtu;            /**< Server RX MTU size. */ |  | ||||||
| } ble_gattc_evt_exchange_mtu_rsp_t; |  | ||||||
|  |  | ||||||
| /**@brief Event structure for @ref BLE_GATTC_EVT_TIMEOUT. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint8_t          src;                       /**< Timeout source, see @ref BLE_GATT_TIMEOUT_SOURCES. */ |  | ||||||
| } ble_gattc_evt_timeout_t; |  | ||||||
|  |  | ||||||
| /**@brief Event structure for @ref BLE_GATTC_EVT_WRITE_CMD_TX_COMPLETE. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint8_t             count;            /**< Number of write without response transmissions completed. */ |  | ||||||
| } ble_gattc_evt_write_cmd_tx_complete_t; |  | ||||||
|  |  | ||||||
| /**@brief GATTC event structure. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint16_t            conn_handle;                /**< Connection Handle on which event occurred. */ |  | ||||||
|   uint16_t            gatt_status;                /**< GATT status code for the operation, see @ref BLE_GATT_STATUS_CODES. */ |  | ||||||
|   uint16_t            error_handle;               /**< In case of error: The handle causing the error. In all other cases @ref BLE_GATT_HANDLE_INVALID. */ |  | ||||||
|   union |  | ||||||
|   { |  | ||||||
|     ble_gattc_evt_prim_srvc_disc_rsp_t          prim_srvc_disc_rsp;         /**< Primary Service Discovery Response Event Parameters. */ |  | ||||||
|     ble_gattc_evt_rel_disc_rsp_t                rel_disc_rsp;               /**< Relationship Discovery Response Event Parameters. */ |  | ||||||
|     ble_gattc_evt_char_disc_rsp_t               char_disc_rsp;              /**< Characteristic Discovery Response Event Parameters. */ |  | ||||||
|     ble_gattc_evt_desc_disc_rsp_t               desc_disc_rsp;              /**< Descriptor Discovery Response Event Parameters. */ |  | ||||||
|     ble_gattc_evt_char_val_by_uuid_read_rsp_t   char_val_by_uuid_read_rsp;  /**< Characteristic Value Read by UUID Response Event Parameters. */ |  | ||||||
|     ble_gattc_evt_read_rsp_t                    read_rsp;                   /**< Read Response Event Parameters. */ |  | ||||||
|     ble_gattc_evt_char_vals_read_rsp_t          char_vals_read_rsp;         /**< Characteristic Values Read Response Event Parameters. */ |  | ||||||
|     ble_gattc_evt_write_rsp_t                   write_rsp;                  /**< Write Response Event Parameters. */ |  | ||||||
|     ble_gattc_evt_hvx_t                         hvx;                        /**< Handle Value Notification/Indication Event Parameters. */ |  | ||||||
|     ble_gattc_evt_exchange_mtu_rsp_t            exchange_mtu_rsp;           /**< Exchange MTU Response Event Parameters. */ |  | ||||||
|     ble_gattc_evt_timeout_t                     timeout;                    /**< Timeout Event Parameters. */ |  | ||||||
|     ble_gattc_evt_attr_info_disc_rsp_t          attr_info_disc_rsp;         /**< Attribute Information Discovery Event Parameters. */ |  | ||||||
|     ble_gattc_evt_write_cmd_tx_complete_t       write_cmd_tx_complete;      /**< Write without Response transmission complete Event Parameters. */ |  | ||||||
|   } params;                                                                 /**< Event Parameters. @note Only valid if @ref gatt_status == @ref BLE_GATT_STATUS_SUCCESS. */ |  | ||||||
| } ble_gattc_evt_t; |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
| /** @addtogroup BLE_GATTC_FUNCTIONS Functions |  | ||||||
|  * @{ */ |  | ||||||
|  |  | ||||||
| /**@brief Initiate or continue a GATT Primary Service Discovery procedure. |  | ||||||
|  * |  | ||||||
|  * @details This function initiates or resumes a Primary Service discovery procedure, starting from the supplied handle. |  | ||||||
|  *          If the last service has not been reached, this function must be called again with an updated start handle value to continue the search. |  | ||||||
|  * |  | ||||||
|  * @note If any of the discovered services have 128-bit UUIDs which are not present in the table provided to ble_vs_uuids_assign, a UUID structure with |  | ||||||
|  *       type @ref BLE_UUID_TYPE_UNKNOWN will be received in the corresponding event. |  | ||||||
|  * |  | ||||||
|  * @events |  | ||||||
|  * @event{@ref BLE_GATTC_EVT_PRIM_SRVC_DISC_RSP} |  | ||||||
|  * @endevents |  | ||||||
|  * |  | ||||||
|  * @mscs |  | ||||||
|  * @mmsc{@ref BLE_GATTC_PRIM_SRVC_DISC_MSC} |  | ||||||
|  * @endmscs |  | ||||||
|  * |  | ||||||
|  * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. |  | ||||||
|  * @param[in] start_handle Handle to start searching from. |  | ||||||
|  * @param[in] p_srvc_uuid Pointer to the service UUID to be found. If it is NULL, all primary services will be returned. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS Successfully started or resumed the Primary Service Discovery procedure. |  | ||||||
|  * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. |  | ||||||
|  * @retval ::NRF_ERROR_BUSY Client procedure already in progress. |  | ||||||
|  * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_BLE_GATTC_PRIMARY_SERVICES_DISCOVER, uint32_t, sd_ble_gattc_primary_services_discover(uint16_t conn_handle, uint16_t start_handle, ble_uuid_t const *p_srvc_uuid)); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /**@brief Initiate or continue a GATT Relationship Discovery procedure. |  | ||||||
|  * |  | ||||||
|  * @details This function initiates or resumes the Find Included Services sub-procedure. If the last included service has not been reached, |  | ||||||
|  *          this must be called again with an updated handle range to continue the search. |  | ||||||
|  * |  | ||||||
|  * @events |  | ||||||
|  * @event{@ref BLE_GATTC_EVT_REL_DISC_RSP} |  | ||||||
|  * @endevents |  | ||||||
|  * |  | ||||||
|  * @mscs |  | ||||||
|  * @mmsc{@ref BLE_GATTC_REL_DISC_MSC} |  | ||||||
|  * @endmscs |  | ||||||
|  * |  | ||||||
|  * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. |  | ||||||
|  * @param[in] p_handle_range A pointer to the range of handles of the Service to perform this procedure on. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS Successfully started or resumed the Relationship Discovery procedure. |  | ||||||
|  * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. |  | ||||||
|  * @retval ::NRF_ERROR_BUSY Client procedure already in progress. |  | ||||||
|  * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_BLE_GATTC_RELATIONSHIPS_DISCOVER, uint32_t, sd_ble_gattc_relationships_discover(uint16_t conn_handle, ble_gattc_handle_range_t const *p_handle_range)); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /**@brief Initiate or continue a GATT Characteristic Discovery procedure. |  | ||||||
|  * |  | ||||||
|  * @details This function initiates or resumes a Characteristic discovery procedure. If the last Characteristic has not been reached, |  | ||||||
|  *          this must be called again with an updated handle range to continue the discovery. |  | ||||||
|  * |  | ||||||
|  * @note If any of the discovered characteristics have 128-bit UUIDs which are not present in the table provided to ble_vs_uuids_assign, a UUID structure with |  | ||||||
|  *       type @ref BLE_UUID_TYPE_UNKNOWN will be received in the corresponding event. |  | ||||||
|  * |  | ||||||
|  * @events |  | ||||||
|  * @event{@ref BLE_GATTC_EVT_CHAR_DISC_RSP} |  | ||||||
|  * @endevents |  | ||||||
|  * |  | ||||||
|  * @mscs |  | ||||||
|  * @mmsc{@ref BLE_GATTC_CHAR_DISC_MSC} |  | ||||||
|  * @endmscs |  | ||||||
|  * |  | ||||||
|  * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. |  | ||||||
|  * @param[in] p_handle_range A pointer to the range of handles of the Service to perform this procedure on. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS Successfully started or resumed the Characteristic Discovery procedure. |  | ||||||
|  * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. |  | ||||||
|  * @retval ::NRF_ERROR_BUSY Client procedure already in progress. |  | ||||||
|  * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_BLE_GATTC_CHARACTERISTICS_DISCOVER, uint32_t, sd_ble_gattc_characteristics_discover(uint16_t conn_handle, ble_gattc_handle_range_t const *p_handle_range)); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /**@brief Initiate or continue a GATT Characteristic Descriptor Discovery procedure. |  | ||||||
|  * |  | ||||||
|  * @details This function initiates or resumes a Characteristic Descriptor discovery procedure. If the last Descriptor has not been reached, |  | ||||||
|  *          this must be called again with an updated handle range to continue the discovery. |  | ||||||
|  * |  | ||||||
|  * @events |  | ||||||
|  * @event{@ref BLE_GATTC_EVT_DESC_DISC_RSP} |  | ||||||
|  * @endevents |  | ||||||
|  * |  | ||||||
|  * @mscs |  | ||||||
|  * @mmsc{@ref BLE_GATTC_DESC_DISC_MSC} |  | ||||||
|  * @endmscs |  | ||||||
|  * |  | ||||||
|  * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. |  | ||||||
|  * @param[in] p_handle_range A pointer to the range of handles of the Characteristic to perform this procedure on. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS Successfully started or resumed the Descriptor Discovery procedure. |  | ||||||
|  * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. |  | ||||||
|  * @retval ::NRF_ERROR_BUSY Client procedure already in progress. |  | ||||||
|  * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_BLE_GATTC_DESCRIPTORS_DISCOVER, uint32_t, sd_ble_gattc_descriptors_discover(uint16_t conn_handle, ble_gattc_handle_range_t const *p_handle_range)); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /**@brief Initiate or continue a GATT Read using Characteristic UUID procedure. |  | ||||||
|  * |  | ||||||
|  * @details This function initiates or resumes a Read using Characteristic UUID procedure. If the last Characteristic has not been reached, |  | ||||||
|  *          this must be called again with an updated handle range to continue the discovery. |  | ||||||
|  * |  | ||||||
|  * @events |  | ||||||
|  * @event{@ref BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP} |  | ||||||
|  * @endevents |  | ||||||
|  * |  | ||||||
|  * @mscs |  | ||||||
|  * @mmsc{@ref BLE_GATTC_READ_UUID_MSC} |  | ||||||
|  * @endmscs |  | ||||||
|  * |  | ||||||
|  * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. |  | ||||||
|  * @param[in] p_uuid Pointer to a Characteristic value UUID to read. |  | ||||||
|  * @param[in] p_handle_range A pointer to the range of handles to perform this procedure on. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS Successfully started or resumed the Read using Characteristic UUID procedure. |  | ||||||
|  * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. |  | ||||||
|  * @retval ::NRF_ERROR_BUSY Client procedure already in progress. |  | ||||||
|  * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_BLE_GATTC_CHAR_VALUE_BY_UUID_READ, uint32_t, sd_ble_gattc_char_value_by_uuid_read(uint16_t conn_handle, ble_uuid_t const *p_uuid, ble_gattc_handle_range_t const *p_handle_range)); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /**@brief Initiate or continue a GATT Read (Long) Characteristic or Descriptor procedure. |  | ||||||
|  * |  | ||||||
|  * @details This function initiates or resumes a GATT Read (Long) Characteristic or Descriptor procedure. If the Characteristic or Descriptor |  | ||||||
|  *          to be read is longer than ATT_MTU - 1, this function must be called multiple times with appropriate offset to read the |  | ||||||
|  *          complete value. |  | ||||||
|  * |  | ||||||
|  * @events |  | ||||||
|  * @event{@ref BLE_GATTC_EVT_READ_RSP} |  | ||||||
|  * @endevents |  | ||||||
|  * |  | ||||||
|  * @mscs |  | ||||||
|  * @mmsc{@ref BLE_GATTC_VALUE_READ_MSC} |  | ||||||
|  * @endmscs |  | ||||||
|  * |  | ||||||
|  * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. |  | ||||||
|  * @param[in] handle The handle of the attribute to be read. |  | ||||||
|  * @param[in] offset Offset into the attribute value to be read. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS Successfully started or resumed the Read (Long) procedure. |  | ||||||
|  * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. |  | ||||||
|  * @retval ::NRF_ERROR_BUSY Client procedure already in progress. |  | ||||||
|  * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_BLE_GATTC_READ, uint32_t, sd_ble_gattc_read(uint16_t conn_handle, uint16_t handle, uint16_t offset)); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /**@brief Initiate a GATT Read Multiple Characteristic Values procedure. |  | ||||||
|  * |  | ||||||
|  * @details This function initiates a GATT Read Multiple Characteristic Values procedure. |  | ||||||
|  * |  | ||||||
|  * @events |  | ||||||
|  * @event{@ref BLE_GATTC_EVT_CHAR_VALS_READ_RSP} |  | ||||||
|  * @endevents |  | ||||||
|  * |  | ||||||
|  * @mscs |  | ||||||
|  * @mmsc{@ref BLE_GATTC_READ_MULT_MSC} |  | ||||||
|  * @endmscs |  | ||||||
|  * |  | ||||||
|  * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. |  | ||||||
|  * @param[in] p_handles A pointer to the handle(s) of the attribute(s) to be read. |  | ||||||
|  * @param[in] handle_count The number of handles in p_handles. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS Successfully started the Read Multiple Characteristic Values procedure. |  | ||||||
|  * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. |  | ||||||
|  * @retval ::NRF_ERROR_BUSY Client procedure already in progress. |  | ||||||
|  * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_BLE_GATTC_CHAR_VALUES_READ, uint32_t, sd_ble_gattc_char_values_read(uint16_t conn_handle, uint16_t const *p_handles, uint16_t handle_count)); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /**@brief Perform a Write (Characteristic Value or Descriptor, with or without response, signed or not, long or reliable) procedure. |  | ||||||
|  * |  | ||||||
|  * @details This function can perform all write procedures described in GATT. |  | ||||||
|  * |  | ||||||
|  * @note    Only one write with response procedure can be ongoing per connection at a time. |  | ||||||
|  *          If the application tries to write with response while another write with response procedure is ongoing, |  | ||||||
|  *          the function call will return @ref NRF_ERROR_BUSY. |  | ||||||
|  *          A @ref BLE_GATTC_EVT_WRITE_RSP event will be issued as soon as the write response arrives from the peer. |  | ||||||
|  * |  | ||||||
|  * @note    The number of Write without Response that can be queued is configured by @ref ble_gattc_conn_cfg_t::write_cmd_tx_queue_size |  | ||||||
|  *          When the queue is full, the function call will return @ref NRF_ERROR_RESOURCES. |  | ||||||
|  *          A @ref BLE_GATTC_EVT_WRITE_CMD_TX_COMPLETE event will be issued as soon as the transmission of the write without response is complete. |  | ||||||
|  * |  | ||||||
|  * @note    The application can keep track of the available queue element count for writes without responses by following the procedure below: |  | ||||||
|  *          - Store initial queue element count in a variable. |  | ||||||
|  *          - Decrement the variable, which stores the currently available queue element count, by one when a call to this function returns @ref NRF_SUCCESS. |  | ||||||
|  *          - Increment the variable, which stores the current available queue element count, by the count variable in @ref BLE_GATTC_EVT_WRITE_CMD_TX_COMPLETE event. |  | ||||||
|  * |  | ||||||
|  * @events |  | ||||||
|  * @event{@ref BLE_GATTC_EVT_WRITE_CMD_TX_COMPLETE, Write without response transmission complete.} |  | ||||||
|  * @event{@ref BLE_GATTC_EVT_WRITE_RSP, Write response received from the peer.} |  | ||||||
|  * @endevents |  | ||||||
|  * |  | ||||||
|  * @mscs |  | ||||||
|  * @mmsc{@ref BLE_GATTC_VALUE_WRITE_WITHOUT_RESP_MSC} |  | ||||||
|  * @mmsc{@ref BLE_GATTC_VALUE_WRITE_MSC} |  | ||||||
|  * @mmsc{@ref BLE_GATTC_VALUE_LONG_WRITE_MSC} |  | ||||||
|  * @mmsc{@ref BLE_GATTC_VALUE_RELIABLE_WRITE_MSC} |  | ||||||
|  * @endmscs |  | ||||||
|  * |  | ||||||
|  * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. |  | ||||||
|  * @param[in] p_write_params A pointer to a write parameters structure. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS Successfully started the Write procedure. |  | ||||||
|  * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. |  | ||||||
|  * @retval ::NRF_ERROR_DATA_SIZE Invalid data size(s) supplied. |  | ||||||
|  * @retval ::NRF_ERROR_BUSY For write with response, procedure already in progress. Wait for a @ref BLE_GATTC_EVT_WRITE_RSP event and retry. |  | ||||||
|  * @retval ::NRF_ERROR_RESOURCES Too many writes without responses queued. |  | ||||||
|  *                               Wait for a @ref BLE_GATTC_EVT_WRITE_CMD_TX_COMPLETE event and retry. |  | ||||||
|  * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_BLE_GATTC_WRITE, uint32_t, sd_ble_gattc_write(uint16_t conn_handle, ble_gattc_write_params_t const *p_write_params)); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /**@brief Send a Handle Value Confirmation to the GATT Server. |  | ||||||
|  * |  | ||||||
|  * @mscs |  | ||||||
|  * @mmsc{@ref BLE_GATTC_HVI_MSC} |  | ||||||
|  * @endmscs |  | ||||||
|  * |  | ||||||
|  * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. |  | ||||||
|  * @param[in] handle The handle of the attribute in the indication. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS Successfully queued the Handle Value Confirmation for transmission. |  | ||||||
|  * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State or no Indication pending to be confirmed. |  | ||||||
|  * @retval ::BLE_ERROR_INVALID_ATTR_HANDLE Invalid attribute handle. |  | ||||||
|  * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_BLE_GATTC_HV_CONFIRM, uint32_t, sd_ble_gattc_hv_confirm(uint16_t conn_handle, uint16_t handle)); |  | ||||||
|  |  | ||||||
| /**@brief Discovers information about a range of attributes on a GATT server. |  | ||||||
|  * |  | ||||||
|  * @events |  | ||||||
|  * @event{@ref BLE_GATTC_EVT_ATTR_INFO_DISC_RSP, Generated when information about a range of attributes has been received.} |  | ||||||
|  * @endevents |  | ||||||
|  * |  | ||||||
|  * @param[in] conn_handle    The connection handle identifying the connection to perform this procedure on. |  | ||||||
|  * @param[in] p_handle_range The range of handles to request information about. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS Successfully started an attribute information discovery procedure. |  | ||||||
|  * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_STATE Invalid connection state |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_ADDR  Invalid pointer supplied. |  | ||||||
|  * @retval ::NRF_ERROR_BUSY Client procedure already in progress. |  | ||||||
|  * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_BLE_GATTC_ATTR_INFO_DISCOVER, uint32_t, sd_ble_gattc_attr_info_discover(uint16_t conn_handle, ble_gattc_handle_range_t const * p_handle_range)); |  | ||||||
|  |  | ||||||
| /**@brief Start an ATT_MTU exchange by sending an Exchange MTU Request to the server. |  | ||||||
|  * |  | ||||||
|  * @details The SoftDevice sets ATT_MTU to the minimum of: |  | ||||||
|  *          - The Client RX MTU value, and |  | ||||||
|  *          - The Server RX MTU value from @ref BLE_GATTC_EVT_EXCHANGE_MTU_RSP. |  | ||||||
|  * |  | ||||||
|  *          However, the SoftDevice never sets ATT_MTU lower than @ref BLE_GATT_ATT_MTU_DEFAULT. |  | ||||||
|  * |  | ||||||
|  * @events |  | ||||||
|  * @event{@ref BLE_GATTC_EVT_EXCHANGE_MTU_RSP} |  | ||||||
|  * @endevents |  | ||||||
|  * |  | ||||||
|  * @mscs |  | ||||||
|  * @mmsc{@ref BLE_GATTC_MTU_EXCHANGE} |  | ||||||
|  * @endmscs |  | ||||||
|  * |  | ||||||
|  * @param[in] conn_handle    The connection handle identifying the connection to perform this procedure on. |  | ||||||
|  * @param[in] client_rx_mtu  Client RX MTU size. |  | ||||||
|  *                           - The minimum value is @ref BLE_GATT_ATT_MTU_DEFAULT. |  | ||||||
|  *                           - The maximum value is @ref ble_gatt_conn_cfg_t::att_mtu in the connection configuration |  | ||||||
|                                used for this connection. |  | ||||||
|  *                           - The value must be equal to Server RX MTU size given in @ref sd_ble_gatts_exchange_mtu_reply |  | ||||||
|  *                             if an ATT_MTU exchange has already been performed in the other direction. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS Successfully sent request to the server. |  | ||||||
|  * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_STATE Invalid connection state or an ATT_MTU exchange was already requested once. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_PARAM Invalid Client RX MTU size supplied. |  | ||||||
|  * @retval ::NRF_ERROR_BUSY Client procedure already in progress. |  | ||||||
|  * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_BLE_GATTC_EXCHANGE_MTU_REQUEST, uint32_t, sd_ble_gattc_exchange_mtu_request(uint16_t conn_handle, uint16_t client_rx_mtu)); |  | ||||||
|  |  | ||||||
| /**@brief Iterate through Handle-Value(s) list in @ref BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP event. |  | ||||||
|  * |  | ||||||
|  * @param[in] p_gattc_evt  Pointer to event buffer containing @ref BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP event. |  | ||||||
|  *                         @note If the buffer contains different event, behavior is undefined. |  | ||||||
|  * @param[in,out] p_iter   Iterator, points to @ref ble_gattc_handle_value_t structure that will be filled in with |  | ||||||
|  *                         the next Handle-Value pair in each iteration. If the function returns other than |  | ||||||
|  *                         @ref NRF_SUCCESS, it will not be changed. |  | ||||||
|  *                         - To start iteration, initialize the structure to zero. |  | ||||||
|  *                         - To continue, pass the value from previous iteration. |  | ||||||
|  * |  | ||||||
|  * \code |  | ||||||
|  * ble_gattc_handle_value_t iter; |  | ||||||
|  * memset(&iter, 0, sizeof(ble_gattc_handle_value_t)); |  | ||||||
|  * while (sd_ble_gattc_evt_char_val_by_uuid_read_rsp_iter(&ble_evt.evt.gattc_evt, &iter) == NRF_SUCCESS) |  | ||||||
|  * { |  | ||||||
|  *   app_handle = iter.handle; |  | ||||||
|  *   memcpy(app_value, iter.p_value, ble_evt.evt.gattc_evt.params.char_val_by_uuid_read_rsp.value_len); |  | ||||||
|  * } |  | ||||||
|  * \endcode |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS Successfully retrieved the next Handle-Value pair. |  | ||||||
|  * @retval ::NRF_ERROR_NOT_FOUND No more Handle-Value pairs available in the list. |  | ||||||
|  */ |  | ||||||
| __STATIC_INLINE uint32_t sd_ble_gattc_evt_char_val_by_uuid_read_rsp_iter(ble_gattc_evt_t *p_gattc_evt, ble_gattc_handle_value_t *p_iter); |  | ||||||
|  |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
| #ifndef SUPPRESS_INLINE_IMPLEMENTATION |  | ||||||
|  |  | ||||||
| __STATIC_INLINE uint32_t sd_ble_gattc_evt_char_val_by_uuid_read_rsp_iter(ble_gattc_evt_t *p_gattc_evt, ble_gattc_handle_value_t *p_iter) |  | ||||||
| { |  | ||||||
|   uint32_t value_len = p_gattc_evt->params.char_val_by_uuid_read_rsp.value_len; |  | ||||||
|   uint8_t *p_first = p_gattc_evt->params.char_val_by_uuid_read_rsp.handle_value; |  | ||||||
|   uint8_t *p_next = p_iter->p_value ? p_iter->p_value + value_len : p_first; |  | ||||||
|  |  | ||||||
|   if ((p_next - p_first) / (sizeof(uint16_t) + value_len) < p_gattc_evt->params.char_val_by_uuid_read_rsp.count) |  | ||||||
|   { |  | ||||||
|     p_iter->handle = (uint16_t)p_next[1] << 8 | p_next[0]; |  | ||||||
|     p_iter->p_value = p_next + sizeof(uint16_t); |  | ||||||
|     return NRF_SUCCESS; |  | ||||||
|   } |  | ||||||
|   else |  | ||||||
|   { |  | ||||||
|     return NRF_ERROR_NOT_FOUND; |  | ||||||
|   } |  | ||||||
| } |  | ||||||
|  |  | ||||||
| #endif /* SUPPRESS_INLINE_IMPLEMENTATION */ |  | ||||||
|  |  | ||||||
| #ifdef __cplusplus |  | ||||||
| } |  | ||||||
| #endif |  | ||||||
| #endif /* BLE_GATTC_H__ */ |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|   @} |  | ||||||
| */ |  | ||||||
| @@ -1,845 +0,0 @@ | |||||||
| /* |  | ||||||
|  * Copyright (c) 2011 - 2017, Nordic Semiconductor ASA |  | ||||||
|  * All rights reserved. |  | ||||||
|  * |  | ||||||
|  * Redistribution and use in source and binary forms, with or without modification, |  | ||||||
|  * are permitted provided that the following conditions are met: |  | ||||||
|  * |  | ||||||
|  * 1. Redistributions of source code must retain the above copyright notice, this |  | ||||||
|  *    list of conditions and the following disclaimer. |  | ||||||
|  * |  | ||||||
|  * 2. Redistributions in binary form, except as embedded into a Nordic |  | ||||||
|  *    Semiconductor ASA integrated circuit in a product or a software update for |  | ||||||
|  *    such product, must reproduce the above copyright notice, this list of |  | ||||||
|  *    conditions and the following disclaimer in the documentation and/or other |  | ||||||
|  *    materials provided with the distribution. |  | ||||||
|  * |  | ||||||
|  * 3. Neither the name of Nordic Semiconductor ASA nor the names of its |  | ||||||
|  *    contributors may be used to endorse or promote products derived from this |  | ||||||
|  *    software without specific prior written permission. |  | ||||||
|  * |  | ||||||
|  * 4. This software, with or without modification, must only be used with a |  | ||||||
|  *    Nordic Semiconductor ASA integrated circuit. |  | ||||||
|  * |  | ||||||
|  * 5. Any software provided in binary form under this license must not be reverse |  | ||||||
|  *    engineered, decompiled, modified and/or disassembled. |  | ||||||
|  * |  | ||||||
|  * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS |  | ||||||
|  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |  | ||||||
|  * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE |  | ||||||
|  * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE |  | ||||||
|  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |  | ||||||
|  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE |  | ||||||
|  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |  | ||||||
|  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |  | ||||||
|  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT |  | ||||||
|  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |  | ||||||
|  */ |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|   @addtogroup BLE_GATTS Generic Attribute Profile (GATT) Server |  | ||||||
|   @{ |  | ||||||
|   @brief  Definitions and prototypes for the GATTS interface. |  | ||||||
|  */ |  | ||||||
|  |  | ||||||
| #ifndef BLE_GATTS_H__ |  | ||||||
| #define BLE_GATTS_H__ |  | ||||||
|  |  | ||||||
| #include <stdint.h> |  | ||||||
| #include "nrf_svc.h" |  | ||||||
| #include "nrf_error.h" |  | ||||||
| #include "ble_hci.h" |  | ||||||
| #include "ble_ranges.h" |  | ||||||
| #include "ble_types.h" |  | ||||||
| #include "ble_err.h" |  | ||||||
| #include "ble_gatt.h" |  | ||||||
| #include "ble_gap.h" |  | ||||||
|  |  | ||||||
| #ifdef __cplusplus |  | ||||||
| extern "C" { |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| /** @addtogroup BLE_GATTS_ENUMERATIONS Enumerations |  | ||||||
|  * @{ */ |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|  * @brief GATTS API SVC numbers. |  | ||||||
|  */ |  | ||||||
| enum BLE_GATTS_SVCS |  | ||||||
| { |  | ||||||
|   SD_BLE_GATTS_SERVICE_ADD = BLE_GATTS_SVC_BASE, /**< Add a service. */ |  | ||||||
|   SD_BLE_GATTS_INCLUDE_ADD,                      /**< Add an included service. */ |  | ||||||
|   SD_BLE_GATTS_CHARACTERISTIC_ADD,               /**< Add a characteristic. */ |  | ||||||
|   SD_BLE_GATTS_DESCRIPTOR_ADD,                   /**< Add a generic attribute. */ |  | ||||||
|   SD_BLE_GATTS_VALUE_SET,                        /**< Set an attribute value. */ |  | ||||||
|   SD_BLE_GATTS_VALUE_GET,                        /**< Get an attribute value. */ |  | ||||||
|   SD_BLE_GATTS_HVX,                              /**< Handle Value Notification or Indication. */ |  | ||||||
|   SD_BLE_GATTS_SERVICE_CHANGED,                  /**< Perform a Service Changed Indication to one or more peers. */ |  | ||||||
|   SD_BLE_GATTS_RW_AUTHORIZE_REPLY,               /**< Reply to an authorization request for a read or write operation on one or more attributes. */ |  | ||||||
|   SD_BLE_GATTS_SYS_ATTR_SET,                     /**< Set the persistent system attributes for a connection. */ |  | ||||||
|   SD_BLE_GATTS_SYS_ATTR_GET,                     /**< Retrieve the persistent system attributes. */ |  | ||||||
|   SD_BLE_GATTS_INITIAL_USER_HANDLE_GET,          /**< Retrieve the first valid user handle. */ |  | ||||||
|   SD_BLE_GATTS_ATTR_GET,                         /**< Retrieve the UUID and/or metadata of an attribute. */ |  | ||||||
|   SD_BLE_GATTS_EXCHANGE_MTU_REPLY                /**< Reply to Exchange MTU Request. */ |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|  * @brief GATT Server Event IDs. |  | ||||||
|  */ |  | ||||||
| enum BLE_GATTS_EVTS |  | ||||||
| { |  | ||||||
|   BLE_GATTS_EVT_WRITE = BLE_GATTS_EVT_BASE,       /**< Write operation performed.                                           \n See @ref ble_gatts_evt_write_t.                 */ |  | ||||||
|   BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST,             /**< Read/Write Authorization request.                                    \n Reply with @ref sd_ble_gatts_rw_authorize_reply. \n See @ref ble_gatts_evt_rw_authorize_request_t. */ |  | ||||||
|   BLE_GATTS_EVT_SYS_ATTR_MISSING,                 /**< A persistent system attribute access is pending.                     \n Respond with @ref sd_ble_gatts_sys_attr_set.     \n See @ref ble_gatts_evt_sys_attr_missing_t.     */ |  | ||||||
|   BLE_GATTS_EVT_HVC,                              /**< Handle Value Confirmation.                                           \n See @ref ble_gatts_evt_hvc_t.                   */ |  | ||||||
|   BLE_GATTS_EVT_SC_CONFIRM,                       /**< Service Changed Confirmation.                                        \n No additional event structure applies.          */ |  | ||||||
|   BLE_GATTS_EVT_EXCHANGE_MTU_REQUEST,             /**< Exchange MTU Request.                                                \n Reply with @ref sd_ble_gatts_exchange_mtu_reply. \n See @ref ble_gatts_evt_exchange_mtu_request_t. */ |  | ||||||
|   BLE_GATTS_EVT_TIMEOUT,                          /**< Peer failed to respond to an ATT request in time.                    \n See @ref ble_gatts_evt_timeout_t.               */ |  | ||||||
|   BLE_GATTS_EVT_HVN_TX_COMPLETE                   /**< Handle Value Notification transmission complete.                     \n See @ref ble_gatts_evt_hvn_tx_complete_t.       */ |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| /**@brief GATTS Configuration IDs. |  | ||||||
|  * |  | ||||||
|  * IDs that uniquely identify a GATTS configuration. |  | ||||||
|  */ |  | ||||||
| enum BLE_GATTS_CFGS |  | ||||||
| { |  | ||||||
|   BLE_GATTS_CFG_SERVICE_CHANGED = BLE_GATTS_CFG_BASE, /**< Service changed configuration. */ |  | ||||||
|   BLE_GATTS_CFG_ATTR_TAB_SIZE,                        /**< Attribute table size configuration. */ |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
| /** @addtogroup BLE_GATTS_DEFINES Defines |  | ||||||
|  * @{ */ |  | ||||||
|  |  | ||||||
| /** @defgroup BLE_ERRORS_GATTS SVC return values specific to GATTS |  | ||||||
|  * @{ */ |  | ||||||
| #define BLE_ERROR_GATTS_INVALID_ATTR_TYPE   (NRF_GATTS_ERR_BASE + 0x000) /**< Invalid attribute type. */ |  | ||||||
| #define BLE_ERROR_GATTS_SYS_ATTR_MISSING    (NRF_GATTS_ERR_BASE + 0x001) /**< System Attributes missing. */ |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
| /** @defgroup BLE_GATTS_ATTR_LENS_MAX Maximum attribute lengths |  | ||||||
|  * @{ */ |  | ||||||
| #define BLE_GATTS_FIX_ATTR_LEN_MAX (510)  /**< Maximum length for fixed length Attribute Values. */ |  | ||||||
| #define BLE_GATTS_VAR_ATTR_LEN_MAX (512)  /**< Maximum length for variable length Attribute Values. */ |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
| /** @defgroup BLE_GATTS_SRVC_TYPES GATT Server Service Types |  | ||||||
|  * @{ */ |  | ||||||
| #define BLE_GATTS_SRVC_TYPE_INVALID          0x00  /**< Invalid Service Type. */ |  | ||||||
| #define BLE_GATTS_SRVC_TYPE_PRIMARY          0x01  /**< Primary Service. */ |  | ||||||
| #define BLE_GATTS_SRVC_TYPE_SECONDARY        0x02  /**< Secondary Type. */ |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /** @defgroup BLE_GATTS_ATTR_TYPES GATT Server Attribute Types |  | ||||||
|  * @{ */ |  | ||||||
| #define BLE_GATTS_ATTR_TYPE_INVALID         0x00  /**< Invalid Attribute Type. */ |  | ||||||
| #define BLE_GATTS_ATTR_TYPE_PRIM_SRVC_DECL  0x01  /**< Primary Service Declaration. */ |  | ||||||
| #define BLE_GATTS_ATTR_TYPE_SEC_SRVC_DECL   0x02  /**< Secondary Service Declaration. */ |  | ||||||
| #define BLE_GATTS_ATTR_TYPE_INC_DECL        0x03  /**< Include Declaration. */ |  | ||||||
| #define BLE_GATTS_ATTR_TYPE_CHAR_DECL       0x04  /**< Characteristic Declaration. */ |  | ||||||
| #define BLE_GATTS_ATTR_TYPE_CHAR_VAL        0x05  /**< Characteristic Value. */ |  | ||||||
| #define BLE_GATTS_ATTR_TYPE_DESC            0x06  /**< Descriptor. */ |  | ||||||
| #define BLE_GATTS_ATTR_TYPE_OTHER           0x07  /**< Other, non-GATT specific type. */ |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /** @defgroup BLE_GATTS_OPS GATT Server Operations |  | ||||||
|  * @{ */ |  | ||||||
| #define BLE_GATTS_OP_INVALID                0x00  /**< Invalid Operation. */ |  | ||||||
| #define BLE_GATTS_OP_WRITE_REQ              0x01  /**< Write Request. */ |  | ||||||
| #define BLE_GATTS_OP_WRITE_CMD              0x02  /**< Write Command. */ |  | ||||||
| #define BLE_GATTS_OP_SIGN_WRITE_CMD         0x03  /**< Signed Write Command. */ |  | ||||||
| #define BLE_GATTS_OP_PREP_WRITE_REQ         0x04  /**< Prepare Write Request. */ |  | ||||||
| #define BLE_GATTS_OP_EXEC_WRITE_REQ_CANCEL  0x05  /**< Execute Write Request: Cancel all prepared writes. */ |  | ||||||
| #define BLE_GATTS_OP_EXEC_WRITE_REQ_NOW     0x06  /**< Execute Write Request: Immediately execute all prepared writes. */ |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
| /** @defgroup BLE_GATTS_VLOCS GATT Value Locations |  | ||||||
|  * @{ */ |  | ||||||
| #define BLE_GATTS_VLOC_INVALID       0x00  /**< Invalid Location. */ |  | ||||||
| #define BLE_GATTS_VLOC_STACK         0x01  /**< Attribute Value is located in stack memory, no user memory is required. */ |  | ||||||
| #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 |  | ||||||
|                                                 will read and write directly to the memory using the pointer provided in the APIs. There are no alignment requirements for the buffer. */ |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
| /** @defgroup BLE_GATTS_AUTHORIZE_TYPES GATT Server Authorization Types |  | ||||||
|  * @{ */ |  | ||||||
| #define BLE_GATTS_AUTHORIZE_TYPE_INVALID    0x00  /**< Invalid Type. */ |  | ||||||
| #define BLE_GATTS_AUTHORIZE_TYPE_READ       0x01  /**< Authorize a Read Operation. */ |  | ||||||
| #define BLE_GATTS_AUTHORIZE_TYPE_WRITE      0x02  /**< Authorize a Write Request Operation. */ |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
| /** @defgroup BLE_GATTS_SYS_ATTR_FLAGS System Attribute Flags |  | ||||||
|  * @{ */ |  | ||||||
| #define BLE_GATTS_SYS_ATTR_FLAG_SYS_SRVCS (1 << 0)  /**< Restrict system attributes to system services only. */ |  | ||||||
| #define BLE_GATTS_SYS_ATTR_FLAG_USR_SRVCS (1 << 1)  /**< Restrict system attributes to user services only. */ |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
| /** @defgroup BLE_GATTS_SERVICE_CHANGED Service Changed Inclusion Values |  | ||||||
|  * @{ |  | ||||||
|  */ |  | ||||||
| #define BLE_GATTS_SERVICE_CHANGED_DEFAULT   (1)   /**< Default is to include the Service Changed characteristic in the Attribute Table. */ |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
| /** @defgroup BLE_GATTS_ATTR_TAB_SIZE Attribute Table size |  | ||||||
|  * @{ |  | ||||||
|  */ |  | ||||||
| #define BLE_GATTS_ATTR_TAB_SIZE_MIN         (248)  /**< Minimum Attribute Table size */ |  | ||||||
| #define BLE_GATTS_ATTR_TAB_SIZE_DEFAULT     (1408) /**< Default Attribute Table size. */ |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
| /** @defgroup BLE_GATTS_DEFAULTS GATT Server defaults |  | ||||||
|  * @{ |  | ||||||
|  */ |  | ||||||
| #define BLE_GATTS_HVN_TX_QUEUE_SIZE_DEFAULT  1 /**< Default number of Handle Value Notifications that can be queued for transmission. */ |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
| /** @addtogroup BLE_GATTS_STRUCTURES Structures |  | ||||||
|  * @{ */ |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|  * @brief BLE GATTS connection configuration parameters, set with @ref sd_ble_cfg_set. |  | ||||||
|  */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint8_t  hvn_tx_queue_size; /**< Minimum guaranteed number of Handle Value Notifications that can be queued for transmission. |  | ||||||
|                                     The default value is @ref BLE_GATTS_HVN_TX_QUEUE_SIZE_DEFAULT */ |  | ||||||
| } ble_gatts_conn_cfg_t; |  | ||||||
|  |  | ||||||
| /**@brief Attribute metadata. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   ble_gap_conn_sec_mode_t read_perm;       /**< Read permissions. */ |  | ||||||
|   ble_gap_conn_sec_mode_t write_perm;      /**< Write permissions. */ |  | ||||||
|   uint8_t                 vlen       :1;   /**< Variable length attribute. */ |  | ||||||
|   uint8_t                 vloc       :2;   /**< Value location, see @ref BLE_GATTS_VLOCS.*/ |  | ||||||
|   uint8_t                 rd_auth    :1;   /**< Read authorization and value will be requested from the application on every read operation. */ |  | ||||||
|   uint8_t                 wr_auth    :1;   /**< Write authorization will be requested from the application on every Write Request operation (but not Write Command). */ |  | ||||||
| } ble_gatts_attr_md_t; |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /**@brief GATT Attribute. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   ble_uuid_t const          *p_uuid;        /**< Pointer to the attribute UUID. */ |  | ||||||
|   ble_gatts_attr_md_t const *p_attr_md;     /**< Pointer to the attribute metadata structure. */ |  | ||||||
|   uint16_t                   init_len;      /**< Initial attribute value length in bytes. */ |  | ||||||
|   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. */ |  | ||||||
|   uint16_t                   max_len;       /**< Maximum attribute value length in bytes, see @ref BLE_GATTS_ATTR_LENS_MAX for maximum values. */ |  | ||||||
|   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 |  | ||||||
|                                                  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. |  | ||||||
|                                                  The stack may access that memory directly without the application's knowledge. For writable characteristics, this value must not be a location in flash memory.*/ |  | ||||||
| } ble_gatts_attr_t; |  | ||||||
|  |  | ||||||
| /**@brief GATT Attribute Value. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint16_t  len;        /**< Length in bytes to be written or read. Length in bytes written or read after successful return.*/ |  | ||||||
|   uint16_t  offset;     /**< Attribute value offset. */ |  | ||||||
|   uint8_t  *p_value;    /**< Pointer to where value is stored or will be stored. |  | ||||||
|                              If value is stored in user memory, only the attribute length is updated when p_value == NULL. |  | ||||||
|                              Set to NULL when reading to obtain the complete length of the attribute value */ |  | ||||||
| } ble_gatts_value_t; |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /**@brief GATT Characteristic Presentation Format. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint8_t          format;      /**< Format of the value, see @ref BLE_GATT_CPF_FORMATS. */ |  | ||||||
|   int8_t           exponent;    /**< Exponent for integer data types. */ |  | ||||||
|   uint16_t         unit;        /**< Unit from Bluetooth Assigned Numbers. */ |  | ||||||
|   uint8_t          name_space;  /**< Namespace from Bluetooth Assigned Numbers, see @ref BLE_GATT_CPF_NAMESPACES. */ |  | ||||||
|   uint16_t         desc;        /**< Namespace description from Bluetooth Assigned Numbers, see @ref BLE_GATT_CPF_NAMESPACES. */ |  | ||||||
| } ble_gatts_char_pf_t; |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /**@brief GATT Characteristic metadata. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   ble_gatt_char_props_t       char_props;               /**< Characteristic Properties. */ |  | ||||||
|   ble_gatt_char_ext_props_t   char_ext_props;           /**< Characteristic Extended Properties. */ |  | ||||||
|   uint8_t const              *p_char_user_desc;         /**< Pointer to a UTF-8 encoded string (non-NULL terminated), NULL if the descriptor is not required. */ |  | ||||||
|   uint16_t                    char_user_desc_max_size;  /**< The maximum size in bytes of the user description descriptor. */ |  | ||||||
|   uint16_t                    char_user_desc_size;      /**< The size of the user description, must be smaller or equal to char_user_desc_max_size. */ |  | ||||||
|   ble_gatts_char_pf_t const  *p_char_pf;                /**< Pointer to a presentation format structure or NULL if the CPF descriptor is not required. */ |  | ||||||
|   ble_gatts_attr_md_t const  *p_user_desc_md;           /**< Attribute metadata for the User Description descriptor, or NULL for default values. */ |  | ||||||
|   ble_gatts_attr_md_t const  *p_cccd_md;                /**< Attribute metadata for the Client Characteristic Configuration Descriptor, or NULL for default values. */ |  | ||||||
|   ble_gatts_attr_md_t const  *p_sccd_md;                /**< Attribute metadata for the Server Characteristic Configuration Descriptor, or NULL for default values. */ |  | ||||||
| } ble_gatts_char_md_t; |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /**@brief GATT Characteristic Definition Handles. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint16_t          value_handle;       /**< Handle to the characteristic value. */ |  | ||||||
|   uint16_t          user_desc_handle;   /**< Handle to the User Description descriptor, or @ref BLE_GATT_HANDLE_INVALID if not present. */ |  | ||||||
|   uint16_t          cccd_handle;        /**< Handle to the Client Characteristic Configuration Descriptor, or @ref BLE_GATT_HANDLE_INVALID if not present. */ |  | ||||||
|   uint16_t          sccd_handle;        /**< Handle to the Server Characteristic Configuration Descriptor, or @ref BLE_GATT_HANDLE_INVALID if not present. */ |  | ||||||
| } ble_gatts_char_handles_t; |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /**@brief GATT HVx parameters. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint16_t          handle;             /**< Characteristic Value Handle. */ |  | ||||||
|   uint8_t           type;               /**< Indication or Notification, see @ref BLE_GATT_HVX_TYPES. */ |  | ||||||
|   uint16_t          offset;             /**< Offset within the attribute value. */ |  | ||||||
|   uint16_t         *p_len;              /**< Length in bytes to be written, length in bytes written after return. */ |  | ||||||
|   uint8_t const    *p_data;             /**< Actual data content, use NULL to use the current attribute value. */ |  | ||||||
| } ble_gatts_hvx_params_t; |  | ||||||
|  |  | ||||||
| /**@brief GATT Authorization parameters. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint16_t          gatt_status;        /**< GATT status code for the operation, see @ref BLE_GATT_STATUS_CODES. */ |  | ||||||
|   uint8_t           update : 1;         /**< If set, data supplied in p_data will be used to update the attribute value. |  | ||||||
|                                              Please note that for @ref BLE_GATTS_AUTHORIZE_TYPE_WRITE operations this bit must always be set, |  | ||||||
|                                              as the data to be written needs to be stored and later provided by the application. */ |  | ||||||
|   uint16_t          offset;             /**< Offset of the attribute value being updated. */ |  | ||||||
|   uint16_t          len;                /**< Length in bytes of the value in p_data pointer, see @ref BLE_GATTS_ATTR_LENS_MAX. */ |  | ||||||
|   uint8_t const    *p_data;             /**< Pointer to new value used to update the attribute value. */ |  | ||||||
| } ble_gatts_authorize_params_t; |  | ||||||
|  |  | ||||||
| /**@brief GATT Read or Write Authorize Reply parameters. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint8_t                               type;   /**< Type of authorize operation, see @ref BLE_GATTS_AUTHORIZE_TYPES. */ |  | ||||||
|   union { |  | ||||||
|     ble_gatts_authorize_params_t        read;   /**< Read authorization parameters. */ |  | ||||||
|     ble_gatts_authorize_params_t        write;  /**< Write authorization parameters. */ |  | ||||||
|   } params;                                     /**< Reply Parameters. */ |  | ||||||
| } ble_gatts_rw_authorize_reply_params_t; |  | ||||||
|  |  | ||||||
| /**@brief Service Changed Inclusion configuration parameters, set with @ref sd_ble_cfg_set. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint8_t service_changed : 1;       /**< If 1, include the Service Changed characteristic in the Attribute Table. Default is @ref BLE_GATTS_SERVICE_CHANGED_DEFAULT. */ |  | ||||||
| } ble_gatts_cfg_service_changed_t; |  | ||||||
|  |  | ||||||
| /**@brief Attribute table size configuration parameters, set with @ref sd_ble_cfg_set. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_LENGTH One or more of the following is true: |  | ||||||
|  *                                    - The specified Attribute Table size is too small. |  | ||||||
|  *                                      The minimum acceptable size is defined by @ref BLE_GATTS_ATTR_TAB_SIZE_MIN. |  | ||||||
|  *                                    - The specified Attribute Table size is not a multiple of 4. |  | ||||||
|  */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint32_t attr_tab_size; /**< Attribute table size. Default is @ref BLE_GATTS_ATTR_TAB_SIZE_DEFAULT, minimum is @ref BLE_GATTS_ATTR_TAB_SIZE_MIN. */ |  | ||||||
| } ble_gatts_cfg_attr_tab_size_t; |  | ||||||
|  |  | ||||||
| /**@brief Config structure for GATTS configurations. */ |  | ||||||
| typedef union |  | ||||||
| { |  | ||||||
|   ble_gatts_cfg_service_changed_t service_changed;  /**< Include service changed characteristic, cfg_id is @ref BLE_GATTS_CFG_SERVICE_CHANGED. */ |  | ||||||
|   ble_gatts_cfg_attr_tab_size_t attr_tab_size;      /**< Attribute table size, cfg_id is @ref BLE_GATTS_CFG_ATTR_TAB_SIZE. */ |  | ||||||
| } ble_gatts_cfg_t; |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /**@brief Event structure for @ref BLE_GATTS_EVT_WRITE. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint16_t                    handle;             /**< Attribute Handle. */ |  | ||||||
|   ble_uuid_t                  uuid;               /**< Attribute UUID. */ |  | ||||||
|   uint8_t                     op;                 /**< Type of write operation, see @ref BLE_GATTS_OPS. */ |  | ||||||
|   uint8_t                     auth_required;      /**< Writing operation deferred due to authorization requirement. Application may use @ref sd_ble_gatts_value_set to finalize the writing operation. */ |  | ||||||
|   uint16_t                    offset;             /**< Offset for the write operation. */ |  | ||||||
|   uint16_t                    len;                /**< Length of the received data. */ |  | ||||||
|   uint8_t                     data[1];            /**< Received data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. |  | ||||||
|                                                        See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ |  | ||||||
| } ble_gatts_evt_write_t; |  | ||||||
|  |  | ||||||
| /**@brief Event substructure for authorized read requests, see @ref ble_gatts_evt_rw_authorize_request_t. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint16_t                    handle;             /**< Attribute Handle. */ |  | ||||||
|   ble_uuid_t                  uuid;               /**< Attribute UUID. */ |  | ||||||
|   uint16_t                    offset;             /**< Offset for the read operation. */ |  | ||||||
| } ble_gatts_evt_read_t; |  | ||||||
|  |  | ||||||
| /**@brief Event structure for @ref BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint8_t                     type;             /**< Type of authorize operation, see @ref BLE_GATTS_AUTHORIZE_TYPES. */ |  | ||||||
|   union { |  | ||||||
|     ble_gatts_evt_read_t      read;             /**< Attribute Read Parameters. */ |  | ||||||
|     ble_gatts_evt_write_t     write;            /**< Attribute Write Parameters. */ |  | ||||||
|   } request;                                    /**< Request Parameters. */ |  | ||||||
| } ble_gatts_evt_rw_authorize_request_t; |  | ||||||
|  |  | ||||||
| /**@brief Event structure for @ref BLE_GATTS_EVT_SYS_ATTR_MISSING. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint8_t hint;                                 /**< Hint (currently unused). */ |  | ||||||
| } ble_gatts_evt_sys_attr_missing_t; |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /**@brief Event structure for @ref BLE_GATTS_EVT_HVC. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint16_t          handle;                       /**< Attribute Handle. */ |  | ||||||
| } ble_gatts_evt_hvc_t; |  | ||||||
|  |  | ||||||
| /**@brief Event structure for @ref BLE_GATTS_EVT_EXCHANGE_MTU_REQUEST. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint16_t          client_rx_mtu;              /**< Client RX MTU size. */ |  | ||||||
| } ble_gatts_evt_exchange_mtu_request_t; |  | ||||||
|  |  | ||||||
| /**@brief Event structure for @ref BLE_GATTS_EVT_TIMEOUT. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint8_t          src;                       /**< Timeout source, see @ref BLE_GATT_TIMEOUT_SOURCES. */ |  | ||||||
| } ble_gatts_evt_timeout_t; |  | ||||||
|  |  | ||||||
| /**@brief Event structure for @ref BLE_GATTS_EVT_HVN_TX_COMPLETE. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint8_t          count;                     /**< Number of notification transmissions completed. */ |  | ||||||
| } ble_gatts_evt_hvn_tx_complete_t; |  | ||||||
|  |  | ||||||
| /**@brief GATTS event structure. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint16_t conn_handle;                                       /**< Connection Handle on which the event occurred. */ |  | ||||||
|   union |  | ||||||
|   { |  | ||||||
|     ble_gatts_evt_write_t                 write;                 /**< Write Event Parameters. */ |  | ||||||
|     ble_gatts_evt_rw_authorize_request_t  authorize_request;     /**< Read or Write Authorize Request Parameters. */ |  | ||||||
|     ble_gatts_evt_sys_attr_missing_t      sys_attr_missing;      /**< System attributes missing. */ |  | ||||||
|     ble_gatts_evt_hvc_t                   hvc;                   /**< Handle Value Confirmation Event Parameters. */ |  | ||||||
|     ble_gatts_evt_exchange_mtu_request_t  exchange_mtu_request;  /**< Exchange MTU Request Event Parameters. */ |  | ||||||
|     ble_gatts_evt_timeout_t               timeout;               /**< Timeout Event. */ |  | ||||||
|     ble_gatts_evt_hvn_tx_complete_t       hvn_tx_complete;       /**< Handle Value Notification transmission complete Event Parameters. */ |  | ||||||
|   } params;                                                      /**< Event Parameters. */ |  | ||||||
| } ble_gatts_evt_t; |  | ||||||
|  |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
| /** @addtogroup BLE_GATTS_FUNCTIONS Functions |  | ||||||
|  * @{ */ |  | ||||||
|  |  | ||||||
| /**@brief Add a service declaration to the Attribute Table. |  | ||||||
|  * |  | ||||||
|  * @note Secondary Services are only relevant in the context of the entity that references them, it is therefore forbidden to |  | ||||||
|  *       add a secondary service declaration that is not referenced by another service later in the Attribute Table. |  | ||||||
|  * |  | ||||||
|  * @mscs |  | ||||||
|  * @mmsc{@ref BLE_GATTS_ATT_TABLE_POP_MSC} |  | ||||||
|  * @endmscs |  | ||||||
|  * |  | ||||||
|  * @param[in] type      Toggles between primary and secondary services, see @ref BLE_GATTS_SRVC_TYPES. |  | ||||||
|  * @param[in] p_uuid    Pointer to service UUID. |  | ||||||
|  * @param[out] p_handle Pointer to a 16-bit word where the assigned handle will be stored. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS Successfully added a service declaration. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, Vendor Specific UUIDs need to be present in the table. |  | ||||||
|  * @retval ::NRF_ERROR_FORBIDDEN Forbidden value supplied, certain UUIDs are reserved for the stack. |  | ||||||
|  * @retval ::NRF_ERROR_NO_MEM Not enough memory to complete operation. |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_BLE_GATTS_SERVICE_ADD, uint32_t, sd_ble_gatts_service_add(uint8_t type, ble_uuid_t const *p_uuid, uint16_t *p_handle)); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /**@brief Add an include declaration to the Attribute Table. |  | ||||||
|  * |  | ||||||
|  * @note It is currently only possible to add an include declaration to the last added service (i.e. only sequential population is supported at this time). |  | ||||||
|  * |  | ||||||
|  * @note The included service must already be present in the Attribute Table prior to this call. |  | ||||||
|  * |  | ||||||
|  * @mscs |  | ||||||
|  * @mmsc{@ref BLE_GATTS_ATT_TABLE_POP_MSC} |  | ||||||
|  * @endmscs |  | ||||||
|  * |  | ||||||
|  * @param[in] service_handle    Handle of the service where the included service is to be placed, if @ref BLE_GATT_HANDLE_INVALID is used, it will be placed sequentially. |  | ||||||
|  * @param[in] inc_srvc_handle   Handle of the included service. |  | ||||||
|  * @param[out] p_include_handle Pointer to a 16-bit word where the assigned handle will be stored. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS Successfully added an include declaration. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, handle values need to match previously added services. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. |  | ||||||
|  * @retval ::NRF_ERROR_NOT_SUPPORTED Feature is not supported, service_handle must be that of the last added service. |  | ||||||
|  * @retval ::NRF_ERROR_FORBIDDEN Forbidden value supplied, self inclusions are not allowed. |  | ||||||
|  * @retval ::NRF_ERROR_NO_MEM Not enough memory to complete operation. |  | ||||||
|  * @retval ::NRF_ERROR_NOT_FOUND Attribute not found. |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_BLE_GATTS_INCLUDE_ADD, uint32_t, sd_ble_gatts_include_add(uint16_t service_handle, uint16_t inc_srvc_handle, uint16_t *p_include_handle)); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /**@brief Add a characteristic declaration, a characteristic value declaration and optional characteristic descriptor declarations to the Attribute Table. |  | ||||||
|  * |  | ||||||
|  * @note It is currently only possible to add a characteristic to the last added service (i.e. only sequential population is supported at this time). |  | ||||||
|  * |  | ||||||
|  * @note Several restrictions apply to the parameters, such as matching permissions between the user description descriptor and the writable auxiliaries bits, |  | ||||||
|  *       readable (no security) and writable (selectable) CCCDs and SCCDs and valid presentation format values. |  | ||||||
|  * |  | ||||||
|  * @note If no metadata is provided for the optional descriptors, their permissions will be derived from the characteristic permissions. |  | ||||||
|  * |  | ||||||
|  * @mscs |  | ||||||
|  * @mmsc{@ref BLE_GATTS_ATT_TABLE_POP_MSC} |  | ||||||
|  * @endmscs |  | ||||||
|  * |  | ||||||
|  * @param[in] service_handle    Handle of the service where the characteristic is to be placed, if @ref BLE_GATT_HANDLE_INVALID is used, it will be placed sequentially. |  | ||||||
|  * @param[in] p_char_md         Characteristic metadata. |  | ||||||
|  * @param[in] p_attr_char_value Pointer to the attribute structure corresponding to the characteristic value. |  | ||||||
|  * @param[out] p_handles        Pointer to the structure where the assigned handles will be stored. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS Successfully added a characteristic. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, service handle, Vendor Specific UUIDs, lengths, and permissions need to adhere to the constraints. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation, a service context is required. |  | ||||||
|  * @retval ::NRF_ERROR_FORBIDDEN Forbidden value supplied, certain UUIDs are reserved for the stack. |  | ||||||
|  * @retval ::NRF_ERROR_NO_MEM Not enough memory to complete operation. |  | ||||||
|  * @retval ::NRF_ERROR_DATA_SIZE Invalid data size(s) supplied, attribute lengths are restricted by @ref BLE_GATTS_ATTR_LENS_MAX. |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_BLE_GATTS_CHARACTERISTIC_ADD, uint32_t, sd_ble_gatts_characteristic_add(uint16_t service_handle, ble_gatts_char_md_t const *p_char_md, ble_gatts_attr_t const *p_attr_char_value, ble_gatts_char_handles_t *p_handles)); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /**@brief Add a descriptor to the Attribute Table. |  | ||||||
|  * |  | ||||||
|  * @note It is currently only possible to add a descriptor to the last added characteristic (i.e. only sequential population is supported at this time). |  | ||||||
|  * |  | ||||||
|  * @mscs |  | ||||||
|  * @mmsc{@ref BLE_GATTS_ATT_TABLE_POP_MSC} |  | ||||||
|  * @endmscs |  | ||||||
|  * |  | ||||||
|  * @param[in] char_handle   Handle of the characteristic where the descriptor is to be placed, if @ref BLE_GATT_HANDLE_INVALID is used, it will be placed sequentially. |  | ||||||
|  * @param[in] p_attr        Pointer to the attribute structure. |  | ||||||
|  * @param[out] p_handle     Pointer to a 16-bit word where the assigned handle will be stored. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS Successfully added a descriptor. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, characteristic handle, Vendor Specific UUIDs, lengths, and permissions need to adhere to the constraints. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation, a characteristic context is required. |  | ||||||
|  * @retval ::NRF_ERROR_FORBIDDEN Forbidden value supplied, certain UUIDs are reserved for the stack. |  | ||||||
|  * @retval ::NRF_ERROR_NO_MEM Not enough memory to complete operation. |  | ||||||
|  * @retval ::NRF_ERROR_DATA_SIZE Invalid data size(s) supplied, attribute lengths are restricted by @ref BLE_GATTS_ATTR_LENS_MAX. |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_BLE_GATTS_DESCRIPTOR_ADD, uint32_t, sd_ble_gatts_descriptor_add(uint16_t char_handle, ble_gatts_attr_t const *p_attr, uint16_t *p_handle)); |  | ||||||
|  |  | ||||||
| /**@brief Set the value of a given attribute. |  | ||||||
|  * |  | ||||||
|  * @note Values other than system attributes can be set at any time, regardless of whether any active connections exist. |  | ||||||
|  * |  | ||||||
|  * @mscs |  | ||||||
|  * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_QUEUE_FULL_MSC} |  | ||||||
|  * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_NOBUF_NOAUTH_MSC} |  | ||||||
|  * @endmscs |  | ||||||
|  * |  | ||||||
|  * @param[in] conn_handle  Connection handle. Ignored if the value does not belong to a system attribute. |  | ||||||
|  * @param[in] handle       Attribute handle. |  | ||||||
|  * @param[in,out] p_value  Attribute value information. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS Successfully set the value of the attribute. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. |  | ||||||
|  * @retval ::NRF_ERROR_NOT_FOUND Attribute not found. |  | ||||||
|  * @retval ::NRF_ERROR_FORBIDDEN Forbidden handle supplied, certain attributes are not modifiable by the application. |  | ||||||
|  * @retval ::NRF_ERROR_DATA_SIZE Invalid data size(s) supplied, attribute lengths are restricted by @ref BLE_GATTS_ATTR_LENS_MAX. |  | ||||||
|  * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied on a system attribute. |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_BLE_GATTS_VALUE_SET, uint32_t, sd_ble_gatts_value_set(uint16_t conn_handle, uint16_t handle, ble_gatts_value_t *p_value)); |  | ||||||
|  |  | ||||||
| /**@brief Get the value of a given attribute. |  | ||||||
|  * |  | ||||||
|  * @note                 If the attribute value is longer than the size of the supplied buffer, |  | ||||||
|  *                       @ref ble_gatts_value_t::len will return the total attribute value length (excluding offset), |  | ||||||
|  *                       and not the number of bytes actually returned in @ref ble_gatts_value_t::p_value. |  | ||||||
|  *                       The application may use this information to allocate a suitable buffer size. |  | ||||||
|  * |  | ||||||
|  * @note                 When retrieving system attribute values with this function, the connection handle |  | ||||||
|  *                       may refer to an already disconnected connection. Refer to the documentation of |  | ||||||
|  *                       @ref sd_ble_gatts_sys_attr_get for further information. |  | ||||||
|  * |  | ||||||
|  * @param[in] conn_handle  Connection handle. Ignored if the value does not belong to a system attribute. |  | ||||||
|  * @param[in] handle       Attribute handle. |  | ||||||
|  * @param[in,out] p_value  Attribute value information. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS Successfully retrieved the value of the attribute. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. |  | ||||||
|  * @retval ::NRF_ERROR_NOT_FOUND Attribute not found. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_PARAM Invalid attribute offset supplied. |  | ||||||
|  * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied on a system attribute. |  | ||||||
|  * @retval ::BLE_ERROR_GATTS_SYS_ATTR_MISSING System attributes missing, use @ref sd_ble_gatts_sys_attr_set to set them to a known value. |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_BLE_GATTS_VALUE_GET, uint32_t, sd_ble_gatts_value_get(uint16_t conn_handle, uint16_t handle, ble_gatts_value_t *p_value)); |  | ||||||
|  |  | ||||||
| /**@brief Notify or Indicate an attribute value. |  | ||||||
|  * |  | ||||||
|  * @details This function checks for the relevant Client Characteristic Configuration descriptor value to verify that the relevant operation |  | ||||||
|  *          (notification or indication) has been enabled by the client. It is also able to update the attribute value before issuing the PDU, so that |  | ||||||
|  *          the application can atomically perform a value update and a server initiated transaction with a single API call. |  | ||||||
|  * |  | ||||||
|  * @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. |  | ||||||
|  *          The Attribute Table has been updated if one of the following error codes is returned: @ref NRF_ERROR_INVALID_STATE, @ref NRF_ERROR_BUSY, |  | ||||||
|  *          @ref NRF_ERROR_FORBIDDEN, @ref BLE_ERROR_GATTS_SYS_ATTR_MISSING and @ref NRF_ERROR_RESOURCES. |  | ||||||
|  *          The caller can check whether the value has been updated by looking at the contents of *(@ref ble_gatts_hvx_params_t::p_len). |  | ||||||
|  * |  | ||||||
|  * @note    Only one indication procedure can be ongoing per connection at a time. |  | ||||||
|  *          If the application tries to indicate an attribute value while another indication procedure is ongoing, |  | ||||||
|  *          the function call will return @ref NRF_ERROR_BUSY. |  | ||||||
|  *          A @ref BLE_GATTS_EVT_HVC event will be issued as soon as the confirmation arrives from the peer. |  | ||||||
|  * |  | ||||||
|  * @note    The number of Handle Value Notifications that can be queued is configured by @ref ble_gatts_conn_cfg_t::hvn_tx_queue_size |  | ||||||
|  *          When the queue is full, the function call will return @ref NRF_ERROR_RESOURCES. |  | ||||||
|  *          A @ref BLE_GATTS_EVT_HVN_TX_COMPLETE event will be issued as soon as the transmission of the notification is complete. |  | ||||||
|  * |  | ||||||
|  * @note    The application can keep track of the available queue element count for notifications by following the procedure below: |  | ||||||
|  *          - Store initial queue element count in a variable. |  | ||||||
|  *          - Decrement the variable, which stores the currently available queue element count, by one when a call to this function returns @ref NRF_SUCCESS. |  | ||||||
|  *          - Increment the variable, which stores the current available queue element count, by the count variable in @ref BLE_GATTS_EVT_HVN_TX_COMPLETE event. |  | ||||||
|  * |  | ||||||
|  * @events |  | ||||||
|  * @event{@ref BLE_GATTS_EVT_HVN_TX_COMPLETE, Notification transmission complete.} |  | ||||||
|  * @event{@ref BLE_GATTS_EVT_HVC, Confirmation received from the peer.} |  | ||||||
|  * @endevents |  | ||||||
|  * |  | ||||||
|  * @mscs |  | ||||||
|  * @mmsc{@ref BLE_GATTS_HVX_SYS_ATTRS_MISSING_MSC} |  | ||||||
|  * @mmsc{@ref BLE_GATTS_HVN_MSC} |  | ||||||
|  * @mmsc{@ref BLE_GATTS_HVI_MSC} |  | ||||||
|  * @mmsc{@ref BLE_GATTS_HVX_DISABLED_MSC} |  | ||||||
|  * @endmscs |  | ||||||
|  * |  | ||||||
|  * @param[in] conn_handle      Connection handle. |  | ||||||
|  * @param[in,out] p_hvx_params Pointer to an HVx parameters structure. If @ref ble_gatts_hvx_params_t::p_data |  | ||||||
|  *                             contains a non-NULL pointer the attribute value will be updated with the contents |  | ||||||
|  *                             pointed by it before sending the notification or indication. If the attribute value |  | ||||||
|  *                             is updated, @ref ble_gatts_hvx_params_t::p_len is updated by the SoftDevice to |  | ||||||
|  *                             contain the number of actual bytes written, else it will be set to 0. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS Successfully queued a notification or indication for transmission, and optionally updated the attribute value. |  | ||||||
|  * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_STATE One or more of the following is true: |  | ||||||
|  *                                   - Invalid Connection State |  | ||||||
|  *                                   - Notifications and/or indications not enabled in the CCCD |  | ||||||
|  *                                   - An ATT_MTU exchange is ongoing |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. |  | ||||||
|  * @retval ::BLE_ERROR_INVALID_ATTR_HANDLE Invalid attribute handle(s) supplied. Only attributes added directly by the application are available to notify and indicate. |  | ||||||
|  * @retval ::BLE_ERROR_GATTS_INVALID_ATTR_TYPE Invalid attribute type(s) supplied, only characteristic values may be notified and indicated. |  | ||||||
|  * @retval ::NRF_ERROR_NOT_FOUND Attribute not found. |  | ||||||
|  * @retval ::NRF_ERROR_FORBIDDEN The connection's current security level is lower than the one required by the write permissions of the CCCD associated with this characteristic. |  | ||||||
|  * @retval ::NRF_ERROR_DATA_SIZE Invalid data size(s) supplied. |  | ||||||
|  * @retval ::NRF_ERROR_BUSY For @ref BLE_GATT_HVX_INDICATION Procedure already in progress. Wait for a @ref BLE_GATTS_EVT_HVC event and retry. |  | ||||||
|  * @retval ::BLE_ERROR_GATTS_SYS_ATTR_MISSING System attributes missing, use @ref sd_ble_gatts_sys_attr_set to set them to a known value. |  | ||||||
|  * @retval ::NRF_ERROR_RESOURCES Too many notifications queued. |  | ||||||
|  *                               Wait for a @ref BLE_GATTS_EVT_HVN_TX_COMPLETE event and retry. |  | ||||||
|  * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_BLE_GATTS_HVX, uint32_t, sd_ble_gatts_hvx(uint16_t conn_handle, ble_gatts_hvx_params_t const *p_hvx_params)); |  | ||||||
|  |  | ||||||
| /**@brief Indicate the Service Changed attribute value. |  | ||||||
|  * |  | ||||||
|  * @details This call will send a Handle Value Indication to one or more peers connected to inform them that the Attribute |  | ||||||
|  *          Table layout has changed. As soon as the peer has confirmed the indication, a @ref BLE_GATTS_EVT_SC_CONFIRM event will |  | ||||||
|  *          be issued. |  | ||||||
|  * |  | ||||||
|  * @note    Some of the restrictions and limitations that apply to @ref sd_ble_gatts_hvx also apply here. |  | ||||||
|  * |  | ||||||
|  * @events |  | ||||||
|  * @event{@ref BLE_GATTS_EVT_SC_CONFIRM, Confirmation of attribute table change received from peer.} |  | ||||||
|  * @endevents |  | ||||||
|  * |  | ||||||
|  * @mscs |  | ||||||
|  * @mmsc{@ref BLE_GATTS_SC_MSC} |  | ||||||
|  * @endmscs |  | ||||||
|  * |  | ||||||
|  * @param[in] conn_handle  Connection handle. |  | ||||||
|  * @param[in] start_handle Start of affected attribute handle range. |  | ||||||
|  * @param[in] end_handle   End of affected attribute handle range. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS Successfully queued the Service Changed indication for transmission. |  | ||||||
|  * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. |  | ||||||
|  * @retval ::NRF_ERROR_NOT_SUPPORTED Service Changed not enabled at initialization. See @ref |  | ||||||
|  *                                   sd_ble_cfg_set and @ref ble_gatts_cfg_service_changed_t. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_STATE One or more of the following is true: |  | ||||||
|  *                                   - Invalid Connection State |  | ||||||
|  *                                   - Notifications and/or indications not enabled in the CCCD |  | ||||||
|  *                                   - An ATT_MTU exchange is ongoing |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. |  | ||||||
|  * @retval ::BLE_ERROR_INVALID_ATTR_HANDLE Invalid attribute handle(s) supplied, handles must be in the range populated by the application. |  | ||||||
|  * @retval ::NRF_ERROR_BUSY Procedure already in progress. |  | ||||||
|  * @retval ::BLE_ERROR_GATTS_SYS_ATTR_MISSING System attributes missing, use @ref sd_ble_gatts_sys_attr_set to set them to a known value. |  | ||||||
|  * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. |  | ||||||
|  */ |  | ||||||
| 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)); |  | ||||||
|  |  | ||||||
| /**@brief Respond to a Read/Write authorization request. |  | ||||||
|  * |  | ||||||
|  * @note This call should only be used as a response to a @ref BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST event issued to the application. |  | ||||||
|  * |  | ||||||
|  * @mscs |  | ||||||
|  * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_NOBUF_AUTH_MSC} |  | ||||||
|  * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_BUF_AUTH_MSC} |  | ||||||
|  * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_NOBUF_NOAUTH_MSC} |  | ||||||
|  * @mmsc{@ref BLE_GATTS_READ_REQ_AUTH_MSC} |  | ||||||
|  * @mmsc{@ref BLE_GATTS_WRITE_REQ_AUTH_MSC} |  | ||||||
|  * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_QUEUE_FULL_MSC} |  | ||||||
|  * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_PEER_CANCEL_MSC} |  | ||||||
|  * @endmscs |  | ||||||
|  * |  | ||||||
|  * @param[in] conn_handle                 Connection handle. |  | ||||||
|  * @param[in] p_rw_authorize_reply_params Pointer to a structure with the attribute provided by the application. |  | ||||||
|  * |  | ||||||
|  * @note @ref ble_gatts_authorize_params_t::p_data is ignored when this function is used to respond |  | ||||||
|  *       to a @ref BLE_GATTS_AUTHORIZE_TYPE_READ event if @ref ble_gatts_authorize_params_t::update |  | ||||||
|  *       is set to 0. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS               Successfully queued a response to the peer, and in the case of a write operation, Attribute Table updated. |  | ||||||
|  * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. |  | ||||||
|  * @retval ::NRF_ERROR_BUSY            The stack is busy, process pending events and retry. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_ADDR    Invalid pointer supplied. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_STATE   Invalid Connection State or no authorization request pending. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_PARAM   Authorization op invalid, |  | ||||||
|  *                                         handle supplied does not match requested handle, |  | ||||||
|  *                                         or invalid data to be written provided by the application. |  | ||||||
|  * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. |  | ||||||
|  */ |  | ||||||
| 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 *p_rw_authorize_reply_params)); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /**@brief Update persistent system attribute information. |  | ||||||
|  * |  | ||||||
|  * @details Supply information about persistent system attributes to the stack, |  | ||||||
|  *          previously obtained using @ref sd_ble_gatts_sys_attr_get. |  | ||||||
|  *          This call is only allowed for active connections, and is usually |  | ||||||
|  *          made immediately after a connection is established with an known bonded device, |  | ||||||
|  *          often as a response to a @ref BLE_GATTS_EVT_SYS_ATTR_MISSING. |  | ||||||
|  * |  | ||||||
|  *          p_sysattrs may point directly to the application's stored copy of the system attributes |  | ||||||
|  *          obtained using @ref sd_ble_gatts_sys_attr_get. |  | ||||||
|  *          If the pointer is NULL, the system attribute info is initialized, assuming that |  | ||||||
|  *          the application does not have any previously saved system attribute data for this device. |  | ||||||
|  * |  | ||||||
|  * @note The state of persistent system attributes is reset upon connection establishment and then remembered for its duration. |  | ||||||
|  * |  | ||||||
|  * @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. |  | ||||||
|  *       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 |  | ||||||
|  *       reset the SoftDevice to return to a known state. |  | ||||||
|  * |  | ||||||
|  * @note When the @ref BLE_GATTS_SYS_ATTR_FLAG_SYS_SRVCS is used with this function, only the system attributes included in system services will be modified. |  | ||||||
|  * @note When the @ref BLE_GATTS_SYS_ATTR_FLAG_USR_SRVCS is used with this function, only the system attributes included in user services will be modified. |  | ||||||
|  * |  | ||||||
|  * @mscs |  | ||||||
|  * @mmsc{@ref BLE_GATTS_HVX_SYS_ATTRS_MISSING_MSC} |  | ||||||
|  * @mmsc{@ref BLE_GATTS_SYS_ATTRS_UNK_PEER_MSC} |  | ||||||
|  * @mmsc{@ref BLE_GATTS_SYS_ATTRS_BONDED_PEER_MSC} |  | ||||||
|  * @endmscs |  | ||||||
|  * |  | ||||||
|  * @param[in]  conn_handle        Connection handle. |  | ||||||
|  * @param[in]  p_sys_attr_data    Pointer to a saved copy of system attributes supplied to the stack, or NULL. |  | ||||||
|  * @param[in]  len                Size of data pointed by p_sys_attr_data, in octets. |  | ||||||
|  * @param[in]  flags              Optional additional flags, see @ref BLE_GATTS_SYS_ATTR_FLAGS |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS Successfully set the system attribute information. |  | ||||||
|  * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_PARAM Invalid flags supplied. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_DATA Invalid data supplied, the data should be exactly the same as retrieved with @ref sd_ble_gatts_sys_attr_get. |  | ||||||
|  * @retval ::NRF_ERROR_NO_MEM Not enough memory to complete operation. |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_BLE_GATTS_SYS_ATTR_SET, uint32_t, sd_ble_gatts_sys_attr_set(uint16_t conn_handle, uint8_t const *p_sys_attr_data, uint16_t len, uint32_t flags)); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /**@brief Retrieve persistent system attribute information from the stack. |  | ||||||
|  * |  | ||||||
|  * @details This call is used to retrieve information about values to be stored persistently by the application |  | ||||||
|  *          during the lifetime of a connection or after it has been terminated. When a new connection is established with the same bonded device, |  | ||||||
|  *          the system attribute information retrieved with this function should be restored using using @ref sd_ble_gatts_sys_attr_set. |  | ||||||
|  *          If retrieved after disconnection, the data should be read before a new connection established. The connection handle for |  | ||||||
|  *          the previous, now disconnected, connection will remain valid until a new one is created to allow this API call to refer to it. |  | ||||||
|  *          Connection handles belonging to active connections can be used as well, but care should be taken since the system attributes |  | ||||||
|  *          may be written to at any time by the peer during a connection's lifetime. |  | ||||||
|  * |  | ||||||
|  * @note When the @ref BLE_GATTS_SYS_ATTR_FLAG_SYS_SRVCS is used with this function, only the system attributes included in system services will be returned. |  | ||||||
|  * @note When the @ref BLE_GATTS_SYS_ATTR_FLAG_USR_SRVCS is used with this function, only the system attributes included in user services will be returned. |  | ||||||
|  * |  | ||||||
|  * @mscs |  | ||||||
|  * @mmsc{@ref BLE_GATTS_SYS_ATTRS_BONDED_PEER_MSC} |  | ||||||
|  * @endmscs |  | ||||||
|  * |  | ||||||
|  * @param[in]     conn_handle       Connection handle of the recently terminated connection. |  | ||||||
|  * @param[out]    p_sys_attr_data   Pointer to a buffer where updated information about system attributes will be filled in. The format of the data is described |  | ||||||
|  *                                  in @ref BLE_GATTS_SYS_ATTRS_FORMAT. NULL can be provided to obtain the length of the data. |  | ||||||
|  * @param[in,out] p_len             Size of application buffer if p_sys_attr_data is not NULL. Unconditionally updated to actual length of system attribute data. |  | ||||||
|  * @param[in]     flags             Optional additional flags, see @ref BLE_GATTS_SYS_ATTR_FLAGS |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS Successfully retrieved the system attribute information. |  | ||||||
|  * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_PARAM Invalid flags supplied. |  | ||||||
|  * @retval ::NRF_ERROR_DATA_SIZE The system attribute information did not fit into the provided buffer. |  | ||||||
|  * @retval ::NRF_ERROR_NOT_FOUND No system attributes found. |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_BLE_GATTS_SYS_ATTR_GET, uint32_t, sd_ble_gatts_sys_attr_get(uint16_t conn_handle, uint8_t *p_sys_attr_data, uint16_t *p_len, uint32_t flags)); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /**@brief Retrieve the first valid user attribute handle. |  | ||||||
|  * |  | ||||||
|  * @param[out] p_handle   Pointer to an integer where the handle will be stored. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS Successfully retrieved the handle. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_BLE_GATTS_INITIAL_USER_HANDLE_GET, uint32_t, sd_ble_gatts_initial_user_handle_get(uint16_t *p_handle)); |  | ||||||
|  |  | ||||||
| /**@brief Retrieve the attribute UUID and/or metadata. |  | ||||||
|  * |  | ||||||
|  * @param[in]  handle Attribute handle |  | ||||||
|  * @param[out] p_uuid UUID of the attribute. Use NULL to omit this field. |  | ||||||
|  * @param[out] p_md Metadata of the attribute. Use NULL to omit this field. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS Successfully retrieved the attribute metadata, |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameters supplied. Returned when both @c p_uuid and @c p_md are NULL. |  | ||||||
|  * @retval ::NRF_ERROR_NOT_FOUND Attribute was not found. |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_BLE_GATTS_ATTR_GET, uint32_t, sd_ble_gatts_attr_get(uint16_t handle, ble_uuid_t * p_uuid, ble_gatts_attr_md_t * p_md)); |  | ||||||
|  |  | ||||||
| /**@brief Reply to an ATT_MTU exchange request by sending an Exchange MTU Response to the client. |  | ||||||
|  * |  | ||||||
|  * @details This function is only used to reply to a @ref BLE_GATTS_EVT_EXCHANGE_MTU_REQUEST event. |  | ||||||
|  * |  | ||||||
|  * @details The SoftDevice sets ATT_MTU to the minimum of: |  | ||||||
|  *          - The Client RX MTU value from @ref BLE_GATTS_EVT_EXCHANGE_MTU_REQUEST, and |  | ||||||
|  *          - The Server RX MTU value. |  | ||||||
|  * |  | ||||||
|  *          However, the SoftDevice never sets ATT_MTU lower than @ref BLE_GATT_ATT_MTU_DEFAULT. |  | ||||||
|  * |  | ||||||
|  * @mscs |  | ||||||
|  * @mmsc{@ref BLE_GATTS_MTU_EXCHANGE} |  | ||||||
|  * @endmscs |  | ||||||
|  * |  | ||||||
|  * @param[in] conn_handle    The connection handle identifying the connection to perform this procedure on. |  | ||||||
|  * @param[in] server_rx_mtu  Server RX MTU size. |  | ||||||
|  *                           - The minimum value is @ref BLE_GATT_ATT_MTU_DEFAULT. |  | ||||||
|  *                           - The maximum value is @ref ble_gatt_conn_cfg_t::att_mtu in the connection configuration |  | ||||||
|  *                             used for this connection. |  | ||||||
|  *                           - The value must be equal to Client RX MTU size given in @ref sd_ble_gattc_exchange_mtu_request |  | ||||||
|  *                             if an ATT_MTU exchange has already been performed in the other direction. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS Successfully sent response to the client. |  | ||||||
|  * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State or no ATT_MTU exchange request pending. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_PARAM Invalid Server RX MTU size supplied. |  | ||||||
|  * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_BLE_GATTS_EXCHANGE_MTU_REPLY, uint32_t, sd_ble_gatts_exchange_mtu_reply(uint16_t conn_handle, uint16_t server_rx_mtu)); |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
| #ifdef __cplusplus |  | ||||||
| } |  | ||||||
| #endif |  | ||||||
| #endif // BLE_GATTS_H__ |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|   @} |  | ||||||
| */ |  | ||||||
| @@ -1,135 +0,0 @@ | |||||||
| /* |  | ||||||
|  * Copyright (c) 2012 - 2017, Nordic Semiconductor ASA |  | ||||||
|  * All rights reserved. |  | ||||||
|  * |  | ||||||
|  * Redistribution and use in source and binary forms, with or without modification, |  | ||||||
|  * are permitted provided that the following conditions are met: |  | ||||||
|  * |  | ||||||
|  * 1. Redistributions of source code must retain the above copyright notice, this |  | ||||||
|  *    list of conditions and the following disclaimer. |  | ||||||
|  * |  | ||||||
|  * 2. Redistributions in binary form, except as embedded into a Nordic |  | ||||||
|  *    Semiconductor ASA integrated circuit in a product or a software update for |  | ||||||
|  *    such product, must reproduce the above copyright notice, this list of |  | ||||||
|  *    conditions and the following disclaimer in the documentation and/or other |  | ||||||
|  *    materials provided with the distribution. |  | ||||||
|  * |  | ||||||
|  * 3. Neither the name of Nordic Semiconductor ASA nor the names of its |  | ||||||
|  *    contributors may be used to endorse or promote products derived from this |  | ||||||
|  *    software without specific prior written permission. |  | ||||||
|  * |  | ||||||
|  * 4. This software, with or without modification, must only be used with a |  | ||||||
|  *    Nordic Semiconductor ASA integrated circuit. |  | ||||||
|  * |  | ||||||
|  * 5. Any software provided in binary form under this license must not be reverse |  | ||||||
|  *    engineered, decompiled, modified and/or disassembled. |  | ||||||
|  * |  | ||||||
|  * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS |  | ||||||
|  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |  | ||||||
|  * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE |  | ||||||
|  * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE |  | ||||||
|  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |  | ||||||
|  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE |  | ||||||
|  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |  | ||||||
|  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |  | ||||||
|  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT |  | ||||||
|  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |  | ||||||
|  */ |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|   @addtogroup BLE_COMMON |  | ||||||
|   @{ |  | ||||||
| */ |  | ||||||
|  |  | ||||||
|  |  | ||||||
| #ifndef BLE_HCI_H__ |  | ||||||
| #define BLE_HCI_H__ |  | ||||||
| #ifdef __cplusplus |  | ||||||
| extern "C" { |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| /** @defgroup BLE_HCI_STATUS_CODES Bluetooth status codes |  | ||||||
|  * @{ */ |  | ||||||
|  |  | ||||||
| #define BLE_HCI_STATUS_CODE_SUCCESS                        0x00   /**< Success. */ |  | ||||||
| #define BLE_HCI_STATUS_CODE_UNKNOWN_BTLE_COMMAND           0x01   /**< Unknown BLE Command. */ |  | ||||||
| #define BLE_HCI_STATUS_CODE_UNKNOWN_CONNECTION_IDENTIFIER  0x02   /**< Unknown Connection Identifier. */ |  | ||||||
| /*0x03 Hardware Failure |  | ||||||
| 0x04 Page Timeout |  | ||||||
| */ |  | ||||||
| #define BLE_HCI_AUTHENTICATION_FAILURE                     0x05   /**< Authentication Failure. */ |  | ||||||
| #define BLE_HCI_STATUS_CODE_PIN_OR_KEY_MISSING             0x06   /**< Pin or Key missing. */ |  | ||||||
| #define BLE_HCI_MEMORY_CAPACITY_EXCEEDED                   0x07   /**< Memory Capacity Exceeded. */ |  | ||||||
| #define BLE_HCI_CONNECTION_TIMEOUT                         0x08   /**< Connection Timeout. */ |  | ||||||
| /*0x09 Connection Limit Exceeded |  | ||||||
| 0x0A Synchronous Connection Limit To A Device Exceeded |  | ||||||
| 0x0B ACL Connection Already Exists*/ |  | ||||||
| #define BLE_HCI_STATUS_CODE_COMMAND_DISALLOWED             0x0C   /**< Command Disallowed. */ |  | ||||||
| /*0x0D Connection Rejected due to Limited Resources |  | ||||||
| 0x0E Connection Rejected Due To Security Reasons |  | ||||||
| 0x0F Connection Rejected due to Unacceptable BD_ADDR |  | ||||||
| 0x10 Connection Accept Timeout Exceeded |  | ||||||
| 0x11 Unsupported Feature or Parameter Value*/ |  | ||||||
| #define BLE_HCI_STATUS_CODE_INVALID_BTLE_COMMAND_PARAMETERS 0x12  /**< Invalid BLE Command Parameters. */ |  | ||||||
| #define BLE_HCI_REMOTE_USER_TERMINATED_CONNECTION           0x13  /**< Remote User Terminated Connection. */ |  | ||||||
| #define BLE_HCI_REMOTE_DEV_TERMINATION_DUE_TO_LOW_RESOURCES 0x14  /**< Remote Device Terminated Connection due to low resources.*/ |  | ||||||
| #define BLE_HCI_REMOTE_DEV_TERMINATION_DUE_TO_POWER_OFF     0x15  /**< Remote Device Terminated Connection due to power off. */ |  | ||||||
| #define BLE_HCI_LOCAL_HOST_TERMINATED_CONNECTION            0x16  /**< Local Host Terminated Connection. */ |  | ||||||
| /* |  | ||||||
| 0x17 Repeated Attempts |  | ||||||
| 0x18 Pairing Not Allowed |  | ||||||
| 0x19 Unknown LMP PDU |  | ||||||
| */ |  | ||||||
| #define BLE_HCI_UNSUPPORTED_REMOTE_FEATURE 0x1A                   /**< Unsupported Remote Feature. */ |  | ||||||
| /* |  | ||||||
| 0x1B SCO Offset Rejected |  | ||||||
| 0x1C SCO Interval Rejected |  | ||||||
| 0x1D SCO Air Mode Rejected*/ |  | ||||||
| #define BLE_HCI_STATUS_CODE_INVALID_LMP_PARAMETERS     0x1E       /**< Invalid LMP Parameters. */ |  | ||||||
| #define BLE_HCI_STATUS_CODE_UNSPECIFIED_ERROR          0x1F       /**< Unspecified Error. */ |  | ||||||
| /*0x20 Unsupported LMP Parameter Value |  | ||||||
| 0x21 Role Change Not Allowed |  | ||||||
| */ |  | ||||||
| #define BLE_HCI_STATUS_CODE_LMP_RESPONSE_TIMEOUT            0x22       /**< LMP Response Timeout. */ |  | ||||||
| #define BLE_HCI_STATUS_CODE_LMP_ERROR_TRANSACTION_COLLISION 0x23  /**< LMP Error Transaction Collision/LL Procedure Collision. */ |  | ||||||
| #define BLE_HCI_STATUS_CODE_LMP_PDU_NOT_ALLOWED             0x24       /**< LMP PDU Not Allowed. */ |  | ||||||
| /*0x25 Encryption Mode Not Acceptable |  | ||||||
| 0x26 Link Key Can Not be Changed |  | ||||||
| 0x27 Requested QoS Not Supported |  | ||||||
| */ |  | ||||||
| #define BLE_HCI_INSTANT_PASSED                         0x28       /**< Instant Passed. */ |  | ||||||
| #define BLE_HCI_PAIRING_WITH_UNIT_KEY_UNSUPPORTED      0x29       /**< Pairing with Unit Key Unsupported. */ |  | ||||||
| #define BLE_HCI_DIFFERENT_TRANSACTION_COLLISION        0x2A       /**< Different Transaction Collision. */ |  | ||||||
| /* |  | ||||||
| 0x2B Reserved |  | ||||||
| 0x2C QoS Unacceptable Parameter |  | ||||||
| 0x2D QoS Rejected |  | ||||||
| 0x2E Channel Classification Not Supported |  | ||||||
| 0x2F Insufficient Security |  | ||||||
| */ |  | ||||||
| #define BLE_HCI_PARAMETER_OUT_OF_MANDATORY_RANGE       0x30            /**< Parameter Out Of Mandatory Range. */ |  | ||||||
| /* |  | ||||||
| 0x31 Reserved |  | ||||||
| 0x32 Role Switch Pending |  | ||||||
| 0x33 Reserved |  | ||||||
| 0x34 Reserved Slot Violation |  | ||||||
| 0x35 Role Switch Failed |  | ||||||
| 0x36 Extended Inquiry Response Too Large |  | ||||||
| 0x37 Secure Simple Pairing Not Supported By Host. |  | ||||||
| 0x38 Host Busy - Pairing |  | ||||||
| 0x39 Connection Rejected due to No Suitable Channel Found*/ |  | ||||||
| #define BLE_HCI_CONTROLLER_BUSY                        0x3A       /**< Controller Busy. */ |  | ||||||
| #define BLE_HCI_CONN_INTERVAL_UNACCEPTABLE             0x3B       /**< Connection Interval Unacceptable. */ |  | ||||||
| #define BLE_HCI_DIRECTED_ADVERTISER_TIMEOUT            0x3C       /**< Directed Advertisement Timeout. */ |  | ||||||
| #define BLE_HCI_CONN_TERMINATED_DUE_TO_MIC_FAILURE     0x3D       /**< Connection Terminated due to MIC Failure. */ |  | ||||||
| #define BLE_HCI_CONN_FAILED_TO_BE_ESTABLISHED          0x3E       /**< Connection Failed to be Established. */ |  | ||||||
|  |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
|  |  | ||||||
| #ifdef __cplusplus |  | ||||||
| } |  | ||||||
| #endif |  | ||||||
| #endif // BLE_HCI_H__ |  | ||||||
|  |  | ||||||
| /** @} */ |  | ||||||
| @@ -1,506 +0,0 @@ | |||||||
| /* |  | ||||||
|  * Copyright (c) 2011 - 2017, Nordic Semiconductor ASA |  | ||||||
|  * All rights reserved. |  | ||||||
|  * |  | ||||||
|  * Redistribution and use in source and binary forms, with or without modification, |  | ||||||
|  * are permitted provided that the following conditions are met: |  | ||||||
|  * |  | ||||||
|  * 1. Redistributions of source code must retain the above copyright notice, this |  | ||||||
|  *    list of conditions and the following disclaimer. |  | ||||||
|  * |  | ||||||
|  * 2. Redistributions in binary form, except as embedded into a Nordic |  | ||||||
|  *    Semiconductor ASA integrated circuit in a product or a software update for |  | ||||||
|  *    such product, must reproduce the above copyright notice, this list of |  | ||||||
|  *    conditions and the following disclaimer in the documentation and/or other |  | ||||||
|  *    materials provided with the distribution. |  | ||||||
|  * |  | ||||||
|  * 3. Neither the name of Nordic Semiconductor ASA nor the names of its |  | ||||||
|  *    contributors may be used to endorse or promote products derived from this |  | ||||||
|  *    software without specific prior written permission. |  | ||||||
|  * |  | ||||||
|  * 4. This software, with or without modification, must only be used with a |  | ||||||
|  *    Nordic Semiconductor ASA integrated circuit. |  | ||||||
|  * |  | ||||||
|  * 5. Any software provided in binary form under this license must not be reverse |  | ||||||
|  *    engineered, decompiled, modified and/or disassembled. |  | ||||||
|  * |  | ||||||
|  * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS |  | ||||||
|  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |  | ||||||
|  * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE |  | ||||||
|  * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE |  | ||||||
|  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |  | ||||||
|  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE |  | ||||||
|  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |  | ||||||
|  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |  | ||||||
|  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT |  | ||||||
|  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |  | ||||||
|  */ |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|   @addtogroup BLE_L2CAP Logical Link Control and Adaptation Protocol (L2CAP) |  | ||||||
|   @{ |  | ||||||
|   @brief Definitions and prototypes for the L2CAP interface. |  | ||||||
|  */ |  | ||||||
|  |  | ||||||
| #ifndef BLE_L2CAP_H__ |  | ||||||
| #define BLE_L2CAP_H__ |  | ||||||
|  |  | ||||||
| #include <stdint.h> |  | ||||||
| #include "nrf_svc.h" |  | ||||||
| #include "nrf_error.h" |  | ||||||
| #include "ble_ranges.h" |  | ||||||
| #include "ble_types.h" |  | ||||||
| #include "ble_err.h" |  | ||||||
|  |  | ||||||
| #ifdef __cplusplus |  | ||||||
| extern "C" { |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| /**@addtogroup BLE_L2CAP_TERMINOLOGY Terminology |  | ||||||
|  * @{ |  | ||||||
|  * @details |  | ||||||
|  * |  | ||||||
|  * L2CAP SDU |  | ||||||
|  * - A data unit that the application can send/receive to/from a peer. |  | ||||||
|  * |  | ||||||
|  * L2CAP PDU |  | ||||||
|  * - A data unit that is exchanged between local and remote L2CAP entities. |  | ||||||
|  *   It consists of L2CAP protocol control information and payload fields. |  | ||||||
|  *   The payload field can contain an L2CAP SDU or a part of an L2CAP SDU. |  | ||||||
|  * |  | ||||||
|  * L2CAP MTU |  | ||||||
|  * - The maximum length of an L2CAP SDU. |  | ||||||
|  * |  | ||||||
|  * L2CAP MPS |  | ||||||
|  * - The maximum length of an L2CAP PDU payload field. |  | ||||||
|  * |  | ||||||
|  * Credits |  | ||||||
|  * - A value indicating the number of L2CAP PDUs that the receiver of the credit can send to the peer. |  | ||||||
|  * @} */ |  | ||||||
|  |  | ||||||
| /**@addtogroup BLE_L2CAP_ENUMERATIONS Enumerations |  | ||||||
|  * @{ */ |  | ||||||
|  |  | ||||||
| /**@brief L2CAP API SVC numbers. */ |  | ||||||
| enum BLE_L2CAP_SVCS |  | ||||||
| { |  | ||||||
|   SD_BLE_L2CAP_CH_SETUP        = BLE_L2CAP_SVC_BASE + 0, /**< Set up an L2CAP channel. */ |  | ||||||
|   SD_BLE_L2CAP_CH_RELEASE      = BLE_L2CAP_SVC_BASE + 1, /**< Release an L2CAP channel. */ |  | ||||||
|   SD_BLE_L2CAP_CH_RX           = BLE_L2CAP_SVC_BASE + 2, /**< Receive an SDU on an L2CAP channel. */ |  | ||||||
|   SD_BLE_L2CAP_CH_TX           = BLE_L2CAP_SVC_BASE + 3, /**< Transmit an SDU on an L2CAP channel. */ |  | ||||||
|   SD_BLE_L2CAP_CH_FLOW_CONTROL = BLE_L2CAP_SVC_BASE + 4, /**< Advanced SDU reception flow control. */ |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| /**@brief L2CAP Event IDs. */ |  | ||||||
| enum BLE_L2CAP_EVTS |  | ||||||
| { |  | ||||||
|   BLE_L2CAP_EVT_CH_SETUP_REQUEST    = BLE_L2CAP_EVT_BASE + 0,    /**< L2CAP Channel Setup Request event. |  | ||||||
|                                                                    \n See @ref ble_l2cap_evt_ch_setup_request_t. */ |  | ||||||
|   BLE_L2CAP_EVT_CH_SETUP_REFUSED    = BLE_L2CAP_EVT_BASE + 1,    /**< L2CAP Channel Setup Refused event. |  | ||||||
|                                                                    \n See @ref ble_l2cap_evt_ch_setup_refused_t. */ |  | ||||||
|   BLE_L2CAP_EVT_CH_SETUP            = BLE_L2CAP_EVT_BASE + 2,    /**< L2CAP Channel Setup Completed event. |  | ||||||
|                                                                    \n See @ref ble_l2cap_evt_ch_setup_t. */ |  | ||||||
|   BLE_L2CAP_EVT_CH_RELEASED         = BLE_L2CAP_EVT_BASE + 3,    /**< L2CAP Channel Released event. |  | ||||||
|                                                                    \n No additional event structure applies. */ |  | ||||||
|   BLE_L2CAP_EVT_CH_SDU_BUF_RELEASED = BLE_L2CAP_EVT_BASE + 4,    /**< L2CAP Channel SDU data buffer released event. |  | ||||||
|                                                                    \n See @ref ble_l2cap_evt_ch_sdu_buf_released_t. */ |  | ||||||
|   BLE_L2CAP_EVT_CH_CREDIT           = BLE_L2CAP_EVT_BASE + 5,    /**< L2CAP Channel Credit received. |  | ||||||
|                                                                    \n See @ref ble_l2cap_evt_ch_credit_t. */ |  | ||||||
|   BLE_L2CAP_EVT_CH_RX               = BLE_L2CAP_EVT_BASE + 6,    /**< L2CAP Channel SDU received. |  | ||||||
|                                                                    \n See @ref ble_l2cap_evt_ch_rx_t. */ |  | ||||||
|   BLE_L2CAP_EVT_CH_TX               = BLE_L2CAP_EVT_BASE + 7,   /**< L2CAP Channel SDU transmitted. |  | ||||||
|                                                                    \n See @ref ble_l2cap_evt_ch_tx_t. */ |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
| /**@addtogroup BLE_L2CAP_DEFINES Defines |  | ||||||
|  * @{ */ |  | ||||||
|  |  | ||||||
| /**@brief Maximum number of L2CAP channels per connection. */ |  | ||||||
| #define BLE_L2CAP_CH_COUNT_MAX    (64) |  | ||||||
|  |  | ||||||
| /**@brief Minimum L2CAP MTU, in bytes. */ |  | ||||||
| #define BLE_L2CAP_MTU_MIN         (23) |  | ||||||
|  |  | ||||||
| /**@brief Minimum L2CAP MPS, in bytes. */ |  | ||||||
| #define BLE_L2CAP_MPS_MIN         (23) |  | ||||||
|  |  | ||||||
| /**@brief Invalid CID. */ |  | ||||||
| #define BLE_L2CAP_CID_INVALID     (0x0000) |  | ||||||
|  |  | ||||||
| /**@brief Default number of credits for @ref sd_ble_l2cap_ch_flow_control. */ |  | ||||||
| #define BLE_L2CAP_CREDITS_DEFAULT (1) |  | ||||||
|  |  | ||||||
| /**@defgroup BLE_L2CAP_CH_SETUP_REFUSED_SRCS L2CAP channel setup refused sources |  | ||||||
|  * @{ */ |  | ||||||
| #define BLE_L2CAP_CH_SETUP_REFUSED_SRC_LOCAL            (0x01)    /**< Local. */ |  | ||||||
| #define BLE_L2CAP_CH_SETUP_REFUSED_SRC_REMOTE           (0x02)    /**< Remote. */ |  | ||||||
|  /** @}  */ |  | ||||||
|  |  | ||||||
|  /** @defgroup BLE_L2CAP_CH_STATUS_CODES L2CAP channel status codes |  | ||||||
|  * @{ */ |  | ||||||
| #define BLE_L2CAP_CH_STATUS_CODE_SUCCESS                (0x0000)  /**< Success. */ |  | ||||||
| #define BLE_L2CAP_CH_STATUS_CODE_LE_PSM_NOT_SUPPORTED   (0x0002)  /**< LE_PSM not supported. */ |  | ||||||
| #define BLE_L2CAP_CH_STATUS_CODE_NO_RESOURCES           (0x0004)  /**< No resources available. */ |  | ||||||
| #define BLE_L2CAP_CH_STATUS_CODE_INSUFF_AUTHENTICATION  (0x0005)  /**< Insufficient authentication. */ |  | ||||||
| #define BLE_L2CAP_CH_STATUS_CODE_INSUFF_AUTHORIZATION   (0x0006)  /**< Insufficient authorization. */ |  | ||||||
| #define BLE_L2CAP_CH_STATUS_CODE_INSUFF_ENC_KEY_SIZE    (0x0007)  /**< Insufficient encryption key size. */ |  | ||||||
| #define BLE_L2CAP_CH_STATUS_CODE_INSUFF_ENC             (0x0008)  /**< Insufficient encryption. */ |  | ||||||
| #define BLE_L2CAP_CH_STATUS_CODE_INVALID_SCID           (0x0009)  /**< Invalid Source CID. */ |  | ||||||
| #define BLE_L2CAP_CH_STATUS_CODE_SCID_ALLOCATED         (0x000A)  /**< Source CID already allocated. */ |  | ||||||
| #define BLE_L2CAP_CH_STATUS_CODE_UNACCEPTABLE_PARAMS    (0x000B)  /**< Unacceptable parameters. */ |  | ||||||
| #define BLE_L2CAP_CH_STATUS_CODE_NOT_UNDERSTOOD         (0x8000)  /**< Command Reject received instead of LE Credit Based Connection Response. */ |  | ||||||
| #define BLE_L2CAP_CH_STATUS_CODE_TIMEOUT                (0xC000)  /**< Operation timed out. */ |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
| /**@addtogroup BLE_L2CAP_STRUCTURES Structures |  | ||||||
|  * @{ */ |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|  * @brief BLE L2CAP connection configuration parameters, set with @ref sd_ble_cfg_set. |  | ||||||
|  * |  | ||||||
|  * @note  These parameters are set per connection, so all L2CAP channels created on this connection |  | ||||||
|  *        will have the same parameters. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_PARAM  One or more of the following is true: |  | ||||||
|  *                                    - rx_mps is smaller than @ref BLE_L2CAP_MPS_MIN. |  | ||||||
|  *                                    - tx_mps is smaller than @ref BLE_L2CAP_MPS_MIN. |  | ||||||
|  *                                    - ch_count is greater than @ref BLE_L2CAP_CH_COUNT_MAX. |  | ||||||
|  * @retval ::NRF_ERROR_NO_MEM         rx_mps or tx_mps is set too high. |  | ||||||
|  */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint16_t    rx_mps;        /**< The maximum L2CAP PDU payload size, in bytes, that L2CAP shall |  | ||||||
|                                   be able to receive on L2CAP channels on connections with this |  | ||||||
|                                   configuration. The minimum value is @ref BLE_L2CAP_MPS_MIN. */ |  | ||||||
|   uint16_t    tx_mps;        /**< The maximum L2CAP PDU payload size, in bytes, that L2CAP shall |  | ||||||
|                                   be able to transmit on L2CAP channels on connections with this |  | ||||||
|                                   configuration. The minimum value is @ref BLE_L2CAP_MPS_MIN. */ |  | ||||||
|   uint8_t     rx_queue_size; /**< Number of SDU data buffers that can be queued for reception per |  | ||||||
|                                   L2CAP channel. The minimum value is one. */ |  | ||||||
|   uint8_t     tx_queue_size; /**< Number of SDU data buffers that can be queued for transmission |  | ||||||
|                                   per L2CAP channel. The minimum value is one. */ |  | ||||||
|   uint8_t     ch_count;      /**< Number of L2CAP channels the application can create per connection |  | ||||||
|                                   with this configuration. The default value is zero, the maximum |  | ||||||
|                                   value is @ref BLE_L2CAP_CH_COUNT_MAX. |  | ||||||
|                                   @note if this parameter is set to zero, all other parameters in |  | ||||||
|                                   @ref ble_l2cap_conn_cfg_t are ignored. */ |  | ||||||
| } ble_l2cap_conn_cfg_t; |  | ||||||
|  |  | ||||||
| /**@brief L2CAP channel RX parameters. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint16_t    rx_mtu;        /**< The maximum L2CAP SDU size, in bytes, that L2CAP shall be able to |  | ||||||
|                                   receive on this L2CAP channel. |  | ||||||
|                                   - Must be equal to or greater than @ref BLE_L2CAP_MTU_MIN. */ |  | ||||||
|   uint16_t    rx_mps;        /**< The maximum L2CAP PDU payload size, in bytes, that L2CAP shall be |  | ||||||
|                                   able to receive on this L2CAP channel. |  | ||||||
|                                   - Must be equal to or greater than @ref BLE_L2CAP_MPS_MIN. |  | ||||||
|                                   - Must be equal to or less than @ref ble_l2cap_conn_cfg_t::rx_mps. */ |  | ||||||
|   ble_data_t  sdu_buf;       /**< SDU data buffer for reception. |  | ||||||
|                                   - If @ref ble_data_t::p_data is non-NULL, initial credits are |  | ||||||
|                                     issued to the peer. |  | ||||||
|                                   - If @ref ble_data_t::p_data is NULL, no initial credits are |  | ||||||
|                                     issued to the peer. */ |  | ||||||
| } ble_l2cap_ch_rx_params_t; |  | ||||||
|  |  | ||||||
| /**@brief L2CAP channel setup parameters. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   ble_l2cap_ch_rx_params_t      rx_params;  /**< L2CAP channel RX parameters. */ |  | ||||||
|   uint16_t                      le_psm;     /**< LE Protocol/Service Multiplexer. Used when requesting |  | ||||||
|                                                  setup of an L2CAP channel, ignored otherwise. */ |  | ||||||
|   uint16_t                      status;     /**< Status code, see @ref BLE_L2CAP_CH_STATUS_CODES. |  | ||||||
|                                                  Used when replying to a setup request of an L2CAP |  | ||||||
|                                                  channel, ignored otherwise. */ |  | ||||||
| } ble_l2cap_ch_setup_params_t; |  | ||||||
|  |  | ||||||
| /**@brief L2CAP channel TX parameters. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint16_t    tx_mtu;        /**< The maximum L2CAP SDU size, in bytes, that L2CAP is able to |  | ||||||
|                                   transmit on this L2CAP channel. */ |  | ||||||
|   uint16_t    peer_mps;      /**< The maximum L2CAP PDU payload size, in bytes, that the peer is |  | ||||||
|                                   able to receive on this L2CAP channel. */ |  | ||||||
|   uint16_t    tx_mps;        /**< The maximum L2CAP PDU payload size, in bytes, that L2CAP is able |  | ||||||
|                                   to transmit on this L2CAP channel. This is effective tx_mps, |  | ||||||
|                                   selected by the SoftDevice as |  | ||||||
|                                   MIN( @ref ble_l2cap_ch_tx_params_t::peer_mps, @ref ble_l2cap_conn_cfg_t::tx_mps ) */ |  | ||||||
|   uint16_t    credits;       /**< Initial credits given by the peer. */ |  | ||||||
| } ble_l2cap_ch_tx_params_t; |  | ||||||
|  |  | ||||||
| /**@brief L2CAP Channel Setup Request event. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   ble_l2cap_ch_tx_params_t  tx_params;  /**< L2CAP channel TX parameters. */ |  | ||||||
|   uint16_t                  le_psm;     /**< LE Protocol/Service Multiplexer. */ |  | ||||||
| } ble_l2cap_evt_ch_setup_request_t; |  | ||||||
|  |  | ||||||
| /**@brief L2CAP Channel Setup Refused event. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint8_t  source;           /**< Source, see @ref BLE_L2CAP_CH_SETUP_REFUSED_SRCS */ |  | ||||||
|   uint16_t status;           /**< Status code, see @ref BLE_L2CAP_CH_STATUS_CODES */ |  | ||||||
| } ble_l2cap_evt_ch_setup_refused_t; |  | ||||||
|  |  | ||||||
| /**@brief L2CAP Channel Setup Completed event. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   ble_l2cap_ch_tx_params_t tx_params;  /**< L2CAP channel TX parameters. */ |  | ||||||
| } ble_l2cap_evt_ch_setup_t; |  | ||||||
|  |  | ||||||
| /**@brief L2CAP Channel SDU Data Duffer Released event. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   ble_data_t  sdu_buf;       /**< Returned reception or transmission SDU data buffer. The SoftDevice |  | ||||||
|                                   returns SDU data buffers supplied by the application, which have |  | ||||||
|                                   not yet been returned previously via a @ref BLE_L2CAP_EVT_CH_RX or |  | ||||||
|                                   @ref BLE_L2CAP_EVT_CH_TX event. */ |  | ||||||
| } ble_l2cap_evt_ch_sdu_buf_released_t; |  | ||||||
|  |  | ||||||
| /**@brief L2CAP Channel Credit received event. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint16_t  credits;         /**< Additional credits given by the peer. */ |  | ||||||
| } ble_l2cap_evt_ch_credit_t; |  | ||||||
|  |  | ||||||
| /**@brief L2CAP Channel received SDU event. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint16_t    sdu_len;       /**< Total SDU length, in bytes. */ |  | ||||||
|   ble_data_t  sdu_buf;       /**< SDU data buffer. |  | ||||||
|                                   @note If there is not enough space in the buffer |  | ||||||
|                                         (sdu_buf.len < sdu_len) then the rest of the SDU will be |  | ||||||
|                                         silently discarded by the SoftDevice. */ |  | ||||||
| } ble_l2cap_evt_ch_rx_t; |  | ||||||
|  |  | ||||||
| /**@brief L2CAP Channel transmitted SDU event. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   ble_data_t  sdu_buf;       /**< SDU data buffer. */ |  | ||||||
| } ble_l2cap_evt_ch_tx_t; |  | ||||||
|  |  | ||||||
| /**@brief L2CAP event structure. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint16_t conn_handle;                                     /**< Connection Handle on which the event occured. */ |  | ||||||
|   uint16_t local_cid;                                       /**< Local Channel ID of the L2CAP channel, or |  | ||||||
|                                                                  @ref BLE_L2CAP_CID_INVALID if not present. */ |  | ||||||
|   union |  | ||||||
|   { |  | ||||||
|     ble_l2cap_evt_ch_setup_request_t    ch_setup_request;   /**< L2CAP Channel Setup Request Event Parameters. */ |  | ||||||
|     ble_l2cap_evt_ch_setup_refused_t    ch_setup_refused;   /**< L2CAP Channel Setup Refused Event Parameters. */ |  | ||||||
|     ble_l2cap_evt_ch_setup_t            ch_setup;           /**< L2CAP Channel Setup Completed Event Parameters. */ |  | ||||||
|     ble_l2cap_evt_ch_sdu_buf_released_t ch_sdu_buf_released;/**< L2CAP Channel SDU Data Buffer Released Event Parameters. */ |  | ||||||
|     ble_l2cap_evt_ch_credit_t           credit;             /**< L2CAP Channel Credit Received Event Parameters. */ |  | ||||||
|     ble_l2cap_evt_ch_rx_t               rx;                 /**< L2CAP Channel SDU Received Event Parameters. */ |  | ||||||
|     ble_l2cap_evt_ch_tx_t               tx;                 /**< L2CAP Channel SDU Transmitted Event Parameters. */ |  | ||||||
|   } params;                                                 /**< Event Parameters. */ |  | ||||||
| } ble_l2cap_evt_t; |  | ||||||
|  |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
| /**@addtogroup BLE_L2CAP_FUNCTIONS Functions |  | ||||||
|  * @{ */ |  | ||||||
|  |  | ||||||
| /**@brief Set up an L2CAP channel. |  | ||||||
|  * |  | ||||||
|  * @details This function is used to: |  | ||||||
|  *          - Request setup of an L2CAP channel: sends an LE Credit Based Connection Request packet to a peer. |  | ||||||
|  *          - Reply to a setup request of an L2CAP channel (if called in response to a |  | ||||||
|  *            @ref BLE_L2CAP_EVT_CH_SETUP_REQUEST event): sends an LE Credit Based Connection |  | ||||||
|  *            Response packet to a peer. |  | ||||||
|  * |  | ||||||
|  * @note    A call to this function will require the application to keep the SDU data buffer alive |  | ||||||
|  *          until the SDU data buffer is returned in @ref BLE_L2CAP_EVT_CH_RX or |  | ||||||
|  *          @ref BLE_L2CAP_EVT_CH_SDU_BUF_RELEASED event. |  | ||||||
|  * |  | ||||||
|  * @events |  | ||||||
|  * @event{@ref BLE_L2CAP_EVT_CH_SETUP, Setup successful.} |  | ||||||
|  * @event{@ref BLE_L2CAP_EVT_CH_SETUP_REFUSED, Setup failed.} |  | ||||||
|  * @endevents |  | ||||||
|  * |  | ||||||
|  * @mscs |  | ||||||
|  * @mmsc{@ref BLE_L2CAP_CH_SETUP_MSC} |  | ||||||
|  * @endmscs |  | ||||||
|  * |  | ||||||
|  * @param[in] conn_handle      Connection Handle. |  | ||||||
|  * @param[in,out] p_local_cid  Pointer to a uint16_t containing Local Channel ID of the L2CAP channel: |  | ||||||
|  *                             - As input: @ref BLE_L2CAP_CID_INVALID when requesting setup of an L2CAP |  | ||||||
|  *                               channel or local_cid provided in the @ref BLE_L2CAP_EVT_CH_SETUP_REQUEST |  | ||||||
|  *                               event when replying to a setup request of an L2CAP channel. |  | ||||||
|  *                             - As output: local_cid for this channel. |  | ||||||
|  * @param[in] p_params         L2CAP channel parameters. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS                    Successfully queued request or response for transmission. |  | ||||||
|  * @retval ::NRF_ERROR_BUSY                 The stack is busy, process pending events and retry. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_ADDR         Invalid pointer supplied. |  | ||||||
|  * @retval ::BLE_ERROR_INVALID_CONN_HANDLE  Invalid Connection Handle. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_PARAM        Invalid parameter(s) supplied. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_LENGTH       Supplied higher rx_mps than has been configured on this link. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_STATE        Invalid State to perform operation (L2CAP channel already set up). |  | ||||||
|  * @retval ::NRF_ERROR_NOT_FOUND            CID not found. |  | ||||||
|  * @retval ::NRF_ERROR_RESOURCES            The limit has been reached for available L2CAP channels, |  | ||||||
|  *                                          see @ref ble_l2cap_conn_cfg_t::ch_count. |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_BLE_L2CAP_CH_SETUP, uint32_t, sd_ble_l2cap_ch_setup(uint16_t conn_handle, uint16_t *p_local_cid, ble_l2cap_ch_setup_params_t const *p_params)); |  | ||||||
|  |  | ||||||
| /**@brief Release an L2CAP channel. |  | ||||||
|  * |  | ||||||
|  * @details This sends a Disconnection Request packet to a peer. |  | ||||||
|  * |  | ||||||
|  * @events |  | ||||||
|  * @event{@ref BLE_L2CAP_EVT_CH_RELEASED, Release complete.} |  | ||||||
|  * @endevents |  | ||||||
|  * |  | ||||||
|  * @mscs |  | ||||||
|  * @mmsc{@ref BLE_L2CAP_CH_RELEASE_MSC} |  | ||||||
|  * @endmscs |  | ||||||
|  * |  | ||||||
|  * @param[in] conn_handle   Connection Handle. |  | ||||||
|  * @param[in] local_cid     Local Channel ID of the L2CAP channel. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS                    Successfully queued request for transmission. |  | ||||||
|  * @retval ::BLE_ERROR_INVALID_CONN_HANDLE  Invalid Connection Handle. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_STATE        Invalid State to perform operation (Setup or release is |  | ||||||
|  *                                          in progress for the L2CAP channel). |  | ||||||
|  * @retval ::NRF_ERROR_NOT_FOUND            CID not found. |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_BLE_L2CAP_CH_RELEASE, uint32_t, sd_ble_l2cap_ch_release(uint16_t conn_handle, uint16_t local_cid)); |  | ||||||
|  |  | ||||||
| /**@brief Receive an SDU on an L2CAP channel. |  | ||||||
|  * |  | ||||||
|  * @details This may issue additional credits to the peer using an LE Flow Control Credit packet. |  | ||||||
|  * |  | ||||||
|  * @note    A call to this function will require the application to keep the memory pointed by |  | ||||||
|  *          @ref ble_data_t::p_data alive until the SDU data buffer is returned in @ref BLE_L2CAP_EVT_CH_RX |  | ||||||
|  *          or @ref BLE_L2CAP_EVT_CH_SDU_BUF_RELEASED event. |  | ||||||
|  * |  | ||||||
|  * @note    The SoftDevice can queue up to @ref ble_l2cap_conn_cfg_t::rx_queue_size SDU data buffers |  | ||||||
|  *          for reception per L2CAP channel. |  | ||||||
|  * |  | ||||||
|  * @events |  | ||||||
|  * @event{@ref BLE_L2CAP_EVT_CH_RX, The SDU is received.} |  | ||||||
|  * @endevents |  | ||||||
|  * |  | ||||||
|  * @mscs |  | ||||||
|  * @mmsc{@ref BLE_L2CAP_CH_RX_MSC} |  | ||||||
|  * @endmscs |  | ||||||
|  * |  | ||||||
|  * @param[in] conn_handle Connection Handle. |  | ||||||
|  * @param[in] local_cid   Local Channel ID of the L2CAP channel. |  | ||||||
|  * @param[in] p_sdu_buf   Pointer to the SDU data buffer. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS                    Buffer accepted. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_ADDR         Invalid pointer supplied. |  | ||||||
|  * @retval ::BLE_ERROR_INVALID_CONN_HANDLE  Invalid Connection Handle. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_STATE        Invalid State to perform operation (Setup or release is |  | ||||||
|  *                                          in progress for an L2CAP channel). |  | ||||||
|  * @retval ::NRF_ERROR_NOT_FOUND            CID not found. |  | ||||||
|  * @retval ::NRF_ERROR_RESOURCES            Too many SDU data buffers supplied. Wait for a |  | ||||||
|  *                                          @ref BLE_L2CAP_EVT_CH_RX event and retry. |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_BLE_L2CAP_CH_RX, uint32_t, sd_ble_l2cap_ch_rx(uint16_t conn_handle, uint16_t local_cid, ble_data_t const *p_sdu_buf)); |  | ||||||
|  |  | ||||||
| /**@brief Transmit an SDU on an L2CAP channel. |  | ||||||
|  * |  | ||||||
|  * @note    A call to this function will require the application to keep the memory pointed by |  | ||||||
|  *          @ref ble_data_t::p_data alive until the SDU data buffer is returned in @ref BLE_L2CAP_EVT_CH_TX |  | ||||||
|  *          or @ref BLE_L2CAP_EVT_CH_SDU_BUF_RELEASED event. |  | ||||||
|  * |  | ||||||
|  * @note    The SoftDevice can queue up to @ref ble_l2cap_conn_cfg_t::tx_queue_size SDUs for |  | ||||||
|  *          transmission per L2CAP channel. |  | ||||||
|  * |  | ||||||
|  * @note    The application can keep track of the available credits for transmission by following |  | ||||||
|  *          the procedure below: |  | ||||||
|  *          - Store initial credits given by the peer in a variable. |  | ||||||
|  *            (Initial credits are provided in a @ref BLE_L2CAP_EVT_CH_SETUP event.) |  | ||||||
|  *          - Decrement the variable, which stores the currently available credits, by |  | ||||||
|  *            ceiling((@ref ble_data_t::len + 2) / tx_mps) when a call to this function returns |  | ||||||
|  *            @ref NRF_SUCCESS. (tx_mps is provided in a @ref BLE_L2CAP_EVT_CH_SETUP event.) |  | ||||||
|  *          - Increment the variable, which stores the currently available credits, by additional |  | ||||||
|  *            credits given by the peer in a @ref BLE_L2CAP_EVT_CH_CREDIT event. |  | ||||||
|  * |  | ||||||
|  * @events |  | ||||||
|  * @event{@ref BLE_L2CAP_EVT_CH_TX, The SDU is transmitted.} |  | ||||||
|  * @endevents |  | ||||||
|  * |  | ||||||
|  * @mscs |  | ||||||
|  * @mmsc{@ref BLE_L2CAP_CH_TX_MSC} |  | ||||||
|  * @endmscs |  | ||||||
|  * |  | ||||||
|  * @param[in] conn_handle Connection Handle. |  | ||||||
|  * @param[in] local_cid   Local Channel ID of the L2CAP channel. |  | ||||||
|  * @param[in] p_sdu_buf   Pointer to the SDU data buffer. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS                    Successfully queued L2CAP SDU for transmission. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_ADDR         Invalid pointer supplied. |  | ||||||
|  * @retval ::BLE_ERROR_INVALID_CONN_HANDLE  Invalid Connection Handle. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_STATE        Invalid State to perform operation (Setup or release is |  | ||||||
|  *                                          in progress for the L2CAP channel). |  | ||||||
|  * @retval ::NRF_ERROR_NOT_FOUND            CID not found. |  | ||||||
|  * @retval ::NRF_ERROR_DATA_SIZE            Invalid SDU length supplied, must not be more than |  | ||||||
|  *                                          @ref ble_l2cap_ch_tx_params_t::tx_mtu provided in |  | ||||||
|  *                                          @ref BLE_L2CAP_EVT_CH_SETUP event. |  | ||||||
|  * @retval ::NRF_ERROR_RESOURCES            Too many SDUs queued for transmission. Wait for a |  | ||||||
|  *                                          @ref BLE_L2CAP_EVT_CH_TX event and retry. |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_BLE_L2CAP_CH_TX, uint32_t, sd_ble_l2cap_ch_tx(uint16_t conn_handle, uint16_t local_cid, ble_data_t const *p_sdu_buf)); |  | ||||||
|  |  | ||||||
| /**@brief Advanced SDU reception flow control. |  | ||||||
|  * |  | ||||||
|  * @details Adjust the way the SoftDevice issues credits to the peer. |  | ||||||
|  *          This may issue additional credits to the peer using an LE Flow Control Credit packet. |  | ||||||
|  * |  | ||||||
|  * @mscs |  | ||||||
|  * @mmsc{@ref BLE_L2CAP_CH_FLOW_CONTROL_MSC} |  | ||||||
|  * @endmscs |  | ||||||
|  * |  | ||||||
|  * @param[in] conn_handle Connection Handle. |  | ||||||
|  * @param[in] local_cid   Local Channel ID of the L2CAP channel or @ref BLE_L2CAP_CID_INVALID to set |  | ||||||
|  *                        the value that will be used for newly created channels. |  | ||||||
|  * @param[in] credits     Number of credits that the SoftDevice will make sure the peer has every |  | ||||||
|  *                        time it starts using a new reception buffer. |  | ||||||
|  *                        - @ref BLE_L2CAP_CREDITS_DEFAULT is the default value the SoftDevice will |  | ||||||
|  *                          use if this function is not called. |  | ||||||
|  *                        - If set to zero, the SoftDevice will stop issuing credits for new reception |  | ||||||
|  *                          buffers the application provides or has provided. SDU reception that is |  | ||||||
|  *                          currently ongoing will be allowed to complete. |  | ||||||
|  * @param[out] p_credits  NULL or pointer to a uint16_t. If a valid pointer is provided, it will be |  | ||||||
|  *                        written by the SoftDevice with the number of credits that is or will be |  | ||||||
|  *                        available to the peer. If the value written by the SoftDevice is 0 when |  | ||||||
|  *                        credits parameter was set to 0, the peer will not be able to send more |  | ||||||
|  *                        data until more credits are provided by calling this function again with |  | ||||||
|  *                        credits > 0. This parameter is ignored when local_cid is set to |  | ||||||
|  *                        @ref BLE_L2CAP_CID_INVALID. |  | ||||||
|  * |  | ||||||
|  * @note Application should take care when setting number of credits higher than default value. In |  | ||||||
|  *       this case the application must make sure that the SoftDevice always has reception buffers |  | ||||||
|  *       available (see @ref sd_ble_l2cap_ch_rx) for that channel. If the SoftDevice does not have |  | ||||||
|  *       such buffers available, packets may be NACKed on the Link Layer and all Bluetooth traffic |  | ||||||
|  *       on the connection handle may be stalled until the SoftDevice again has an available |  | ||||||
|  *       reception buffer. This applies even if the application has used this call to set the |  | ||||||
|  *       credits back to default, or zero. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS                    Flow control parameters accepted. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_ADDR         Invalid pointer supplied. |  | ||||||
|  * @retval ::BLE_ERROR_INVALID_CONN_HANDLE  Invalid Connection Handle. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_STATE        Invalid State to perform operation (Setup or release is |  | ||||||
|  *                                          in progress for an L2CAP channel). |  | ||||||
|  * @retval ::NRF_ERROR_NOT_FOUND            CID not found. |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_BLE_L2CAP_CH_FLOW_CONTROL, uint32_t, sd_ble_l2cap_ch_flow_control(uint16_t conn_handle, uint16_t local_cid, uint16_t credits, uint16_t *p_credits)); |  | ||||||
|  |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
| #ifdef __cplusplus |  | ||||||
| } |  | ||||||
| #endif |  | ||||||
| #endif // BLE_L2CAP_H__ |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|   @} |  | ||||||
| */ |  | ||||||
| @@ -1,156 +0,0 @@ | |||||||
| /* |  | ||||||
|  * Copyright (c) 2012 - 2018, Nordic Semiconductor ASA |  | ||||||
|  * All rights reserved. |  | ||||||
|  * |  | ||||||
|  * Redistribution and use in source and binary forms, with or without modification, |  | ||||||
|  * are permitted provided that the following conditions are met: |  | ||||||
|  * |  | ||||||
|  * 1. Redistributions of source code must retain the above copyright notice, this |  | ||||||
|  *    list of conditions and the following disclaimer. |  | ||||||
|  * |  | ||||||
|  * 2. Redistributions in binary form, except as embedded into a Nordic |  | ||||||
|  *    Semiconductor ASA integrated circuit in a product or a software update for |  | ||||||
|  *    such product, must reproduce the above copyright notice, this list of |  | ||||||
|  *    conditions and the following disclaimer in the documentation and/or other |  | ||||||
|  *    materials provided with the distribution. |  | ||||||
|  * |  | ||||||
|  * 3. Neither the name of Nordic Semiconductor ASA nor the names of its |  | ||||||
|  *    contributors may be used to endorse or promote products derived from this |  | ||||||
|  *    software without specific prior written permission. |  | ||||||
|  * |  | ||||||
|  * 4. This software, with or without modification, must only be used with a |  | ||||||
|  *    Nordic Semiconductor ASA integrated circuit. |  | ||||||
|  * |  | ||||||
|  * 5. Any software provided in binary form under this license must not be reverse |  | ||||||
|  *    engineered, decompiled, modified and/or disassembled. |  | ||||||
|  * |  | ||||||
|  * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS |  | ||||||
|  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |  | ||||||
|  * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE |  | ||||||
|  * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE |  | ||||||
|  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |  | ||||||
|  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE |  | ||||||
|  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |  | ||||||
|  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |  | ||||||
|  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT |  | ||||||
|  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |  | ||||||
|  */ |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|   @addtogroup BLE_COMMON |  | ||||||
|   @{ |  | ||||||
|   @defgroup ble_ranges Module specific SVC, event and option number subranges |  | ||||||
|   @{ |  | ||||||
|  |  | ||||||
|   @brief Definition of SVC, event and option number subranges for each API module. |  | ||||||
|  |  | ||||||
|   @note |  | ||||||
|   SVCs, event and option numbers are split into subranges for each API module. |  | ||||||
|   Each module receives its entire allocated range of SVC calls, whether implemented or not, |  | ||||||
|   but return BLE_ERROR_NOT_SUPPORTED for unimplemented or undefined calls in its range. |  | ||||||
|  |  | ||||||
|   Note that the symbols BLE_<module>_SVC_LAST is the end of the allocated SVC range, |  | ||||||
|   rather than the last SVC function call actually defined and implemented. |  | ||||||
|  |  | ||||||
|   Specific SVC, event and option values are defined in each module's ble_<module>.h file, |  | ||||||
|   which defines names of each individual SVC code based on the range start value. |  | ||||||
| */ |  | ||||||
|  |  | ||||||
| #ifndef BLE_RANGES_H__ |  | ||||||
| #define BLE_RANGES_H__ |  | ||||||
|  |  | ||||||
| #ifdef __cplusplus |  | ||||||
| extern "C" { |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| #define BLE_SVC_BASE           0x60       /**< Common BLE SVC base. */ |  | ||||||
| #define BLE_SVC_LAST           0x6B       /**< Common BLE SVC last. */ |  | ||||||
|  |  | ||||||
| #define BLE_GAP_SVC_BASE       0x6C       /**< GAP BLE SVC base. */ |  | ||||||
| #define BLE_GAP_SVC_LAST       0x9A       /**< GAP BLE SVC last. */ |  | ||||||
|  |  | ||||||
| #define BLE_GATTC_SVC_BASE     0x9B       /**< GATTC BLE SVC base. */ |  | ||||||
| #define BLE_GATTC_SVC_LAST     0xA7       /**< GATTC BLE SVC last. */ |  | ||||||
|  |  | ||||||
| #define BLE_GATTS_SVC_BASE     0xA8       /**< GATTS BLE SVC base. */ |  | ||||||
| #define BLE_GATTS_SVC_LAST     0xB7       /**< GATTS BLE SVC last. */ |  | ||||||
|  |  | ||||||
| #define BLE_L2CAP_SVC_BASE     0xB8       /**< L2CAP BLE SVC base. */ |  | ||||||
| #define BLE_L2CAP_SVC_LAST     0xBF       /**< L2CAP BLE SVC last. */ |  | ||||||
|  |  | ||||||
|  |  | ||||||
| #define BLE_EVT_INVALID        0x00       /**< Invalid BLE Event. */ |  | ||||||
|  |  | ||||||
| #define BLE_EVT_BASE           0x01       /**< Common BLE Event base. */ |  | ||||||
| #define BLE_EVT_LAST           0x0F       /**< Common BLE Event last. */ |  | ||||||
|  |  | ||||||
| #define BLE_GAP_EVT_BASE       0x10       /**< GAP BLE Event base. */ |  | ||||||
| #define BLE_GAP_EVT_LAST       0x2F       /**< GAP BLE Event last. */ |  | ||||||
|  |  | ||||||
| #define BLE_GATTC_EVT_BASE     0x30       /**< GATTC BLE Event base. */ |  | ||||||
| #define BLE_GATTC_EVT_LAST     0x4F       /**< GATTC BLE Event last. */ |  | ||||||
|  |  | ||||||
| #define BLE_GATTS_EVT_BASE     0x50       /**< GATTS BLE Event base. */ |  | ||||||
| #define BLE_GATTS_EVT_LAST     0x6F       /**< GATTS BLE Event last. */ |  | ||||||
|  |  | ||||||
| #define BLE_L2CAP_EVT_BASE     0x70       /**< L2CAP BLE Event base. */ |  | ||||||
| #define BLE_L2CAP_EVT_LAST     0x8F       /**< L2CAP BLE Event last. */ |  | ||||||
|  |  | ||||||
|  |  | ||||||
| #define BLE_OPT_INVALID        0x00       /**< Invalid BLE Option. */ |  | ||||||
|  |  | ||||||
| #define BLE_OPT_BASE           0x01       /**< Common BLE Option base. */ |  | ||||||
| #define BLE_OPT_LAST           0x1F       /**< Common BLE Option last. */ |  | ||||||
|  |  | ||||||
| #define BLE_GAP_OPT_BASE       0x20       /**< GAP BLE Option base. */ |  | ||||||
| #define BLE_GAP_OPT_LAST       0x3F       /**< GAP BLE Option last. */ |  | ||||||
|  |  | ||||||
| #define BLE_GATT_OPT_BASE      0x40       /**< GATT BLE Option base. */ |  | ||||||
| #define BLE_GATT_OPT_LAST      0x5F       /**< GATT BLE Option last. */ |  | ||||||
|  |  | ||||||
| #define BLE_GATTC_OPT_BASE     0x60       /**< GATTC BLE Option base. */ |  | ||||||
| #define BLE_GATTC_OPT_LAST     0x7F       /**< GATTC BLE Option last. */ |  | ||||||
|  |  | ||||||
| #define BLE_GATTS_OPT_BASE     0x80       /**< GATTS BLE Option base. */ |  | ||||||
| #define BLE_GATTS_OPT_LAST     0x9F       /**< GATTS BLE Option last. */ |  | ||||||
|  |  | ||||||
| #define BLE_L2CAP_OPT_BASE     0xA0       /**< L2CAP BLE Option base. */ |  | ||||||
| #define BLE_L2CAP_OPT_LAST     0xBF       /**< L2CAP BLE Option last. */ |  | ||||||
|  |  | ||||||
|  |  | ||||||
| #define BLE_CFG_INVALID        0x00       /**< Invalid BLE configuration. */ |  | ||||||
|  |  | ||||||
| #define BLE_CFG_BASE           0x01       /**< Common BLE configuration base. */ |  | ||||||
| #define BLE_CFG_LAST           0x1F       /**< Common BLE configuration last. */ |  | ||||||
|  |  | ||||||
| #define BLE_CONN_CFG_BASE      0x20       /**< BLE connection configuration base. */ |  | ||||||
| #define BLE_CONN_CFG_LAST      0x3F       /**< BLE connection configuration last. */ |  | ||||||
|  |  | ||||||
| #define BLE_GAP_CFG_BASE       0x40       /**< GAP BLE configuration base. */ |  | ||||||
| #define BLE_GAP_CFG_LAST       0x5F       /**< GAP BLE configuration last. */ |  | ||||||
|  |  | ||||||
| #define BLE_GATT_CFG_BASE      0x60       /**< GATT BLE configuration base. */ |  | ||||||
| #define BLE_GATT_CFG_LAST      0x7F       /**< GATT BLE configuration last. */ |  | ||||||
|  |  | ||||||
| #define BLE_GATTC_CFG_BASE     0x80       /**< GATTC BLE configuration base. */ |  | ||||||
| #define BLE_GATTC_CFG_LAST     0x9F       /**< GATTC BLE configuration last. */ |  | ||||||
|  |  | ||||||
| #define BLE_GATTS_CFG_BASE     0xA0       /**< GATTS BLE configuration base. */ |  | ||||||
| #define BLE_GATTS_CFG_LAST     0xBF       /**< GATTS BLE configuration last. */ |  | ||||||
|  |  | ||||||
| #define BLE_L2CAP_CFG_BASE     0xC0       /**< L2CAP BLE configuration base. */ |  | ||||||
| #define BLE_L2CAP_CFG_LAST     0xDF       /**< L2CAP BLE configuration last. */ |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| #ifdef __cplusplus |  | ||||||
| } |  | ||||||
| #endif |  | ||||||
| #endif /* BLE_RANGES_H__ */ |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|   @} |  | ||||||
|   @} |  | ||||||
| */ |  | ||||||
| @@ -1,215 +0,0 @@ | |||||||
| /* |  | ||||||
|  * Copyright (c) 2012 - 2017, Nordic Semiconductor ASA |  | ||||||
|  * All rights reserved. |  | ||||||
|  * |  | ||||||
|  * Redistribution and use in source and binary forms, with or without modification, |  | ||||||
|  * are permitted provided that the following conditions are met: |  | ||||||
|  * |  | ||||||
|  * 1. Redistributions of source code must retain the above copyright notice, this |  | ||||||
|  *    list of conditions and the following disclaimer. |  | ||||||
|  * |  | ||||||
|  * 2. Redistributions in binary form, except as embedded into a Nordic |  | ||||||
|  *    Semiconductor ASA integrated circuit in a product or a software update for |  | ||||||
|  *    such product, must reproduce the above copyright notice, this list of |  | ||||||
|  *    conditions and the following disclaimer in the documentation and/or other |  | ||||||
|  *    materials provided with the distribution. |  | ||||||
|  * |  | ||||||
|  * 3. Neither the name of Nordic Semiconductor ASA nor the names of its |  | ||||||
|  *    contributors may be used to endorse or promote products derived from this |  | ||||||
|  *    software without specific prior written permission. |  | ||||||
|  * |  | ||||||
|  * 4. This software, with or without modification, must only be used with a |  | ||||||
|  *    Nordic Semiconductor ASA integrated circuit. |  | ||||||
|  * |  | ||||||
|  * 5. Any software provided in binary form under this license must not be reverse |  | ||||||
|  *    engineered, decompiled, modified and/or disassembled. |  | ||||||
|  * |  | ||||||
|  * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS |  | ||||||
|  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |  | ||||||
|  * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE |  | ||||||
|  * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE |  | ||||||
|  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |  | ||||||
|  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE |  | ||||||
|  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |  | ||||||
|  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |  | ||||||
|  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT |  | ||||||
|  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |  | ||||||
|  */ |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|   @addtogroup BLE_COMMON |  | ||||||
|   @{ |  | ||||||
|   @defgroup ble_types Common types and macro definitions |  | ||||||
|   @{ |  | ||||||
|  |  | ||||||
|   @brief Common types and macro definitions for the BLE SoftDevice. |  | ||||||
|  */ |  | ||||||
|  |  | ||||||
| #ifndef BLE_TYPES_H__ |  | ||||||
| #define BLE_TYPES_H__ |  | ||||||
|  |  | ||||||
| #include <stdint.h> |  | ||||||
|  |  | ||||||
| #ifdef __cplusplus |  | ||||||
| extern "C" { |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| /** @addtogroup BLE_TYPES_DEFINES Defines |  | ||||||
|  * @{ */ |  | ||||||
|  |  | ||||||
| /** @defgroup BLE_CONN_HANDLES BLE Connection Handles |  | ||||||
|  * @{ */ |  | ||||||
| #define BLE_CONN_HANDLE_INVALID 0xFFFF  /**< Invalid Connection Handle. */ |  | ||||||
| #define BLE_CONN_HANDLE_ALL     0xFFFE  /**< Applies to all Connection Handles. */ |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /** @defgroup BLE_UUID_VALUES Assigned Values for BLE UUIDs |  | ||||||
|  * @{ */ |  | ||||||
| /* Generic UUIDs, applicable to all services */ |  | ||||||
| #define BLE_UUID_UNKNOWN                              0x0000 /**< Reserved UUID. */ |  | ||||||
| #define BLE_UUID_SERVICE_PRIMARY                      0x2800 /**< Primary Service. */ |  | ||||||
| #define BLE_UUID_SERVICE_SECONDARY                    0x2801 /**< Secondary Service. */ |  | ||||||
| #define BLE_UUID_SERVICE_INCLUDE                      0x2802 /**< Include. */ |  | ||||||
| #define BLE_UUID_CHARACTERISTIC                       0x2803 /**< Characteristic. */ |  | ||||||
| #define BLE_UUID_DESCRIPTOR_CHAR_EXT_PROP             0x2900 /**< Characteristic Extended Properties Descriptor. */ |  | ||||||
| #define BLE_UUID_DESCRIPTOR_CHAR_USER_DESC            0x2901 /**< Characteristic User Description Descriptor. */ |  | ||||||
| #define BLE_UUID_DESCRIPTOR_CLIENT_CHAR_CONFIG        0x2902 /**< Client Characteristic Configuration Descriptor. */ |  | ||||||
| #define BLE_UUID_DESCRIPTOR_SERVER_CHAR_CONFIG        0x2903 /**< Server Characteristic Configuration Descriptor. */ |  | ||||||
| #define BLE_UUID_DESCRIPTOR_CHAR_PRESENTATION_FORMAT  0x2904 /**< Characteristic Presentation Format Descriptor. */ |  | ||||||
| #define BLE_UUID_DESCRIPTOR_CHAR_AGGREGATE_FORMAT     0x2905 /**< Characteristic Aggregate Format Descriptor. */ |  | ||||||
| /* GATT specific UUIDs */ |  | ||||||
| #define BLE_UUID_GATT                                 0x1801 /**< Generic Attribute Profile. */ |  | ||||||
| #define BLE_UUID_GATT_CHARACTERISTIC_SERVICE_CHANGED  0x2A05 /**< Service Changed Characteristic. */ |  | ||||||
| /* GAP specific UUIDs */ |  | ||||||
| #define BLE_UUID_GAP                                  0x1800 /**< Generic Access Profile. */ |  | ||||||
| #define BLE_UUID_GAP_CHARACTERISTIC_DEVICE_NAME       0x2A00 /**< Device Name Characteristic. */ |  | ||||||
| #define BLE_UUID_GAP_CHARACTERISTIC_APPEARANCE        0x2A01 /**< Appearance Characteristic. */ |  | ||||||
| #define BLE_UUID_GAP_CHARACTERISTIC_RECONN_ADDR       0x2A03 /**< Reconnection Address Characteristic. */ |  | ||||||
| #define BLE_UUID_GAP_CHARACTERISTIC_PPCP              0x2A04 /**< Peripheral Preferred Connection Parameters Characteristic. */ |  | ||||||
| #define BLE_UUID_GAP_CHARACTERISTIC_CAR               0x2AA6 /**< Central Address Resolution Characteristic. */ |  | ||||||
| #define BLE_UUID_GAP_CHARACTERISTIC_RPA_ONLY          0x2AC9 /**< Resolvable Private Address Only Characteristic. */ |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /** @defgroup BLE_UUID_TYPES Types of UUID |  | ||||||
|  * @{ */ |  | ||||||
| #define BLE_UUID_TYPE_UNKNOWN       0x00 /**< Invalid UUID type. */ |  | ||||||
| #define BLE_UUID_TYPE_BLE           0x01 /**< Bluetooth SIG UUID (16-bit). */ |  | ||||||
| #define BLE_UUID_TYPE_VENDOR_BEGIN  0x02 /**< Vendor UUID types start at this index (128-bit). */ |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /** @defgroup BLE_APPEARANCES Bluetooth Appearance values |  | ||||||
|  *  @note Retrieved from http://developer.bluetooth.org/gatt/characteristics/Pages/CharacteristicViewer.aspx?u=org.bluetooth.characteristic.gap.appearance.xml |  | ||||||
|  * @{ */ |  | ||||||
| #define BLE_APPEARANCE_UNKNOWN                                0 /**< Unknown. */ |  | ||||||
| #define BLE_APPEARANCE_GENERIC_PHONE                         64 /**< Generic Phone. */ |  | ||||||
| #define BLE_APPEARANCE_GENERIC_COMPUTER                     128 /**< Generic Computer. */ |  | ||||||
| #define BLE_APPEARANCE_GENERIC_WATCH                        192 /**< Generic Watch. */ |  | ||||||
| #define BLE_APPEARANCE_WATCH_SPORTS_WATCH                   193 /**< Watch: Sports Watch. */ |  | ||||||
| #define BLE_APPEARANCE_GENERIC_CLOCK                        256 /**< Generic Clock. */ |  | ||||||
| #define BLE_APPEARANCE_GENERIC_DISPLAY                      320 /**< Generic Display. */ |  | ||||||
| #define BLE_APPEARANCE_GENERIC_REMOTE_CONTROL               384 /**< Generic Remote Control. */ |  | ||||||
| #define BLE_APPEARANCE_GENERIC_EYE_GLASSES                  448 /**< Generic Eye-glasses. */ |  | ||||||
| #define BLE_APPEARANCE_GENERIC_TAG                          512 /**< Generic Tag. */ |  | ||||||
| #define BLE_APPEARANCE_GENERIC_KEYRING                      576 /**< Generic Keyring. */ |  | ||||||
| #define BLE_APPEARANCE_GENERIC_MEDIA_PLAYER                 640 /**< Generic Media Player. */ |  | ||||||
| #define BLE_APPEARANCE_GENERIC_BARCODE_SCANNER              704 /**< Generic Barcode Scanner. */ |  | ||||||
| #define BLE_APPEARANCE_GENERIC_THERMOMETER                  768 /**< Generic Thermometer. */ |  | ||||||
| #define BLE_APPEARANCE_THERMOMETER_EAR                      769 /**< Thermometer: Ear. */ |  | ||||||
| #define BLE_APPEARANCE_GENERIC_HEART_RATE_SENSOR            832 /**< Generic Heart rate Sensor. */ |  | ||||||
| #define BLE_APPEARANCE_HEART_RATE_SENSOR_HEART_RATE_BELT    833 /**< Heart Rate Sensor: Heart Rate Belt. */ |  | ||||||
| #define BLE_APPEARANCE_GENERIC_BLOOD_PRESSURE               896 /**< Generic Blood Pressure. */ |  | ||||||
| #define BLE_APPEARANCE_BLOOD_PRESSURE_ARM                   897 /**< Blood Pressure: Arm. */ |  | ||||||
| #define BLE_APPEARANCE_BLOOD_PRESSURE_WRIST                 898 /**< Blood Pressure: Wrist. */ |  | ||||||
| #define BLE_APPEARANCE_GENERIC_HID                          960 /**< Human Interface Device (HID). */ |  | ||||||
| #define BLE_APPEARANCE_HID_KEYBOARD                         961 /**< Keyboard (HID Subtype). */ |  | ||||||
| #define BLE_APPEARANCE_HID_MOUSE                            962 /**< Mouse (HID Subtype). */ |  | ||||||
| #define BLE_APPEARANCE_HID_JOYSTICK                         963 /**< Joystick (HID Subtype). */ |  | ||||||
| #define BLE_APPEARANCE_HID_GAMEPAD                          964 /**< Gamepad (HID Subtype). */ |  | ||||||
| #define BLE_APPEARANCE_HID_DIGITIZERSUBTYPE                 965 /**< Digitizer Tablet (HID Subtype). */ |  | ||||||
| #define BLE_APPEARANCE_HID_CARD_READER                      966 /**< Card Reader (HID Subtype). */ |  | ||||||
| #define BLE_APPEARANCE_HID_DIGITAL_PEN                      967 /**< Digital Pen (HID Subtype). */ |  | ||||||
| #define BLE_APPEARANCE_HID_BARCODE                          968 /**< Barcode Scanner (HID Subtype). */ |  | ||||||
| #define BLE_APPEARANCE_GENERIC_GLUCOSE_METER               1024 /**< Generic Glucose Meter. */ |  | ||||||
| #define BLE_APPEARANCE_GENERIC_RUNNING_WALKING_SENSOR      1088 /**< Generic Running Walking Sensor. */ |  | ||||||
| #define BLE_APPEARANCE_RUNNING_WALKING_SENSOR_IN_SHOE      1089 /**< Running Walking Sensor: In-Shoe. */ |  | ||||||
| #define BLE_APPEARANCE_RUNNING_WALKING_SENSOR_ON_SHOE      1090 /**< Running Walking Sensor: On-Shoe. */ |  | ||||||
| #define BLE_APPEARANCE_RUNNING_WALKING_SENSOR_ON_HIP       1091 /**< Running Walking Sensor: On-Hip. */ |  | ||||||
| #define BLE_APPEARANCE_GENERIC_CYCLING                     1152 /**< Generic Cycling. */ |  | ||||||
| #define BLE_APPEARANCE_CYCLING_CYCLING_COMPUTER            1153 /**< Cycling: Cycling Computer. */ |  | ||||||
| #define BLE_APPEARANCE_CYCLING_SPEED_SENSOR                1154 /**< Cycling: Speed Sensor. */ |  | ||||||
| #define BLE_APPEARANCE_CYCLING_CADENCE_SENSOR              1155 /**< Cycling: Cadence Sensor. */ |  | ||||||
| #define BLE_APPEARANCE_CYCLING_POWER_SENSOR                1156 /**< Cycling: Power Sensor. */ |  | ||||||
| #define BLE_APPEARANCE_CYCLING_SPEED_CADENCE_SENSOR        1157 /**< Cycling: Speed and Cadence Sensor. */ |  | ||||||
| #define BLE_APPEARANCE_GENERIC_PULSE_OXIMETER              3136 /**< Generic Pulse Oximeter. */ |  | ||||||
| #define BLE_APPEARANCE_PULSE_OXIMETER_FINGERTIP            3137 /**< Fingertip (Pulse Oximeter subtype). */ |  | ||||||
| #define BLE_APPEARANCE_PULSE_OXIMETER_WRIST_WORN           3138 /**< Wrist Worn(Pulse Oximeter subtype). */ |  | ||||||
| #define BLE_APPEARANCE_GENERIC_WEIGHT_SCALE                3200 /**< Generic Weight Scale. */ |  | ||||||
| #define BLE_APPEARANCE_GENERIC_OUTDOOR_SPORTS_ACT          5184 /**< Generic Outdoor Sports Activity. */ |  | ||||||
| #define BLE_APPEARANCE_OUTDOOR_SPORTS_ACT_LOC_DISP         5185 /**< Location Display Device (Outdoor Sports Activity subtype). */ |  | ||||||
| #define BLE_APPEARANCE_OUTDOOR_SPORTS_ACT_LOC_AND_NAV_DISP 5186 /**< Location and Navigation Display Device (Outdoor Sports Activity subtype). */ |  | ||||||
| #define BLE_APPEARANCE_OUTDOOR_SPORTS_ACT_LOC_POD          5187 /**< Location Pod (Outdoor Sports Activity subtype). */ |  | ||||||
| #define BLE_APPEARANCE_OUTDOOR_SPORTS_ACT_LOC_AND_NAV_POD  5188 /**< Location and Navigation Pod (Outdoor Sports Activity subtype). */ |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
| /** @brief Set .type and .uuid fields of ble_uuid_struct to specified UUID value. */ |  | ||||||
| #define BLE_UUID_BLE_ASSIGN(instance, value) do {\ |  | ||||||
|             instance.type = BLE_UUID_TYPE_BLE; \ |  | ||||||
|             instance.uuid = value;} while(0) |  | ||||||
|  |  | ||||||
| /** @brief Copy type and uuid members from src to dst ble_uuid_t pointer. Both pointers must be valid/non-null. */ |  | ||||||
| #define BLE_UUID_COPY_PTR(dst, src) do {\ |  | ||||||
|             (dst)->type = (src)->type; \ |  | ||||||
|             (dst)->uuid = (src)->uuid;} while(0) |  | ||||||
|  |  | ||||||
| /** @brief Copy type and uuid members from src to dst ble_uuid_t struct. */ |  | ||||||
| #define BLE_UUID_COPY_INST(dst, src) do {\ |  | ||||||
|             (dst).type = (src).type; \ |  | ||||||
|             (dst).uuid = (src).uuid;} while(0) |  | ||||||
|  |  | ||||||
| /** @brief Compare for equality both type and uuid members of two (valid, non-null) ble_uuid_t pointers. */ |  | ||||||
| #define BLE_UUID_EQ(p_uuid1, p_uuid2) \ |  | ||||||
|             (((p_uuid1)->type == (p_uuid2)->type) && ((p_uuid1)->uuid == (p_uuid2)->uuid)) |  | ||||||
|  |  | ||||||
| /** @brief Compare for difference both type and uuid members of two (valid, non-null) ble_uuid_t pointers. */ |  | ||||||
| #define BLE_UUID_NEQ(p_uuid1, p_uuid2) \ |  | ||||||
|             (((p_uuid1)->type != (p_uuid2)->type) || ((p_uuid1)->uuid != (p_uuid2)->uuid)) |  | ||||||
|  |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
| /** @addtogroup BLE_TYPES_STRUCTURES Structures |  | ||||||
|  * @{ */ |  | ||||||
|  |  | ||||||
| /** @brief 128 bit UUID values. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint8_t uuid128[16]; /**< Little-Endian UUID bytes. */ |  | ||||||
| } ble_uuid128_t; |  | ||||||
|  |  | ||||||
| /** @brief  Bluetooth Low Energy UUID type, encapsulates both 16-bit and 128-bit UUIDs. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint16_t    uuid; /**< 16-bit UUID value or octets 12-13 of 128-bit UUID. */ |  | ||||||
|   uint8_t     type; /**< UUID type, see @ref BLE_UUID_TYPES. If type is @ref BLE_UUID_TYPE_UNKNOWN, the value of uuid is undefined. */ |  | ||||||
| } ble_uuid_t; |  | ||||||
|  |  | ||||||
| /**@brief Data structure. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint8_t     *p_data;  /**< Pointer to the data buffer provided to/from the application. */ |  | ||||||
|   uint16_t     len;     /**< Length of the data buffer, in bytes. */ |  | ||||||
| } ble_data_t; |  | ||||||
|  |  | ||||||
| /** @} */ |  | ||||||
| #ifdef __cplusplus |  | ||||||
| } |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| #endif /* BLE_TYPES_H__ */ |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|   @} |  | ||||||
|   @} |  | ||||||
| */ |  | ||||||
| @@ -1,242 +0,0 @@ | |||||||
| /* |  | ||||||
|  * Copyright (c) 2014 - 2017, Nordic Semiconductor ASA |  | ||||||
|  * All rights reserved. |  | ||||||
|  * |  | ||||||
|  * Redistribution and use in source and binary forms, with or without modification, |  | ||||||
|  * are permitted provided that the following conditions are met: |  | ||||||
|  * |  | ||||||
|  * 1. Redistributions of source code must retain the above copyright notice, this |  | ||||||
|  *    list of conditions and the following disclaimer. |  | ||||||
|  * |  | ||||||
|  * 2. Redistributions in binary form, except as embedded into a Nordic |  | ||||||
|  *    Semiconductor ASA integrated circuit in a product or a software update for |  | ||||||
|  *    such product, must reproduce the above copyright notice, this list of |  | ||||||
|  *    conditions and the following disclaimer in the documentation and/or other |  | ||||||
|  *    materials provided with the distribution. |  | ||||||
|  * |  | ||||||
|  * 3. Neither the name of Nordic Semiconductor ASA nor the names of its |  | ||||||
|  *    contributors may be used to endorse or promote products derived from this |  | ||||||
|  *    software without specific prior written permission. |  | ||||||
|  * |  | ||||||
|  * 4. This software, with or without modification, must only be used with a |  | ||||||
|  *    Nordic Semiconductor ASA integrated circuit. |  | ||||||
|  * |  | ||||||
|  * 5. Any software provided in binary form under this license must not be reverse |  | ||||||
|  *    engineered, decompiled, modified and/or disassembled. |  | ||||||
|  * |  | ||||||
|  * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS |  | ||||||
|  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |  | ||||||
|  * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE |  | ||||||
|  * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE |  | ||||||
|  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |  | ||||||
|  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE |  | ||||||
|  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |  | ||||||
|  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |  | ||||||
|  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT |  | ||||||
|  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |  | ||||||
|  */ |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|   @defgroup nrf_mbr_api Master Boot Record API |  | ||||||
|   @{ |  | ||||||
|  |  | ||||||
|   @brief APIs for updating SoftDevice and BootLoader |  | ||||||
|  |  | ||||||
| */ |  | ||||||
|  |  | ||||||
| #ifndef NRF_MBR_H__ |  | ||||||
| #define NRF_MBR_H__ |  | ||||||
|  |  | ||||||
| #include "nrf_svc.h" |  | ||||||
| #include <stdint.h> |  | ||||||
|  |  | ||||||
| #ifdef __cplusplus |  | ||||||
| extern "C" { |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| /** @addtogroup NRF_MBR_DEFINES Defines |  | ||||||
|  * @{ */ |  | ||||||
|  |  | ||||||
| /**@brief MBR SVC Base number. */ |  | ||||||
| #define MBR_SVC_BASE            (0x18) |  | ||||||
|  |  | ||||||
| /**@brief Page size in words. */ |  | ||||||
| #define MBR_PAGE_SIZE_IN_WORDS  (1024) |  | ||||||
|  |  | ||||||
| /** @brief The size that must be reserved for the MBR when a SoftDevice is written to flash. |  | ||||||
| This is the offset where the first byte of the SoftDevice hex file is written.*/ |  | ||||||
| #define MBR_SIZE                (0x1000) |  | ||||||
|  |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
| /** @addtogroup NRF_MBR_ENUMS Enumerations |  | ||||||
|  * @{ */ |  | ||||||
|  |  | ||||||
| /**@brief nRF Master Boot Record API SVC numbers. */ |  | ||||||
| enum NRF_MBR_SVCS |  | ||||||
| { |  | ||||||
|   SD_MBR_COMMAND = MBR_SVC_BASE, /**< ::sd_mbr_command */ |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| /**@brief Possible values for ::sd_mbr_command_t.command */ |  | ||||||
| enum NRF_MBR_COMMANDS |  | ||||||
| { |  | ||||||
|   SD_MBR_COMMAND_COPY_BL,                 /**< Copy a new BootLoader. @see ::sd_mbr_command_copy_bl_t*/ |  | ||||||
|   SD_MBR_COMMAND_COPY_SD,                 /**< Copy a new SoftDevice. @see ::sd_mbr_command_copy_sd_t*/ |  | ||||||
|   SD_MBR_COMMAND_INIT_SD,                 /**< Initialize forwarding interrupts to SD, and run reset function in SD. Does not require any parameters in ::sd_mbr_command_t params.*/ |  | ||||||
|   SD_MBR_COMMAND_COMPARE,                 /**< This command works like memcmp. @see ::sd_mbr_command_compare_t*/ |  | ||||||
|   SD_MBR_COMMAND_VECTOR_TABLE_BASE_SET,   /**< Change the address the MBR starts after a reset. @see ::sd_mbr_command_vector_table_base_set_t*/ |  | ||||||
|   SD_MBR_COMMAND_RESERVED, |  | ||||||
|   SD_MBR_COMMAND_IRQ_FORWARD_ADDRESS_SET, /**< Start forwarding all interrupts to this address. @see ::sd_mbr_command_irq_forward_address_set_t*/ |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
| /** @addtogroup NRF_MBR_TYPES Types |  | ||||||
|  * @{ */ |  | ||||||
|  |  | ||||||
| /**@brief This command copies part of a new SoftDevice |  | ||||||
|  * |  | ||||||
|  * The destination area is erased before copying. |  | ||||||
|  * If dst is in the middle of a flash page, that whole flash page will be erased. |  | ||||||
|  * If (dst+len) is in the middle of a flash page, that whole flash page will be erased. |  | ||||||
|  * |  | ||||||
|  * The user of this function is responsible for setting the BPROT registers. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS indicates that the contents of the memory blocks where copied correctly. |  | ||||||
|  * @retval ::NRF_ERROR_INTERNAL indicates that the contents of the memory blocks where not verified correctly after copying. |  | ||||||
|  */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint32_t *src;  /**< Pointer to the source of data to be copied.*/ |  | ||||||
|   uint32_t *dst;  /**< Pointer to the destination where the content is to be copied.*/ |  | ||||||
|   uint32_t len;   /**< Number of 32 bit words to copy. Must be a multiple of @ref MBR_PAGE_SIZE_IN_WORDS words.*/ |  | ||||||
| } sd_mbr_command_copy_sd_t; |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /**@brief This command works like memcmp, but takes the length in words. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS indicates that the contents of both memory blocks are equal. |  | ||||||
|  * @retval ::NRF_ERROR_NULL indicates that the contents of the memory blocks are not equal. |  | ||||||
|  */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint32_t *ptr1; /**< Pointer to block of memory. */ |  | ||||||
|   uint32_t *ptr2; /**< Pointer to block of memory. */ |  | ||||||
|   uint32_t len;   /**< Number of 32 bit words to compare.*/ |  | ||||||
| } sd_mbr_command_compare_t; |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /**@brief This command copies a new BootLoader. |  | ||||||
|  * |  | ||||||
|  * With this command, destination of BootLoader is always the address written in |  | ||||||
|  * NRF_UICR->BOOTADDR. |  | ||||||
|  * |  | ||||||
|  * Destination is erased by this function. |  | ||||||
|  * If (destination+bl_len) is in the middle of a flash page, that whole flash page will be erased. |  | ||||||
|  * |  | ||||||
|  * This function will use the flash protect peripheral (BPROT or ACL) to protect the flash that is |  | ||||||
|  * not intended to be written. |  | ||||||
|  * |  | ||||||
|  * On success, this function will not return. It will start the new BootLoader from reset-vector as normal. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_ERROR_INTERNAL indicates an internal error that should not happen. |  | ||||||
|  * @retval ::NRF_ERROR_FORBIDDEN if NRF_UICR->BOOTADDR is not set. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_LENGTH if parameters attempts to read or write outside flash area. |  | ||||||
|  * @retval ::NRF_ERROR_NO_MEM if no parameter page is provided (see SoftDevice Specification for more info) |  | ||||||
|  */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint32_t *bl_src;  /**< Pointer to the source of the Bootloader to be be copied.*/ |  | ||||||
|   uint32_t bl_len;   /**< Number of 32 bit words to copy for BootLoader. */ |  | ||||||
| } sd_mbr_command_copy_bl_t; |  | ||||||
|  |  | ||||||
| /**@brief Change the address the MBR starts after a reset |  | ||||||
|  * |  | ||||||
|  * Once this function has been called, this address is where the MBR will start to forward |  | ||||||
|  * interrupts to after a reset. |  | ||||||
|  * |  | ||||||
|  * To restore default forwarding this function should be called with @ref address set to 0. The |  | ||||||
|  * MBR will then start forwarding interrupts to the address in NFR_UICR->BOOTADDR or to the |  | ||||||
|  * SoftDevice if the BOOTADDR is not set. |  | ||||||
|  * |  | ||||||
|  * On success, this function will not return. It will reset the device. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_ERROR_INTERNAL indicates an internal error that should not happen. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_ADDR if parameter address is outside of the flash size. |  | ||||||
|  * @retval ::NRF_ERROR_NO_MEM if no parameter page is provided (see SoftDevice Specification for more info) |  | ||||||
|  */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint32_t address; /**< The base address of the interrupt vector table for forwarded interrupts.*/ |  | ||||||
| } sd_mbr_command_vector_table_base_set_t; |  | ||||||
|  |  | ||||||
| /**@brief Sets the base address of the interrupt vector table for interrupts forwarded from the MBR |  | ||||||
|  * |  | ||||||
|  * Unlike sd_mbr_command_vector_table_base_set_t, this function does not reset, and it does not |  | ||||||
|  * change where the MBR starts after reset. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS |  | ||||||
|  */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint32_t address; /**< The base address of the interrupt vector table for forwarded interrupts.*/ |  | ||||||
| } sd_mbr_command_irq_forward_address_set_t; |  | ||||||
|  |  | ||||||
| /**@brief Input structure containing data used when calling ::sd_mbr_command |  | ||||||
|  * |  | ||||||
|  * Depending on what command value that is set, the corresponding params value type must also be |  | ||||||
|  * set. See @ref NRF_MBR_COMMANDS for command types and corresponding params value type. If command |  | ||||||
|  * @ref SD_MBR_COMMAND_INIT_SD is set, it is not necessary to set any values under params. |  | ||||||
|  */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint32_t command;  /**< Type of command to be issued. See @ref NRF_MBR_COMMANDS. */ |  | ||||||
|   union |  | ||||||
|   { |  | ||||||
|     sd_mbr_command_copy_sd_t copy_sd;  /**< Parameters for copy SoftDevice.*/ |  | ||||||
|     sd_mbr_command_compare_t compare;  /**< Parameters for verify.*/ |  | ||||||
|     sd_mbr_command_copy_bl_t copy_bl;  /**< Parameters for copy BootLoader. Requires parameter page. */ |  | ||||||
|     sd_mbr_command_vector_table_base_set_t base_set; /**< Parameters for vector table base set. Requires parameter page.*/ |  | ||||||
|     sd_mbr_command_irq_forward_address_set_t irq_forward_address_set; /**< Parameters for irq forward address set*/ |  | ||||||
|   } params; /**< Command parameters. */ |  | ||||||
| } sd_mbr_command_t; |  | ||||||
|  |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
| /** @addtogroup NRF_MBR_FUNCTIONS Functions |  | ||||||
|  * @{ */ |  | ||||||
|  |  | ||||||
| /**@brief Issue Master Boot Record commands |  | ||||||
|  * |  | ||||||
|  * Commands used when updating a SoftDevice and bootloader. |  | ||||||
|  * |  | ||||||
|  * The @ref SD_MBR_COMMAND_COPY_BL and @ref SD_MBR_COMMAND_VECTOR_TABLE_BASE_SET requires |  | ||||||
|  * parameters to be retained by the MBR when resetting the IC. This is done in a separate flash |  | ||||||
|  * page provided by the application. The UICR register UICR.NRFFW[1] must be set to an address |  | ||||||
|  * corresponding to a page in the application flash space. This page will be cleared by the MBR and |  | ||||||
|  * used to store the command before reset. When the UICR.NRFFW[1] field is set the page it refers |  | ||||||
|  * to must not be used by the application. If the UICR.NRFFW[1] is set to 0xFFFFFFFF (the default) |  | ||||||
|  * MBR commands which use flash will be unavailable and return @ref NRF_ERROR_NO_MEM. |  | ||||||
|  * |  | ||||||
|  * @param[in]  param Pointer to a struct describing the command. |  | ||||||
|  * |  | ||||||
|  * @note For return values, see ::sd_mbr_command_copy_sd_t, ::sd_mbr_command_copy_bl_t, |  | ||||||
|  *       ::sd_mbr_command_compare_t, ::sd_mbr_command_vector_table_base_set_t, |  | ||||||
|  *       ::sd_mbr_command_irq_forward_address_set_t |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_ERROR_NO_MEM if UICR.NRFFW[1] is not set (i.e. is 0xFFFFFFFF). |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_PARAM if an invalid command is given. |  | ||||||
| */ |  | ||||||
| SVCALL(SD_MBR_COMMAND, uint32_t, sd_mbr_command(sd_mbr_command_t* param)); |  | ||||||
|  |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
| #ifdef __cplusplus |  | ||||||
| } |  | ||||||
| #endif |  | ||||||
| #endif // NRF_MBR_H__ |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|   @} |  | ||||||
| */ |  | ||||||
| @@ -1,90 +0,0 @@ | |||||||
| /* |  | ||||||
|  * Copyright (c) 2014 - 2017, Nordic Semiconductor ASA |  | ||||||
|  * All rights reserved. |  | ||||||
|  * |  | ||||||
|  * Redistribution and use in source and binary forms, with or without modification, |  | ||||||
|  * are permitted provided that the following conditions are met: |  | ||||||
|  * |  | ||||||
|  * 1. Redistributions of source code must retain the above copyright notice, this |  | ||||||
|  *    list of conditions and the following disclaimer. |  | ||||||
|  * |  | ||||||
|  * 2. Redistributions in binary form, except as embedded into a Nordic |  | ||||||
|  *    Semiconductor ASA integrated circuit in a product or a software update for |  | ||||||
|  *    such product, must reproduce the above copyright notice, this list of |  | ||||||
|  *    conditions and the following disclaimer in the documentation and/or other |  | ||||||
|  *    materials provided with the distribution. |  | ||||||
|  * |  | ||||||
|  * 3. Neither the name of Nordic Semiconductor ASA nor the names of its |  | ||||||
|  *    contributors may be used to endorse or promote products derived from this |  | ||||||
|  *    software without specific prior written permission. |  | ||||||
|  * |  | ||||||
|  * 4. This software, with or without modification, must only be used with a |  | ||||||
|  *    Nordic Semiconductor ASA integrated circuit. |  | ||||||
|  * |  | ||||||
|  * 5. Any software provided in binary form under this license must not be reverse |  | ||||||
|  *    engineered, decompiled, modified and/or disassembled. |  | ||||||
|  * |  | ||||||
|  * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS |  | ||||||
|  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |  | ||||||
|  * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE |  | ||||||
|  * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE |  | ||||||
|  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |  | ||||||
|  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE |  | ||||||
|  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |  | ||||||
|  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |  | ||||||
|  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT |  | ||||||
|  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |  | ||||||
|  */ |  | ||||||
|  |  | ||||||
|  /** |  | ||||||
|   @defgroup nrf_error SoftDevice Global Error Codes |  | ||||||
|   @{ |  | ||||||
|  |  | ||||||
|   @brief Global Error definitions |  | ||||||
| */ |  | ||||||
|  |  | ||||||
| /* Header guard */ |  | ||||||
| #ifndef NRF_ERROR_H__ |  | ||||||
| #define NRF_ERROR_H__ |  | ||||||
|  |  | ||||||
| #ifdef __cplusplus |  | ||||||
| extern "C" { |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| /** @defgroup NRF_ERRORS_BASE Error Codes Base number definitions |  | ||||||
|  * @{ */ |  | ||||||
| #define NRF_ERROR_BASE_NUM      (0x0)       ///< Global error base |  | ||||||
| #define NRF_ERROR_SDM_BASE_NUM  (0x1000)    ///< SDM error base |  | ||||||
| #define NRF_ERROR_SOC_BASE_NUM  (0x2000)    ///< SoC error base |  | ||||||
| #define NRF_ERROR_STK_BASE_NUM  (0x3000)    ///< STK error base |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
| #define NRF_SUCCESS                           (NRF_ERROR_BASE_NUM + 0)  ///< Successful command |  | ||||||
| #define NRF_ERROR_SVC_HANDLER_MISSING         (NRF_ERROR_BASE_NUM + 1)  ///< SVC handler is missing |  | ||||||
| #define NRF_ERROR_SOFTDEVICE_NOT_ENABLED      (NRF_ERROR_BASE_NUM + 2)  ///< SoftDevice has not been enabled |  | ||||||
| #define NRF_ERROR_INTERNAL                    (NRF_ERROR_BASE_NUM + 3)  ///< Internal Error |  | ||||||
| #define NRF_ERROR_NO_MEM                      (NRF_ERROR_BASE_NUM + 4)  ///< No Memory for operation |  | ||||||
| #define NRF_ERROR_NOT_FOUND                   (NRF_ERROR_BASE_NUM + 5)  ///< Not found |  | ||||||
| #define NRF_ERROR_NOT_SUPPORTED               (NRF_ERROR_BASE_NUM + 6)  ///< Not supported |  | ||||||
| #define NRF_ERROR_INVALID_PARAM               (NRF_ERROR_BASE_NUM + 7)  ///< Invalid Parameter |  | ||||||
| #define NRF_ERROR_INVALID_STATE               (NRF_ERROR_BASE_NUM + 8)  ///< Invalid state, operation disallowed in this state |  | ||||||
| #define NRF_ERROR_INVALID_LENGTH              (NRF_ERROR_BASE_NUM + 9)  ///< Invalid Length |  | ||||||
| #define NRF_ERROR_INVALID_FLAGS               (NRF_ERROR_BASE_NUM + 10) ///< Invalid Flags |  | ||||||
| #define NRF_ERROR_INVALID_DATA                (NRF_ERROR_BASE_NUM + 11) ///< Invalid Data |  | ||||||
| #define NRF_ERROR_DATA_SIZE                   (NRF_ERROR_BASE_NUM + 12) ///< Invalid Data size |  | ||||||
| #define NRF_ERROR_TIMEOUT                     (NRF_ERROR_BASE_NUM + 13) ///< Operation timed out |  | ||||||
| #define NRF_ERROR_NULL                        (NRF_ERROR_BASE_NUM + 14) ///< Null Pointer |  | ||||||
| #define NRF_ERROR_FORBIDDEN                   (NRF_ERROR_BASE_NUM + 15) ///< Forbidden Operation |  | ||||||
| #define NRF_ERROR_INVALID_ADDR                (NRF_ERROR_BASE_NUM + 16) ///< Bad Memory Address |  | ||||||
| #define NRF_ERROR_BUSY                        (NRF_ERROR_BASE_NUM + 17) ///< Busy |  | ||||||
| #define NRF_ERROR_CONN_COUNT                  (NRF_ERROR_BASE_NUM + 18) ///< Maximum connection count exceeded. |  | ||||||
| #define NRF_ERROR_RESOURCES                   (NRF_ERROR_BASE_NUM + 19) ///< Not enough resources for operation |  | ||||||
|  |  | ||||||
| #ifdef __cplusplus |  | ||||||
| } |  | ||||||
| #endif |  | ||||||
| #endif // NRF_ERROR_H__ |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|   @} |  | ||||||
| */ |  | ||||||
| @@ -1,70 +0,0 @@ | |||||||
| /* |  | ||||||
|  * Copyright (c) 2012 - 2017, Nordic Semiconductor ASA |  | ||||||
|  * All rights reserved. |  | ||||||
|  * |  | ||||||
|  * Redistribution and use in source and binary forms, with or without modification, |  | ||||||
|  * are permitted provided that the following conditions are met: |  | ||||||
|  * |  | ||||||
|  * 1. Redistributions of source code must retain the above copyright notice, this |  | ||||||
|  *    list of conditions and the following disclaimer. |  | ||||||
|  * |  | ||||||
|  * 2. Redistributions in binary form, except as embedded into a Nordic |  | ||||||
|  *    Semiconductor ASA integrated circuit in a product or a software update for |  | ||||||
|  *    such product, must reproduce the above copyright notice, this list of |  | ||||||
|  *    conditions and the following disclaimer in the documentation and/or other |  | ||||||
|  *    materials provided with the distribution. |  | ||||||
|  * |  | ||||||
|  * 3. Neither the name of Nordic Semiconductor ASA nor the names of its |  | ||||||
|  *    contributors may be used to endorse or promote products derived from this |  | ||||||
|  *    software without specific prior written permission. |  | ||||||
|  * |  | ||||||
|  * 4. This software, with or without modification, must only be used with a |  | ||||||
|  *    Nordic Semiconductor ASA integrated circuit. |  | ||||||
|  * |  | ||||||
|  * 5. Any software provided in binary form under this license must not be reverse |  | ||||||
|  *    engineered, decompiled, modified and/or disassembled. |  | ||||||
|  * |  | ||||||
|  * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS |  | ||||||
|  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |  | ||||||
|  * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE |  | ||||||
|  * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE |  | ||||||
|  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |  | ||||||
|  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE |  | ||||||
|  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |  | ||||||
|  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |  | ||||||
|  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT |  | ||||||
|  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |  | ||||||
|  */ |  | ||||||
|  |  | ||||||
|  /** |  | ||||||
|   @addtogroup nrf_sdm_api |  | ||||||
|   @{ |  | ||||||
|   @defgroup nrf_sdm_error SoftDevice Manager Error Codes |  | ||||||
|   @{ |  | ||||||
|  |  | ||||||
|   @brief Error definitions for the SDM API |  | ||||||
| */ |  | ||||||
|  |  | ||||||
| /* Header guard */ |  | ||||||
| #ifndef NRF_ERROR_SDM_H__ |  | ||||||
| #define NRF_ERROR_SDM_H__ |  | ||||||
|  |  | ||||||
| #include "nrf_error.h" |  | ||||||
|  |  | ||||||
| #ifdef __cplusplus |  | ||||||
| extern "C" { |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| #define NRF_ERROR_SDM_LFCLK_SOURCE_UNKNOWN              (NRF_ERROR_SDM_BASE_NUM + 0)  ///< Unknown LFCLK source. |  | ||||||
| #define NRF_ERROR_SDM_INCORRECT_INTERRUPT_CONFIGURATION (NRF_ERROR_SDM_BASE_NUM + 1)  ///< Incorrect interrupt configuration (can be caused by using illegal priority levels, or having enabled SoftDevice interrupts). |  | ||||||
| #define NRF_ERROR_SDM_INCORRECT_CLENR0                  (NRF_ERROR_SDM_BASE_NUM + 2)  ///< Incorrect CLENR0 (can be caused by erroneous SoftDevice flashing). |  | ||||||
|  |  | ||||||
| #ifdef __cplusplus |  | ||||||
| } |  | ||||||
| #endif |  | ||||||
| #endif // NRF_ERROR_SDM_H__ |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|   @} |  | ||||||
|   @} |  | ||||||
| */ |  | ||||||
| @@ -1,85 +0,0 @@ | |||||||
| /* |  | ||||||
|  * Copyright (c) 2012 - 2017, Nordic Semiconductor ASA |  | ||||||
|  * All rights reserved. |  | ||||||
|  * |  | ||||||
|  * Redistribution and use in source and binary forms, with or without modification, |  | ||||||
|  * are permitted provided that the following conditions are met: |  | ||||||
|  * |  | ||||||
|  * 1. Redistributions of source code must retain the above copyright notice, this |  | ||||||
|  *    list of conditions and the following disclaimer. |  | ||||||
|  * |  | ||||||
|  * 2. Redistributions in binary form, except as embedded into a Nordic |  | ||||||
|  *    Semiconductor ASA integrated circuit in a product or a software update for |  | ||||||
|  *    such product, must reproduce the above copyright notice, this list of |  | ||||||
|  *    conditions and the following disclaimer in the documentation and/or other |  | ||||||
|  *    materials provided with the distribution. |  | ||||||
|  * |  | ||||||
|  * 3. Neither the name of Nordic Semiconductor ASA nor the names of its |  | ||||||
|  *    contributors may be used to endorse or promote products derived from this |  | ||||||
|  *    software without specific prior written permission. |  | ||||||
|  * |  | ||||||
|  * 4. This software, with or without modification, must only be used with a |  | ||||||
|  *    Nordic Semiconductor ASA integrated circuit. |  | ||||||
|  * |  | ||||||
|  * 5. Any software provided in binary form under this license must not be reverse |  | ||||||
|  *    engineered, decompiled, modified and/or disassembled. |  | ||||||
|  * |  | ||||||
|  * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS |  | ||||||
|  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |  | ||||||
|  * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE |  | ||||||
|  * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE |  | ||||||
|  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |  | ||||||
|  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE |  | ||||||
|  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |  | ||||||
|  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |  | ||||||
|  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT |  | ||||||
|  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |  | ||||||
|  */ |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|   @addtogroup nrf_soc_api |  | ||||||
|   @{ |  | ||||||
|   @defgroup nrf_soc_error SoC Library Error Codes |  | ||||||
|   @{ |  | ||||||
|  |  | ||||||
|   @brief Error definitions for the SoC library |  | ||||||
|  |  | ||||||
| */ |  | ||||||
|  |  | ||||||
| /* Header guard */ |  | ||||||
| #ifndef NRF_ERROR_SOC_H__ |  | ||||||
| #define NRF_ERROR_SOC_H__ |  | ||||||
|  |  | ||||||
| #include "nrf_error.h" |  | ||||||
| #ifdef __cplusplus |  | ||||||
| extern "C" { |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| /* Mutex Errors */ |  | ||||||
| #define NRF_ERROR_SOC_MUTEX_ALREADY_TAKEN                 (NRF_ERROR_SOC_BASE_NUM + 0)  ///< Mutex already taken |  | ||||||
|  |  | ||||||
| /* NVIC errors */ |  | ||||||
| #define NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE        (NRF_ERROR_SOC_BASE_NUM + 1)  ///< NVIC interrupt not available |  | ||||||
| #define NRF_ERROR_SOC_NVIC_INTERRUPT_PRIORITY_NOT_ALLOWED (NRF_ERROR_SOC_BASE_NUM + 2)  ///< NVIC interrupt priority not allowed |  | ||||||
| #define NRF_ERROR_SOC_NVIC_SHOULD_NOT_RETURN              (NRF_ERROR_SOC_BASE_NUM + 3)  ///< NVIC should not return |  | ||||||
|  |  | ||||||
| /* Power errors */ |  | ||||||
| #define NRF_ERROR_SOC_POWER_MODE_UNKNOWN                  (NRF_ERROR_SOC_BASE_NUM + 4)  ///< Power mode unknown |  | ||||||
| #define NRF_ERROR_SOC_POWER_POF_THRESHOLD_UNKNOWN         (NRF_ERROR_SOC_BASE_NUM + 5)  ///< Power POF threshold unknown |  | ||||||
| #define NRF_ERROR_SOC_POWER_OFF_SHOULD_NOT_RETURN         (NRF_ERROR_SOC_BASE_NUM + 6)  ///< Power off should not return |  | ||||||
|  |  | ||||||
| /* Rand errors */ |  | ||||||
| #define NRF_ERROR_SOC_RAND_NOT_ENOUGH_VALUES              (NRF_ERROR_SOC_BASE_NUM + 7)  ///< RAND not enough values |  | ||||||
|  |  | ||||||
| /* PPI errors */ |  | ||||||
| #define NRF_ERROR_SOC_PPI_INVALID_CHANNEL                 (NRF_ERROR_SOC_BASE_NUM + 8)  ///< Invalid PPI Channel |  | ||||||
| #define NRF_ERROR_SOC_PPI_INVALID_GROUP                   (NRF_ERROR_SOC_BASE_NUM + 9)  ///< Invalid PPI Group |  | ||||||
|  |  | ||||||
| #ifdef __cplusplus |  | ||||||
| } |  | ||||||
| #endif |  | ||||||
| #endif // NRF_ERROR_SOC_H__ |  | ||||||
| /** |  | ||||||
|   @} |  | ||||||
|   @} |  | ||||||
| */ |  | ||||||
| @@ -1,486 +0,0 @@ | |||||||
| /* |  | ||||||
|  * Copyright (c) 2016 - 2017, Nordic Semiconductor ASA |  | ||||||
|  * All rights reserved. |  | ||||||
|  * |  | ||||||
|  * Redistribution and use in source and binary forms, with or without modification, |  | ||||||
|  * are permitted provided that the following conditions are met: |  | ||||||
|  * |  | ||||||
|  * 1. Redistributions of source code must retain the above copyright notice, this |  | ||||||
|  *    list of conditions and the following disclaimer. |  | ||||||
|  * |  | ||||||
|  * 2. Redistributions in binary form, except as embedded into a Nordic |  | ||||||
|  *    Semiconductor ASA integrated circuit in a product or a software update for |  | ||||||
|  *    such product, must reproduce the above copyright notice, this list of |  | ||||||
|  *    conditions and the following disclaimer in the documentation and/or other |  | ||||||
|  *    materials provided with the distribution. |  | ||||||
|  * |  | ||||||
|  * 3. Neither the name of Nordic Semiconductor ASA nor the names of its |  | ||||||
|  *    contributors may be used to endorse or promote products derived from this |  | ||||||
|  *    software without specific prior written permission. |  | ||||||
|  * |  | ||||||
|  * 4. This software, with or without modification, must only be used with a |  | ||||||
|  *    Nordic Semiconductor ASA integrated circuit. |  | ||||||
|  * |  | ||||||
|  * 5. Any software provided in binary form under this license must not be reverse |  | ||||||
|  *    engineered, decompiled, modified and/or disassembled. |  | ||||||
|  * |  | ||||||
|  * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS |  | ||||||
|  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |  | ||||||
|  * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE |  | ||||||
|  * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE |  | ||||||
|  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |  | ||||||
|  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE |  | ||||||
|  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |  | ||||||
|  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |  | ||||||
|  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT |  | ||||||
|  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |  | ||||||
|  */ |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|  * @defgroup nrf_nvic_api SoftDevice NVIC API |  | ||||||
|  * @{ |  | ||||||
|  * |  | ||||||
|  * @note In order to use this module, the following code has to be added to a .c file: |  | ||||||
|  *     \code |  | ||||||
|  *     nrf_nvic_state_t nrf_nvic_state = {0}; |  | ||||||
|  *     \endcode |  | ||||||
|  * |  | ||||||
|  * @note Definitions and declarations starting with __ (double underscore) in this header file are |  | ||||||
|  * not intended for direct use by the application. |  | ||||||
|  * |  | ||||||
|  * @brief APIs for the accessing NVIC when using a SoftDevice. |  | ||||||
|  * |  | ||||||
|  */ |  | ||||||
|  |  | ||||||
| #ifndef NRF_NVIC_H__ |  | ||||||
| #define NRF_NVIC_H__ |  | ||||||
|  |  | ||||||
| #include <stdint.h> |  | ||||||
| #include "nrf.h" |  | ||||||
| #include "nrf_svc.h" |  | ||||||
| #include "nrf_error.h" |  | ||||||
| #include "nrf_error_soc.h" |  | ||||||
|  |  | ||||||
| #ifdef __cplusplus |  | ||||||
| extern "C" { |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| /**@addtogroup NRF_NVIC_DEFINES Defines |  | ||||||
|  * @{ */ |  | ||||||
|  |  | ||||||
| /**@defgroup NRF_NVIC_ISER_DEFINES SoftDevice NVIC internal definitions |  | ||||||
|  * @{ */ |  | ||||||
|  |  | ||||||
| #define __NRF_NVIC_NVMC_IRQn (30) /**< The peripheral ID of the NVMC. IRQ numbers are used to identify peripherals, but the NVMC doesn't have an IRQ number in the MDK. */ |  | ||||||
|  |  | ||||||
| #define __NRF_NVIC_ISER_COUNT (2) /**< The number of ISER/ICER registers in the NVIC that are used. */ |  | ||||||
|  |  | ||||||
| /**@brief Interrupts used by the SoftDevice, with IRQn in the range 0-31. */ |  | ||||||
| #define __NRF_NVIC_SD_IRQS_0 ((uint32_t)( \ |  | ||||||
|       (1U << POWER_CLOCK_IRQn) \ |  | ||||||
|     | (1U << RADIO_IRQn) \ |  | ||||||
|     | (1U << RTC0_IRQn) \ |  | ||||||
|     | (1U << TIMER0_IRQn) \ |  | ||||||
|     | (1U << RNG_IRQn) \ |  | ||||||
|     | (1U << ECB_IRQn) \ |  | ||||||
|     | (1U << CCM_AAR_IRQn) \ |  | ||||||
|     | (1U << TEMP_IRQn) \ |  | ||||||
|     | (1U << __NRF_NVIC_NVMC_IRQn) \ |  | ||||||
|     | (1U << (uint32_t)SWI5_IRQn) \ |  | ||||||
|   )) |  | ||||||
|  |  | ||||||
| /**@brief Interrupts used by the SoftDevice, with IRQn in the range 32-63. */ |  | ||||||
| #define __NRF_NVIC_SD_IRQS_1 ((uint32_t)0) |  | ||||||
|  |  | ||||||
| /**@brief Interrupts available for to application, with IRQn in the range 0-31. */ |  | ||||||
| #define __NRF_NVIC_APP_IRQS_0 (~__NRF_NVIC_SD_IRQS_0) |  | ||||||
|  |  | ||||||
| /**@brief Interrupts available for to application, with IRQn in the range 32-63. */ |  | ||||||
| #define __NRF_NVIC_APP_IRQS_1 (~__NRF_NVIC_SD_IRQS_1) |  | ||||||
|  |  | ||||||
| /**@} */ |  | ||||||
|  |  | ||||||
| /**@} */ |  | ||||||
|  |  | ||||||
| /**@addtogroup NRF_NVIC_VARIABLES Variables |  | ||||||
|  * @{ */ |  | ||||||
|  |  | ||||||
| /**@brief Type representing the state struct for the SoftDevice NVIC module. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint32_t volatile __irq_masks[__NRF_NVIC_ISER_COUNT]; /**< IRQs enabled by the application in the NVIC. */ |  | ||||||
|   uint32_t volatile __cr_flag;                          /**< Non-zero if already in a critical region */ |  | ||||||
| } nrf_nvic_state_t; |  | ||||||
|  |  | ||||||
| /**@brief Variable keeping the state for the SoftDevice NVIC module. This must be declared in an |  | ||||||
|  * application source file. */ |  | ||||||
| extern nrf_nvic_state_t nrf_nvic_state; |  | ||||||
|  |  | ||||||
| /**@} */ |  | ||||||
|  |  | ||||||
| /**@addtogroup NRF_NVIC_INTERNAL_FUNCTIONS SoftDevice NVIC internal functions |  | ||||||
|  * @{ */ |  | ||||||
|  |  | ||||||
| /**@brief Disables IRQ interrupts globally, including the SoftDevice's interrupts. |  | ||||||
|  * |  | ||||||
|  * @retval  The value of PRIMASK prior to disabling the interrupts. |  | ||||||
|  */ |  | ||||||
| __STATIC_INLINE int __sd_nvic_irq_disable(void); |  | ||||||
|  |  | ||||||
| /**@brief Enables IRQ interrupts globally, including the SoftDevice's interrupts. |  | ||||||
|  */ |  | ||||||
| __STATIC_INLINE void __sd_nvic_irq_enable(void); |  | ||||||
|  |  | ||||||
| /**@brief Checks if IRQn is available to application |  | ||||||
|  * @param[in]  IRQn  IRQ to check |  | ||||||
|  * |  | ||||||
|  * @retval  1 (true) if the IRQ to check is available to the application |  | ||||||
|  */ |  | ||||||
| __STATIC_INLINE uint32_t __sd_nvic_app_accessible_irq(IRQn_Type IRQn); |  | ||||||
|  |  | ||||||
| /**@brief Checks if priority is available to application |  | ||||||
|  * @param[in]  priority  priority to check |  | ||||||
|  * |  | ||||||
|  * @retval  1 (true) if the priority to check is available to the application |  | ||||||
|  */ |  | ||||||
| __STATIC_INLINE uint32_t __sd_nvic_is_app_accessible_priority(uint32_t priority); |  | ||||||
|  |  | ||||||
| /**@} */ |  | ||||||
|  |  | ||||||
| /**@addtogroup NRF_NVIC_FUNCTIONS SoftDevice NVIC public functions |  | ||||||
|  * @{ */ |  | ||||||
|  |  | ||||||
| /**@brief Enable External Interrupt. |  | ||||||
|  * @note Corresponds to NVIC_EnableIRQ in CMSIS. |  | ||||||
|  * |  | ||||||
|  * @pre IRQn is valid and not reserved by the stack. |  | ||||||
|  * |  | ||||||
|  * @param[in] IRQn See the NVIC_EnableIRQ documentation in CMSIS. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS The interrupt was enabled. |  | ||||||
|  * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE The interrupt is not available for the application. |  | ||||||
|  * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_PRIORITY_NOT_ALLOWED The interrupt has a priority not available for the application. |  | ||||||
|  */ |  | ||||||
| __STATIC_INLINE uint32_t sd_nvic_EnableIRQ(IRQn_Type IRQn); |  | ||||||
|  |  | ||||||
| /**@brief  Disable External Interrupt. |  | ||||||
|  * @note Corresponds to NVIC_DisableIRQ in CMSIS. |  | ||||||
|  * |  | ||||||
|  * @pre IRQn is valid and not reserved by the stack. |  | ||||||
|  * |  | ||||||
|  * @param[in] IRQn See the NVIC_DisableIRQ documentation in CMSIS. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS The interrupt was disabled. |  | ||||||
|  * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE The interrupt is not available for the application. |  | ||||||
|  */ |  | ||||||
| __STATIC_INLINE uint32_t sd_nvic_DisableIRQ(IRQn_Type IRQn); |  | ||||||
|  |  | ||||||
| /**@brief  Get Pending Interrupt. |  | ||||||
|  * @note Corresponds to NVIC_GetPendingIRQ in CMSIS. |  | ||||||
|  * |  | ||||||
|  * @pre IRQn is valid and not reserved by the stack. |  | ||||||
|  * |  | ||||||
|  * @param[in]   IRQn          See the NVIC_GetPendingIRQ documentation in CMSIS. |  | ||||||
|  * @param[out]  p_pending_irq Return value from NVIC_GetPendingIRQ. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS The interrupt is available for the application. |  | ||||||
|  * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE IRQn is not available for the application. |  | ||||||
|  */ |  | ||||||
| __STATIC_INLINE uint32_t sd_nvic_GetPendingIRQ(IRQn_Type IRQn, uint32_t * p_pending_irq); |  | ||||||
|  |  | ||||||
| /**@brief  Set Pending Interrupt. |  | ||||||
|  * @note Corresponds to NVIC_SetPendingIRQ in CMSIS. |  | ||||||
|  * |  | ||||||
|  * @pre IRQn is valid and not reserved by the stack. |  | ||||||
|  * |  | ||||||
|  * @param[in] IRQn See the NVIC_SetPendingIRQ documentation in CMSIS. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS The interrupt is set pending. |  | ||||||
|  * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE IRQn is not available for the application. |  | ||||||
|  */ |  | ||||||
| __STATIC_INLINE uint32_t sd_nvic_SetPendingIRQ(IRQn_Type IRQn); |  | ||||||
|  |  | ||||||
| /**@brief  Clear Pending Interrupt. |  | ||||||
|  * @note Corresponds to NVIC_ClearPendingIRQ in CMSIS. |  | ||||||
|  * |  | ||||||
|  * @pre IRQn is valid and not reserved by the stack. |  | ||||||
|  * |  | ||||||
|  * @param[in] IRQn See the NVIC_ClearPendingIRQ documentation in CMSIS. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS The interrupt pending flag is cleared. |  | ||||||
|  * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE IRQn is not available for the application. |  | ||||||
|  */ |  | ||||||
| __STATIC_INLINE uint32_t sd_nvic_ClearPendingIRQ(IRQn_Type IRQn); |  | ||||||
|  |  | ||||||
| /**@brief Set Interrupt Priority. |  | ||||||
|  * @note Corresponds to NVIC_SetPriority in CMSIS. |  | ||||||
|  * |  | ||||||
|  * @pre IRQn is valid and not reserved by the stack. |  | ||||||
|  * @pre Priority is valid and not reserved by the stack. |  | ||||||
|  * |  | ||||||
|  * @param[in] IRQn      See the NVIC_SetPriority documentation in CMSIS. |  | ||||||
|  * @param[in] priority  A valid IRQ priority for use by the application. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS The interrupt and priority level is available for the application. |  | ||||||
|  * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE IRQn is not available for the application. |  | ||||||
|  * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_PRIORITY_NOT_ALLOWED The interrupt priority is not available for the application. |  | ||||||
|  */ |  | ||||||
| __STATIC_INLINE uint32_t sd_nvic_SetPriority(IRQn_Type IRQn, uint32_t priority); |  | ||||||
|  |  | ||||||
| /**@brief Get Interrupt Priority. |  | ||||||
|  * @note Corresponds to NVIC_GetPriority in CMSIS. |  | ||||||
|  * |  | ||||||
|  * @pre IRQn is valid and not reserved by the stack. |  | ||||||
|  * |  | ||||||
|  * @param[in]  IRQn         See the NVIC_GetPriority documentation in CMSIS. |  | ||||||
|  * @param[out] p_priority   Return value from NVIC_GetPriority. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS The interrupt priority is returned in p_priority. |  | ||||||
|  * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE - IRQn is not available for the application. |  | ||||||
|  */ |  | ||||||
| __STATIC_INLINE uint32_t sd_nvic_GetPriority(IRQn_Type IRQn, uint32_t * p_priority); |  | ||||||
|  |  | ||||||
| /**@brief System Reset. |  | ||||||
|  * @note Corresponds to NVIC_SystemReset in CMSIS. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_ERROR_SOC_NVIC_SHOULD_NOT_RETURN |  | ||||||
|  */ |  | ||||||
| __STATIC_INLINE uint32_t sd_nvic_SystemReset(void); |  | ||||||
|  |  | ||||||
| /**@brief Enter critical region. |  | ||||||
|  * |  | ||||||
|  * @post Application interrupts will be disabled. |  | ||||||
|  * @note sd_nvic_critical_region_enter() and ::sd_nvic_critical_region_exit() must be called in matching pairs inside each |  | ||||||
|  * execution context |  | ||||||
|  * @sa sd_nvic_critical_region_exit |  | ||||||
|  * |  | ||||||
|  * @param[out] p_is_nested_critical_region If 1, the application is now in a nested critical region. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS |  | ||||||
|  */ |  | ||||||
| __STATIC_INLINE uint32_t sd_nvic_critical_region_enter(uint8_t * p_is_nested_critical_region); |  | ||||||
|  |  | ||||||
| /**@brief Exit critical region. |  | ||||||
|  * |  | ||||||
|  * @pre Application has entered a critical region using ::sd_nvic_critical_region_enter. |  | ||||||
|  * @post If not in a nested critical region, the application interrupts will restored to the state before ::sd_nvic_critical_region_enter was called. |  | ||||||
|  * |  | ||||||
|  * @param[in] is_nested_critical_region If this is set to 1, the critical region won't be exited. @sa sd_nvic_critical_region_enter. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS |  | ||||||
|  */ |  | ||||||
| __STATIC_INLINE uint32_t sd_nvic_critical_region_exit(uint8_t is_nested_critical_region); |  | ||||||
|  |  | ||||||
| /**@} */ |  | ||||||
|  |  | ||||||
| #ifndef SUPPRESS_INLINE_IMPLEMENTATION |  | ||||||
|  |  | ||||||
| __STATIC_INLINE int __sd_nvic_irq_disable(void) |  | ||||||
| { |  | ||||||
|   int pm = __get_PRIMASK(); |  | ||||||
|   __disable_irq(); |  | ||||||
|   return pm; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| __STATIC_INLINE void __sd_nvic_irq_enable(void) |  | ||||||
| { |  | ||||||
|   __enable_irq(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| __STATIC_INLINE uint32_t __sd_nvic_app_accessible_irq(IRQn_Type IRQn) |  | ||||||
| { |  | ||||||
|   if (IRQn < 32) |  | ||||||
|   { |  | ||||||
|     return ((1UL<<IRQn) & __NRF_NVIC_APP_IRQS_0) != 0; |  | ||||||
|   } |  | ||||||
|   else if (IRQn < 64) |  | ||||||
|   { |  | ||||||
|     return ((1UL<<(IRQn-32)) & __NRF_NVIC_APP_IRQS_1) != 0; |  | ||||||
|   } |  | ||||||
|   else |  | ||||||
|   { |  | ||||||
|     return 1; |  | ||||||
|   } |  | ||||||
| } |  | ||||||
|  |  | ||||||
| __STATIC_INLINE uint32_t __sd_nvic_is_app_accessible_priority(uint32_t priority) |  | ||||||
| { |  | ||||||
|   if(priority >= (1 << __NVIC_PRIO_BITS)) |  | ||||||
|   { |  | ||||||
|     return 0; |  | ||||||
|   } |  | ||||||
|   if(   priority == 0 |  | ||||||
|      || priority == 1 |  | ||||||
|      || priority == 4 |  | ||||||
|      ) |  | ||||||
|   { |  | ||||||
|     return 0; |  | ||||||
|   } |  | ||||||
|   return 1; |  | ||||||
| } |  | ||||||
|  |  | ||||||
|  |  | ||||||
| __STATIC_INLINE uint32_t sd_nvic_EnableIRQ(IRQn_Type IRQn) |  | ||||||
| { |  | ||||||
|   if (!__sd_nvic_app_accessible_irq(IRQn)) |  | ||||||
|   { |  | ||||||
|     return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE; |  | ||||||
|   } |  | ||||||
|   if (!__sd_nvic_is_app_accessible_priority(NVIC_GetPriority(IRQn))) |  | ||||||
|   { |  | ||||||
|     return NRF_ERROR_SOC_NVIC_INTERRUPT_PRIORITY_NOT_ALLOWED; |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   if (nrf_nvic_state.__cr_flag) |  | ||||||
|   { |  | ||||||
|     nrf_nvic_state.__irq_masks[(uint32_t)((int32_t)IRQn) >> 5] |= (uint32_t)(1 << ((uint32_t)((int32_t)IRQn) & (uint32_t)0x1F)); |  | ||||||
|   } |  | ||||||
|   else |  | ||||||
|   { |  | ||||||
|     NVIC_EnableIRQ(IRQn); |  | ||||||
|   } |  | ||||||
|   return NRF_SUCCESS; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| __STATIC_INLINE uint32_t sd_nvic_DisableIRQ(IRQn_Type IRQn) |  | ||||||
| { |  | ||||||
|   if (!__sd_nvic_app_accessible_irq(IRQn)) |  | ||||||
|   { |  | ||||||
|     return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE; |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   if (nrf_nvic_state.__cr_flag) |  | ||||||
|   { |  | ||||||
|     nrf_nvic_state.__irq_masks[(uint32_t)((int32_t)IRQn) >> 5] &= ~(1UL << ((uint32_t)(IRQn) & 0x1F)); |  | ||||||
|   } |  | ||||||
|   else |  | ||||||
|   { |  | ||||||
|     NVIC_DisableIRQ(IRQn); |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   return NRF_SUCCESS; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| __STATIC_INLINE uint32_t sd_nvic_GetPendingIRQ(IRQn_Type IRQn, uint32_t * p_pending_irq) |  | ||||||
| { |  | ||||||
|   if (__sd_nvic_app_accessible_irq(IRQn)) |  | ||||||
|   { |  | ||||||
|     *p_pending_irq = NVIC_GetPendingIRQ(IRQn); |  | ||||||
|     return NRF_SUCCESS; |  | ||||||
|   } |  | ||||||
|   else |  | ||||||
|   { |  | ||||||
|     return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE; |  | ||||||
|   } |  | ||||||
| } |  | ||||||
|  |  | ||||||
| __STATIC_INLINE uint32_t sd_nvic_SetPendingIRQ(IRQn_Type IRQn) |  | ||||||
| { |  | ||||||
|   if (__sd_nvic_app_accessible_irq(IRQn)) |  | ||||||
|   { |  | ||||||
|     NVIC_SetPendingIRQ(IRQn); |  | ||||||
|     return NRF_SUCCESS; |  | ||||||
|   } |  | ||||||
|   else |  | ||||||
|   { |  | ||||||
|     return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE; |  | ||||||
|   } |  | ||||||
| } |  | ||||||
|  |  | ||||||
| __STATIC_INLINE uint32_t sd_nvic_ClearPendingIRQ(IRQn_Type IRQn) |  | ||||||
| { |  | ||||||
|   if (__sd_nvic_app_accessible_irq(IRQn)) |  | ||||||
|   { |  | ||||||
|     NVIC_ClearPendingIRQ(IRQn); |  | ||||||
|     return NRF_SUCCESS; |  | ||||||
|   } |  | ||||||
|   else |  | ||||||
|   { |  | ||||||
|     return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE; |  | ||||||
|   } |  | ||||||
| } |  | ||||||
|  |  | ||||||
| __STATIC_INLINE uint32_t sd_nvic_SetPriority(IRQn_Type IRQn, uint32_t priority) |  | ||||||
| { |  | ||||||
|   if (!__sd_nvic_app_accessible_irq(IRQn)) |  | ||||||
|   { |  | ||||||
|     return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE; |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   if (!__sd_nvic_is_app_accessible_priority(priority)) |  | ||||||
|   { |  | ||||||
|     return NRF_ERROR_SOC_NVIC_INTERRUPT_PRIORITY_NOT_ALLOWED; |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   NVIC_SetPriority(IRQn, (uint32_t)priority); |  | ||||||
|   return NRF_SUCCESS; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| __STATIC_INLINE uint32_t sd_nvic_GetPriority(IRQn_Type IRQn, uint32_t * p_priority) |  | ||||||
| { |  | ||||||
|   if (__sd_nvic_app_accessible_irq(IRQn)) |  | ||||||
|   { |  | ||||||
|     *p_priority = (NVIC_GetPriority(IRQn) & 0xFF); |  | ||||||
|     return NRF_SUCCESS; |  | ||||||
|   } |  | ||||||
|   else |  | ||||||
|   { |  | ||||||
|     return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE; |  | ||||||
|   } |  | ||||||
| } |  | ||||||
|  |  | ||||||
| __STATIC_INLINE uint32_t sd_nvic_SystemReset(void) |  | ||||||
| { |  | ||||||
|   NVIC_SystemReset(); |  | ||||||
|   return NRF_ERROR_SOC_NVIC_SHOULD_NOT_RETURN; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| __STATIC_INLINE uint32_t sd_nvic_critical_region_enter(uint8_t * p_is_nested_critical_region) |  | ||||||
| { |  | ||||||
|   int was_masked = __sd_nvic_irq_disable(); |  | ||||||
|   if (!nrf_nvic_state.__cr_flag) |  | ||||||
|   { |  | ||||||
|     nrf_nvic_state.__cr_flag = 1; |  | ||||||
|     nrf_nvic_state.__irq_masks[0] = ( NVIC->ICER[0] & __NRF_NVIC_APP_IRQS_0 ); |  | ||||||
|     NVIC->ICER[0] = __NRF_NVIC_APP_IRQS_0; |  | ||||||
|     nrf_nvic_state.__irq_masks[1] = ( NVIC->ICER[1] & __NRF_NVIC_APP_IRQS_1 ); |  | ||||||
|     NVIC->ICER[1] = __NRF_NVIC_APP_IRQS_1; |  | ||||||
|     *p_is_nested_critical_region = 0; |  | ||||||
|   } |  | ||||||
|   else |  | ||||||
|   { |  | ||||||
|     *p_is_nested_critical_region = 1; |  | ||||||
|   } |  | ||||||
|   if (!was_masked) |  | ||||||
|   { |  | ||||||
|     __sd_nvic_irq_enable(); |  | ||||||
|   } |  | ||||||
|   return NRF_SUCCESS; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| __STATIC_INLINE uint32_t sd_nvic_critical_region_exit(uint8_t is_nested_critical_region) |  | ||||||
| { |  | ||||||
|   if (nrf_nvic_state.__cr_flag && (is_nested_critical_region == 0)) |  | ||||||
|   { |  | ||||||
|     int was_masked = __sd_nvic_irq_disable(); |  | ||||||
|     NVIC->ISER[0] = nrf_nvic_state.__irq_masks[0]; |  | ||||||
|     NVIC->ISER[1] = nrf_nvic_state.__irq_masks[1]; |  | ||||||
|     nrf_nvic_state.__cr_flag = 0; |  | ||||||
|     if (!was_masked) |  | ||||||
|     { |  | ||||||
|       __sd_nvic_irq_enable(); |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   return NRF_SUCCESS; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| #endif /* SUPPRESS_INLINE_IMPLEMENTATION */ |  | ||||||
|  |  | ||||||
| #ifdef __cplusplus |  | ||||||
| } |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| #endif // NRF_NVIC_H__ |  | ||||||
|  |  | ||||||
| /**@} */ |  | ||||||
| @@ -1,358 +0,0 @@ | |||||||
| /* |  | ||||||
|  * Copyright (c) 2015 - 2017, Nordic Semiconductor ASA |  | ||||||
|  * All rights reserved. |  | ||||||
|  * |  | ||||||
|  * Redistribution and use in source and binary forms, with or without modification, |  | ||||||
|  * are permitted provided that the following conditions are met: |  | ||||||
|  * |  | ||||||
|  * 1. Redistributions of source code must retain the above copyright notice, this |  | ||||||
|  *    list of conditions and the following disclaimer. |  | ||||||
|  * |  | ||||||
|  * 2. Redistributions in binary form, except as embedded into a Nordic |  | ||||||
|  *    Semiconductor ASA integrated circuit in a product or a software update for |  | ||||||
|  *    such product, must reproduce the above copyright notice, this list of |  | ||||||
|  *    conditions and the following disclaimer in the documentation and/or other |  | ||||||
|  *    materials provided with the distribution. |  | ||||||
|  * |  | ||||||
|  * 3. Neither the name of Nordic Semiconductor ASA nor the names of its |  | ||||||
|  *    contributors may be used to endorse or promote products derived from this |  | ||||||
|  *    software without specific prior written permission. |  | ||||||
|  * |  | ||||||
|  * 4. This software, with or without modification, must only be used with a |  | ||||||
|  *    Nordic Semiconductor ASA integrated circuit. |  | ||||||
|  * |  | ||||||
|  * 5. Any software provided in binary form under this license must not be reverse |  | ||||||
|  *    engineered, decompiled, modified and/or disassembled. |  | ||||||
|  * |  | ||||||
|  * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS |  | ||||||
|  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |  | ||||||
|  * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE |  | ||||||
|  * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE |  | ||||||
|  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |  | ||||||
|  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE |  | ||||||
|  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |  | ||||||
|  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |  | ||||||
|  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT |  | ||||||
|  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |  | ||||||
|  */ |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|   @defgroup nrf_sdm_api SoftDevice Manager API |  | ||||||
|   @{ |  | ||||||
|  |  | ||||||
|   @brief APIs for SoftDevice management. |  | ||||||
|  |  | ||||||
| */ |  | ||||||
|  |  | ||||||
| #ifndef NRF_SDM_H__ |  | ||||||
| #define NRF_SDM_H__ |  | ||||||
|  |  | ||||||
| #include <stdint.h> |  | ||||||
| #include "nrf.h" |  | ||||||
| #include "nrf_svc.h" |  | ||||||
| #include "nrf_error.h" |  | ||||||
| #include "nrf_error_sdm.h" |  | ||||||
| #include "nrf_soc.h" |  | ||||||
|  |  | ||||||
| #ifdef __cplusplus |  | ||||||
| extern "C" { |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| /** @addtogroup NRF_SDM_DEFINES Defines |  | ||||||
|  * @{ */ |  | ||||||
| #ifdef NRFSOC_DOXYGEN |  | ||||||
| /// Declared in nrf_mbr.h |  | ||||||
| #define MBR_SIZE 0 |  | ||||||
| #warning test |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| /** @brief The major version for the SoftDevice binary distributed with this header file. */ |  | ||||||
| #define SD_MAJOR_VERSION  (6) |  | ||||||
|  |  | ||||||
| /** @brief The minor version for the SoftDevice binary distributed with this header file. */ |  | ||||||
| #define SD_MINOR_VERSION  (0) |  | ||||||
|  |  | ||||||
| /** @brief The bugfix version for the SoftDevice binary distributed with this header file. */ |  | ||||||
| #define SD_BUGFIX_VERSION (0) |  | ||||||
|  |  | ||||||
| /** @brief The full version number for the SoftDevice binary this header file was distributed |  | ||||||
|  *         with, as a decimal number in the form Mmmmbbb, where: |  | ||||||
|  *           - M is major version (one or more digits) |  | ||||||
|  *           - mmm is minor version (three digits) |  | ||||||
|  *           - bbb is bugfix version (three digits). */ |  | ||||||
| #define SD_VERSION (SD_MAJOR_VERSION * 1000000 + SD_MINOR_VERSION * 1000 + SD_BUGFIX_VERSION) |  | ||||||
|  |  | ||||||
| /** @brief SoftDevice Manager SVC Base number. */ |  | ||||||
| #define SDM_SVC_BASE 0x10 |  | ||||||
|  |  | ||||||
| /** @brief SoftDevice unique string size in bytes. */ |  | ||||||
| #define SD_UNIQUE_STR_SIZE 20 |  | ||||||
|  |  | ||||||
| /** @brief Invalid info field. Returned when an info field does not exist. */ |  | ||||||
| #define SDM_INFO_FIELD_INVALID (0) |  | ||||||
|  |  | ||||||
| /** @brief Defines the SoftDevice Information Structure location (address) as an offset from |  | ||||||
| the start of the SoftDevice (without MBR)*/ |  | ||||||
| #define SOFTDEVICE_INFO_STRUCT_OFFSET (0x2000) |  | ||||||
|  |  | ||||||
| /** @brief Defines the absolute SoftDevice Information Structure location (address) when the |  | ||||||
|  *         SoftDevice is installed just above the MBR (the usual case). */ |  | ||||||
| #define SOFTDEVICE_INFO_STRUCT_ADDRESS (SOFTDEVICE_INFO_STRUCT_OFFSET + MBR_SIZE) |  | ||||||
|  |  | ||||||
| /** @brief Defines the offset for the SoftDevice Information Structure size value relative to the |  | ||||||
|  *         SoftDevice base address. The size value is of type uint8_t. */ |  | ||||||
| #define SD_INFO_STRUCT_SIZE_OFFSET (SOFTDEVICE_INFO_STRUCT_OFFSET) |  | ||||||
|  |  | ||||||
| /** @brief Defines the offset for the SoftDevice size value relative to the SoftDevice base address. |  | ||||||
|  *         The size value is of type uint32_t. */ |  | ||||||
| #define SD_SIZE_OFFSET (SOFTDEVICE_INFO_STRUCT_OFFSET + 0x08) |  | ||||||
|  |  | ||||||
| /** @brief Defines the offset for FWID value relative to the SoftDevice base address. The FWID value |  | ||||||
|  *         is of type uint16_t.  */ |  | ||||||
| #define SD_FWID_OFFSET (SOFTDEVICE_INFO_STRUCT_OFFSET + 0x0C) |  | ||||||
|  |  | ||||||
| /** @brief Defines the offset for the SoftDevice ID relative to the SoftDevice base address. The ID |  | ||||||
|  *         is of type uint32_t. */ |  | ||||||
| #define SD_ID_OFFSET (SOFTDEVICE_INFO_STRUCT_OFFSET + 0x10) |  | ||||||
|  |  | ||||||
| /** @brief Defines the offset for the SoftDevice version relative to the SoftDevice base address in |  | ||||||
|  *         the same format as @ref SD_VERSION, stored as an uint32_t. */ |  | ||||||
| #define SD_VERSION_OFFSET (SOFTDEVICE_INFO_STRUCT_OFFSET + 0x14) |  | ||||||
|  |  | ||||||
| /** @brief Defines the offset for the SoftDevice unique string relative to the SoftDevice base address. |  | ||||||
|  *         The SD_UNIQUE_STR is stored as an array of uint8_t. The size of array is @ref SD_UNIQUE_STR_SIZE. |  | ||||||
|  */ |  | ||||||
| #define SD_UNIQUE_STR_OFFSET (SOFTDEVICE_INFO_STRUCT_OFFSET + 0x18) |  | ||||||
|  |  | ||||||
| /** @brief Defines a macro for retrieving the actual SoftDevice Information Structure size value |  | ||||||
|  *         from a given base address. Use @ref MBR_SIZE as the argument when the SoftDevice is |  | ||||||
|  *         installed just above the MBR (the usual case). */ |  | ||||||
| #define SD_INFO_STRUCT_SIZE_GET(baseaddr) (*((uint8_t *) ((baseaddr) + SD_INFO_STRUCT_SIZE_OFFSET))) |  | ||||||
|  |  | ||||||
| /** @brief Defines a macro for retrieving the actual SoftDevice size value from a given base |  | ||||||
|  *         address. Use @ref MBR_SIZE as the argument when the SoftDevice is installed just above |  | ||||||
|  *         the MBR (the usual case). */ |  | ||||||
| #define SD_SIZE_GET(baseaddr) (*((uint32_t *) ((baseaddr) + SD_SIZE_OFFSET))) |  | ||||||
|  |  | ||||||
| /** @brief Defines a macro for retrieving the actual FWID value from a given base address. Use |  | ||||||
|  *         @ref MBR_SIZE as the argument when the SoftDevice is installed just above the MBR (the usual |  | ||||||
|  *         case). */ |  | ||||||
| #define SD_FWID_GET(baseaddr) (*((uint16_t *) ((baseaddr) + SD_FWID_OFFSET))) |  | ||||||
|  |  | ||||||
| /** @brief Defines a macro for retrieving the actual SoftDevice ID from a given base address. Use |  | ||||||
|  *         @ref MBR_SIZE as the argument when the SoftDevice is installed just above the MBR (the |  | ||||||
|  *         usual case). */ |  | ||||||
| #define SD_ID_GET(baseaddr) ((SD_INFO_STRUCT_SIZE_GET(baseaddr) > (SD_ID_OFFSET - SOFTDEVICE_INFO_STRUCT_OFFSET)) \ |  | ||||||
|         ? (*((uint32_t *) ((baseaddr) + SD_ID_OFFSET))) : SDM_INFO_FIELD_INVALID) |  | ||||||
|  |  | ||||||
| /** @brief Defines a macro for retrieving the actual SoftDevice version from a given base address. |  | ||||||
|  *         Use @ref MBR_SIZE as the argument when the SoftDevice is installed just above the MBR |  | ||||||
|  *         (the usual case). */ |  | ||||||
| #define SD_VERSION_GET(baseaddr) ((SD_INFO_STRUCT_SIZE_GET(baseaddr) > (SD_VERSION_OFFSET - SOFTDEVICE_INFO_STRUCT_OFFSET)) \ |  | ||||||
|         ? (*((uint32_t *) ((baseaddr) + SD_VERSION_OFFSET))) : SDM_INFO_FIELD_INVALID) |  | ||||||
|  |  | ||||||
| /** @brief Defines a macro for retrieving the address of SoftDevice unique str based on a given base address. |  | ||||||
|  *         Use @ref MBR_SIZE as the argument when the SoftDevice is installed just above the MBR |  | ||||||
|  *         (the usual case). */ |  | ||||||
| #define SD_UNIQUE_STR_ADDR_GET(baseaddr) ((SD_INFO_STRUCT_SIZE_GET(baseaddr) > (SD_UNIQUE_STR_OFFSET - SOFTDEVICE_INFO_STRUCT_OFFSET)) \ |  | ||||||
|         ? (((uint8_t *) ((baseaddr) + SD_UNIQUE_STR_OFFSET))) : SDM_INFO_FIELD_INVALID) |  | ||||||
|  |  | ||||||
| /**@defgroup NRF_FAULT_ID_RANGES Fault ID ranges |  | ||||||
|  * @{ */ |  | ||||||
| #define NRF_FAULT_ID_SD_RANGE_START     0x00000000            /**< SoftDevice ID range start. */ |  | ||||||
| #define NRF_FAULT_ID_APP_RANGE_START    0x00001000            /**< Application ID range start. */ |  | ||||||
| /**@} */ |  | ||||||
|  |  | ||||||
| /**@defgroup NRF_FAULT_IDS Fault ID types |  | ||||||
|  * @{ */ |  | ||||||
| #define NRF_FAULT_ID_SD_ASSERT    (NRF_FAULT_ID_SD_RANGE_START  + 1)          /**< SoftDevice assertion. The info parameter is reserved for future used. */ |  | ||||||
| #define NRF_FAULT_ID_APP_MEMACC   (NRF_FAULT_ID_APP_RANGE_START + 1)          /**< Application invalid memory access. The info parameter will contain 0x00000000, |  | ||||||
|                                                                                    in case of SoftDevice RAM access violation. In case of SoftDevice peripheral |  | ||||||
|                                                                                    register violation the info parameter will contain the sub-region number of |  | ||||||
|                                                                                    PREGION[0], on whose address range the disallowed write access caused the |  | ||||||
|                                                                                    memory access fault. */ |  | ||||||
| /**@} */ |  | ||||||
|  |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
| /** @addtogroup NRF_SDM_ENUMS Enumerations |  | ||||||
|  * @{ */ |  | ||||||
|  |  | ||||||
| /**@brief nRF SoftDevice Manager API SVC numbers. */ |  | ||||||
| enum NRF_SD_SVCS |  | ||||||
| { |  | ||||||
|   SD_SOFTDEVICE_ENABLE = SDM_SVC_BASE, /**< ::sd_softdevice_enable */ |  | ||||||
|   SD_SOFTDEVICE_DISABLE,               /**< ::sd_softdevice_disable */ |  | ||||||
|   SD_SOFTDEVICE_IS_ENABLED,            /**< ::sd_softdevice_is_enabled */ |  | ||||||
|   SD_SOFTDEVICE_VECTOR_TABLE_BASE_SET, /**< ::sd_softdevice_vector_table_base_set */ |  | ||||||
|   SVC_SDM_LAST                         /**< Placeholder for last SDM SVC */ |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
| /** @addtogroup NRF_SDM_DEFINES Defines |  | ||||||
|  * @{ */ |  | ||||||
|  |  | ||||||
| /**@defgroup NRF_CLOCK_LF_ACCURACY Clock accuracy |  | ||||||
|  * @{ */ |  | ||||||
|  |  | ||||||
| #define NRF_CLOCK_LF_ACCURACY_250_PPM (0) /**< Default: 250 ppm */ |  | ||||||
| #define NRF_CLOCK_LF_ACCURACY_500_PPM (1) /**< 500 ppm */ |  | ||||||
| #define NRF_CLOCK_LF_ACCURACY_150_PPM (2) /**< 150 ppm */ |  | ||||||
| #define NRF_CLOCK_LF_ACCURACY_100_PPM (3) /**< 100 ppm */ |  | ||||||
| #define NRF_CLOCK_LF_ACCURACY_75_PPM  (4) /**< 75 ppm */ |  | ||||||
| #define NRF_CLOCK_LF_ACCURACY_50_PPM  (5) /**< 50 ppm */ |  | ||||||
| #define NRF_CLOCK_LF_ACCURACY_30_PPM  (6) /**< 30 ppm */ |  | ||||||
| #define NRF_CLOCK_LF_ACCURACY_20_PPM  (7) /**< 20 ppm */ |  | ||||||
| #define NRF_CLOCK_LF_ACCURACY_10_PPM  (8) /**< 10 ppm */ |  | ||||||
| #define NRF_CLOCK_LF_ACCURACY_5_PPM   (9) /**<  5 ppm */ |  | ||||||
| #define NRF_CLOCK_LF_ACCURACY_2_PPM  (10) /**<  2 ppm */ |  | ||||||
| #define NRF_CLOCK_LF_ACCURACY_1_PPM  (11) /**<  1 ppm */ |  | ||||||
|  |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
| /**@defgroup NRF_CLOCK_LF_SRC Possible LFCLK oscillator sources |  | ||||||
|  * @{ */ |  | ||||||
|  |  | ||||||
| #define NRF_CLOCK_LF_SRC_RC      (0)                        /**< LFCLK RC oscillator. */ |  | ||||||
| #define NRF_CLOCK_LF_SRC_XTAL    (1)                        /**< LFCLK crystal oscillator. */ |  | ||||||
| #define NRF_CLOCK_LF_SRC_SYNTH   (2)                        /**< LFCLK Synthesized from HFCLK. */ |  | ||||||
|  |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
| /** @addtogroup NRF_SDM_TYPES Types |  | ||||||
|  * @{ */ |  | ||||||
|  |  | ||||||
| /**@brief Type representing LFCLK oscillator source. */ |  | ||||||
| typedef struct |  | ||||||
| { |  | ||||||
|   uint8_t source;         /**< LF oscillator clock source, see @ref NRF_CLOCK_LF_SRC. */ |  | ||||||
|   uint8_t rc_ctiv;        /**< Only for ::NRF_CLOCK_LF_SRC_RC: Calibration timer interval in 1/4 second |  | ||||||
|                                units (nRF52: 1-32). |  | ||||||
|                                @note To avoid excessive clock drift, 0.5 degrees Celsius is the |  | ||||||
|                                      maximum temperature change allowed in one calibration timer |  | ||||||
|                                      interval. The interval should be selected to ensure this. |  | ||||||
|  |  | ||||||
|                                   @note Must be 0 if source is not ::NRF_CLOCK_LF_SRC_RC.  */ |  | ||||||
|   uint8_t rc_temp_ctiv;   /**<  Only for ::NRF_CLOCK_LF_SRC_RC: How often (in number of calibration |  | ||||||
|                                 intervals) the RC oscillator shall be calibrated if the temperature |  | ||||||
|                                 hasn't changed. |  | ||||||
|                                      0: Always calibrate even if the temperature hasn't changed. |  | ||||||
|                                      1: Only calibrate if the temperature has changed (legacy - nRF51 only). |  | ||||||
|                                      2-33: Check the temperature and only calibrate if it has changed, |  | ||||||
|                                            however calibration will take place every rc_temp_ctiv |  | ||||||
|                                            intervals in any case. |  | ||||||
|  |  | ||||||
|                                 @note Must be 0 if source is not ::NRF_CLOCK_LF_SRC_RC. |  | ||||||
|  |  | ||||||
|                                 @note For nRF52, the application must ensure calibration at least once |  | ||||||
|                                       every 8 seconds to ensure +/-500 ppm clock stability. The |  | ||||||
|                                       recommended configuration for ::NRF_CLOCK_LF_SRC_RC on nRF52 is |  | ||||||
|                                       rc_ctiv=16 and rc_temp_ctiv=2. This will ensure calibration at |  | ||||||
|                                       least once every 8 seconds and for temperature changes of 0.5 |  | ||||||
|                                       degrees Celsius every 4 seconds. See the Product Specification |  | ||||||
|                                       for the nRF52 device being used for more information.*/ |  | ||||||
|   uint8_t accuracy;       /**< External clock accuracy used in the LL to compute timing |  | ||||||
|                                windows, see @ref NRF_CLOCK_LF_ACCURACY.*/ |  | ||||||
| } nrf_clock_lf_cfg_t; |  | ||||||
|  |  | ||||||
| /**@brief Fault Handler type. |  | ||||||
|  * |  | ||||||
|  * When certain unrecoverable errors occur within the application or SoftDevice the fault handler will be called back. |  | ||||||
|  * The protocol stack will be in an undefined state when this happens and the only way to recover will be to |  | ||||||
|  * perform a reset, using e.g. CMSIS NVIC_SystemReset(). |  | ||||||
|  * If the application returns from the fault handler the SoftDevice will call NVIC_SystemReset(). |  | ||||||
|  * |  | ||||||
|  * @note This callback is executed in HardFault context, thus SVC functions cannot be called from the fault callback. |  | ||||||
|  * |  | ||||||
|  * @param[in] id Fault identifier. See @ref NRF_FAULT_IDS. |  | ||||||
|  * @param[in] pc The program counter of the instruction that triggered the fault. |  | ||||||
|  * @param[in] info Optional additional information regarding the fault. Refer to each Fault identifier for details. |  | ||||||
|  * |  | ||||||
|  * @note When id is set to @ref NRF_FAULT_ID_APP_MEMACC, pc will contain the address of the instruction being executed at the time when |  | ||||||
|  * the fault is detected by the CPU. The CPU program counter may have advanced up to 2 instructions (no branching) after the one that triggered the fault. |  | ||||||
|  */ |  | ||||||
| typedef void (*nrf_fault_handler_t)(uint32_t id, uint32_t pc, uint32_t info); |  | ||||||
|  |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
| /** @addtogroup NRF_SDM_FUNCTIONS Functions |  | ||||||
|  * @{ */ |  | ||||||
|  |  | ||||||
| /**@brief Enables the SoftDevice and by extension the protocol stack. |  | ||||||
|  * |  | ||||||
|  * @note Some care must be taken if a low frequency clock source is already running when calling this function: |  | ||||||
|  *       If the LF clock has a different source then the one currently running, it will be stopped. Then, the new |  | ||||||
|  *       clock source will be started. |  | ||||||
|  * |  | ||||||
|  * @note This function has no effect when returning with an error. |  | ||||||
|  * |  | ||||||
|  * @post If return code is ::NRF_SUCCESS |  | ||||||
|  *       - SoC library and protocol stack APIs are made available. |  | ||||||
|  *       - A portion of RAM will be unavailable (see relevant SDS documentation). |  | ||||||
|  *       - Some peripherals will be unavailable or available only through the SoC API (see relevant SDS documentation). |  | ||||||
|  *       - Interrupts will not arrive from protected peripherals or interrupts. |  | ||||||
|  *       - nrf_nvic_ functions must be used instead of CMSIS NVIC_ functions for reliable usage of the SoftDevice. |  | ||||||
|  *       - Interrupt latency may be affected by the SoftDevice  (see relevant SDS documentation). |  | ||||||
|  *       - Chosen low frequency clock source will be running. |  | ||||||
|  * |  | ||||||
|  * @param p_clock_lf_cfg Low frequency clock source and accuracy. |  | ||||||
|                          If NULL the clock will be configured as an RC source with rc_ctiv = 16 and .rc_temp_ctiv = 2 |  | ||||||
|                          In the case of XTAL source, the PPM accuracy of the chosen clock source must be greater than or equal to the actual characteristics of your XTAL clock. |  | ||||||
|  * @param fault_handler Callback to be invoked in case of fault, cannot be NULL. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_ADDR  Invalid or NULL pointer supplied. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_STATE SoftDevice is already enabled, and the clock source and fault handler cannot be updated. |  | ||||||
|  * @retval ::NRF_ERROR_SDM_INCORRECT_INTERRUPT_CONFIGURATION SoftDevice interrupt is already enabled, or an enabled interrupt has an illegal priority level. |  | ||||||
|  * @retval ::NRF_ERROR_SDM_LFCLK_SOURCE_UNKNOWN Unknown low frequency clock source selected. |  | ||||||
|  * @retval ::NRF_ERROR_INVALID_PARAM Invalid clock source configuration supplied in p_clock_lf_cfg. |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_SOFTDEVICE_ENABLE, uint32_t, sd_softdevice_enable(nrf_clock_lf_cfg_t const * p_clock_lf_cfg, nrf_fault_handler_t fault_handler)); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /**@brief Disables the SoftDevice and by extension the protocol stack. |  | ||||||
|  * |  | ||||||
|  * Idempotent function to disable the SoftDevice. |  | ||||||
|  * |  | ||||||
|  * @post SoC library and protocol stack APIs are made unavailable. |  | ||||||
|  * @post All interrupts that was protected by the SoftDevice will be disabled and initialized to priority 0 (highest). |  | ||||||
|  * @post All peripherals used by the SoftDevice will be reset to default values. |  | ||||||
|  * @post All of RAM become available. |  | ||||||
|  * @post All interrupts are forwarded to the application. |  | ||||||
|  * @post LFCLK source chosen in ::sd_softdevice_enable will be left running. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_SOFTDEVICE_DISABLE, uint32_t, sd_softdevice_disable(void)); |  | ||||||
|  |  | ||||||
| /**@brief Check if the SoftDevice is enabled. |  | ||||||
|  * |  | ||||||
|  * @param[out]  p_softdevice_enabled If the SoftDevice is enabled: 1 else 0. |  | ||||||
|  * |  | ||||||
|  * @retval ::NRF_SUCCESS |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_SOFTDEVICE_IS_ENABLED, uint32_t, sd_softdevice_is_enabled(uint8_t * p_softdevice_enabled)); |  | ||||||
|  |  | ||||||
| /**@brief Sets the base address of the interrupt vector table for interrupts forwarded from the SoftDevice |  | ||||||
|  * |  | ||||||
|  * This function is only intended to be called when a bootloader is enabled. |  | ||||||
|  * |  | ||||||
|  * @param[in] address The base address of the interrupt vector table for forwarded interrupts. |  | ||||||
|  |  | ||||||
|  * @retval ::NRF_SUCCESS |  | ||||||
|  */ |  | ||||||
| SVCALL(SD_SOFTDEVICE_VECTOR_TABLE_BASE_SET, uint32_t, sd_softdevice_vector_table_base_set(uint32_t address)); |  | ||||||
|  |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
| #ifdef __cplusplus |  | ||||||
| } |  | ||||||
| #endif |  | ||||||
| #endif // NRF_SDM_H__ |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|   @} |  | ||||||
| */ |  | ||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -1,90 +0,0 @@ | |||||||
| /* |  | ||||||
|  * Copyright (c) 2012 - 2017, Nordic Semiconductor ASA |  | ||||||
|  * All rights reserved. |  | ||||||
|  * |  | ||||||
|  * Redistribution and use in source and binary forms, with or without modification, |  | ||||||
|  * are permitted provided that the following conditions are met: |  | ||||||
|  * |  | ||||||
|  * 1. Redistributions of source code must retain the above copyright notice, this |  | ||||||
|  *    list of conditions and the following disclaimer. |  | ||||||
|  * |  | ||||||
|  * 2. Redistributions in binary form, except as embedded into a Nordic |  | ||||||
|  *    Semiconductor ASA integrated circuit in a product or a software update for |  | ||||||
|  *    such product, must reproduce the above copyright notice, this list of |  | ||||||
|  *    conditions and the following disclaimer in the documentation and/or other |  | ||||||
|  *    materials provided with the distribution. |  | ||||||
|  * |  | ||||||
|  * 3. Neither the name of Nordic Semiconductor ASA nor the names of its |  | ||||||
|  *    contributors may be used to endorse or promote products derived from this |  | ||||||
|  *    software without specific prior written permission. |  | ||||||
|  * |  | ||||||
|  * 4. This software, with or without modification, must only be used with a |  | ||||||
|  *    Nordic Semiconductor ASA integrated circuit. |  | ||||||
|  * |  | ||||||
|  * 5. Any software provided in binary form under this license must not be reverse |  | ||||||
|  *    engineered, decompiled, modified and/or disassembled. |  | ||||||
|  * |  | ||||||
|  * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS |  | ||||||
|  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |  | ||||||
|  * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE |  | ||||||
|  * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE |  | ||||||
|  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |  | ||||||
|  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE |  | ||||||
|  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |  | ||||||
|  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |  | ||||||
|  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT |  | ||||||
|  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |  | ||||||
|  */ |  | ||||||
|  |  | ||||||
| #ifndef NRF_SVC__ |  | ||||||
| #define NRF_SVC__ |  | ||||||
|  |  | ||||||
| #include "stdint.h" |  | ||||||
|  |  | ||||||
| #ifdef __cplusplus |  | ||||||
| extern "C" { |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| #ifdef SVCALL_AS_NORMAL_FUNCTION |  | ||||||
| #define SVCALL(number, return_type, signature) return_type signature |  | ||||||
| #else |  | ||||||
|  |  | ||||||
| #ifndef SVCALL |  | ||||||
| #if defined (__CC_ARM) |  | ||||||
| #define SVCALL(number, return_type, signature) return_type __svc(number) signature |  | ||||||
| #elif defined (__GNUC__) |  | ||||||
| #ifdef __cplusplus |  | ||||||
| #define GCC_CAST_CPP (uint16_t) |  | ||||||
| #else |  | ||||||
| #define GCC_CAST_CPP |  | ||||||
| #endif |  | ||||||
| #define SVCALL(number, return_type, signature)          \ |  | ||||||
|   _Pragma("GCC diagnostic push")                        \ |  | ||||||
|   _Pragma("GCC diagnostic ignored \"-Wreturn-type\"")   \ |  | ||||||
|   __attribute__((naked))                                \ |  | ||||||
|   __attribute__((unused))                               \ |  | ||||||
|   static return_type signature                          \ |  | ||||||
|   {                                                     \ |  | ||||||
|     __asm(                                              \ |  | ||||||
|         "svc %0\n"                                      \ |  | ||||||
|         "bx r14" : : "I" (GCC_CAST_CPP number) : "r0"   \ |  | ||||||
|     );                                                  \ |  | ||||||
|   }                                                     \ |  | ||||||
|   _Pragma("GCC diagnostic pop") |  | ||||||
|  |  | ||||||
| #elif defined (__ICCARM__) |  | ||||||
| #define PRAGMA(x) _Pragma(#x) |  | ||||||
| #define SVCALL(number, return_type, signature)          \ |  | ||||||
| PRAGMA(swi_number = (number))                           \ |  | ||||||
|  __swi return_type signature; |  | ||||||
| #else |  | ||||||
| #define SVCALL(number, return_type, signature) return_type signature |  | ||||||
| #endif |  | ||||||
| #endif  // SVCALL |  | ||||||
|  |  | ||||||
| #endif  // SVCALL_AS_NORMAL_FUNCTION |  | ||||||
|  |  | ||||||
| #ifdef __cplusplus |  | ||||||
| } |  | ||||||
| #endif |  | ||||||
| #endif  // NRF_SVC__ |  | ||||||
| @@ -1,35 +0,0 @@ | |||||||
| Copyright (c) 2007 - 2018, Nordic Semiconductor ASA |  | ||||||
| All rights reserved. |  | ||||||
|  |  | ||||||
| Redistribution and use in source and binary forms, with or without modification, |  | ||||||
| are permitted provided that the following conditions are met: |  | ||||||
|  |  | ||||||
| 1. Redistributions of source code must retain the above copyright notice, this |  | ||||||
|    list of conditions and the following disclaimer. |  | ||||||
|  |  | ||||||
| 2. Redistributions in binary form, except as embedded into a Nordic |  | ||||||
|    Semiconductor ASA integrated circuit in a product or a software update for |  | ||||||
|    such product, must reproduce the above copyright notice, this list of |  | ||||||
|    conditions and the following disclaimer in the documentation and/or other |  | ||||||
|    materials provided with the distribution. |  | ||||||
|  |  | ||||||
| 3. Neither the name of Nordic Semiconductor ASA nor the names of its |  | ||||||
|    contributors may be used to endorse or promote products derived from this |  | ||||||
|    software without specific prior written permission. |  | ||||||
|  |  | ||||||
| 4. This software, with or without modification, must only be used with a |  | ||||||
|    Nordic Semiconductor ASA integrated circuit. |  | ||||||
|  |  | ||||||
| 5. Any software provided in binary form under this license must not be reverse |  | ||||||
|    engineered, decompiled, modified and/or disassembled. |  | ||||||
|  |  | ||||||
| THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS |  | ||||||
| OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |  | ||||||
| OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE |  | ||||||
| DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE |  | ||||||
| LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |  | ||||||
| CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE |  | ||||||
| GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |  | ||||||
| HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |  | ||||||
| LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT |  | ||||||
| OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |  | ||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -33,6 +33,13 @@ | |||||||
| #define LED_BLUE        LED_2 | #define LED_BLUE        LED_2 | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | // Helper function | ||||||
|  | #define memclr(buffer, size)                memset(buffer, 0, size) | ||||||
|  | #define varclr(_var)                        memclr(_var, sizeof(*(_var))) | ||||||
|  | #define arrclr(_arr)                        memclr(_arr, sizeof(_arr)) | ||||||
|  | #define arrcount(_arr)                      ( sizeof(_arr) / sizeof(_arr[0]) ) | ||||||
|  |  | ||||||
| void board_init(void); | void board_init(void); | ||||||
| void board_teardown(void); | void board_teardown(void); | ||||||
|  |  | ||||||
|   | |||||||
| @@ -101,13 +101,6 @@ void usb_teardown(void); | |||||||
| #define BOOTLOADER_VERSION_REGISTER     NRF_TIMER2->CC[0] | #define BOOTLOADER_VERSION_REGISTER     NRF_TIMER2->CC[0] | ||||||
| #define DFU_SERIAL_STARTUP_INTERVAL     1000 | #define DFU_SERIAL_STARTUP_INTERVAL     1000 | ||||||
|  |  | ||||||
| // Helper function |  | ||||||
| #define memclr(buffer, size)                memset(buffer, 0, size) |  | ||||||
| #define varclr(_var)                        memclr(_var, sizeof(*(_var))) |  | ||||||
| #define arrclr(_arr)                        memclr(_arr, sizeof(_arr)) |  | ||||||
| #define arrcount(_arr)                      ( sizeof(_arr) / sizeof(_arr[0]) ) |  | ||||||
|  |  | ||||||
|  |  | ||||||
| // These value must be the same with one in dfu_transport_ble.c | // These value must be the same with one in dfu_transport_ble.c | ||||||
| #define BLEGAP_EVENT_LENGTH             6 | #define BLEGAP_EVENT_LENGTH             6 | ||||||
| #define BLEGATT_ATT_MTU_MAX             247 | #define BLEGATT_ATT_MTU_MAX             247 | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user