Project

General

Profile

/*******************************************************************************
File Name: CYBLE_gatt.h
Version 2.0

Description:
Contains the prototypes and constants used in the BLE GATT profile.

********************************************************************************
Copyright 2014-2015, Cypress Semiconductor Corporation. All rights reserved.
You may use this file only in accordance with the license, terms, conditions,
disclaimers, and limitations in the end user license agreement accompanying
the software package with which this file was provided.
*******************************************************************************/


#if !defined(CY_BLE_CYBLE_GATT_H)
#define CY_BLE_CYBLE_GATT_H

#include "BLE.h"


/***************************************
##Conditional Compilation Parameters
***************************************/

#define CYBLE_GATT_ROLE (0x01u)
#define CYBLE_GATT_SERVER (0x01u)
#define CYBLE_GATT_CLIENT (0x02u)
#define CYBLE_GATT_BOTH (CYBLE_GATT_SERVER | CYBLE_GATT_CLIENT)

#define CYBLE_GATT_ROLE_SERVER (0u != (CYBLE_GATT_ROLE & CYBLE_GATT_SERVER))
#define CYBLE_GATT_ROLE_CLIENT (0u != (CYBLE_GATT_ROLE & CYBLE_GATT_CLIENT))


#if(CYBLE_GATT_ROLE_SERVER)

#define CYBLE_GATT_DB_INDEX_COUNT (0x000Eu)
#define CYBLE_GATT_DB_CCCD_COUNT (0x02u)
#define CYBLE_GATT_DB_ATT_VAL_COUNT (0x06u)
#define CYBLE_GATT_DB_MAX_VALUE_LEN (0x000Bu)

#endif /* CYBLE_GATT_ROLE_SERVER */

#define CYBLE_IAS
#define CYBLE_IAS_SERVER

/***************************************
##Common constants for LLS and IAS services
***************************************/

#if (defined(CYBLE_IAS) || defined(CYBLE_LLS))

#define CYBLE_NO_ALERT (0u)
#define CYBLE_MILD_ALERT (1u)
#define CYBLE_HIGH_ALERT (2u)

#endif /* (defined(CYBLE_IAS) || defined(CYBLE_LLS)) */


/***************************************
##Type Definitions
***************************************/

/* Service data received with read by group type response during discovery process */
typedef struct
{
CYBLE_GATT_ATTR_HANDLE_RANGE_T range;
uint16 uuid;
}CYBLE_DISC_SRVC_INFO_T;

/* Service data received with read by group type response during discovery process including 128 bit UUID */
typedef struct
{
CYBLE_GATT_ATTR_HANDLE_RANGE_T range;
CYBLE_UUID_T uuid;
}CYBLE_DISC_SRVC128_INFO_T;

/* Included service data received with read by type response during discovery process */
typedef struct
{
CYBLE_GATT_DB_ATTR_HANDLE_T inclDefHandle; /* Included definition handle */
CYBLE_GATT_ATTR_HANDLE_RANGE_T inclHandleRange; /* Included declaration handle range */
CYBLE_UUID_T uuid; /* Included UUID */
uint8 uuidFormat; /* UUID Format - 16-bit (0x01) or 128-bit (0x02) */
}CYBLE_DISC_INCL_INFO_T;

/* Characteristic data received with read by type response during discovery process */
typedef struct
{
CYBLE_GATT_DB_ATTR_HANDLE_T charDeclHandle; /* Handle for characteristic declaration */
uint8 properties; /* Properties for value field */
CYBLE_GATT_DB_ATTR_HANDLE_T valueHandle; /* Handle to server database attribute value entry */
CYBLE_UUID_T uuid; /* Characteristic UUID */
uint8 uuidFormat; /* UUID Format - 16-bit (0x01) or 128-bit (0x02) */
}CYBLE_DISC_CHAR_INFO_T;

/* Characteristic Attribute handle + properties structure */
typedef struct
{
/* Properties for value field */
uint8 properties;

/* Handle of server database attribute value entry */
CYBLE_GATT_DB_ATTR_HANDLE_T valueHandle;
}CYBLE_SRVR_CHAR_INFO_T;

/* Characteristic descriptor data received with find info response during discovery process */
typedef struct
{
CYBLE_CONN_HANDLE_T connHandle; /* Handle to server database attribute entry */
CYBLE_GATT_DB_ATTR_HANDLE_T descrHandle; /* Descriptor handle */
CYBLE_UUID_T uuid; /* Descriptor UUID */
uint8 uuidFormat; /* UUID Format - 16-bit (0x01) or 128-bit (0x02) */
}CYBLE_DISC_DESCR_INFO_T;

#if(CYBLE_GATT_ROLE_SERVER)

/* Structure with Generic Attribute Service (GATTS) attribute handles */
typedef struct
{
CYBLE_GATT_DB_ATTR_HANDLE_T serviceHandle; /* Service handle*/
CYBLE_GATT_DB_ATTR_HANDLE_T serviceChangedHandle; /* Handle of the Service Changed characteristic */
CYBLE_GATT_DB_ATTR_HANDLE_T cccdHandle; /* Client Characteristic Configuration descriptor handle */
} CYBLE_GATTS_T;

#endif /* CYBLE_GATT_ROLE_SERVER */

#if(CYBLE_GATT_ROLE_CLIENT)

/* Structure with discovered attributes information of Generic Attribute
Service (GATTS) */
typedef struct
{
CYBLE_SRVR_CHAR_INFO_T serviceChanged; /* Handle of the Service Changed characteristic */
CYBLE_GATT_DB_ATTR_HANDLE_T cccdHandle; /* Client Characteristic Configuration descriptor handle */
} CYBLE_GATTC_T;

#endif /* CYBLE_GATT_ROLE_CLIENT */


/***************************************
##Function Prototypes
***************************************/

#if(CYBLE_GATT_ROLE_SERVER)
CYBLE_API_RESULT_T CyBle_GattsReInitGattDb(void);
#endif /* CYBLE_GATT_ROLE_SERVER */

#if(CYBLE_GATT_ROLE_CLIENT)
CYBLE_API_RESULT_T CyBle_GattcStartDiscovery(CYBLE_CONN_HANDLE_T connHandle);

