Initial commit

Dependencies:   FastPWM

Revision:
0:bb348c97df44
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-dev-master/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F439xI/TARGET_MODULE_UBLOX_ODIN_W2/sdk/ublox-odin-w2-drivers/cb_gatt.h	Wed Sep 16 01:11:49 2020 +0000
@@ -0,0 +1,504 @@
+/*
+ *---------------------------------------------------------------------------
+ * Copyright (c) 2016, u-blox Malmö, All Rights Reserved
+ * SPDX-License-Identifier: LicenseRef-PBL
+ *
+ * This file and the related binary are licensed under the
+ * Permissive Binary License, Version 1.0 (the "License");
+ * you may not use these files except in compliance with the License.
+ *
+ * You may obtain a copy of the License here:
+ * LICENSE-permissive-binary-license-1.0.txt and at
+ * https://www.mbed.com/licenses/PBL-1.0
+ *
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Component   : GATT
+ * File        : cb_gatt.h
+ *
+ * Description : Definitions and types for GATT(Generic Attribute Profile) 
+ *               that are in common for both client and server.
+ *
+ *-------------------------------------------------------------------------*/
+
+/**
+ * @file cb_gatt.h
+ *
+ * @brief Definitions and types for GATT(Generic Attribute Profile) 
+ * that are in common for both client and server.
+ */
+
+#ifndef _CB_GATT_H_
+#define _CB_GATT_H_
+
+#include "bt_types.h"
+
+/*===========================================================================
+ * DEFINES
+ *=========================================================================*/
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define cbGATT_OK                        (0)
+#define cbGATT_ERROR                    (-1)
+#define cbGATT_ERROR_WRONG_STATE        (-2)
+#define cbGATT_ERROR_WRONG_HANDLE       (-3)
+#define cbGATT_ERROR_WRONG_PARAMETERS   (-4)
+
+// This should be the same as in ATT
+#define cbGATT_DEFAULT_MTU_LE           23
+
+#define cbGATT_GET_MAX_READ_MULTIPLE_MTU(mtu)               (mtu-1)
+#define cbGATT_GET_MAX_WRITE_CHARACTERISTIC_MTU(mtu)        (mtu-3)
+#define cbGATT_GET_MAX_WRITE_SIGNED_CHARACTERISTIC_MTU(mtu) (mtu-13)
+#define cbGATT_GET_MAX_NOTIFICATION_MTU(mtu)                (mtu-3)
+#define cbGATT_GET_MAX_INDICATION_MTU(mtu)                  (mtu-3)
+
+#define cbGATT_INVALID_ATTR_HANDLE      0x0000
+#define cbGATT_MIN_ATTR_HANDLE          0x0001
+#define cbGATT_MAX_ATTR_HANDLE          0xFFFF
+
+#define cbGATT_PROP_BCST        0x01 // Broadcast
+#define cbGATT_PROP_RD          0x02 // Readable
+#define cbGATT_PROP_WR_NO_RSP   0x04 // Write with no response
+#define cbGATT_PROP_WR          0x08 // Writable
+#define cbGATT_PROP_NOT         0x10 // Notify
+#define cbGATT_PROP_IND         0x20 // Indicate
+#define cbGATT_PROP_SIGN_WR     0x40 // Authenticated signed write
+#define cbGATT_PROP_EXT         0x80 // extended property
+
+#define cbGATT_PROP_EXT_REL_WR  0x0001 // Reliable write
+#define cbGATT_PROP_EXT_WR_AUX  0x0002 // auxiliary write
+#define cbGATT_CLIENT_CFG_NONE  0x0000 // Client configuration disabled
+#define cbGATT_CLIENT_CFG_NOT   0x0001 // Client notification configuration
+#define cbGATT_CLIENT_CFG_IND   0x0002 // Server indication configuration
+#define cbGATT_SERVER_CFG_BCST  0x0001 // Server broadcast configuration
+
+#define cbGATT_GET_BROADCAST_PROP(prop)             ((0x01 & prop) == 0x01)
+#define cbGATT_GET_READ_PROP(prop)                  ((0x02 & prop) == 0x02)
+#define cbGATT_GET_WRITE_WITHOUT_RSP_PROP(prop)     ((0x04 & prop) == 0x04)
+#define cbGATT_GET_WRITE_PROP(prop)                 ((0x08 & prop) == 0x08)
+#define cbGATT_GET_NOTIFY_PROP(prop)                ((0x10 & prop) == 0x10)
+#define cbGATT_GET_INDICATE_PROP(prop)              ((0x20 & prop) == 0x20)
+#define cbGATT_GET_AUTH_SIGNED_WRITES_PROP(prop)    ((0x40 & prop) == 0x40)
+#define cbGATT_GET_EXTENDED_PROP(prop)              ((0x80 & prop) == 0x80)
+
+#define cbGATT_GET_PROP_EXT_REL_WR(prop)            ((0x0001 & prop) == 0x0001)
+#define cbGATT_GET_PROP_EXT_WR_AUX(prop)            ((0x0002 & prop) == 0x0002)
+#define cbGATT_GET_CLIENT_CFG_NOT(cfg)              ((0x0001 & cfg)  == 0x0001)
+#define cbGATT_GET_CLIENT_CFG_IND(cfg)              ((0x0002 & cfg)  == 0x0002)
+#define cbGATT_GET_SERVER_CFG_BCST(cfg)             ((0x0001 & cfg)  == 0x0001)
+
+#define cbGATT_SET_BROADCAST_PROP(prop)             (prop = prop | 0x01)
+#define cbGATT_SET_READ_PROPERTY(prop)              (prop = prop | 0x02)
+#define cbGATT_SET_WRITE_WITHOUT_RSP_PROP(prop)     (prop = prop | 0x04)
+#define cbGATT_SET_WRITE_PROP(prop)                 (prop = prop | 0x08)
+#define cbGATT_SET_NOTIFY_PROP(prop)                (prop = prop | 0x10)
+#define cbGATT_SET_INDICATE_PROP(prop)              (prop = prop | 0x20)
+#define cbGATT_SET_AUTH_SIGNED_WRITES_PROP(prop)    (prop = prop | 0x40)
+#define cbGATT_SET_EXTENDED_PROP(prop)              (prop = prop | 0x80)
+
+#define cbGATT_SET_PROP_EXT_REL_WR(prop)            (prop = prop | 0x0001)
+#define cbGATT_SET_PROP_EXT_WR_AUX(prop)            (prop = prop | 0x0002)
+#define cbGATT_SET_CLIENT_CFG_NOT(cfg)              (cfg = cfg | 0x0001)
+#define cbGATT_SET_CLIENT_CFG_IND(cfg)              (cfg = cfg | 0x0002)
+#define cbGATT_SET_SERVER_CFG_BCST(cfg)             (cfg = cfg | 0x0001)
+
+// Below specification level as of 2011-09-13
+#define cbGATT_SERVICE_GENERIC_ACCESS               0x1800    // 0.5
+#define cbGATT_SERVICE_GENERIC_ATTRIBUTE            0x1801    // 0.5
+#define cbGATT_SERVICE_IMMEDIATE_ALERT              0x1802    // Adopted
+#define cbGATT_SERVICE_LINK_LOSS                    0x1803    // Adopted
+#define cbGATT_SERVICE_TX_POWER                     0x1804    // Adopted
+#define cbGATT_SERVICE_CURRENT_TIME                 0x1805    // Prototype
+#define cbGATT_SERVICE_REFERENCE_TIME_UPDATE        0x1806    // Prototype
+#define cbGATT_SERVICE_NEXT_DST_CHANGE              0x1807    // Prototype
+#define cbGATT_SERVICE_HEALTH_THERMOMETER           0x1809    // Adopted
+#define cbGATT_SERVICE_DEVICE_INFORMATION           0x180A    // Adopted
+#define cbGATT_SERVICE_NETWORK_AVAILABILITY         0x180B    // 0.9
+#define cbGATT_SERVICE_WATCHDOG                     0x180C    // 0.5
+#define cbGATT_SERVICE_HEART_RATE                   0x180D    // Adopted
+#define cbGATT_SERVICE_PHONE_ALERT_STATUS           0x180E    // Prototype
+#define cbGATT_SERVICE_BATTERY_SERVICE              0x180F    // Prototype
+#define cbGATT_SERVICE_BLOOD_PRESSURE               0x1810    // 0.9
+#define cbGATT_SERVICE_ALERT_NOTIFICATION           0x1811    // Prototype
+#define cbGATT_SERVICE_HUMAN_INTERFACE_DEVICE       0x1812    // 0.5
+#define cbGATT_SERVICE_SCAN_PARAMETER               0x1813    // 0.5
+
+#define cbGATT_PRIMARY_SERVICE_DECL                 0x2800
+#define cbGATT_SECONDARY_SERVICE_DECL               0x2801
+#define cbGATT_INCLUDE_DECL                         0x2802
+#define cbGATT_CHAR_DECL                            0x2803
+#define cbGATT_CHAR_EXT_PROP                        0x2900
+#define cbGATT_CHAR_USER_DESC                       0x2901
+#define cbGATT_CLIENT_CHAR_CONFIG                   0x2902
+#define cbGATT_SERVER_CHAR_CONFIG                   0x2903
+#define cbGATT_CHAR_FORMAT                          0x2904
+#define cbGATT_CHAR_AGGR_FORMAT                     0x2905
+
+#define cbGATT_CHAR_GAP_DEVICE_NAME                 0x2A00    // Adopted
+#define cbGATT_CHAR_GAP_APPEARANCE                  0x2A01    // Adopted
+#define cbGATT_CHAR_GAP_PERIP_PRIV                  0x2A02    // Adopted
+#define cbGATT_CHAR_GAP_RECONN_ADDR                 0x2A03    // Adopted
+#define cbGATT_CHAR_GAP_CONN_PARAMS                 0x2A04    // Adopted
+#define cbGATT_CHAR_GATT_SVC_CHANGED                0x2A05    // Adopted
+#define cbGATT_CHAR_ALERT_LEVEL                     0x2A06    // Adopted
+#define cbGATT_CHAR_TX_POWER_LEVEL                  0x2A07    // Adopted
+#define cbGATT_CHAR_DATE_TIME                       0x2A08    // Adopted
+#define cbGATT_CHAR_DAY_OF_WEEK                     0x2A09    // Prototype
+#define cbGATT_CHAR_DAY_DATE_TIME                   0x2A0A    // Prototype
+#define cbGATT_CHAR_EXACT_TIME_100                  0x2A0B    // 0.9
+#define cbGATT_CHAR_EXACT_TIME_256                  0x2A0C    // Prototype
+#define cbGATT_CHAR_DST_OFFSET                      0x2A0D    // Prototype
+#define cbGATT_CHAR_TIME_ZONE                       0x2A0E    // Prototype
+#define cbGATT_CHAR_LOCAL_TIME_INFORMATION          0x2A0F    // Prototype
+#define cbGATT_CHAR_SECONDARY_TIME_ZONE             0x2A10    // 0.9
+#define cbGATT_CHAR_TIME_WITH_DST                   0x2A11    // Prototype
+#define cbGATT_CHAR_TIME_ACCURACY                   0x2A12    // Prototype
+#define cbGATT_CHAR_TIME_SOURCE                     0x2A13    // Prototype
+#define cbGATT_CHAR_REFERENCE_TIME_INFORMATION      0x2A14    // Prototype
+#define cbGATT_CHAR_TIME_BROADCAST                  0x2A15    // 0.9
+#define cbGATT_CHAR_TIME_UPDATE_CONTROL_POINT       0x2A16    // Prototype
+#define cbGATT_CHAR_TIME_UPDATE_STATE               0x2A17    // Prototype
+#define cbGATT_CHAR_BOOLEAN                         0x2A18    // 0.9
+#define cbGATT_CHAR_BATTERY_LEVEL                   0x2A19    // 0.9
+#define cbGATT_CHAR_BATTERY_POWER_STATE             0x2A1A    // 0.9
+#define cbGATT_CHAR_BATTERY_LEVEL_STATE             0x2A1B    // 0.9
+#define cbGATT_CHAR_TEMP_MEASUREMENT                0x2A1C    // Adopted
+#define cbGATT_CHAR_TEMP_TYPE                       0x2A1D    // Adopted
+#define cbGATT_CHAR_INTERMEDIATE_TEMP               0x2A1E    // Adopted
+#define cbGATT_CHAR_TEMP_CELSIUS                    0x2A1F    // 0.9
+#define cbGATT_CHAR_TEMP_FAHRENHEIT                 0x2A20    // 0.9
+#define cbGATT_CHAR_MEASUREMENT_INTERVAL            0x2A21    // Adopted
+#define cbGATT_CHAR_SYSTEM_ID                       0x2A23    // Adopted
+#define cbGATT_CHAR_MODEL_NUMBER_STRING             0x2A24    // Adopted
+#define cbGATT_CHAR_SERIAL_NUMBER_STRING            0x2A25    // Adopted
+#define cbGATT_CHAR_FIRMWARE_REV_STRING             0x2A26    // Adopted
+#define cbGATT_CHAR_HARDWARE_REV_STRING             0x2A27    // Adopted
+#define cbGATT_CHAR_SOFTWARE_REV_STRING             0x2A28    // Adopted
+#define cbGATT_CHAR_MANUFACTURER_NAME_STRING        0x2A29    // Adopted
+#define cbGATT_CHAR_IEEE_REG_CERT_DATA_LIST         0x2A2A    // Adopted
+#define cbGATT_CHAR_CURRENT_TIME                    0x2A2B    // Prototype
+#define cbGATT_CHAR_ELEVATION                       0x2A2C    // 0.5
+#define cbGATT_CHAR_LATITUDE                        0x2A2D    // 0.5
+#define cbGATT_CHAR_LONGITUDE                       0x2A2E    // 0.5
+#define cbGATT_CHAR_POSITION_2D                     0x2A2F    // 0.5
+#define cbGATT_CHAR_POSITION_3D                     0x2A30    // 0.5
+#define cbGATT_CHAR_VENDOR_ID_V1_1                  0x2A31    // 0.5
+#define cbGATT_CHAR_PRODUCT_ID                      0x2A32    // 0.5
+#define cbGATT_CHAR_HID_VERSION                     0x2A33    // 0.5
+#define cbGATT_CHAR_VENDOR_ID_SOURCE                0x2A34    // 0.5
+#define cbGATT_CHAR_BLOOD_PRESSURE_MEASUREMENT      0x2A35    // 0.9
+#define cbGATT_CHAR_INTERMEDIATE_BLOOD_PRESSURE     0x2A36    // 0.9
+#define cbGATT_CHAR_HEART_RATE_MEASUREMENT          0x2A37    // Adopted
+#define cbGATT_CHAR_BODY_SENSOR_LOCATION            0x2A38    // Adopted
+#define cbGATT_CHAR_HEART_RATE_CONTROL_POINT        0x2A39    // Adopted
+#define cbGATT_CHAR_REMOVABLE                       0x2A3A    // 0.5
+#define cbGATT_CHAR_SERVICE_REQUIRED                0x2A3B    // 0.9
+#define cbGATT_CHAR_SCIENTIFIC_TEMP_CELSIUS         0x2A3C    // 0.9
+#define cbGATT_CHAR_STRING                          0x2A3D    // 0.9
+#define cbGATT_CHAR_NETWORK_AVAILABILITY            0x2A3E    // 0.9
+#define cbGATT_CHAR_ALERT_STATUS                    0x2A3F    // Prototype
+#define cbGATT_CHAR_RINGER_CONTROL_POINT            0x2A40    // Prototype
+#define cbGATT_CHAR_RINGER_SETTING                  0x2A41    // Prototype
+#define cbGATT_CHAR_ALERT_CATEGORY_ID_BIT_MASK      0x2A42    // 0.9
+#define cbGATT_CHAR_ALERT_CATEGORY_ID               0x2A43    // 0.9
+#define cbGATT_CHAR_ALERT_NOTIF_CONTROL_POINT       0x2A44    // 0.9
+#define cbGATT_CHAR_UNREAD_ALERT_STATUS             0x2A45    // 0.9
+#define cbGATT_CHAR_NEW_ALERT                       0x2A46    // 0.9
+#define cbGATT_CHAR_SUPPORTED_NEW_ALERT_CATEGORY    0x2A47    // 0.9
+#define cbGATT_CHAR_SUPPORTED_UNREAD_ALERT_CATEGORY 0x2A48    // 0.9
+#define cbGATT_CHAR_BLOOD_PRESSURE_FEATURE          0x2A49    // 0.9
+
+/*==============================================================================
+ * TYPES
+ *==============================================================================
+ */
+
+typedef enum
+{
+    cbGATT_WRITE_METHOD_WITH_RSP,
+    cbGATT_WRITE_METHOD_NO_RSP,
+    cbGATT_WRITE_METHOD_SIGN,
+    cbGATT_WRITE_METHOD_RELIABLE_PREPARE,
+} cbGATT_WriteMethod;
+
+typedef enum
+{
+    cbGATT_UNIT_UNITLESS                                                  = 0x2700,
+    cbGATT_UNIT_LENGTH_METRE                                              = 0x2701,
+    cbGATT_UNIT_MASS_KILOGRAM                                             = 0x2702,
+    cbGATT_UNIT_TIME_SECOND                                               = 0x2703,
+    cbGATT_UNIT_ELECTRIC_CURRENT_AMPERE                                   = 0x2704,
+    cbGATT_UNIT_THERMODYNAMIC_TEMPERATURE_KELVIN                          = 0x2705,
+    cbGATT_UNIT_AMOUNT_OF_SUBSTANCE_MOLE                                  = 0x2706,
+    cbGATT_UNIT_LUMINOUS_INTENSITY_CANDELA                                = 0x2707,
+    cbGATT_UNIT_AREA_SQUARE_METRES                                        = 0x2710,
+    cbGATT_UNIT_VOLUME_CUBIC_METRES                                       = 0x2711,
+    cbGATT_UNIT_VELOCITY_METRES_PER_SECOND                                = 0x2712,
+    cbGATT_UNIT_ACCELERATION_METRES_PER_SECOND_SQUARED                    = 0x2713,
+    cbGATT_UNIT_WAVENUMBER_RECIPROCAL_METRE                               = 0x2714,
+    cbGATT_UNIT_DENSITY_KILOGRAM_PER_CUBIC_METRE                          = 0x2715,
+    cbGATT_UNIT_SURFACE_DENSITY_KILOGRAM_PER_SQUARE_METRE                 = 0x2716,
+    cbGATT_UNIT_SPECIFIC_VOLUME_CUBIC_METRE_PER_KILOGRAM                  = 0x2717,
+    cbGATT_UNIT_CURRENT_DENSITY_AMPERE_PER_SQUARE_METRE                   = 0x2718,
+    cbGATT_UNIT_MAGNETIC_FIELD_STRENGTH_AMPERE_PER_METRE                  = 0x2719,
+    cbGATT_UNIT_AMOUNT_CONCENTRATION_MOLE_PER_CUBIC_METRE                 = 0x271A,
+    cbGATT_UNIT_MASS_CONCENTRATION_KILOGRAM_PER_CUBIC_METRE               = 0x271B,
+    cbGATT_UNIT_LUMINANCE_CANDELA_PER_SQUARE_METRE                        = 0x271C,
+    cbGATT_UNIT_REFRACTIVE_INDEX                                          = 0x271D,
+    cbGATT_UNIT_RELATIVE_PERMEABILITY                                     = 0x271E,
+    cbGATT_UNIT_PLANE_ANGLE_RADIAN                                        = 0x2720,
+    cbGATT_UNIT_SOLID_ANGLE_STERADIAN                                     = 0x2721,
+    cbGATT_UNIT_FREQUENCY_HERTZ                                           = 0x2722,
+    cbGATT_UNIT_FORCE_NEWTON                                              = 0x2723,
+    cbGATT_UNIT_PRESSURE_PASCAL                                           = 0x2724,
+    cbGATT_UNIT_ENERGY_JOULE                                              = 0x2725,
+    cbGATT_UNIT_POWER_WATT                                                = 0x2726,
+    cbGATT_UNIT_ELECTRIC_CHARGE_COULOMB                                   = 0x2727,
+    cbGATT_UNIT_ELECTRIC_POTENTIAL_DIFFERENCE_VOLT                        = 0x2728,
+    cbGATT_UNIT_CAPACITANCE_FARAD                                         = 0x2729,
+    cbGATT_UNIT_ELECTRIC_RESISTANCE_OHM                                   = 0x272A,
+    cbGATT_UNIT_ELECTRIC_CONDUCTANCE_SIEMENS                              = 0x272B,
+    cbGATT_UNIT_MAGNETIC_FLEX_WEBER                                       = 0x272C,
+    cbGATT_UNIT_MAGNETIC_FLEX_DENSITY_TESLA                               = 0x272D,
+    cbGATT_UNIT_INDUCTANCE_HENRY                                          = 0x272E,
+    cbGATT_UNIT_THERMODYNAMIC_TEMPERATURE_DEGREE_CELSIUS                  = 0x272F,
+    cbGATT_UNIT_LUMINOUS_FLUX_LUMEN                                       = 0x2730,
+    cbGATT_UNIT_ILLUMINANCE_LUX                                           = 0x2731,
+    cbGATT_UNIT_ACTIVITY_REFERRED_TO_A_RADIONUCLIDE_BECQUEREL             = 0x2732,
+    cbGATT_UNIT_ABSORBED_DOSE_GRAY                                        = 0x2733,
+    cbGATT_UNIT_DOSE_EQUIVALENT_SIEVERT                                   = 0x2734,
+    cbGATT_UNIT_CATALYTIC_ACTIVITY_KATAL                                  = 0x2735,
+    cbGATT_UNIT_DYNAMIC_VISCOSITY_PASCAL_SECOND                           = 0x2740,
+    cbGATT_UNIT_MOMENT_OF_FORCE_NEWTON_METRE                              = 0x2741,
+    cbGATT_UNIT_SURFACE_TENSION_NEWTON_PER_METRE                          = 0x2742,
+    cbGATT_UNIT_ANGULAR_VELOCITY_RADIAN_PER_SECOND                        = 0x2743,
+    cbGATT_UNIT_ANGULAR_ACCELERATION_RADIAN_PER_SECOND_SQUARED            = 0x2744,
+    cbGATT_UNIT_HEAT_FLUX_DENSITY_WATT_PER_SQUARE_METRE                   = 0x2745,
+    cbGATT_UNIT_HEAT_CAPACITY_JOULE_PER_KELVIN                            = 0x2746,
+    cbGATT_UNIT_SPECIFIC_HEAT_CAPACITY_JOULE_PER_KILOGRAM_KELVIN          = 0x2747,
+    cbGATT_UNIT_SPECIFIC_ENERGY_JOULE_PER_KILOGRAM                        = 0x2748,
+    cbGATT_UNIT_THERMAL_CONDUCTIVITY_WATT_PER_METRE_KELVIN                = 0x2749,
+    cbGATT_UNIT_ENERGY_DENSITY_JOULE_PER_CUBIC_METRE                      = 0x274A,
+    cbGATT_UNIT_ELECTRIC_FIELD_STRENGTH_VOLT_PER_METRE                    = 0x274B,
+    cbGATT_UNIT_ELECTRIC_CHARGE_DENSITY_COULOMB_PER_CUBIC_METRE           = 0x274C,
+    cbGATT_UNIT_SURFACE_CHARGE_DENSITY_COULOMB_PER_SQUARE_METRE           = 0x274D,
+    cbGATT_UNIT_ELECTRIC_FLUX_DENSITY_COULOMB_PER_SQUARE_METRE            = 0x274E,
+    cbGATT_UNIT_PERMITTIVITY_FARAD_PER_METRE                              = 0x274F,
+    cbGATT_UNIT_PERMEABILITY_HENRY_PER_METRE                              = 0x2750,
+    cbGATT_UNIT_MOLAR_ENERGY_JOULE_PER_MOLE                               = 0x2751,
+    cbGATT_UNIT_MOLAR_ENTROPY_JOULE_PER_MOLE_KELVIN                       = 0x2752,
+    cbGATT_UNIT_EXPOSURE_COULOMB_PER_KILOGRAM                             = 0x2753,
+    cbGATT_UNIT_ABSORBED_DOSE_RATE_GRAY_PER_SECOND                        = 0x2754,
+    cbGATT_UNIT_RADIANT_INTENSITY_WATT_PER_STERADIAN                      = 0x2755,
+    cbGATT_UNIT_RADIANCE_WATT_PER_SQUARE_METER_STERADIAN                  = 0x2756,
+    cbGATT_UNIT_CATALYTIC_ACTIVITY_CONCENTRATION_KATAL_PER_CUBIC_METRE    = 0x2757,
+    cbGATT_UNIT_TIME_MINUTE                                               = 0x2760,
+    cbGATT_UNIT_TIME_HOUR                                                 = 0x2761,
+    cbGATT_UNIT_TIME_DAY                                                  = 0x2762,
+    cbGATT_UNIT_PLANE_ANGLE_DEGREE                                        = 0x2763,
+    cbGATT_UNIT_PLANE_ANGLE_MINUTE                                        = 0x2764,
+    cbGATT_UNIT_PLANE_ANGLE_SECOND                                        = 0x2765,
+    cbGATT_UNIT_AREA_HECTARE                                              = 0x2766,
+    cbGATT_UNIT_VOLUME_LITRE                                              = 0x2767,
+    cbGATT_UNIT_MASS_TONNE                                                = 0x2768,
+    cbGATT_UNIT_PRESSURE_BAR                                              = 0x2780,
+    cbGATT_UNIT_PRESSURE_MILLIMETRE_OF_MERCURY                            = 0x2781,
+    cbGATT_UNIT_LENGTH_ANGSTROM                                           = 0x2782,
+    cbGATT_UNIT_LENGTH_NAUTICAL_MILE                                      = 0x2783,
+    cbGATT_UNIT_AREA_BARN                                                 = 0x2784,
+    cbGATT_UNIT_VELOCITY_KNOT                                             = 0x2785,
+    cbGATT_UNIT_LOGARITHMIC_RADIO_QUANTITY_NEPER                          = 0x2786,
+    cbGATT_UNIT_LOGARITHMIC_RADIO_QUANTITY_BEL                            = 0x2787,
+    cbGATT_UNIT_LENGTH_YARD                                               = 0x27A0,
+    cbGATT_UNIT_LENGTH_PARSEC                                             = 0x27A1,
+    cbGATT_UNIT_LENGTH_INCH                                               = 0x27A2,
+    cbGATT_UNIT_LENGTH_FOOT                                               = 0x27A3,
+    cbGATT_UNIT_LENGTH_MILE                                               = 0x27A4,
+    cbGATT_UNIT_PRESSURE_POUND_FORCE_PER_SQUARE_INCH                      = 0x27A5,
+    cbGATT_UNIT_VELOCITY_KILOMETRE_PER_HOUR                               = 0x27A6,
+    cbGATT_UNIT_VELOCITY_MILE_PER_HOUR                                    = 0x27A7,
+    cbGATT_UNIT_ANGULAR_VELOCITY_REVOLUTION_PER_MINUTE                    = 0x27A8,
+    cbGATT_UNIT_ENERGY_GRAM_CALORIE                                       = 0x27A9,
+    cbGATT_UNIT_ENERGY_KILOGRAM_CALORIE                                   = 0x27AA,
+    cbGATT_UNIT_ENERGY_KILOWATT_HOUR                                      = 0x27AB,
+    cbGATT_UNIT_THERMODYNAMIC_TEMPERATURE_DEGREE_FAHRENHEIT               = 0x27AC,
+    cbGATT_UNIT_PERCENTAGE                                                = 0x27AD,
+    cbGATT_UNIT_PER_MILLE                                                 = 0x27AE,
+    cbGATT_UNIT_PERIOD_BEATS_PER_MINUTE                                   = 0x27AF,
+    cbGATT_UNIT_ELECTRIC_CHARGE_AMPERE_HOURS                              = 0x27B0,
+    cbGATT_UNIT_MASS_DENSITY_MILLIGRAM_PER_DECILITRE                      = 0x27B1,
+    cbGATT_UNIT_MASS_DENSITY_MILLIMOLE_PER_LITRE                          = 0x27B2,
+    cbGATT_UNIT_TIME_YEAR                                                 = 0x27B3,
+    cbGATT_UNIT_TIME_MONTH                                                = 0x27B4,
+} cbGATT_Unit;
+
+typedef enum
+{
+
+    // Note, check http://developer.bluetooth.org/gatt/descriptors/Pages/DescriptorViewer.aspx?u=org.bluetooth.descriptor.cbGATT.characteristic_presentation_format.xml
+    // for any changes
+    cbGATT_FORMAT_TYPE_BOOLEAN =  0x01,
+    cbGATT_FORMAT_TYPE_2BIT    =  0x02,
+    cbGATT_FORMAT_TYPE_NIBBLE  =  0x03,
+    cbGATT_FORMAT_TYPE_UINT8   =  0x04,
+    cbGATT_FORMAT_TYPE_UINT12  =  0x05,
+    cbGATT_FORMAT_TYPE_UINT16  =  0x06,
+    cbGATT_FORMAT_TYPE_UINT24  =  0x07,
+    cbGATT_FORMAT_TYPE_UINT32  =  0x08,
+    cbGATT_FORMAT_TYPE_UINT48  =  0x09,
+    cbGATT_FORMAT_TYPE_UINT64  =  0x0A,
+    cbGATT_FORMAT_TYPE_UINT128 =  0x0B,
+    cbGATT_FORMAT_TYPE_SINT8   =  0x0C,
+    cbGATT_FORMAT_TYPE_SINT12  =  0x0D,
+    cbGATT_FORMAT_TYPE_SINT16  =  0x0E,
+    cbGATT_FORMAT_TYPE_SINT24  =  0x0F,
+    cbGATT_FORMAT_TYPE_SINT32  =  0x10,
+    cbGATT_FORMAT_TYPE_SINT48  =  0x11,
+    cbGATT_FORMAT_TYPE_SINT64  =  0x12,
+    cbGATT_FORMAT_TYPE_SINT128 =  0x13,
+    cbGATT_FORMAT_TYPE_FLOAT32 =  0x14,
+    cbGATT_FORMAT_TYPE_FLOAT64 =  0x15,
+    cbGATT_FORMAT_TYPE_SFLOAT  =  0x16,
+    cbGATT_FORMAT_TYPE_FLOAT   =  0x17,
+    cbGATT_FORMAT_TYPE_DUINT16 =  0x18,
+    cbGATT_FORMAT_TYPE_UTF8S   =  0x19,
+    cbGATT_FORMAT_TYPE_UTF16S  =  0x1A,
+    cbGATT_FORMAT_TYPE_STRUCT  =  0x1B,
+} cbGATT_FormatType;
+
+typedef enum
+{
+    // This should map to ATT_TRole
+    cbGATT_ROLE_CLIENT = 0,
+    cbGATT_ROLE_SERVER = 1,
+    cbGATT_ROLE_BOTH   = 2
+} cbGATT_Role;
+
+typedef enum
+{
+    cbGATT_NAMESPACE_BT_SIG = 0x01,
+} cbGATT_Namespace;
+
+typedef enum
+{
+    cbGATT_NAMESPACE_DESC_UNKNOWN = 0x0000,
+} cbGATT_NamespaceDesc;
+
+typedef struct  
+{
+    cbGATT_FormatType    format;
+    cb_uint8             exponent;
+    cbGATT_Unit          unit;
+    cbGATT_Namespace     gattNamespace;
+    cbGATT_NamespaceDesc namespaceDesc;
+} cbGATT_CharFormat;
+
+// This enum must match ATT_TErrorCode for the first two parts
+// (not the GATT specific)
+typedef enum
+{
+    cbGATT_ERROR_CODE_OK                               = 0x00,
+    cbGATT_ERROR_CODE_INVALID_HANDLE                   = 0x01,
+    cbGATT_ERROR_CODE_READ_NOT_PERMITTED               = 0x02,
+    cbGATT_ERROR_CODE_WRITE_NOT_PERMITTED              = 0x03,
+    cbGATT_ERROR_CODE_INVALID_PDU                      = 0x04,
+    cbGATT_ERROR_CODE_INSUFFICIENT_AUTHENTICATION      = 0x05,
+    cbGATT_ERROR_CODE_REQUEST_NOT_SUPPORTED            = 0x06,
+    cbGATT_ERROR_CODE_INVALID_OFFSET                   = 0x07,
+    cbGATT_ERROR_CODE_INSUFFICIENT_AUTHORIZATION       = 0x08,
+    cbGATT_ERROR_CODE_PREPARE_FULL_QUEUE               = 0x09,
+    cbGATT_ERROR_CODE_ATTRIBUTE_NOT_FOUND              = 0x0A,
+    cbGATT_ERROR_CODE_ATTRIBUTE_NOT_LONG               = 0x0B,
+    cbGATT_ERROR_CODE_INSUFFICIENT_ENCRYPT_KEY_SIZE    = 0x0C,
+    cbGATT_ERROR_CODE_INVALID_ATTRIBUTE_VALUE_LENGTH   = 0x0D,
+    cbGATT_ERROR_CODE_UNLIKELY_ERROR                   = 0x0E,
+    cbGATT_ERROR_CODE_INSUFFICIENT_ENCRYPTION          = 0x0F,
+    cbGATT_ERROR_CODE_UNSUPPORTED_GROUP_TPYE           = 0x10,
+    cbGATT_ERROR_CODE_INSUFFICIENT_RESOURCES           = 0x11,
+
+    cbGATT_ERROR_CODE_OUT_OF_RANGE                     = 0xFF,
+    cbGATT_ERROR_CODE_PROCEDURE_ALREADY_IN_PROGRESS    = 0xFE,
+    cbGATT_ERROR_CODE_IMPROPER_CLIENT_CHAR_CFG         = 0xFD,
+
+    // Special error codes not according to BT spec. 
+    // Will never be sent over the air.
+    cbGATT_ERROR_CODE_TRANSACTION_TIMEOUT              = 0x80,
+    cbGATT_ERROR_CODE_DISCONNECTED                     = 0x81,
+    cbGATT_ERROR_CODE_RELIABLE_CHECK_FAILED            = 0x82,
+    cbGATT_ERROR_CODE_DELAYED_RSP                      = 0x83,
+} cbGATT_ErrorCode;
+
+
+typedef enum
+{
+    // This must map to ATT_TUuidFormat
+    cbGATT_UUID_16  = 0x01,
+    cbGATT_UUID_128 = 0x02
+} cbGATT_UuidFormat;
+
+typedef enum
+{
+    cbGATT_FINAL_DATA  = 0x00,
+    cbGATT_MORE_DATA   = 0x01,
+    cbGATT_CANCEL_DATA = 0x02
+} cbGATT_WriteLongCharFlag;
+
+typedef struct
+{
+    // This must map to ATT_TUuid
+    union
+    {
+        cb_uint16 uuid16;
+        cb_uint8  uuid128[16];
+    };
+    cbGATT_UuidFormat format;
+} cbGATT_Uuid;
+
+/**
+ * Called when an ACL connection is established
+ * @param   handle          Connection handle
+ * @param   errorCode       Connect error code
+ * @param   role            TODO Add a proper type for role client/server master/slave central/peripheral
+ * @param   peerBdAddress   Address of remote device
+ * @param   connInterval    Connection interval
+ * @param   connLatency     Connection latency
+ * @param   connTmo         Connection timeout
+ * @param   masterClkAccuracy Master clock accuracy
+ * @return  None
+ */
+typedef void (*cbGATT_ConnComplEvt)(
+    TConnHandle         handle, 
+    TErrorCode          errorCode, 
+    cb_uint8            role, 
+    TBdAddr             peerBdAddress, 
+    cb_uint16           connInterval,
+    cb_uint16           connLatency,
+    cb_uint16           connTmo,
+    cb_uint8            masterClkAccuracy);  
+/** 
+ * Called when ACL connection is lost.
+ * @param   handle      Connection handle
+ * @param   errorCode   Disconnect error code
+ * @return  None
+ */
+typedef void (*cbGATT_DisconnectEvt)(
+    TConnHandle         handle, 
+    TErrorCode          errorCode);
+
+
+/*===========================================================================
+ * FUNCTIONS
+ *=========================================================================*/
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif