#ifndef BLE_OWNED_C_H__ #define BLE_OWNED_C_H__ #include "sdk_common.h" #include "ble_config.h" #include "ble_owned_c.h" #include "ble_db_discovery.h" #include "ble_types.h" #include "ble_srv_common.h" #include "ble_gattc.h" #ifdef __cplusplus extern "C" { #endif /**@brief Macro for defining a ble_owned_c instance. * * @param _name Name of the instance. * @hideinitializer */ #define BLE_OWNED_C_DEF(_name) \ static ble_owned_c_t _name; \ NRF_SDH_BLE_OBSERVER(_name ## _obs, \ BLE_OWNED_C_BLE_OBSERVER_PRIO, \ ble_owned_c_on_ble_evt, &_name) /** @brief Macro for defining multiple ble_owned_c instances. * * @param _name Name of the array of instances. * @param _cnt Number of instances to define. * @hideinitializer */ #define BLE_OWNED_C_ARRAY_DEF(_name, _cnt) \ static ble_owned_c_t _name[_cnt]; \ NRF_SDH_BLE_OBSERVERS(_name ## _obs, \ BLE_OWNED_C_BLE_OBSERVER_PRIO, \ ble_owned_c_on_ble_evt, &_name, _cnt) /** * @defgroup wechat_c_enums Enumerations * @{ */ #ifndef BLE_UUID_OWNED_BASE #ifdef BLE_UUID_WECHAT_SERVICE #define BLE_UUID_OWNED_BASE BLE_UUID_WECHAT_SERVICE #else #define BLE_UUID_OWNED_BASE 0xFEE7 #endif #endif #ifndef BLE_UUID_INDICATE_CHARACTERISTICS #define BLE_UUID_INDICATE_CHARACTERISTICS 0xFECA #endif #ifndef BLE_OWNED_MAX_DATA_LEN #define BLE_OWNED_MAX_DATA_LEN 64 #endif /**@brief OWNED Client event type. */ typedef enum { BLE_OWNED_C_EVT_DISCOVERY_COMPLETE, /**< Event indicating that the Owned service and its characteristics was found. */ BLE_OWNED_C_EVT_OWNED_WR_EVT, /**< Event indicating that the central has received something from a peer. */ BLE_OWNED_C_EVT_DISCONNECTED, /**< Event indicating that the OWNED server has disconnected. */ }ble_owned_c_evt_type_t; /**@brief Handles on the connected peer device needed to interact with it. */ typedef struct { uint16_t owned_wr_handle; /**< Handle of the write characteristic as provided by a discovery. */ uint16_t owned_wr_cccd_handle; /**< Handle of the CCCD of the OWNED TX characteristic as provided by a discovery. */ }ble_owned_c_handles_t; /**@brief Structure containing the OWNED event data received from the peer. */ typedef struct { ble_owned_c_evt_type_t evt_type; uint16_t conn_handle; uint16_t max_data_len; uint8_t *p_data; uint16_t data_len; ble_owned_c_handles_t handles; /**< Handles on which the Nordic Uart service characteristics was discovered on the peer device. This will be filled if the evt_type is @ref ble_owned_C_EVT_DISCOVERY_COMPLETE.*/ } ble_owned_c_evt_t; // Forward declaration of the ble_owned_t type. typedef struct ble_owned_c_s ble_owned_c_t; /**@brief Event handler type. * * @details This is the type of the event handler that should be provided by the application * of this module to receive events. */ typedef void (* ble_owned_c_evt_handler_t)(ble_owned_c_t * p_ble_owned_c, ble_owned_c_evt_t const * p_evt); /**@brief OWNED Client structure. */ struct ble_owned_c_s { uint8_t uuid_type; /**< UUID type. */ uint16_t conn_handle; /**< Handle of the current connection. Set with @ref ble_owned_c_handles_assign when connected. */ ble_owned_c_handles_t handles; /**< Handles on the connected peer device needed to interact with it. */ ble_owned_c_evt_handler_t evt_handler; /**< Application event handler to be called when there is an event related to the OWNED. */ }; /**@brief OWNED Client initialization structure. */ typedef struct { ble_owned_c_evt_handler_t evt_handler; } ble_owned_c_init_t; /**@brief Function for initializing the Nordic UART client module. * * @details This function registers with the Database Discovery module * for the OWNED. Doing so will make the Database Discovery * module look for the presence of a OWNED instance at the peer when a * discovery is started. * * @param[in] p_ble_owned_c Pointer to the OWNED client structure. * @param[in] p_ble_owned_c_init Pointer to the OWNED initialization structure containing the * initialization information. * * @retval NRF_SUCCESS If the module was initialized successfully. Otherwise, an error * code is returned. This function * propagates the error code returned by the Database Discovery module API * @ref ble_db_discovery_evt_register. */ uint32_t ble_owned_c_init(ble_owned_c_t * p_ble_owned_c, ble_owned_c_init_t * p_ble_owned_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 OWNED at the peer. If so, it will * call the application's event handler indicating that OWNED has been * discovered at the peer. It also populates the event with the service related * information before providing it to the application. * * @param[in] p_ble_owned_c Pointer to the OWNED client structure. * @param[in] p_evt Pointer to the event received from the database discovery module. */ void ble_owned_c_on_db_disc_evt(ble_owned_c_t * p_ble_owned_c, ble_db_discovery_evt_t * p_evt); /**@brief Function for handling BLE events from the SoftDevice. * * @details This function handles the BLE events received from the SoftDevice. If a BLE * event is relevant to the OWNED module, it is used to update * internal variables and, if necessary, send events to the application. * * @param[in] p_ble_evt Pointer to the BLE event. * @param[in] p_context Pointer to the OWNED client structure. */ void ble_owned_c_on_ble_evt(ble_evt_t const * p_ble_evt, void * p_context); /**@brief Function for requesting the peer to start sending notification of TX characteristic. * * @details This function enables notifications of the OWNED TX characteristic at the peer * by writing to the CCCD of the OWNED TX characteristic. * * @param p_ble_owned_c Pointer to the OWNED client structure. * * @retval NRF_SUCCESS If the SoftDevice has been requested to write to the CCCD of the peer. * Otherwise, an error code is returned. This function propagates the error * code returned by the SoftDevice API @ref sd_ble_gattc_write. */ uint32_t ble_owned_c_wr_notif_enable(ble_owned_c_t * p_ble_owned_c); /**@brief Function for sending a string to the server. * * @details This function writes the RX characteristic of the server. * * @param[in] p_ble_owned_c Pointer to the OWNED client structure. * @param[in] p_string String to be sent. * @param[in] length Length of the string. * * @retval NRF_SUCCESS If the string was sent successfully. Otherwise, an error code is returned. */ uint32_t ble_owned_c_data_send(ble_owned_c_t * p_ble_owned_c, uint8_t * p_byte, uint16_t length); /**@brief Function for assigning handles to a this instance of OWNED_c. * * @details Call this function when a link has been established with a peer to * associate this link to this instance of the module. This makes it * possible to handle several link and associate each link to a particular * instance of this module. The connection handle and attribute handles will be * provided from the discovery event @ref ble_owned_C_EVT_DISCOVERY_COMPLETE. * * @param[in] p_ble_owned_c Pointer to the OWNED client structure instance to associate with these * handles. * @param[in] conn_handle Connection handle to associated with the given OWNED Instance. * @param[in] p_peer_handles Attribute handles on the OWNED server that you want this OWNED client to * interact with. * * @retval NRF_SUCCESS If the operation was successful. * @retval NRF_ERROR_NULL If a p_OWNED was a NULL pointer. */ uint32_t ble_owned_c_handles_assign(ble_owned_c_t * p_ble_owned_c, uint16_t conn_handle, ble_owned_c_handles_t const * p_peer_handles); #ifdef __cplusplus } #endif #endif // ble_owned_C_H__ /** @} */ // End tag for the file.