#endif /* CYBLE_GATT_ROLE_CLIENT */


/***************************************
##Private Function Prototypes
***************************************/

/* DOM-IGNORE-BEGIN */
#if (CYBLE_GATT_ROLE_SERVER)
CYBLE_GATT_ERR_CODE_T CyBle_GattsWriteEventHandler(CYBLE_GATTS_WRITE_REQ_PARAM_T *eventParam);

#endif /* CYBLE_GATT_ROLE_SERVER */

#if(CYBLE_GATT_ROLE_CLIENT)
void CyBle_GattcDiscoverCharacteristicsEventHandler(CYBLE_DISC_CHAR_INFO_T *discCharInfo);
void CyBle_GattcDiscoverCharDescriptorsEventHandler(CYBLE_DISC_DESCR_INFO_T *discDescrInfo);
void CyBle_GattcIndicationEventHandler(CYBLE_GATTC_HANDLE_VALUE_IND_PARAM_T *eventParam);

#endif /* CYBLE_GATT_ROLE_CLIENT */
/* DOM-IGNORE-END */


/***************************************
##Variables with external linkage
***************************************/

#if (CYBLE_GATT_ROLE_SERVER)
extern const CYBLE_GATTS_T cyBle_gatts;
extern const CYBLE_GATTS_DB_T cyBle_gattDB[CYBLE_GATT_DB_INDEX_COUNT];

#if(CYBLE_GATT_DB_CCCD_COUNT != 0u)
extern uint8 cyBle_attValuesCCCD[CYBLE_GATT_DB_CCCD_COUNT];
extern CYBLE_GATTS_ATT_GEN_VAL_LEN_T cyBle_attValuesLen[CYBLE_GATT_DB_ATT_VAL_COUNT];
extern const uint8 cyBle_attValuesCCCDFlashMemory[CYBLE_GAP_MAX_BONDED_DEVICE + 1u][CYBLE_GATT_DB_CCCD_COUNT];
#endif /* CYBLE_GATT_DB_CCCD_COUNT != 0u */

#endif /* CYBLE_GATT_ROLE_SERVER */

#if(CYBLE_GATT_ROLE_CLIENT)
extern CYBLE_GATTC_T cyBle_gattc;
#endif /* CYBLE_GATT_ROLE_CLIENT */


/***************************************
##API Constants
***************************************/


/***************************************
##Universal Unique Identifier (UUID): BLE Services
***************************************/

/* Generic Access Profile */
#define CYBLE_UUID_GAP_SERVICE (0x1800u)
/* Generic Attribute Profile */
#define CYBLE_UUID_GATT_SERVICE (0x1801u)

/* UUID: BLE Other Services */
#define CYBLE_UUID_IMMEDIATE_ALERT_SERVICE (0x1802u)
#define CYBLE_UUID_LINK_LOSS_SERVICE (0x1803u)
#define CYBLE_UUID_TX_POWER_SERVICE (0x1804u)
#define CYBLE_UUID_CURRENT_TIME_SERVICE (0x1805u)
#define CYBLE_UUID_REF_TIME_UPDATE_SERVICE (0x1806u)
#define CYBLE_UUID_NEXT_DST_CHANGE_SERVICE (0x1807u)
#define CYBLE_UUID_GLUCOSE_SERVICE (0x1808u)
#define CYBLE_UUID_HEALTH_THERMOMETER_SERVICE (0x1809u)
#define CYBLE_UUID_DEVICE_INFO_SERVICE (0x180Au)
#define CYBLE_UUID_NWA_SERVICE (0x180Bu)
#define CYBLE_UUID_WATCH_DOG_SERVICE (0x180Cu)
#define CYBLE_UUID_HEART_RATE_SERVICE (0x180Du)
#define CYBLE_UUID_PHONE_ALERT_STATUS_SERVICE (0x180Eu)
#define CYBLE_UUID_BAS_SERVICE (0x180Fu)
#define CYBLE_UUID_BLOOD_PRESSURE_SERVICE (0x1810u)
#define CYBLE_UUID_ALERT_NOTIFICATION_SERVICE (0x1811u)
#define CYBLE_UUID_HIDS_SERVICE (0x1812u)
#define CYBLE_UUID_SCAN_PARAM_SERVICE (0x1813u)
#define CYBLE_UUID_RUNNING_SPEED_AND_CADENCE_SERVICE (0x1814u)
#define CYBLE_UUID_CYCLING_SPEED_AND_CADENCE_SERVICE (0x1816u)
#define CYBLE_UUID_PULSE_OXIMETER_SERVICE (0x1817u)
#define CYBLE_UUID_CPS_SERVICE (0x1818u)
#define CYBLE_UUID_LOCATION_AND_NAVIGATION_SERVICE (0x1819u)
#define CYBLE_UUID_ENVIRONMENTAL_SENSING_SERVICE (0x181Au)
#define CYBLE_UUID_BODY_COMPOSITION_SERVICE (0x181Bu)
#define CYBLE_UUID_USER_DATA_SERVICE (0x181Cu)
#define CYBLE_UUID_WEIGHT_SCALE_SERVICE (0x181Du)
#define CYBLE_UUID_BOND_MANAGEMENT_SERVICE (0x181Eu)
#define CYBLE_UUID_CGM_SERVICE (0x181Fu)
#define CYBLE_UUID_INTERNET_PROTOCOL_SUPPORT_SERVICE (0x1820u)
#define CYBLE_UUID_FIND_ME_SERVICE (0x18A3u)
#define CYBLE_UUID_WIRELESS_POWER_TRANSFER_SERVICE (0xFFFEu)


/***************************************
##UUID: GATT Attribute Types defined by GATT Profile
***************************************/

/* Primary Service Declaration */
#define CYBLE_UUID_PRIMARY_SERVICE (0x2800u)
/* Secondary Service Declaration */
#define CYBLE_UUID_SECONDARY_SERVICE (0x2801u)
/* Include Declaration */
#define CYBLE_UUID_INCLUDE (0x2802u)
/* Characteristic Declaration */
#define CYBLE_UUID_CHARACTERISTIC (0x2803u)


/***************************************
##UUID: GATT Characteristic Descriptors
***************************************/

