aboutsummaryrefslogtreecommitdiff
path: root/thirdparty/nRF5_SDK_15.0.0_a53641a/components/ble/ble_services/experimental_nrf_ble_ots_c/nrf_ble_ots_c.h
diff options
context:
space:
mode:
Diffstat (limited to 'thirdparty/nRF5_SDK_15.0.0_a53641a/components/ble/ble_services/experimental_nrf_ble_ots_c/nrf_ble_ots_c.h')
-rw-r--r--thirdparty/nRF5_SDK_15.0.0_a53641a/components/ble/ble_services/experimental_nrf_ble_ots_c/nrf_ble_ots_c.h320
1 files changed, 320 insertions, 0 deletions
diff --git a/thirdparty/nRF5_SDK_15.0.0_a53641a/components/ble/ble_services/experimental_nrf_ble_ots_c/nrf_ble_ots_c.h b/thirdparty/nRF5_SDK_15.0.0_a53641a/components/ble/ble_services/experimental_nrf_ble_ots_c/nrf_ble_ots_c.h
new file mode 100644
index 0000000..01e13ba
--- /dev/null
+++ b/thirdparty/nRF5_SDK_15.0.0_a53641a/components/ble/ble_services/experimental_nrf_ble_ots_c/nrf_ble_ots_c.h
@@ -0,0 +1,320 @@
+/**
+ * Copyright (c) 2017 - 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
+ *
+ * @defgroup nrf_ble_ots_c Object Transfer Service Client
+ * @{
+ * @ingroup ble_sdk_srv
+ * @brief Object Transfer Service client module
+ *
+ * @details This is the main module of the Object Transfer Service (OTS) client.
+ */
+
+#ifndef NRF_BLE_OTS_C_H__
+#define NRF_BLE_OTS_C_H__
+
+#include <stdint.h>
+#include "ble_gattc.h"
+#include "ble.h"
+#include "nrf_error.h"
+#include "ble_srv_common.h"
+#include "ble_db_discovery.h"
+#include "sdk_errors.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**@brief Macro for defining a ble_ots instance.
+ *
+ * @param _name Name of the instance.
+ * @hideinitializer
+ */
+#define NRF_BLE_OTS_C_DEF(_name) \
+static nrf_ble_ots_c_t _name; \
+NRF_SDH_BLE_OBSERVER(_name ## _ble_obs, \
+ BLE_OTS_C_BLE_OBSERVER_PRIO, \
+ nrf_ble_ots_c_on_ble_evt, &_name) \
+
+/** @brief Macro for defining multiple ble_ots instances.
+ *
+ * @param _name Name of the array of instances.
+ * @param _cnt Number of instances to define.
+ * @hideinitializer
+ */
+#define NRF_BLE_OTS_C_ARRAY_DEF(_name, _cnt) \
+static nrf_ble_ots_c_t _name[_cnt]; \
+NRF_SDH_BLE_OBSERVERS(_name ## _ble_obs, \
+ BLE_OTS_C_BLE_OBSERVER_PRIO, \
+ nrf_ble_ots_c_on_ble_evt, &_name, _cnt)
+
+
+/** @brief Types of Object Action Control Point Procedures. */
+typedef enum
+{
+ NRF_BLE_OTS_C_OACP_PROC_CREATE = 0x01, //!< Create object.
+ NRF_BLE_OTS_C_OACP_PROC_DELETE = 0x02, //!< Delete object.
+ NRF_BLE_OTS_C_OACP_PROC_CALC_CHKSUM = 0x03, //!< Calculate Checksum.
+ NRF_BLE_OTS_C_OACP_PROC_EXECUTE = 0x04, //!< Execute Object.
+ NRF_BLE_OTS_C_OACP_PROC_READ = 0x05, //!< Read object.
+ NRF_BLE_OTS_C_OACP_PROC_WRITE = 0x06, //!< Write object.
+ NRF_BLE_OTS_C_OACP_PROC_ABORT = 0x07, //!< Abort object.
+ NRF_BLE_OTS_C_OACP_PROC_RESP = 0x60 //!< Procedure response.
+} ble_ots_c_oacp_proc_type_t;
+
+/** @brief Object Action Control Point return codes. */
+typedef enum
+{
+ NRF_BLE_OTS_C_OACP_RES_SUCCESS = 0x01, //!< Success.
+ NRF_BLE_OTS_C_OACP_RES_OPCODE_NOT_SUP = 0x02, //!< Not supported
+ NRF_BLE_OTS_C_OACP_RES_INV_PARAM = 0x03, //!< Invalid parameter
+ NRF_BLE_OTS_C_OACP_RES_INSUFF_RES = 0x04, //!< Insufficient resources.
+ NRF_BLE_OTS_C_OACP_RES_INV_OBJ = 0x05, //!< Invalid object.
+ NRF_BLE_OTS_C_OACP_RES_CHAN_UNAVAIL = 0x06, //!< Channel unavailable.
+ NRF_BLE_OTS_C_OACP_RES_UNSUP_TYPE = 0x07, //!< Unsupported procedure.
+ NRF_BLE_OTS_C_OACP_RES_NOT_PERMITTED = 0x08, //!< Procedure not permitted.
+ NRF_BLE_OTS_C_OACP_RES_OBJ_LOCKED = 0x09, //!< Object locked.
+ NRF_BLE_OTS_C_OACP_RES_OPER_FAILED = 0x0A //!< Operation Failed.
+} ble_ots_c_oacp_res_code_t;
+
+/**@brief Type of the Object Transfer Service client event.
+ */
+typedef enum
+{
+ NRF_BLE_OTS_C_EVT_DISCOVERY_FAILED, //!< Event indicating that the Object Transfer Service has not been found on the peer.
+ NRF_BLE_OTS_C_EVT_DISCOVERY_COMPLETE, //!< Event indicating that the Object Transfer Service is present on the peer device.
+ NRF_BLE_OTS_C_EVT_DISCONN_COMPLETE, //!< Event indicating that the Object Transfer Service client module has finished processing the BLE_GAP_EVT_DISCONNECTED event. The event can be used by the application to do clean up related to the Object Transfer Service client.
+ NRF_BLE_OTS_C_EVT_FEATURE_READ_RESP, //!< Event indicating that the feature characteristic was read, The available features of the peer will be provided in the event.
+ NRF_BLE_OTS_C_EVT_OACP_RESP, //!< Event indicating that a response was received (result of a write to the OACP).
+ NRF_BLE_OTS_C_EVT_OBJ_READ, //!< Event indicating that the Object Transfer Service client finished reading object from the peer
+ NRF_BLE_OTS_C_EVT_CHANNEL_RELEASED, //!< Event indicating that the L2CAP Connection Oriented Channel has been disconnected
+ NRF_BLE_OTS_C_EVT_SIZE_READ_RESP //!< Event indicating that the object size characteristic was read.
+} nrf_ble_ots_c_evt_type_t;
+
+/** @brief Structure to hold the features of a server */
+typedef struct
+{
+ uint8_t oacp_create : 1;
+ uint8_t oacp_delete : 1;
+ uint8_t oacp_crc : 1;
+ uint8_t oacp_execute : 1;
+ uint8_t oacp_read : 1;
+ uint8_t oacp_write : 1;
+ uint8_t oacp_append : 1;
+ uint8_t oacp_truncate : 1;
+ uint8_t oacp_patch : 1;
+ uint8_t oacp_abort : 1;
+ uint8_t olcp_goto : 1;
+ uint8_t olcp_order : 1;
+ uint8_t olcp_req_num : 1;
+ uint8_t olcp_clear : 1;
+} nrf_ble_ots_c_feature_t;
+
+/**@brief Structure used for holding the Apple Notification Center Service found during the
+ discovery process.
+ */
+typedef struct
+{
+ ble_gattc_service_t service; //!< The Object Transfer Service holding the discovered Object Transfer Service. (0x1825).
+ ble_gattc_char_t ots_feature_char; //!< OTS Feature (0x2ABD)
+ ble_gattc_char_t object_name_char; //!< Object Name (0x2ABE)
+ ble_gattc_char_t object_type_char; //!< Object Type (0x2ABF)
+ ble_gattc_char_t object_size_char; //!< Object Size (0x2AC0)
+ ble_gattc_char_t object_prop_char; //!< Object Properties (0x2AC4)
+ ble_gattc_char_t object_action_cp_char; //!< Object Action Control Point (0x2AC5)
+ ble_gattc_desc_t object_action_cp_cccd; //!< Object Action Control Point Descriptor. Enables or disables Object Transfer notifications.
+} nrf_ble_ots_c_service_t;
+
+
+typedef struct
+{
+ ble_ots_c_oacp_proc_type_t request_op_code;
+ ble_ots_c_oacp_res_code_t result_code;
+} nrf_ble_ots_c_oacp_response_t;
+
+typedef struct
+{
+ uint32_t current_size;
+ uint32_t allocated_size;
+} nrf_ble_ots_c_obj_size;
+
+/**@brief Structure containing the event from the Object Transfer client module to the application.
+ */
+typedef struct
+{
+ nrf_ble_ots_c_evt_type_t evt_type; /**< Type of event. See @ref nrf_ble_ots_c_evt_type_t. */
+ uint16_t conn_handle; /**< Handle of the connection for which this event has occurred. */
+ union
+ {
+ nrf_ble_ots_c_feature_t feature; /**< Will be provided if the event type is @ref NRF_BLE_OTS_C_EVT_FEATURE_READ_RESP.*/
+ nrf_ble_ots_c_service_t handles; /**< Handles that the Object Transfer service occupies in the peer device. Will be filled if the event type is @ref NRF_BLE_OTS_C_EVT_DISCOVERY_COMPLETE.*/
+ nrf_ble_ots_c_oacp_response_t response; /**< Will be provided if the event type is @ref NRF_BLE_OTS_C_EVT_OACP_RESP. */
+ ble_data_t object; /**< Will be provided if the event type is @ref NRF_BLE_OTS_C_EVT_OBJ_READ. */
+ nrf_ble_ots_c_obj_size size; /**< Will be provided if the event type is @ref NRF_BLE_OTS_C_EVT_SIZE_READ_RESP. */
+ } params;
+} nrf_ble_ots_c_evt_t;
+
+
+/**@brief Object Transfer handler type. */
+typedef void (* nrf_ble_ots_c_evt_handler_t)(nrf_ble_ots_c_evt_t * p_evt);
+
+
+/**@brief Structure for holding the information related to the Object Transfer Service.
+
+ @warning This structure must be zero-initialized.
+*/
+typedef struct
+{
+ bool initialized; /**< Boolean telling whether the context has been initialized or not. */
+ uint16_t conn_handle; /**< Active connection handle */
+ nrf_ble_ots_c_service_t service; /**< Structure to store the different handles and UUIDs related to the service. */
+ nrf_ble_ots_c_evt_handler_t evt_handler; /**< Pointer to event handler function. */
+ ble_srv_error_handler_t err_handler; /**< Pointer to error handler function. */
+ uint16_t local_cid;
+ ble_l2cap_evt_ch_setup_t ch_setup; /**< L2CAP Channel Setup Completed Event Parameters. */
+ uint32_t current_credits;
+ uint32_t remaining_bytes;
+ uint32_t transmitted_bytes;
+ uint32_t received_bytes;
+ ble_data_t * current_obj;
+} nrf_ble_ots_c_t;
+
+
+/**@brief Initialization parameters, these must be supplied when calling @ref nrf_ble_ots_c_init. */
+typedef struct
+{
+ nrf_ble_ots_c_evt_handler_t evt_handler; /**< The event handler that is called by the Object Transfer client module when any related event occurs. */
+ ble_srv_error_handler_t err_handler; /**< the error handler that is called by the Object Transfer client module if any error occurs. */
+} nrf_ble_ots_c_init_t;
+
+/**@brief Function for initializing the Object Transfer client module.
+
+ @param[in,out] p_ots_c Pointer to the Object Transfer Service client structure instance.
+ @param[in] p_ots_c_init Init parameters contraining the event handler that is called by
+ the Object Transfer client module when any related event occurs.
+
+ @retval NRF_SUCCESS If the service was initialized successfully.
+ @retval NRF_ERROR_NULL If any of the input parameters are NULL.
+ @return If functions from other modules return errors to this function,
+ the @ref nrf_error are propagated.
+*/
+ret_code_t nrf_ble_ots_c_init(nrf_ble_ots_c_t * p_ots_c,
+ nrf_ble_ots_c_init_t * p_ots_c_init);
+
+
+/**@brief Function for handling events from the database discovery module.
+
+ @details This function will handle an event from the database discovery module, and determine
+ if it relates to the discovery of Object Transfer Service at the peer. If so,
+ it will call the application's event handler indicating that Object Transfer Service
+ has been discovered at the peer.
+
+ @param[in,out] p_ots_c Pointer to the Object Transfer Service client structure instance.
+ @param[in] p_evt Pointer to the event received from the database discovery module.
+*/
+void nrf_ble_ots_c_on_db_disc_evt(nrf_ble_ots_c_t const * const p_ots_c,
+ ble_db_discovery_evt_t * const p_evt);
+
+
+/**@brief Function for reading the features characteristic (@ref BLE_UUID_OTS_FEATURES) on the server.
+
+ @param[in,out] p_ots_c Pointer to Object Transfer client structure.
+
+ @retval NRF_SUCCESS Operation success.
+ @return If functions from other modules return errors to this function,
+ the @ref nrf_error are propagated.
+*/
+ret_code_t nrf_ble_ots_c_feature_read(nrf_ble_ots_c_t * const p_ots_c);
+
+
+/**@brief Function for reading the Object Size characteristic (@ref BLE_UUID_OTS_FEATURES) on the server.
+
+ @param[in,out] p_ots_c Pointer to Object Transfer client structure.
+
+ @retval NRF_SUCCESS Operation success.
+ @return NRF_ERROR_INVALID_STATE if the Object Size characteristic has not been discovered. If functions from other modules return errors to this function,
+ the @ref nrf_error are propagated.
+*/
+ret_code_t nrf_ble_ots_c_obj_size_read(nrf_ble_ots_c_t * const p_ots_c);
+
+
+/**@brief Function for handling the Application's BLE Stack events.
+
+ @param[in] p_ble_evt Pointer to the BLE event received.
+ @param[in,out] p_context Pointer to the Object Transfer Service client structure instance.
+*/
+void nrf_ble_ots_c_on_ble_evt(const ble_evt_t * const p_ble_evt,
+ void * p_context);
+
+
+ret_code_t nrf_ble_ots_c_obj_name_read(nrf_ble_ots_c_t * const p_ots_c, ble_data_t * p_obj);
+ret_code_t nrf_ble_ots_c_obj_name_write(nrf_ble_ots_c_t * const p_ots_c, ble_data_t * p_obj);
+ret_code_t nrf_ble_ots_c_obj_type_read(nrf_ble_ots_c_t * const p_ots_c);
+ret_code_t nrf_ble_ots_c_obj_size_read(nrf_ble_ots_c_t * const p_ots_c);
+ret_code_t nrf_ble_ots_c_obj_properties_read(nrf_ble_ots_c_t * const p_ots_c);
+
+
+/**@brief Function for assigning handles to a Object Transfer Service client instance.
+
+ @details Call this function when a link has been established with a peer to
+ associate this link to an instance of the module. This makes it
+ possible to handle several link and associate each link to a particular
+ instance of the Object Transfer Service client module. The connection handle and
+ attribute handles will be provided from the discovery event
+ @ref NRF_BLE_OTS_C_EVT_DISCOVERY_COMPLETE.
+
+ @param[in,out] p_ots_c Pointer to the Object Transfer Service client structure instance to associate
+ with the handles.
+ @param[in] conn_handle Connection handle to be associated with the given Object Transfer Service client
+ Instance.
+ @param[in] p_peer_handles Attribute handles on the Object Transfer Service server that you want this
+ Object Transfer Service client to interact with.
+
+ @retval NRF_SUCCESS If the connection handle was successfully stored in the Object Transfer Service instance.
+ @retval NRF_ERROR_NULL If any of the input parameters are NULL.
+*/
+ret_code_t nrf_ble_ots_c_handles_assign(nrf_ble_ots_c_t * const p_ots_c,
+ uint16_t const conn_handle,
+ nrf_ble_ots_c_service_t const * const p_peer_handles);
+
+#endif // NRF_BLE_OTS_C_H__
+
+/** @} */