aboutsummaryrefslogtreecommitdiff
path: root/inc/bluetooth/profile/gatt.h
diff options
context:
space:
mode:
Diffstat (limited to 'inc/bluetooth/profile/gatt.h')
-rw-r--r--inc/bluetooth/profile/gatt.h275
1 files changed, 275 insertions, 0 deletions
diff --git a/inc/bluetooth/profile/gatt.h b/inc/bluetooth/profile/gatt.h
new file mode 100644
index 0000000..d250150
--- /dev/null
+++ b/inc/bluetooth/profile/gatt.h
@@ -0,0 +1,275 @@
+#ifndef _GATT_H_
+#define _GATT_H_
+
+#include <stdint.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/*============================================================================*
+* Macros
+*============================================================================*/
+
+/**
+
+ * \addtogroup GATT_SERVER_API GATT Server API
+ *
+ * \defgroup GATT_ATTRIBUTE GATT Attribute
+ *
+ * \brief GATT Attribute Definitions
+ *
+ * \ingroup GATT_SERVER_API
+ */
+
+/**
+ * gatt.h
+ *
+ * \name GATT_DECLARATIONS_UUID
+ * \brief GATT declarations uuid.
+ * \anchor GATT_DECLARATIONS_UUID
+ */
+/**
+ * \ingroup GATT_ATTRIBUTE
+ */
+#define GATT_UUID_PRIMARY_SERVICE 0x2800 /**< GATT Primary Service Declaration. */
+#define GATT_UUID_SECONDARY_SERVICE 0x2801 /**< GATT Secondary Service Declaration. */
+#define GATT_UUID_INCLUDE 0x2802 /**< GATT Include Declaration. */
+#define GATT_UUID_CHARACTERISTIC 0x2803 /**< GATT Characteristic Declaration. */
+
+/**
+ * gatt.h
+ *
+ * \name GATT_DESCRIPTORS_UUID
+ * \brief GATT descriptors uuid.
+ * \anchor GATT_DESCRIPTORS_UUID
+ */
+/**
+ * \ingroup GATT_ATTRIBUTE
+ */
+#define GATT_UUID_CHAR_EXTENDED_PROP 0x2900 /**< Characteristic Extended Properties. */
+#define GATT_UUID_CHAR_USER_DESCR 0x2901 /**< Characteristic User Description. */
+#define GATT_UUID_CHAR_CLIENT_CONFIG 0x2902 /**< Client Characteristic Configuration. */
+#define GATT_UUID_CHAR_SERVER_CONFIG 0x2903 /**< Server Characteristic Configuration. */
+#define GATT_UUID_CHAR_FORMAT 0x2904 /**< Characteristic Presentation Format. */
+#define GATT_UUID_CHAR_AGGR_FORMAT 0x2905 /**< Characteristic Aggregate Format. */
+#define GATT_UUID_CHAR_VALID_RANGE 0x2906 /**< Valid Range. */
+#define GATT_UUID_CHAR_EXTERNAL_REPORT_REFERENCE 0x2907 /**< External Report Reference. */
+#define GATT_UUID_CHAR_REPORT_REFERENCE 0x2908 /**< Report Reference. */
+#define GATT_UUID_CHAR_DESCRIPTOR_NUM_OF_DIGITALS 0x2909 /**< Number of Digitals. */
+#define GATT_UUID_CHAR_DESCRIPTOR_VALUE_TRIGGER_SETTING 0x290A /**< Value Trigger Setting. */
+#define GATT_UUID_CHAR_SENSING_CONFIGURATION 0x290B /**< Environmental Sensing Configuration. */
+#define GATT_UUID_CHAR_SENSING_MEASUREMENT 0x290C /**< Environmental Sensing Measurement. */
+#define GATT_UUID_CHAR_SENSING_TRIGGER_SETTING 0x290D /**< Environmental Sensing Trigger Setting. */
+#define GATT_UUID_CHAR_DESCRIPTOR_TIME_TRIGGER_SETTING 0x290E /**< Time Trigger Setting. */
+
+/**
+ * gatt.h
+ *
+ * \name GATT_CHARACTERISTICS_UUID
+ * \brief GATT characteristics uuid.
+ * \anchor GATT_CHARACTERISTICS_UUID
+ */
+/**
+ * \ingroup GATT_ATTRIBUTE
+ */
+#define GATT_UUID_CHAR_DEVICE_NAME 0x2A00 /**< Device Name. */
+#define GATT_UUID_CHAR_APPEARANCE 0x2A01 /**< Appearance. */
+#define GATT_UUID_CHAR_PER_PRIV_FLAG 0x2A02 /**< Peripheral Privacy Flag. */
+#define GATT_UUID_CHAR_RECONN_ADDRESS 0x2A03 /**< Reconnection Address. */
+#define GATT_UUID_CHAR_PER_PREF_CONN_PARAM 0x2A04 /**< Peripheral Preferred Connection Parameters. */
+#define GATT_UUID_CHAR_SERVICE_CHANGED 0x2A05 /**< Service Changed. */
+#define GATT_UUID_CHAR_CENTRAL_ADDRESS_RESOLUTION 0x2AA6 /**< Central Address Resolution. */
+#define GATT_UUID_CHAR_RESOLVABLE_PRIVATE_ADDRESS_ONLY 0x2AC9 /**< Resolvable Private Address Only. */
+#define GATT_UUID_CHAR_CLIENT_SUPPORTED_FEATURES 0x2B29 /**< Client Supported Features. */
+#define GATT_UUID_CHAR_DATABASE_HASH 0x2B2A /**< Database Hash. */
+
+/** @brief GATT Service Client Supported Features length. variable length, 1 is used in Core Spec v5.2. */
+#define GATTS_CLIENT_SUPPORTED_FEATURES_LEN 1
+
+/** @brief GATT Service Database Hash length. */
+#define GATTS_DATABASE_HASH_LEN 16
+
+/**
+ * gatt.h
+ *
+ * \name GATT_SERVICE_UUID
+ * \brief GATT services uuid.
+ * \anchor GATT_SERVICE_UUID
+ */
+/**
+ * \ingroup GATT_ATTRIBUTE
+ */
+#define GATT_UUID_GAP 0x1800 /**< Generic Access. */
+#define GATT_UUID_GATT 0x1801 /**< Generic Attribute. */
+
+/**
+ * gatt.h
+ *
+ * \name GATT_ATTRIBUTE_PERMISSIONS
+ * \brief Attribute read/write permissions, encryption key size.
+ * \anchor GATT_ATTRIBUTE_PERMISSIONS
+ */
+/**
+ * \ingroup GATT_ATTRIBUTE
+ */
+#define GATT_PERM_NONE 0x00
+#define GATT_PERM_ALL 0x01 /**< bits 0..1 (rd), 4..5 (wr), 8..9 (notif/ind) */
+#define GATT_PERM_AUTHEN_REQ 0x02
+#define GATT_PERM_AUTHEN_MITM_REQ 0x03
+#define GATT_PERM_AUTHOR_REQ 0x04 /**< bits 2 (rd), 6 (wr), 10 (notif/ind) */
+#define GATT_PERM_ENCRYPTED_REQ 0x08 /**< bits 3 (rd), 7 (wr), 11 (notif/ind) */
+#define GATT_PERM_AUTHEN_SC_REQ 0x00010000
+
+/** @brief read (bits 0..3) */
+#define GATT_PERM_READ GATT_PERM_ALL
+#define GATT_PERM_READ_AUTHEN_REQ GATT_PERM_AUTHEN_REQ
+#define GATT_PERM_READ_AUTHEN_MITM_REQ GATT_PERM_AUTHEN_MITM_REQ
+#define GATT_PERM_READ_AUTHOR_REQ GATT_PERM_AUTHOR_REQ
+#define GATT_PERM_READ_ENCRYPTED_REQ GATT_PERM_ENCRYPTED_REQ
+#define GATT_PERM_READ_AUTHEN_SC_REQ GATT_PERM_AUTHEN_SC_REQ
+
+#define GATT_PERM_READ_AUTHEN_GET(x) (x & 0x03)
+#define GATT_PERM_READ_AUTHOR_GET(x) (x & 0x04)
+#define GATT_PERM_READ_ENCRYPT_GET(x) (x & 0x08)
+#define GATT_PERM_READ_AUTHEN_SC_GET(x) (x & 0x00010000)
+
+/** @brief write (bits 4..7) */
+#define GATT_PERM_WRITE (GATT_PERM_ALL << 4)
+#define GATT_PERM_WRITE_AUTHEN_REQ (GATT_PERM_AUTHEN_REQ << 4)
+#define GATT_PERM_WRITE_AUTHEN_MITM_REQ (GATT_PERM_AUTHEN_MITM_REQ << 4)
+#define GATT_PERM_WRITE_AUTHOR_REQ (GATT_PERM_AUTHOR_REQ << 4)
+#define GATT_PERM_WRITE_ENCRYPTED_REQ (GATT_PERM_ENCRYPTED_REQ << 4)
+#define GATT_PERM_WRITE_AUTHEN_SC_REQ (GATT_PERM_AUTHEN_SC_REQ<<4)
+
+#define GATT_PERM_WRITE_AUTHEN_GET(x) ((x >> 4) & 0x03)
+#define GATT_PERM_WRITE_AUTHOR_GET(x) ((x >> 4) & 0x04)
+#define GATT_PERM_WRITE_ENCRYPT_GET(x) ((x >> 4) & 0x08)
+#define GATT_PERM_WRITE_AUTHEN_SC_GET(x) ((x>>4) & 0x00010000)
+
+/** @brief notification/indication (bits 8..11) */
+#define GATT_PERM_NOTIF_IND (GATT_PERM_ALL << 8)
+#define GATT_PERM_NOTIF_IND_AUTHEN_REQ (GATT_PERM_AUTHEN_REQ << 8)
+#define GATT_PERM_NOTIF_IND_AUTHEN_MITM_REQ (GATT_PERM_AUTHEN_MITM_REQ << 8)
+#define GATT_PERM_NOTIF_IND_AUTHOR_REQ (GATT_PERM_AUTHOR_REQ << 8)
+#define GATT_PERM_NOTIF_IND_ENCRYPTED_REQ (GATT_PERM_ENCRYPTED_REQ << 8)
+#define GATT_PERM_NOTIF_IND_AUTHEN_SC_REQ (GATT_PERM_AUTHEN_SC_REQ<<8)
+
+#define GATT_PERM_NOTIF_IND_AUTHEN_GET(x) ((x >> 8) & 0x03)
+#define GATT_PERM_NOTIF_IND_AUTHOR_GET(x) ((x >> 8) & 0x04)
+#define GATT_PERM_NOTIF_IND_ENCRYPT_GET(x) ((x >> 8) & 0x08)
+#define GATT_PERM_NOTIF_IND_AUTHEN_SC_GET(x) ((x>>8) & 0x00010000)
+
+/** @brief key size - 1 (bits 12..15) */
+#define GATT_PERM_KEYSIZE(size) ((size-1) << 12)
+#define GATT_PERM_KEYSIZE_GET(x, size) { \
+ size = ((x >> 12) & 0x0F); \
+ if ( size > 0 ) \
+ size++; \
+ }
+
+/**
+ * gatt.h
+ *
+ * \name GATT_CHARACTERISTIC_PROPERTIES
+ * \brief GATT characteristic properties.
+ * \anchor GATT_CHARACTERISTIC_PROPERTIES
+ */
+/**
+ * \ingroup GATT_ATTRIBUTE
+ */
+#define GATT_CHAR_PROP_BROADCAST 0x01 /**< If set, permits broadcasts of the Characteristic Value using
+Server Characteristic Configuration Descriptor. */
+#define GATT_CHAR_PROP_READ 0x02 /**< If set, permits reads of the Characteristic Value */
+#define GATT_CHAR_PROP_WRITE_NO_RSP 0x04 /**< If set, permit writes of the Characteristic Value without response */
+#define GATT_CHAR_PROP_WRITE 0x08 /**< If set, permits writes of the Characteristic Value with response */
+#define GATT_CHAR_PROP_NOTIFY 0x10 /**< If set, permits notifications of a Characteristic Value without acknowledgment */
+#define GATT_CHAR_PROP_INDICATE 0x20 /**< If set, permits indications of a Characteristic Value with acknowledgment */
+#define GATT_CHAR_PROP_WRITE_AUTHEN_SIGNED 0x40 /**< If set, permits signed writes to the Characteristic Value */
+#define GATT_CHAR_PROP_EXT_PROP 0x80 /**< If set, additional characteristic properties are defined in the Characteristic
+Extended Properties Descriptor */
+
+/** @brief GATT client characteristic configuration bit field */
+#define GATT_CLIENT_CHAR_CONFIG_DEFAULT 0x0000 /**< The Characteristic Value shall be neither indicated nor notified. */
+#define GATT_CLIENT_CHAR_CONFIG_NOTIFY 0x0001 /**< The Characteristic Value shall be notified. */
+#define GATT_CLIENT_CHAR_CONFIG_INDICATE 0x0002 /**< The Characteristic Value shall be indicated. */
+#define GATT_CLIENT_CHAR_CONFIG_NOTIFY_INDICATE 0x0003 /**< The Characteristic Value shall be both indicated and notified. */
+
+#define GATT_CLIENT_CHAR_NOTIF_IND_DATA_PENGDING 0x8000
+
+/** @brief GATT server characteristic configuration bit field */
+#define GATT_SERVER_CHAR_CONFIG_BROADCAST 0x0001 /**< The Characteristic Value shall be broadcast. */
+
+
+/**
+ * gatt.h
+ *
+ * \name GATT_UUID_SIZE
+ * \brief GATT uuid size.
+ * \anchor GATT_UUID_SIZE
+ */
+/**
+ * \ingroup GATT_ATTRIBUTE
+ */
+#define UUID_16BIT_SIZE 2 /**< 16 bits UUID size. */
+#define UUID_128BIT_SIZE 16 /**< 128 bits UUID size. */
+
+#define ATT_ATTRIBUTE_MAX_LENGTH 512 /**< Attribute Max length. */
+
+#define HI_WORD(x) ((uint8_t)((x & 0xFF00) >> 8))
+#define LO_WORD(x) ((uint8_t)(x))
+
+
+/*---------------------------------------------------------------------------
+ * GATT server attribute descriptor
+ *--------------------------------------------------------------------------*/
+
+/**
+ * gatt.h
+ *
+ * \name GATT_ATTRIBUTE_FLAG
+ * \brief GATT attribute flag.
+ * \anchor GATT_ATTRIBUTE_FLAG
+ */
+/**
+ * \ingroup GATT_ATTRIBUTE
+ */
+#define ATTRIB_FLAG_VOID 0x0000 /**< Attribute value neither supplied by application
+nor included following 16bit UUID. Attribute value is pointed by p_value_context
+and value_len shall be set to the length of attribute value. */
+#define ATTRIB_FLAG_UUID_128BIT 0x0001 /**< Attribute uses 128 bit UUID */
+#define ATTRIB_FLAG_VALUE_INCL 0x0002 /**< Attribute value is included following 16 bit UUID */
+#define ATTRIB_FLAG_VALUE_APPL 0x0004 /**< Application has to supply write value */
+#define ATTRIB_FLAG_ASCII_Z 0x0008 /**< Attribute value is ASCII_Z string */
+#define ATTRIB_FLAG_CCCD_APPL 0x0010 /**< Application will be informed about CCCD value is changed */
+#define ATTRIB_FLAG_CCCD_NO_FILTER 0x0020 /**< Application will be informed about CCCD value
+when CCCD is write by client, no matter it is changed or not */
+#define ATTRIB_FLAG_INCLUDE_MULTI 0x0040
+#define ATTRIB_FLAG_LE 0x0800 /**< Used only for primary service declaration attributes if GATT over BLE is supported */
+
+/**
+ * gatt.h
+ *
+ * \name GATT_ATTRIBUTE_APPL
+ * \brief GATT attribute definition.
+ * \anchor GATT_ATTRIBUTE_APPL
+ */
+/**
+ * \ingroup GATT_ATTRIBUTE
+ */
+typedef struct
+{
+ uint16_t flags; /**< Attribute flags @ref GATT_ATTRIBUTE_FLAG */
+ uint8_t type_value[2 + 14]; /**< 16 bit UUID + included value or 128 bit UUID */
+ uint16_t value_len; /**< Length of value */
+ void *p_value_context; /**< Pointer to value if @ref ATTRIB_FLAG_VALUE_INCL
+ and @ref ATTRIB_FLAG_VALUE_APPL not set */
+ uint32_t permissions; /**< Attribute permission @ref GATT_ATTRIBUTE_PERMISSIONS */
+} T_ATTRIB_APPL;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _GATT_H_ */