/* Characteristic Extended Properties */
#define CYBLE_UUID_CHAR_EXTENDED_PROPERTIES (0x2900u)
/* Characteristic User Description Descriptor */
#define CYBLE_UUID_CHAR_USER_DESCRIPTION (0x2901u)
/* Client Characteristic Configuration Descriptor */
#define CYBLE_UUID_CHAR_CLIENT_CONFIG (0x2902u)
/* Server Characteristic Configuration Descriptor */
#define CYBLE_UUID_CHAR_SERVER_CONFIG (0x2903u)
/* Characteristic Format Descriptor */
#define CYBLE_UUID_CHAR_FORMAT (0x2904u)
/* Characteristic Aggregate Format Descriptor */
#define CYBLE_UUID_CHAR_AGGREGATE_FORMAT (0x2905u)
/* Characteristic Valid Range */
#define CYBLE_UUID_CHAR_VALID_RANGE (0x2906u)
/* External Report Reference */
#define CYBLE_UUID_CHAR_EXTERNAL_REPORT_REF (0x2907u)
/* Report Reference */
#define CYBLE_UUID_CHAR_REPORT_REFERENCE (0x2908u)
/* Environmental Sensing Configuration */
#define CYBLE_UUID_CHAR_ES_CONFIGURATION (0x290Bu)
/* Environmental Sensing Measurement */
#define CYBLE_UUID_CHAR_ES_MEASUREMENT (0x290Cu)
/* Environmental Sensing Trigger Setting */
#define CYBLE_UUID_CHAR_ES_TRIGGER_SETTING (0x290Du)


/***************************************
##UUID: Commonly used GATT Characteristic Types
***************************************/

/* Device Name Characteristic */
#define CYBLE_UUID_CHAR_DEVICE_NAME (0x2A00u)
/* Appearance Characteristic */
#define CYBLE_UUID_CHAR_APPEARANCE (0x2A01u)
/* Peripheral Privacy Flag Characteristic */
#define CYBLE_UUID_CHAR_PERIPH_PRIVCY_FLAG (0x2A02u)
/* Reconnection Address Characteristic */
#define CYBLE_UUID_CHAR_RECONNECTION_ADDR (0x2A03u)
/* Peripheral Preferred Connection Parameters Characteristic */
#define CYBLE_UUID_CHAR_PRFRRD_CNXN_PARAM (0x2A04u)
/* Service Changed Characteristic */
#define CYBLE_UUID_CHAR_SERVICE_CHANGED (0x2A05u)


/***************************************
##UUID: Other Characteristic Types
***************************************/

