walnux/include/nuttx/wireless/bluetooth/bt_gatt.h
Alin Jerpelea cd2fcf5252 include: migrate to SPDX identifier
Most tools used for compliance and SBOM generation use SPDX identifiers
This change brings us a step closer to an easy SBOM generation.

Signed-off-by: Alin Jerpelea <alin.jerpelea@sony.com>
2024-10-04 08:18:42 +08:00

1050 lines
29 KiB
C

/****************************************************************************
* include/nuttx/wireless/bluetooth/bt_gatt.h
*
* SPDX-License-Identifier: BSD-3-Clause
* SPDX-FileCopyrightText: 2016, Intel Corporation. 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 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 the copyright holder nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER 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 __INCLUDE_NUTTX_WIRELESS_BLUETOOTH_BT_GATT_H
#define __INCLUDE_NUTTX_WIRELESS_BLUETOOTH_BT_GATT_H
/****************************************************************************
* Included Files
****************************************************************************/
#include <sys/param.h>
#include <nuttx/wireless/bluetooth/bt_uuid.h>
/****************************************************************************
* Pre-processor Definitions
****************************************************************************/
/* GATT attribute permission bitfield values */
/* BT_GATT_PERM_READ
* Attribute read permission.
*/
#define BT_GATT_PERM_READ 0x01
/* BT_GATT_PERM_WRITE
* Attribute write permission.
*/
#define BT_GATT_PERM_WRITE 0x02
/* BT_GATT_PERM_READ_ENCRYPT
* Attribute read permission with encryption.
* If set, requires encryption for read access.
*/
#define BT_GATT_PERM_READ_ENCRYPT 0x04
/* BT_GATT_PERM_WRITE_ENCRYPT
* Attribute write permission with encryption.
* If set, requires encryption for write access.
*/
#define BT_GATT_PERM_WRITE_ENCRYPT 0x08
/* BT_GATT_PERM_READ_AUTHEN
* Attribute read permission with authentication.
* If set, requires encryption using authenticated link-key for read access.
*/
#define BT_GATT_PERM_READ_AUTHEN 0x10
/* BT_GATT_PERM_WRITE_AUTHEN
* Attribute write permission with authentication.
* If set, requires encryption using authenticated link-key for write
* access.
*/
#define BT_GATT_PERM_WRITE_AUTHEN 0x20
/* BT_GATT_PERM_AUTHOR
* Attribute authorization permission.
*/
#define BT_GATT_PERM_AUTHOR 0x40
/* GATT attribute flush flags */
/* BT_GATT_FLUSH_DISCARD
* Attribute flush discard flag.
*/
#define BT_GATT_FLUSH_DISCARD 0x00
/* BT_GATT_FLUSH_DISCARD
* Attribute flush synchronize flag.
*/
#define BT_GATT_FLUSH_SYNC 0x01
/* Characteristic Properties Bitfield values */
/* BT_GATT_CHRC_BROADCAST
* Characteristic broadcast property.
* If set, permits broadcasts of the Characteristic Value using Server
* Characteristic Configuration Descriptor.
*/
#define BT_GATT_CHRC_BROADCAST 0x01
/* BT_GATT_CHRC_READ
* Characteristic read property.
* If set, permits reads of the Characteristic Value.
*/
#define BT_GATT_CHRC_READ 0x02
/* BT_GATT_CHRC_WRITE_WITHOUT_RESP
* Characteristic write without response property.
* If set, permits write of the Characteristic Value without response.
*/
#define BT_GATT_CHRC_WRITE_WITHOUT_RESP 0x04
/* BT_GATT_CHRC_WRITE
* Characteristic write with response property.
* If set, permits write of the Characteristic Value with response.
*/
#define BT_GATT_CHRC_WRITE 0x08
/* BT_GATT_CHRC_NOTIFY
* Characteristic notify property.
* If set, permits notifications of a Characteristic Value without
* acknowledgment.
*/
#define BT_GATT_CHRC_NOTIFY 0x10
/* BT_GATT_CHRC_INDICATE
* Characteristic indicate property.
* If set, permits indications of a Characteristic Value with
* acknowledgment.
*/
#define BT_GATT_CHRC_INDICATE 0x20
/* BT_GATT_CHRC_AUTH
* Characteristic Authenticated Signed Writes property.
* If set, permits signed writes to the Characteristic Value.
*/
#define BT_GATT_CHRC_AUTH 0x40
/* BT_GATT_CHRC_EXT_PROP
* Characteristic Extended Properties property.
* If set, additional characteristic properties are defined in the
* Characteristic Extended Properties Descriptor.
*/
#define BT_GATT_CHRC_EXT_PROP 0x80
/* Characteristic Extended Properties Bitfield values */
#define BT_GATT_CEP_RELIABLE_WRITE 0x0001
#define BT_GATT_CEP_WRITABLE_AUX 0x0002
/* Client Characteristic Configuration Values */
/* BT_GATT_CCC_NOTIFY
* Client Characteristic Configuration Notification.
* If set, changes to Characteristic Value shall be notified.
*/
#define BT_GATT_CCC_NOTIFY 0x0001
/* BT_GATT_CCC_INDICATE
* Client Characteristic Configuration Indication.
* If set, changes to Characteristic Value shall be indicated.
*/
#define BT_GATT_CCC_INDICATE 0x0002
/* BT_GATT_SERVICE
* Helper macro to declare a service attribute.
*
* Arguments:
* _handle - Service attribute handle.
* _uuid - Service attribute type.
* _data - Service attribute value.
*/
#define BT_GATT_SERVICE(_handle, _uuid, _service) \
{ \
.handle = _handle, \
.uuid = _uuid, \
.perm = BT_GATT_PERM_READ, \
.read = bt_gatt_attr_read_service, \
.user_data = _service, \
}
/* BT_GATT_PRIMARY_SERVICE
* Helper macro to declare a primary service attribute.
*
* Arguments:
* _handle - Service attribute handle.
* _service - Service attribute value.
*/
#define BT_GATT_PRIMARY_SERVICE(_handle, _service) \
{ \
.handle = _handle, \
.uuid = (&(struct bt_uuid_s) \
{ \
BT_UUID_16, \
{ \
BT_UUID_GATT_PRIMARY \
} \
}), \
.perm = BT_GATT_PERM_READ, \
.read = bt_gatt_attr_read_service, \
.user_data = _service, \
}
/* BT_GATT_SECONDARY_SERVICE
* Helper macro to declare a secondary service attribute.
*
* Arguments:
* _handle - Service attribute handle.
* _service - Service attribute value.
*/
#define BT_GATT_SECONDARY_SERVICE(_handle, _service) \
{ \
.handle = _handle, \
.uuid = (&(struct bt_uuid_s) \
{ \
BT_UUID_16, \
{ \
BT_UUID_GATT_SECONDARY \
} \
}), \
.perm = BT_GATT_PERM_READ, \
.read = bt_gatt_attr_read_service, \
.user_data = _service, \
}
/* BT_GATT_INCLUDE_SERVICE
* Helper macro to declare a include service attribute.
*
* Arguments:
* _handle Service attribute handle.
* _service Service attribute value.
*/
#define BT_GATT_INCLUDE_SERVICE(_handle, _service) \
{ \
.handle = _handle, \
.uuid = (&(struct bt_uuid_s) \
{ \
BT_UUID_16, \
{ \
BT_UUID_GATT_INCLUDE \
} \
}), \
.perm = BT_GATT_PERM_READ, \
.read = bt_gatt_attr_read_included, \
.user_data = _service, \
}
/* BT_GATT_CHARACTERISTIC
* Helper macro to declare a characteristic attribute.
*
* Arguments:
* _handle - Characteristic attribute handle.
* _value - Characteristic attribute value.
*/
#define BT_GATT_CHARACTERISTIC(_handle, _value) \
{ \
.handle = _handle, \
.uuid = (&(struct bt_uuid_s) \
{ \
BT_UUID_16, \
{ \
BT_UUID_GATT_CHRC \
} \
}), \
.perm = BT_GATT_PERM_READ, \
.read = bt_gatt_attr_read_chrc, \
.user_data = _value, \
}
/* BT_GATT_CCC
* Helper macro to declare a CCC attribute.
*
* Arguments:
* _handle - Descriptor attribute handle.
* _value_handle - Characteristic attribute value handle.
* _cfg - Initial configuration.
* _cfg_changed - Configuration changed callback.
*/
#define BT_GATT_CCC(_handle, _value_handle, _cfg, _cfg_changed) \
{ \
.handle = _handle, \
.uuid = (&(struct bt_uuid_s) \
{ \
BT_UUID_16, \
{ \
BT_UUID_GATT_CCC \
} \
}), \
.perm = BT_GATT_PERM_READ | BT_GATT_PERM_WRITE, \
.read = bt_gatt_attr_read_ccc, \
.write = bt_gatt_attr_write_ccc, \
.user_data = (&(struct _bt_gatt_ccc_s) \
{ \
.cfg = _cfg, \
.cfg_len = nitems(_cfg), \
.value_handle = _value_handle, \
.cfg_changed = _cfg_changed, \
}),\
}
/* BT_GATT_CEP
* Helper macro to declare a CEP attribute.
*
* Arguments:
* _handle Descriptor attribute handle.
* _value Descriptor attribute value.
*/
#define BT_GATT_CEP(_handle, _value) \
{ \
.handle = _handle, \
.uuid = (&(struct bt_uuid_s) \
{ \
BT_UUID_16, \
{ \
BT_UUID_GATT_CEP \
} \
}), \
.perm = BT_GATT_PERM_READ, \
.read = bt_gatt_attr_read_cep, \
.user_data = _value, \
}
/* BT_GATT_DESCRIPTOR
* Helper macro to declare a descriptor attribute.
*
* Arguments:
* _handle - Descriptor attribute handle.
* _value - Descriptor attribute value.
* _perm - Descriptor attribute access permissions.
* _read - Descriptor attribute read callback.
* _write - Descriptor attribute write callback.
* _value - Descriptor attribute value.
*/
#define BT_GATT_DESCRIPTOR(_handle, _uuid, _perm, _read, _write, _value) \
{ \
.handle = _handle, \
.uuid = _uuid, \
.perm = _perm, \
.read = _read, \
.write = _write, \
.user_data = _value, \
}
/* BT_GATT_LONG_DESCRIPTOR
* Helper macro to declare a descriptor attribute.
*
* Arguments:
* _handle - Descriptor attribute handle.
* _value - Descriptor attribute value.
* _perm - Descriptor attribute access permissions.
* _read - Descriptor attribute read callback.
* _write - Descriptor attribute write callback.
* _flush - Descriptor attribute flush callback.
* _value - Descriptor attribute value.
*/
#define BT_GATT_LONG_DESCRIPTOR(_handle, _uuid, _perm, _read, _write, _flush, \
_value) \
{ \
.handle = _handle, \
.uuid = _uuid, \
.perm = _perm, \
.read = _read, \
.write = _write, \
.flush = _flush, \
.user_data = _value, \
}
/****************************************************************************
* Public Types
****************************************************************************/
enum bt_gatt_iter_e
{
BT_GATT_ITER_STOP = 0,
BT_GATT_ITER_CONTINUE,
};
/* Attribute iterator callback.
*
* Input Parameters:
* attr - Attribute found.
* user_data - Data given.
*
* Returned Value:
* BT_GATT_ITER_CONTINUE if should continue to the next attribute
* or BT_GATT_ITER_STOP to stop.
*/
struct bt_gatt_attr_s; /* Forward reference */
typedef CODE uint8_t
(*bt_gatt_attr_func_t)(FAR const struct bt_gatt_attr_s *attr,
FAR void *user_data);
/* Response callback function
*
* Input Parameters:
* conn - Connection object.
* err - Error code.
*/
struct bt_conn_s; /* Forward reference */
typedef CODE void (*bt_gatt_rsp_func_t)(FAR struct bt_conn_s *conn,
uint8_t err);
/* Read callback function
*
* Input Parameters:
* conn - Connection object.
* err - Error code.
* data - Attribute value data.
* length - Attribute value length.
*/
typedef CODE void (*bt_gatt_read_func_t)(FAR struct bt_conn_s *conn,
int err, FAR const void *data,
uint16_t length);
/* GATT Attribute structure. */
struct bt_gatt_attr_s
{
/* Attribute UUID */
FAR const struct bt_uuid_s *uuid;
/* Attribute read callback */
CODE int (*read)(FAR struct bt_conn_s *conn,
FAR const struct bt_gatt_attr_s *attr, FAR void *buf,
uint8_t len, uint16_t offset);
/* Attribute write callback */
CODE int (*write)(FAR struct bt_conn_s *conn,
FAR const struct bt_gatt_attr_s *attr,
FAR const void *buf, uint8_t len, uint16_t offset);
/* Attribute flush callback */
CODE int (*flush)(FAR struct bt_conn_s *conn,
FAR const struct bt_gatt_attr_s *attr,
uint8_t flags);
/* Attribute user data */
FAR void *user_data;
/* Attribute handle */
uint16_t handle;
/* Attribute permissions */
uint8_t perm;
};
/* Service Attribute Value. */
struct bt_gatt_service_s
{
/* Service UUID. */
FAR const struct bt_uuid_s *uuid;
};
/* Include Attribute Value. */
struct bt_gatt_include_s
{
/* Service UUID. */
FAR const struct bt_uuid_s *uuid;
/* Service start handle. */
uint16_t start_handle;
/* Service end handle. */
uint16_t end_handle;
};
/* Characteristic Attribute Value. */
struct bt_gatt_chrc_s
{
/* Characteristic UUID. */
FAR const struct bt_uuid_s *uuid;
/* Characteristic value handle. */
uint16_t value_handle;
/* Characteristic properties. */
uint8_t properties;
};
/* Characteristic Extended Properties Attribute Value. */
struct bt_gatt_cep_s
{
/* Characteristic Extended properties */
uint16_t properties;
};
/* Characteristic User Description Attribute Value. */
struct bt_gatt_cud_s
{
/* Characteristic User Description string. */
FAR char *string;
};
/* Client Characteristic Configuration Attribute Value */
struct bt_gatt_ccc_s
{
/* Client Characteristic Configuration flags */
uint16_t flags;
};
/* GATT CCC configuration entry. */
struct bt_gatt_ccc_cfg_s
{
/* Config peer address. */
bt_addr_le_t peer;
/* Config peer value. */
uint16_t value;
/* Config valid flag. */
uint8_t valid;
};
/* Internal representation of CCC value */
struct _bt_gatt_ccc_s
{
FAR struct bt_gatt_ccc_cfg_s *cfg;
size_t cfg_len;
uint16_t value;
uint16_t value_handle;
CODE void (*cfg_changed)(uint16_t value);
};
/* GATT Discover Primary parameters */
struct bt_gatt_discover_params_s
{
/* Discover UUID type */
FAR struct bt_uuid_s *uuid;
/* Discover attribute callback */
bt_gatt_attr_func_t func;
/* Discover destroy callback */
CODE void (*destroy)(FAR void *user_data);
/* Discover start handle */
uint16_t start_handle;
/* Discover end handle */
uint16_t end_handle;
/* Private data */
FAR void *p_data;
};
/****************************************************************************
* Public Function Prototypes
****************************************************************************/
/* Server API */
/****************************************************************************
* Name: bt_gatt_register
*
* Description:
* Register GATT attribute database table. Applications can make use of
* macros such as BT_GATT_PRIMARY_SERVICE, BT_GATT_CHARACTERISTIC,
* BT_GATT_DESCRIPTOR, etc.
*
* Input Parameters:
* attrs - Database table containing the available attributes.
* count - Size of the database table.
*
****************************************************************************/
void bt_gatt_register(FAR const struct bt_gatt_attr_s *attrs, size_t count);
/****************************************************************************
* Name: bt_gatt_foreach_attr
*
* Description:
* Iterate attributes in the given range.
*
* Input Parameters:
* start_handle - Start handle.
* end_handle - End handle.
* func - Callback function.
* user_data - Data to pass to the callback.
*
****************************************************************************/
void bt_gatt_foreach_attr(uint16_t start_handle, uint16_t end_handle,
bt_gatt_attr_func_t func, FAR void *user_data);
/****************************************************************************
* Name: bt_gatt_attr_read
*
* Description:
* Read attribute value storing the result into buffer.
*
* Input Parameters:
* conn - Connection object.
* attr - Attribute to read.
* buf - Buffer to store the value.
* buf_len - Buffer length.
* offset - Start offset.
* value - Attribute value.
* value_len - Length of the attribute value.
*
* Returned Value:
* int number of bytes read in case of success or negative values in
* case of error.
*
****************************************************************************/
int bt_gatt_attr_read(FAR struct bt_conn_s *conn,
FAR const struct bt_gatt_attr_s *attr,
FAR void *buf, uint8_t buf_len, uint16_t offset,
FAR const void *value, uint8_t value_len);
/****************************************************************************
* Name: bt_gatt_attr_read_service
*
* Description:
* Read service attribute value storing the result into buffer after
* encoding it.
* NOTE: Only use this with attributes which user_data is a bt_uuid_s.
*
* Input Parameters:
* conn - Connection object.
* attr - Attribute to read.
* buf - Buffer to store the value read.
* len - Buffer length.
* offset - Start offset.
*
* Returned Value:
* int number of bytes read in case of success or negative values in
* case of error.
*
****************************************************************************/
int bt_gatt_attr_read_service(FAR struct bt_conn_s *conn,
FAR const struct bt_gatt_attr_s *attr,
FAR void *buf, uint8_t len, uint16_t offset);
/****************************************************************************
* Name: bt_gatt_attr_read_included
*
* Description:
* Read include service attribute value storing the result into buffer
* after encoding it.
* NOTE: Only use this with attributes which user_data is a
* bt_gatt_include.
*
* Input Parameters:
* conn - Connection object.
* attr - Attribute to read.
* buf - Buffer to store the value read.
* len - Buffer length.
* offset - Start offset.
*
* Returned Value:
* int number of bytes read in case of success or negative values in
* case of error.
*
****************************************************************************/
int bt_gatt_attr_read_included(FAR struct bt_conn_s *conn,
FAR const struct bt_gatt_attr_s *attr,
FAR void *buf, uint8_t len, uint16_t offset);
/****************************************************************************
* Name: bt_gatt_attr_read_chrc
*
* Description:
* Read characteristic attribute value storing the result into buffer after
* encoding it.
* NOTE: Only use this with attributes which user_data is a bt_gatt_chrc.
*
* Input Parameters:
* conn - Connection object.
* attr - Attribute to read.
* buf - Buffer to store the value read.
* len - Buffer length.
* offset - Start offset.
*
* Returned Value:
* number of bytes read in case of success or negative values in
* case of error.
*
****************************************************************************/
int bt_gatt_attr_read_chrc(FAR struct bt_conn_s *conn,
FAR const struct bt_gatt_attr_s *attr,
FAR void *buf, uint8_t len, uint16_t offset);
/****************************************************************************
* Name: bt_gatt_attr_read_ccc
*
* Description:
* Read CCC attribute value storing the result into buffer after
* encoding it.
* NOTE: Only use this with attributes which user_data is a _bt_gatt_ccc_s.
*
* Input Parameters:
* conn - Connection object.
* attr - Attribute to read.
* buf - Buffer to store the value read.
* len - Buffer length.
* offset - Start offset.
*
* Returned Value:
* number of bytes read in case of success or negative values in
* case of error.
*
****************************************************************************/
int bt_gatt_attr_read_ccc(FAR struct bt_conn_s *conn,
FAR const struct bt_gatt_attr_s *attr,
FAR void *buf, uint8_t len, uint16_t offset);
/****************************************************************************
* Name: bt_gatt_attr_write_ccc
*
* Description:
* Write value in the buffer into CCC attribute.
* NOTE: Only use this with attributes which user_data is a _bt_gatt_ccc_s.
*
* Input Parameters:
* conn - Connection object.
* attr - Attribute to read.
* buf - Buffer to store the value read.
* len - Buffer length.
* offset - Start offset.
*
* Returned Value:
* number of bytes written in case of success or negative values in
* case of error.
*
****************************************************************************/
int bt_gatt_attr_write_ccc(FAR struct bt_conn_s *conn,
FAR const struct bt_gatt_attr_s *attr,
FAR const void *buf, uint8_t len,
uint16_t offset);
/****************************************************************************
* Name: bt_gatt_attr_read_cep
*
* Description:
* Read CEP attribute value storing the result into buffer after
* encoding it.
* NOTE: Only use this with attributes which user_data is a bt_gatt_cep.
*
* Input Parameters:
* conn - Connection object
* attr - Attribute to read
* buf - Buffer to store the value read
* len - Buffer length
* offset - Start offset
*
* Returned Value:
* number of bytes read in case of success or negative values in
* case of error.
*
****************************************************************************/
int bt_gatt_attr_read_cep(FAR struct bt_conn_s *conn,
FAR const struct bt_gatt_attr_s *attr,
FAR void *buf, uint8_t len, uint16_t offset);
/****************************************************************************
* Name: bt_gatt_notify
*
* Description:
* Send notification of attribute value change.
* Note: This function should only be called if CCC is declared with
* BT_GATT_CCC otherwise it cannot find a valid peer configuration.
*
* Input Parameters:
* handle - Attribute handle.
* value - Attribute value.
* len - Attribute value length.
*
****************************************************************************/
void bt_gatt_notify(uint16_t handle, FAR const void *data, size_t len);
/****************************************************************************
* Name: bt_gatt_connected
*
* Description:
* Connected callback.
*
* Input Parameters:
* conn - Connection object.
*
****************************************************************************/
void bt_gatt_connected(FAR struct bt_conn_s *conn);
/****************************************************************************
* Name: bt_gatt_disconnected
*
* Description:
* Disconnected callback.
*
* Input Parameters:
* conn - Connection object.
*
****************************************************************************/
void bt_gatt_disconnected(FAR struct bt_conn_s *conn);
/* Client API */
/****************************************************************************
* Name: bt_gatt_exchange_mtu
*
* Description:
* This client procedure can be used to set the MTU to the maximum possible
* size the buffers can hold.
* NOTE: Can only be used once per connection.
*
* Input Parameters:
* conn - Connection object.
*
****************************************************************************/
int bt_gatt_exchange_mtu(FAR struct bt_conn_s *conn,
bt_gatt_rsp_func_t func);
/****************************************************************************
* Name: bt_gatt_discover
*
* Description:
* This procedure is used by a client to discover a specific primary
* service on a server when only the Service UUID is known.
*
* For each attribute found the callback is called which can then decide
* whether to continue discovering or stop.
*
* Input Parameters:
* conn - Connection object.
* params - Discover parameters.
*
* Returned Value:
* Zero in case of success or negative value in case of error.
*
****************************************************************************/
int bt_gatt_discover(FAR struct bt_conn_s *conn,
FAR struct bt_gatt_discover_params_s *params);
/****************************************************************************
* Name: bt_gatt_discover_characteristic
*
* Description:
* This procedure is used by a client to discover all characteristics on a
* server.
* Note: In case the UUID is set in the parameter it will be matched
* against the attributes found before calling the function callback.
*
* For each attribute found the callback is called which can then decide
* whether to continue discovering or stop.
*
* Input Parameters:
* conn - Connection object.
* params - Discover parameters.
*
* Returned Value:
* Zero in case of success or negative value in case of error.
*
****************************************************************************/
int bt_gatt_discover_characteristic(FAR struct bt_conn_s *conn,
FAR struct bt_gatt_discover_params_s *params);
/****************************************************************************
* Name: bt_gatt_discover_descriptor
*
* Description:
* This procedure is used by a client to discover descriptors on a server.
* Note: In case the UUID is set in the parameter it will be matched
* against the attributes found before calling the function callback.
*
* For each attribute found the callback is called which can then decide
* whether to continue discovering or stop.
*
* Input Parameters:
* conn - Connection object.
* params - Discover parameters.
*
* Returned Value:
* Zero in case of success or negative value in case of error.
*
****************************************************************************/
int bt_gatt_discover_descriptor(FAR struct bt_conn_s *conn,
FAR struct bt_gatt_discover_params_s *params);
/****************************************************************************
* Name: bt_gatt_read
*
* Description:
* This procedure read the attribute value and return it to the callback.
*
* Input Parameters:
* conn - Connection object.
* handle - Attribute handle.
* offset - Attribute data offset.
* func - Callback function.
*
* Returned Value:
* Zero in case of success or negative value in case of error.
*
****************************************************************************/
int bt_gatt_read(FAR struct bt_conn_s *conn, uint16_t handle,
uint16_t offset, bt_gatt_read_func_t func);
/****************************************************************************
* Name: bt_gatt_write
*
* Description:
* This procedure write the attribute value and return the result in the
* callback in case it is set.
*
* Input Parameters:
* conn - Connection object.
* handle - Attribute handle.
* data - Data to be written.
* length - Data length.
* func - Callback function.
*
* Returned Value:
* Zero in case of success or negative value in case of error.
*
****************************************************************************/
int bt_gatt_write(FAR struct bt_conn_s *conn, uint16_t handle,
FAR const void *data, uint16_t length,
bt_gatt_rsp_func_t func);
/****************************************************************************
* Name: bt_gatt_cancel
*
* Description:
* Cancel GATT pending request
*
* Input Parameters:
* conn - Connection object.
*
****************************************************************************/
void bt_gatt_cancel(FAR struct bt_conn_s *conn);
/****************************************************************************
* Name: bt_gatt_read_multiple
*
* Description:
* Routine to be used to retrieve set of attributes values determined by
* set of handles in one call.
*
* Input Parameters:
* conn - Connection object.
* handles - Set of valid handles to attributes.
* count - Number of handles to be read.
* func - User callback routine to get retrieved values.
*
* Returned Value:
* Zero in case of success or negative value in case of error.
*
****************************************************************************/
int bt_gatt_read_multiple(FAR struct bt_conn_s *conn,
FAR const uint16_t *handles, size_t count,
bt_gatt_read_func_t func);
#endif /* __INCLUDE_NUTTX_WIRELESS_BLUETOOTH_BT_GATT_H */