#define CYBLE_UUID_CHAR_ALERT_LEVEL (0x2A06u)
#define CYBLE_UUID_CHAR_TX_POWER_LEVEL (0x2A07u)
#define CYBLE_UUID_CHAR_DATE_TIME (0x2A08u)
#define CYBLE_UUID_CHAR_DAY_OF_WEEK (0x2A09u)
#define CYBLE_UUID_CHAR_DAY_DATE_TIME (0x2A0Au)
#define CYBLE_UUID_CHAR_EXACT_TIME_100 (0x2A0Bu)
#define CYBLE_UUID_CHAR_EXACT_TIME_256 (0x2A0Cu)
#define CYBLE_UUID_CHAR_DST_OFFSET (0x2A0Du)
#define CYBLE_UUID_CHAR_TIME_ZONE (0x2A0Eu)
#define CYBLE_UUID_CHAR_LOCAL_TIME_INFO (0x2A0Fu)
#define CYBLE_UUID_CHAR_SEC_TIME_ZONE (0x2A10u)
#define CYBLE_UUID_CHAR_TIME_WITH_DST (0x2A11u)
#define CYBLE_UUID_CHAR_TIME_ACCURACY (0x2A12u)
#define CYBLE_UUID_CHAR_TIME_SOURCE (0x2A13u)
#define CYBLE_UUID_CHAR_REF_TIME_INFO (0x2A14u)
#define CYBLE_UUID_CHAR_TIME_BROADCAST (0x2A15u)
#define CYBLE_UUID_CHAR_TIME_UPDATE_CONTROL_POINT (0x2A16u)
#define CYBLE_UUID_CHAR_TIME_UPDATE_STATE (0x2A17u)
#define CYBLE_UUID_CHAR_GLUCOSE_MSRMNT (0x2A18u)
#define CYBLE_UUID_CHAR_BATTERY_LEVEL (0x2A19u)
#define CYBLE_UUID_CHAR_TEMPERATURE_MSMNT (0x2A1Cu)
#define CYBLE_UUID_CHAR_TEMPERATURE_TYPE (0x2A1Du)
#define CYBLE_UUID_CHAR_INTERMEDIATE_TEMP (0x2A1Eu)
#define CYBLE_UUID_CHAR_MSMNT_INTERVAL (0x2A21u)
#define CYBLE_UUID_CHAR_HIDS_BOOT_KEYBOARD_IN_RPT (0x2A22u)
#define CYBLE_UUID_CHAR_SYSTEM_ID (0x2A23u)
#define CYBLE_UUID_CHAR_MODEL_NUMBER (0x2A24u)
#define CYBLE_UUID_CHAR_SERIAL_NUMBER (0x2A25u)
#define CYBLE_UUID_CHAR_FIRMWARE_REV (0x2A26u)
#define CYBLE_UUID_CHAR_HARDWARE_REV (0x2A27u)
#define CYBLE_UUID_CHAR_SOFTWARE_REV (0x2A28u)
#define CYBLE_UUID_CHAR_MANUFACTURER_NAME (0x2A29u)
#define CYBLE_UUID_CHAR_REG_CERT_DATA (0x2A2Au)
#define CYBLE_UUID_CHAR_CURRENT_TIME (0x2A2Bu)
#define CYBLE_UUID_CHAR_MAGNETIC_DECLINATION (0x2A2Cu)
#define CYBLE_UUID_CHAR_SCAN_REFRESH (0x2A31u)
#define CYBLE_UUID_CHAR_HIDS_BOOT_KEYBOARD_OUT_RPT (0x2A32u)
#define CYBLE_UUID_CHAR_HIDS_BOOT_MOUSE_IN_RPT (0x2A33u)
#define CYBLE_UUID_CHAR_GL_MSRMT_CTX (0x2A34u)
#define CYBLE_UUID_CHAR_BP_MSRMT (0x2A35u)
#define CYBLE_UUID_CHAR_INTRMDT_CUFF_PRSR (0x2A36u)
#define CYBLE_UUID_CHAR_HR_MSRMT (0x2A37u)
#define CYBLE_UUID_CHAR_BODY_SENSOR_LOC (0x2A38u)
#define CYBLE_UUID_CHAR_HR_CNTRL_POINT (0x2A39u)
#define CYBLE_UUID_CHAR_NWA (0x2A3Eu)
#define CYBLE_UUID_CHAR_ALERT_STATUS (0x2A3Fu)
#define CYBLE_UUID_CHAR_RINGER_CONTROL_POINT (0x2A40u)
#define CYBLE_UUID_CHAR_RINGER_SETTING (0x2A41u)
#define CYBLE_UUID_CHAR_ALERT_ID_BIT_MASK (0x2A42u)
#define CYBLE_UUID_CHAR_ALERT_ID (0x2A43u)
#define CYBLE_UUID_CHAR_ALERT_NTF_CONTROL_POINT (0x2A44u)
#define CYBLE_UUID_CHAR_UNREAD_ALRT_STATUS (0x2A45u)
#define CYBLE_UUID_CHAR_NEW_ALERT (0x2A46u)
#define CYBLE_UUID_CHAR_SPRTD_NEW_ALRT_CTGRY (0x2A47u)
#define CYBLE_UUID_CHAR_SPRT_UNRD_ALRT_CTGRY (0x2A48u)
#define CYBLE_UUID_CHAR_BP_FEATURE (0x2A49u)
#define CYBLE_UUID_CHAR_HIDS_INFORMATION (0x2A4Au)
#define CYBLE_UUID_CHAR_HIDS_REPORT_MAP (0x2A4Bu)
#define CYBLE_UUID_CHAR_HIDS_CONTROL_POINT (0x2A4Cu)
#define CYBLE_UUID_CHAR_HIDS_REPORT (0x2A4Du)
#define CYBLE_UUID_CHAR_HIDS_PROTOCOL_MODE (0x2A4Eu)
#define CYBLE_UUID_CHAR_SCAN_WINDOW (0x2A4Fu)
#define CYBLE_UUID_CHAR_PNP_ID (0x2A50u)
#define CYBLE_UUID_CHAR_GL_FEATURE (0x2A51u)
#define CYBLE_UUID_CHAR_RACP (0x2A52u) /* Record Access Control Point */
#define CYBLE_UUID_CHAR_RSC_MSRMT (0x2A53u)
#define CYBLE_UUID_CHAR_RSC_FEATURE (0x2A54u)
#define CYBLE_UUID_CHAR_SC_CONTROL_POINT (0x2A55u)
#define CYBLE_UUID_CHAR_CSC_MSRMT (0x2A5Bu)
#define CYBLE_UUID_CHAR_CSC_FEATURE (0x2A5Cu)
#define CYBLE_UUID_CHAR_SENSOR_LOCATION (0x2A5Du)
#define CYBLE_UUID_CHAR_CPS_MSRMT (0x2A63u)
#define CYBLE_UUID_CHAR_CPS_VECTOR (0x2A64u)
#define CYBLE_UUID_CHAR_CPS_FEATURE (0x2A65u)
#define CYBLE_UUID_CHAR_CPS_CP (0x2A66u)
#define CYBLE_UUID_CHAR_LOCATION_AND_SPEED (0x2A67u)
#define CYBLE_UUID_CHAR_NAVIGATION (0x2A68u)
#define CYBLE_UUID_CHAR_POSITION_QUALITY (0x2A69u)
#define CYBLE_UUID_CHAR_LN_FEATURE (0x2A6Au)
#define CYBLE_UUID_CHAR_LN_CONTROL_POINT (0x2A6Bu)
#define CYBLE_UUID_CHAR_ELEVATION (0x2A6Cu)
#define CYBLE_UUID_CHAR_PRESSURE (0x2A6Du)
#define CYBLE_UUID_CHAR_THEMPERATURE (0x2A6Eu)
#define CYBLE_UUID_CHAR_HUMIDITY (0x2A6Fu)
#define CYBLE_UUID_CHAR_TRUE_WIND_SPEED (0x2A70u)
#define CYBLE_UUID_CHAR_TRUE_WIND_DIRECTION (0x2A71u)
#define CYBLE_UUID_CHAR_APPARENT_WIND_SPEED (0x2A72u)
#define CYBLE_UUID_CHAR_APPARENT_WIND_DIRECTION (0x2A73u)
#define CYBLE_UUID_CHAR_GUST_FACTOR (0x2A74u)
#define CYBLE_UUID_CHAR_POLLEN_CONCENTRATION (0x2A75u)
#define CYBLE_UUID_CHAR_UV_INDEX (0x2A76u)
#define CYBLE_UUID_CHAR_IRRADIANCE (0x2A77u)
#define CYBLE_UUID_CHAR_RAINFALL (0x2A78u)
#define CYBLE_UUID_CHAR_WIND_CHILL (0x2A79u)
#define CYBLE_UUID_CHAR_HEAT_INDEX (0x2A7Au)
#define CYBLE_UUID_CHAR_DEW_POINT (0x2A7Bu)
#define CYBLE_UUID_CHAR_DESCR_VALUE_CHANGED (0x2A7Du)
#define CYBLE_UUID_CHAR_AEL (0x2A7Eu) /* Aerobic Heart Rate Lower Limit */
#define CYBLE_UUID_CHAR_AEROBIC_THRESHOLD (0x2A7Fu)
#define CYBLE_UUID_CHAR_AGE (0x2A80u)
#define CYBLE_UUID_CHAR_ANL (0x2A81u) /* Anaerobic Heart Rate Lower Limit */
#define CYBLE_UUID_CHAR_ANU (0x2A82u) /* Anaerobic Heart Rate Upper Limit */
#define CYBLE_UUID_CHAR_ANAEROBIC_THRESHOLD (0x2A83u)
#define CYBLE_UUID_CHAR_AEU (0x2A84u) /* Anaerobic Heart Rate Upper Limit */
#define CYBLE_UUID_CHAR_DATE_OF_BIRTH (0x2A85u)
#define CYBLE_UUID_CHAR_DATE_OF_THRESHOLD_ASSESSMENT (0x2A86u)
#define CYBLE_UUID_CHAR_EMAIL_ADDRESS (0x2A87u)
#define CYBLE_UUID_CHAR_FBL (0x2A88u) /* Fat Burn Heart Rate Lower Limit */
#define CYBLE_UUID_CHAR_FBU (0x2A89u) /* Fat Burn Heart Rate Upper Limit */
#define CYBLE_UUID_CHAR_FIRST_NAME (0x2A8Au)
#define CYBLE_UUID_CHAR_FIVE_ZONE_HEART_RATE_LIMITS (0x2A8Bu)
#define CYBLE_UUID_CHAR_GENDER (0x2A8Cu)
#define CYBLE_UUID_CHAR_HEART_RATE_MAX (0x2A8Du)
#define CYBLE_UUID_CHAR_HEIGHT (0x2A8Eu)
#define CYBLE_UUID_CHAR_HIP_CIRCUNFERENCE (0x2A8Fu)
#define CYBLE_UUID_CHAR_LAST_NAME (0x2A90u)
#define CYBLE_UUID_CHAR_MRH (0x2A91u) /* Maximum Recommended Heart Rate */
#define CYBLE_UUID_CHAR_RESTING_HEART_RATE (0x2A92u)
#define CYBLE_UUID_CHAR_STP (0x2A93u) /* Sport Type for Aerobic and Anaerobic Thresholds */
#define CYBLE_UUID_CHAR_THREE_ZONE_HEART_RATE_LIMITS (0x2A94u)
#define CYBLE_UUID_CHAR_TWO_ZONE_HEART_RATE_LIMIT (0x2A95u)
#define CYBLE_UUID_CHAR_VO2_MAX (0x2A96u)
#define CYBLE_UUID_CHAR_WAIST_CIRCUMFERENCE (0x2A97u)
#define CYBLE_UUID_CHAR_WEIGHT (0x2A98u)
#define CYBLE_UUID_CHAR_DATABASE_CHANGE_INCREMENT (0x2A99u)
#define CYBLE_UUID_CHAR_USER_INDEX (0x2A9Au)
#define CYBLE_UUID_CHAR_WEIGHT_MEASUREMENT (0x2A9Du)
#define CYBLE_UUID_CHAR_WEIGHT_SCALE_FEATURE (0x2A9Eu)
#define CYBLE_UUID_CHAR_USER_CONTROL_POINT (0x2A9Fu)
#define CYBLE_UUID_CHAR_MAGNETIC_FLUX_DENSITY_2D (0x2AA0u)
#define CYBLE_UUID_CHAR_MAGNETIC_FLUX_DENSITY_3D (0x2AA1u)
#define CYBLE_UUID_CHAR_LANGUAGE (0x2AA2u)
#define CYBLE_UUID_CHAR_BAR_PRESSURE_TREND (0x2AA3u)
/* Bond Management Characteristics defines */
#define CYBLE_UUID_BOND_MANAGEMENT_CONTROL_POINT (0x2AA4u)
#define CYBLE_UUID_BOND_MANAGEMENT_FEATURE (0x2AA5u)
/* CGM Characteristics defines */
#define CYBLE_UUID_CHAR_CGM_MEASUREMENT (0x2AA7u)
#define CYBLE_UUID_CHAR_CGM_FEATURE (0x2AA8u)
#define CYBLE_UUID_CHAR_CGM_STATUS (0x2AA9u)
#define CYBLE_UUID_CHAR_CGM_SESSION_START_TIME (0x2AAAu)
#define CYBLE_UUID_CHAR_CGM_SESSION_RUN_TIME (0x2AABu)
#define CYBLE_UUID_CHAR_CGM_SOCP (0x2AACu) /* CGM Specific Ops Control Point */
/* Pulse Oximeter Characteristics defines */
#define CYBLE_UUID_CHAR_POX_SPOT_CHK_MSRMT (0x2A5Eu)
#define CYBLE_UUID_CHAR_POX_CONTINUOUS_MSRMT (0x2A5Fu)
#define CYBLE_UUID_CHAR_POX_PULSATILE_EVENT (0x2A60u)
#define CYBLE_UUID_CHAR_POX_FEATURES (0x2A61u)
#define CYBLE_UUID_CHAR_POX_CONTROL_POINT (0x2A62u)
/* CPM Characteristics Measurements */
#define CYBLE_UUID_CHAR_CPM_MSRMT (0x2A63u)
#define CYBLE_UUID_CHAR_CPM_VECTOR (0x2A64u)
#define CYBLE_UUID_CHAR_CPM_FEATURE (0x2A65u)
#define CYBLE_UUID_CHAR_CPM_CNTRL_PNT (0x2A66u)


/* GATT Characteristic Properties bit field */
#define CYBLE_CHAR_PROP_BROADCAST (0x01u)
#define CYBLE_CHAR_PROP_READ (0x02u)
#define CYBLE_CHAR_PROP_WRITE_WITHOUT_RSP (0x04u) /* Write Without Response */
#define CYBLE_CHAR_PROP_WRITE (0x08u)
#define CYBLE_CHAR_PROP_NOTIFY (0x10u)
#define CYBLE_CHAR_PROP_INDICATE (0x20u)
#define CYBLE_CHAR_PROP_SIGNED_WRITE (0x40u) /* Authenticated Signed Writes */
#define CYBLE_CHAR_PROP_EXTENDED_PROPERTIES (0x80u)

/* Client Characteristic Configuration Descriptor values */
#define CYBLE_CCCD_DEFAULT (0x0000u)
#define CYBLE_CCCD_NOTIFICATION (0x0001u)
#define CYBLE_CCCD_INDICATION (0x0002u)
#define CYBLE_CCCD_LEN (0x02u)

/* Server Characteristic Configuration Descriptor values */
#define CYBLE_SCCD_DEFAULT (0x0000u)
#define CYBLE_SCCD_BROADCAST (0x0001u)
#define CYBLE_SCCD_LEN (0x02u)

/* Characteristic Presentation Format Descriptor values */
#define CYBLE_CPFD_BOOLEAN (0x01u)
#define CYBLE_CPFD_UINT2 (0x02u)
#define CYBLE_CPFD_UINT4 (0x03u)
#define CYBLE_CPFD_UINT8 (0x04u)
#define CYBLE_CPFD_UINT12 (0x05u)
#define CYBLE_CPFD_UINT16 (0x06u)
#define CYBLE_CPFD_UINT24 (0x07u)
#define CYBLE_CPFD_UINT32 (0x08u)
#define CYBLE_CPFD_UINT48 (0x09u)
#define CYBLE_CPFD_UINT64 (0x0au)
#define CYBLE_CPFD_UINT128 (0x0bu)
#define CYBLE_CPFD_INT8 (0x0cu)
#define CYBLE_CPFD_INT12 (0x0du)
#define CYBLE_CPFD_INT16 (0x0eu)
#define CYBLE_CPFD_INT24 (0x0fu)
#define CYBLE_CPFD_INT32 (0x10u)
#define CYBLE_CPFD_INT48 (0x11u)
#define CYBLE_CPFD_INT64 (0x12u)
#define CYBLE_CPFD_INT128 (0x13u)
#define CYBLE_CPFD_IEEE754_FP32 (0x14u)
#define CYBLE_CPFD_IEEE754_FP64 (0x15u)
#define CYBLE_CPFD_IEEE11073_SFLOAT16 (0x16u)
#define CYBLE_CPFD_IEEE11073_FLOAT32 (0x17u)
#define CYBLE_CPFD_IEEE20601_FORMAT (0x18u)
#define CYBLE_CPFD_UTF8_STRING (0x19u)
#define CYBLE_CPFD_UTF16_STRING (0x1au)
#define CYBLE_CPFD_OPAQUE_STRUCTURE (0x1bu)
#define CYBLE_CPFD_LEN (0x01u)

/* Characteristic Extended Properties Descriptor values */
#define CYBLE_CEPD_DEFAULT (0x0000u)
#define CYBLE_CEPD_RELIABLE_WRITE (0x0001u)
#define CYBLE_CEPD_WRITABLE_AUXILIARIES (0x0002u)
#define CYBLE_CEPD_LEN (0x02u)

#define CYBLE_ATTR_HANDLE_LEN (0x02u)
#define CYBLE_DB_ATTR_HANDLE_LEN (0x02u)

/* GATT Server Configuration values */
#define CYBLE_GATT_SER_CNFG_BROADCAST (0x0001u) /* Broadcasts enabled */
#define CYBLE_GATT_SER_CNFG_DEFAULT (0x0000u)

#define CYBLE_CHAR_EXT_PRPTS_DESCR_RLWR (0x0001u) /* Reliable Write enabled */
#define CYBLE_CHAR_EXT_PRPTS_DESCR_WRAUX (0x0002u) /* Writable Auxiliaries enabled */

/* PDU data length */
#define CYBLE_PDU_DATA_LEN_ZERO (0x00u)
#define CYBLE_PDU_DATA_LEN_ONE_BYTE (0x01u)
#define CYBLE_PDU_DATA_LEN_TWO_BYTES (0x02u)
#define CYBLE_PDU_DATA_LEN_THREE_BYTES (0x03u)
#define CYBLE_PDU_DATA_LEN_FOUR_BYTES (0x04u)
#define CYBLE_PDU_DATA_LEN_FIVE_BYTES (0x05u)
#define CYBLE_PDU_DATA_LEN_SIX_BYTES (0x06u)
#define CYBLE_PDU_DATA_LEN_SEVEN_BYTES (0x07u)
#define CYBLE_PDU_DATA_LEN_EIGHT_BYTES (0x08u)
#define CYBLE_PDU_DATA_LEN_NINE_BYTES (0x09u)


/***************************************
##Bluetooth Appearance values
***************************************/

#define CYBLE_APPEARANCE_UNKNOWN (0u) /* Unknown */
#define CYBLE_APPEARANCE_GENERIC_PHONE (64u) /* Generic Phone */
#define CYBLE_APPEARANCE_GENERIC_COMPUTER (128u) /* Generic Computer */
#define CYBLE_APPEARANCE_GENERIC_WATCH (192u) /* Generic Watch */
#define CYBLE_APPEARANCE_WATCH_SPORTS_WATCH (193u) /* Watch: Sports Watch */
#define CYBLE_APPEARANCE_GENERIC_CLOCK (256u) /* Generic Clock */
#define CYBLE_APPEARANCE_GENERIC_DISPLAY (320u) /* Generic Display */
#define CYBLE_APPEARANCE_GENERIC_REMOTE_CONTROL (384u) /* Generic Remote Control */
#define CYBLE_APPEARANCE_GENERIC_EYE_GLASSES (448u) /* Generic Eye-glasses */
#define CYBLE_APPEARANCE_GENERIC_TAG (512u) /* Generic Tag */
#define CYBLE_APPEARANCE_GENERIC_KEYRING (576u) /* Generic Keyring */
#define CYBLE_APPEARANCE_GENERIC_MEDIA_PLAYER (640u) /* Generic Media Player */
#define CYBLE_APPEARANCE_GENERIC_BARCODE_SCANNER (704u) /* Generic Barcode Scanner */
#define CYBLE_APPEARANCE_GENERIC_THERMOMETER (768u) /* Generic Thermometer */
#define CYBLE_APPEARANCE_THERMOMETER_EAR (769u) /* Thermometer: Ear */
#define CYBLE_APPEARANCE_GENERIC_HEART_RATE_SENSOR (832u) /* Generic Heart rate Sensor */
#define CYBLE_APPEARANCE_HEART_RATE_SENSOR_HEART_RATE_BELT (833u) /* Heart Rate Sensor: Heart Rate Belt */
#define CYBLE_APPEARANCE_GENERIC_BLOOD_PRESSURE (896u) /* Generic Glucose */
#define CYBLE_APPEARANCE_BLOOD_PRESSURE_ARM (897u) /* Glucose: Arm */
#define CYBLE_APPEARANCE_BLOOD_PRESSURE_WRIST (898u) /* Glucose: Wrist */
#define CYBLE_APPEARANCE_GENERIC_HID (960u) /* Human Interface Device (HID) */
#define CYBLE_APPEARANCE_HIDS_KEYBOARD (961u) /* Keyboard (HID Subtype) */
#define CYBLE_APPEARANCE_HIDS_MOUSE (962u) /* Mouse (HID Subtype) */
#define CYBLE_APPEARANCE_HIDS_JOYSTICK (963u) /* Joystiq (HID Subtype) */
#define CYBLE_APPEARANCE_HIDS_GAMEPAD (964u) /* Gamepad (HID Subtype) */
#define CYBLE_APPEARANCE_HIDS_DIGITIZERSUBTYPE (965u) /* Digitizer Tablet (HID Subtype) */
#define CYBLE_APPEARANCE_HIDS_CARD_READER (966u) /* Card Reader (HID Subtype) */
#define CYBLE_APPEARANCE_HIDS_DIGITAL_PEN (967u) /* Digital Pen (HID Subtype) */
#define CYBLE_APPEARANCE_HIDS_BARCODE (968u) /* Barcode Scanner (HID Subtype) */
#define CYBLE_APPEARANCE_GENERIC_GLUCOSE_METER (1024u) /* Generic Glucose Meter */
#define CYBLE_APPEARANCE_GENERIC_RUNNING_WALKING_SENSOR (1088u) /* Generic Running Walking Sensor */
#define CYBLE_APPEARANCE_RUNNING_WALKING_SENSOR_IN_SHOE (1089u) /* Running Walking Sensor: In-Shoe */
#define CYBLE_APPEARANCE_RUNNING_WALKING_SENSOR_ON_SHOE (1090u) /* Running Walking Sensor: On-Shoe */
#define CYBLE_APPEARANCE_RUNNING_WALKING_SENSOR_ON_HIP (1091u) /* Running Walking Sensor: On-Hip */
#define CYBLE_APPEARANCE_GENERIC_CYCLING (1152u) /* Generic Cycling */
#define CYBLE_APPEARANCE_CYCLING_CYCLING_COMPUTER (1153u) /* Cycling: Cycling Computer */
#define CYBLE_APPEARANCE_CYCLING_SPEED_SENSOR (1154u) /* Cycling: Speed Sensor */
#define CYBLE_APPEARANCE_CYCLING_CADENCE_SENSOR (1155u) /* Cycling: Cadence Sensor */
#define CYBLE_APPEARANCE_CYCLING_POWER_SENSOR (1156u) /* Cycling: Power Sensor */
#define CYBLE_APPEARANCE_CYCLING_SPEED_CADENCE_SENSOR (1157u) /* Cycling: Speed and Cadence Sensor */


/***************************************
##SMP Key size constants
***************************************/

#define CYBLE_SMP_USER_PASSKEY_SIZE (6u) /* User Passkey size */
#define CYBLE_SMP_IDADDR_SIZE (7u) /* Identity Address data size */
#define CYBLE_SMP_IRK_SIZE (16u) /* Identity Resolving Key size */
#define CYBLE_SMP_CSRK_SIZE (16u) /* Connection Signature Resolving key size */
#define CYBLE_SMP_LTK_SIZE (16u) /* Long Term Key Size size */
#define CYBLE_SMP_EDIV_SIZE (2u) /* Encrypted Diversifier size */
#define CYBLE_SMP_RAND_24B_SIZE (3u) /* 24 Bit Random Number size */
#define CYBLE_SMP_RAND_64B_SIZE (8u) /* 64 Bit Random Number size */
#define CYBLE_SMP_RAND_128B_SIZE (16u) /* 128 Bit Random Number size */

#define CYBLE_GATT_16_BIT_UUID_LO_IDX (3u)
#define CYBLE_GATT_16_BIT_UUID_HI_IDX (2u)

#define CYBLE_8_BIT (8u)
#define CYBLE_TWO_BYTES_SHIFT (2u)
#define CYBLE_NULL_CHARCTER ((char8) (0))


#if (CYBLE_GATT_ROLE_SERVER)

#define CYBLE_GAP_DEVICE_NAME_INDEX (0x0002u)

/* Characteristic value offsets */
#define CYBLE_CHAR_LEN_HI_OFFSET (1u)
#define CYBLE_CHAR_LEN_LO_OFFSET (0u)
#define CYBLE_CHAR_VALUE_OFFSET (0x02u)

#define CYBLE_GATT_IMPL_PERMISSION_MASK (0xFFFF0000ul)
#define CYBLE_GATT_CHAR_PERMISSION_MASK (0x0000FF00ul)
#define CYBLE_GATT_ATTR_PERMISSION_MASK (0x000000FFul)

#define CYBLE_GATT_ATT_TYPE_UUIT_128 (0x00010000ul)
#define CYBLE_GATT_ATT_VALUE_UUIT_128 (0x00020000ul)

#define CYBLE_GATT_DB_SUPPORT_128_BIT_UUID (GATT_DB_SUPPORT_128_BIT_UUID)

#define CYBLE_DB_TYPE_SERVICE (0x00u)
#define CYBLE_DB_TYPE_OTHER (0x01u)

/* Implementation specific permission: GATT DB record type */
#define CYBLE_DB_RECORD_MASK (0x001C0000ul)
#define CYBLE_DB_SERVICE_RECORD (0x00000000ul)
#define CYBLE_DB_INCLUDE_RECORD (0x00040000ul)
#define CYBLE_DB_CHARACTERISTIC_RECORD (0x00080000ul)
#define CYBLE_DB_CHAR_VALUE_RECORD (0x000C0000ul)
#define CYBLE_DB_CHAR_DESCRIPTOR_RECORD (0x00100000ul)

#endif /* CYBLE_GATT_ROLE_SERVER */

#if (CYBLE_GATT_ROLE_CLIENT)
#define CYBLE_GATT_EXECUTE_WRITE (0x01u)
#define CYBLE_GATT_CANCEL_WRITE (0x00u)
#endif /* CYBLE_GATT_ROLE_CLIENT */


/***************************************
##Database macro
***************************************/

/* Get permission field of attribute handle */
#define CYBLE_GATT_DB_GET_ATTR_PERMISSION(handle)\
(uint32)(cyBle_gattDB[(handle)-1u].permission)

/* Compare permission field of attribute entry to
check desired permission property
*/
#define CYBLE_GATT_DB_ATTR_CHECK_PRPTY(handle,prpty)\
((0ul) != (CYBLE_GATT_DB_GET_ATTR_PERMISSION(handle) & (prpty)))

/* Macro to set generic value of attribute */
#define CYBLE_GATT_DB_ATTR_SET_GEN_VALUE(handle,src,length)\
(void) memcpy\
(\
(void *)(cyBle_gattDB[(handle)-1u].attValue.attFormatValue.attGenericValLen->attGenericVal), \
(const void *)(src),\
(uint16) (length)\
)

/* Macro to get generic value of attribute */
#define CYBLE_GATT_DB_ATTR_GET_GEN_VALUE(dst,handle,length)\
(void) memcpy\
(\
(void *)(dst),\
(const void *)(cyBle_gattDB[(handle)-1u].attValue.attFormatValue.attGenericValLen->attGenericVal), \
(uint16)(length)\
)

/* Macro to get start handle of attribute
Start handle is only meaningful for characteristic and
service declaration */
#define CYBLE_GATT_DB_GET_START_HANDLE(handle)\
cyBle_gattDB[(handle)-1u].connHandle

/* Macro to get end handle of attribute
Start handle is only meaningful for characteristic and
service declaration */
#define CYBLE_GATT_DB_GET_END_HANDLE(handle)\
cyBle_gattDB[(handle)-1u].attEndHandle


/* Macro to get attribute type (UUID) for handle */
#define CYBLE_GATT_DB_GET_UUID(handle)\
cyBle_gattDB[(handle)-1u].attType

/* Macro to get attribute value UUID for handle */
#define CYBLE_GATT_DB_GET_ATTR_VALUE_UUID(handle)\
cyBle_gattDB[(handle)-1u].attValue.attValueUuid

/* Macro to get actual length of characteristic generic value */
#define CYBLE_GATT_DB_ATTR_GET_ATTR_GEN_LEN(handle)\
cyBle_gattDB[(handle)-1u].attValue.attFormatValue.attGenericValLen->actualLength

/* Macro to set actual length of characteristic generic value */
#define CYBLE_GATT_DB_ATTR_SET_ATTR_GEN_LEN(handle, value)\
do{ \
cyBle_gattDB[(handle)-1u].attValue.attFormatValue.attGenericValLen->actualLength = (value); \
}while(0)

/* Macro to get maximum length of characteristic generic value */
#define CYBLE_GATT_DB_ATTR_GET_ATTR_GEN_MAX_LEN(handle)\
cyBle_gattDB[(handle)-1u].attValue.attFormatValue.maxAttrLength

/* Macro to get pointer to characteristic generic value */
#define CYBLE_GATT_DB_ATTR_GET_ATTR_GEN_PTR(handle)\
(uint8 *)(cyBle_gattDB[(handle)-1u].attValue.attFormatValue.attGenericValLen->attGenericVal)
/* Checks Notification properties in permission field of attribute entry */
#define CYBLE_IS_NOTIFICATION_SUPPORTED(handle)\
CYBLE_GATT_DB_ATTR_CHECK_PRPTY(handle, CYBLE_GATT_DB_CH_PROP_NOTIFY)

/* Checks Notification bit in attribute value referenced by pointer */
#define CYBLE_IS_NOTIFICATION_ENABLED_IN_PTR(valPtr)\
((0u) != (CYBLE_CCCD_NOTIFICATION & CyBle_Get16ByPtr(valPtr)))

/* Checks Notification bit in attribute value referenced by handle */
#define CYBLE_IS_NOTIFICATION_ENABLED(handle)\
CYBLE_IS_NOTIFICATION_ENABLED_IN_PTR(CYBLE_GATT_DB_ATTR_GET_ATTR_GEN_PTR(handle))
/* Checks Indication properties in permission field of attribute entry */
#define CYBLE_IS_INDICATION_SUPPORTED(handle)\
CYBLE_GATT_DB_ATTR_CHECK_PRPTY(handle, CYBLE_GATT_DB_CH_PROP_INDICATE)

/* Checks Indication bit in attribute value referenced by pointer */
#define CYBLE_IS_INDICATION_ENABLED_IN_PTR(valPtr)\
((0u) != (CYBLE_CCCD_INDICATION & CyBle_Get16ByPtr(valPtr)))
/* Checks Indication bit in attribute value referenced by handle */
#define CYBLE_IS_INDICATION_ENABLED(handle)\
CYBLE_IS_INDICATION_ENABLED_IN_PTR(CYBLE_GATT_DB_ATTR_GET_ATTR_GEN_PTR(handle))
/* Checks Broadcast properties in permission field of attribute entry */
#define CYBLE_IS_BROADCAST_SUPPORTED(handle)\
CYBLE_GATT_DB_ATTR_CHECK_PRPTY(handle, CYBLE_GATT_DB_CH_PROP_BROADCAST)

/* Checks Broadcast bit in attribute value referenced by pointer */
#define CYBLE_IS_BROADCAST_ENABLED_IN_PTR(valPtr)\
((0u) != (CYBLE_SCCD_BROADCAST & CyBle_Get16ByPtr(valPtr)))
/* Checks Broadcast bit in attribute value referenced by handle */
#define CYBLE_IS_BROADCAST_ENABLED(handle)\
CYBLE_IS_BROADCAST_ENABLED_IN_PTR(CYBLE_GATT_DB_ATTR_GET_ATTR_GEN_PTR(handle))

/* Checks Reliable Write bit in attribute value referenced by pointer */
#define CYBLE_IS_RELIABLE_WRITE_ENABLED_IN_PTR(valPtr)\
((0u) != (CYBLE_CEPD_RELIABLE_WRITE & CyBle_Get16ByPtr(valPtr)))
/* Checks Reliable Write bit in attribute value referenced by handle */
#define CYBLE_IS_RELIABLE_WRITE_ENABLED(handle)\
CYBLE_IS_RELIABLE_WRITE_ENABLED_IN_PTR(CYBLE_GATT_DB_ATTR_GET_ATTR_GEN_PTR(handle))


#endif /* CY_BLE_CYBLE_GATT_H */


/* [] END OF FILE */
(47-47/102)