1109 lines
46 KiB
C
1109 lines
46 KiB
C
#ifndef ATT_H_
|
|
#define ATT_H_
|
|
|
|
/**
|
|
****************************************************************************************
|
|
* @addtogroup ATT Attribute Protocol
|
|
* @ingroup HOST
|
|
* @brief Attribute Protocol.
|
|
*
|
|
* The ATT block contains the procedures for discovering, reading, writing
|
|
* and indicating attributes to peer device . It also defines a number of items
|
|
* that caters to the security aspect of the block as access to some information
|
|
* may require both authorization and an authenticated and encrypted physical
|
|
* link before an attribute can be read or written
|
|
*
|
|
* @{
|
|
*
|
|
****************************************************************************************
|
|
*/
|
|
|
|
/*
|
|
* INCLUDE FILES
|
|
****************************************************************************************
|
|
*/
|
|
#include <stdint.h>
|
|
|
|
/*
|
|
* DEFINES
|
|
****************************************************************************************
|
|
*/
|
|
|
|
/// Macro used to convert CPU integer define to LSB first 16-bits UUID
|
|
#define ATT_UUID_16(uuid) (uuid)
|
|
|
|
/// Invalid attribute handle
|
|
#define ATT_INVALID_HDL (0x0000)
|
|
/// Invalid attribute idx (used for profiles)
|
|
#define ATT_INVALID_IDX (0xff)
|
|
|
|
#define ATT_1ST_REQ_START_HDL 0x0001
|
|
#define ATT_1ST_REQ_END_HDL 0xFFFF
|
|
|
|
/// Maximum possible attribute handle
|
|
#define ATT_MAX_ATTR_HDL ATT_1ST_REQ_END_HDL
|
|
|
|
/// Offset of value in signed PDU
|
|
#define ATT_SIGNED_PDU_VAL_OFFSET 0x03
|
|
|
|
/// Attribute Features
|
|
#define ATT_SERVER_CONFIG 0x0001
|
|
#define ATT_SERVICE_DISC 0x0002
|
|
#define ATT_RELATIONSHIP_DISC 0x0004
|
|
#define ATT_CHAR_DISC 0x0008
|
|
#define ATT_CHAR_DESC_DISC 0x0010
|
|
#define ATT_RD_CHAR_VALUE 0x0020
|
|
#define ATT_WR_CHAR_VALUE 0x0040
|
|
#define ATT_NOTIF_CHAR_VALUE 0x0080
|
|
#define ATT_IND_CHAR_VALUE 0x0100
|
|
#define ATT_RD_CHAR_DESC 0x0200
|
|
#define ATT_WR_CHAR_DESC 0x0400
|
|
|
|
/// Length, number, offset defines
|
|
#define ATT_SVC_VALUE_MAX_LEN 0x0030
|
|
#define ATT_CHAR_NAME_MAX_LEN 0x0030
|
|
#define ATT_UUID_16_LEN 0x0002
|
|
#define ATT_UUID_32_LEN 0x0004
|
|
#define ATT_UUID_128_LEN 0x0010
|
|
|
|
/// offset - l2cap header and ATT code
|
|
#define ATT_PDU_DATA_OFFSET 0x05
|
|
|
|
/// Characteristic Properties Bit
|
|
#define ATT_CHAR_PROP_BCAST 0x01
|
|
#define ATT_CHAR_PROP_RD 0x02
|
|
#define ATT_CHAR_PROP_WR_NO_RESP 0x04
|
|
#define ATT_CHAR_PROP_WR 0x08
|
|
#define ATT_CHAR_PROP_NTF 0x10
|
|
#define ATT_CHAR_PROP_IND 0x20
|
|
#define ATT_CHAR_PROP_AUTH 0x40
|
|
#define ATT_CHAR_PROP_EXT_PROP 0x80
|
|
/// Invalid Attribute Handle
|
|
#define ATT_INVALID_SEARCH_HANDLE 0x0000
|
|
#define ATT_INVALID_HANDLE 0x0000
|
|
/// Read Information Request
|
|
#define ATT_UUID_FILTER_0 0x00
|
|
#define ATT_UUID_FILTER_2 0x02
|
|
#define ATT_UUID_FILTER_16 0x10
|
|
/// Read Information Response
|
|
#define ATT_FORMAT_LEN 0x0001
|
|
#define ATT_FORMAT_16BIT_UUID 0x01
|
|
#define ATT_FORMAT_128BIT_UUID 0x02
|
|
/// For No fix length PDU
|
|
#define ATT_HANDLE_LEN 0x0002
|
|
#define ATT_EACHLEN_LEN 0x0001
|
|
#define ATT_PROP_LEN 0x0001
|
|
#define ATT_CODE_LEN 0x0001
|
|
#define ATT_CODE_AND_DATA_LEN 0x0002
|
|
#define ATT_CODE_AND_HANDLE_LEN 0x0003
|
|
#define ATT_CODE_AND_HANDLE_LEN_AND_OFFSET 0x0005
|
|
#define ATT_SIGNATURE_LEN 0x0C
|
|
|
|
/// extended characteristics
|
|
#define ATT_EXT_RELIABLE_WRITE 0x0001
|
|
#define ATT_EXT_WRITABLE_AUX 0x0002
|
|
#define ATT_EXT_RFU 0xFFFC
|
|
|
|
/// PDU size for error response
|
|
#define ATT_ERROR_RESP_LEN 0x05
|
|
|
|
/// Offset of value in signed PDU
|
|
#define ATT_SIGNED_PDU_VAL_OFFSET 0x03
|
|
|
|
|
|
|
|
#define ATT_BT_UUID_128 {0xFB, 0x34, 0x9B, 0x5F, 0x80, 0x00, 0x00, 0x80, \
|
|
0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
|
|
|
|
|
|
|
|
/* Attribute Specification Defines */
|
|
|
|
/// Common 16-bit Universal Unique Identifier
|
|
enum {
|
|
ATT_INVALID_UUID = ATT_UUID_16(0x0000),
|
|
/*----------------- SERVICES ---------------------*/
|
|
/// Generic Access Profile
|
|
ATT_SVC_GENERIC_ACCESS = ATT_UUID_16(0x1800),
|
|
/// Attribute Profile
|
|
ATT_SVC_GENERIC_ATTRIBUTE = ATT_UUID_16(0x1801),
|
|
/// Immediate alert Service
|
|
ATT_SVC_IMMEDIATE_ALERT = ATT_UUID_16(0x1802),
|
|
/// Link Loss Service
|
|
ATT_SVC_LINK_LOSS = ATT_UUID_16(0x1803),
|
|
/// Tx Power Service
|
|
ATT_SVC_TX_POWER = ATT_UUID_16(0x1804),
|
|
/// Current Time Service Service
|
|
ATT_SVC_CURRENT_TIME = ATT_UUID_16(0x1805),
|
|
/// Reference Time Update Service
|
|
ATT_SVC_REF_TIME_UPDATE = ATT_UUID_16(0x1806),
|
|
/// Next DST Change Service
|
|
ATT_SVC_NEXT_DST_CHANGE = ATT_UUID_16(0x1807),
|
|
/// Glucose Service
|
|
ATT_SVC_GLUCOSE = ATT_UUID_16(0x1808),
|
|
/// Health Thermometer Service
|
|
ATT_SVC_HEALTH_THERMOM = ATT_UUID_16(0x1809),
|
|
/// Device Information Service
|
|
ATT_SVC_DEVICE_INFO = ATT_UUID_16(0x180A),
|
|
/// Heart Rate Service
|
|
ATT_SVC_HEART_RATE = ATT_UUID_16(0x180D),
|
|
/// Phone Alert Status Service
|
|
ATT_SVC_PHONE_ALERT_STATUS = ATT_UUID_16(0x180E),
|
|
/// Battery Service
|
|
ATT_SVC_BATTERY_SERVICE = ATT_UUID_16(0x180F),
|
|
/// Blood Pressure Service
|
|
ATT_SVC_BLOOD_PRESSURE = ATT_UUID_16(0x1810),
|
|
/// Alert Notification Service
|
|
ATT_SVC_ALERT_NTF = ATT_UUID_16(0x1811),
|
|
/// HID Service
|
|
ATT_SVC_HID = ATT_UUID_16(0x1812),
|
|
/// Scan Parameters Service
|
|
ATT_SVC_SCAN_PARAMETERS = ATT_UUID_16(0x1813),
|
|
/// Running Speed and Cadence Service
|
|
ATT_SVC_RUNNING_SPEED_CADENCE = ATT_UUID_16(0x1814),
|
|
/// Cycling Speed and Cadence Service
|
|
ATT_SVC_CYCLING_SPEED_CADENCE = ATT_UUID_16(0x1816),
|
|
/// Cycling Power Service
|
|
ATT_SVC_CYCLING_POWER = ATT_UUID_16(0x1818),
|
|
/// Location and Navigation Service
|
|
ATT_SVC_LOCATION_AND_NAVIGATION = ATT_UUID_16(0x1819),
|
|
/// Environmental Sensing Service
|
|
ATT_SVC_ENVIRONMENTAL_SENSING = ATT_UUID_16(0x181A),
|
|
/// Body Composition Service
|
|
ATT_SVC_BODY_COMPOSITION = ATT_UUID_16(0x181B),
|
|
/// User Data Service
|
|
ATT_SVC_USER_DATA = ATT_UUID_16(0x181C),
|
|
/// Weight Scale Service
|
|
ATT_SVC_WEIGHT_SCALE = ATT_UUID_16(0x181D),
|
|
/// Bond Management Service
|
|
ATT_SVC_BOND_MANAGEMENT = ATT_UUID_16(0x181E),
|
|
/// Continuous Glucose Monitoring Service
|
|
ATT_SVC_CONTINUOUS_GLUCOSE_MONITORING = ATT_UUID_16(0x181F),
|
|
/// Internet Protocol Support Service
|
|
ATT_SVC_IP_SUPPORT = ATT_UUID_16(0x1820),
|
|
/// Indoor Positioning Service
|
|
ATT_SVC_INDOOR_POSITIONING = ATT_UUID_16(0x1821),
|
|
/// Pulse Oximeter Service
|
|
ATT_SVC_PULSE_OXIMETER = ATT_UUID_16(0x1822),
|
|
/// HTTP Proxy Service
|
|
ATT_SVC_HTTP_PROXY = ATT_UUID_16(0x1823),
|
|
/// Transport Discovery Service
|
|
ATT_SVC_TRANSPORT_DISCOVERY = ATT_UUID_16(0x1824),
|
|
/// Object Transfer Service
|
|
ATT_SVC_OBJECT_TRANSFER = ATT_UUID_16(0x1825),
|
|
|
|
/*------------------- UNITS ---------------------*/
|
|
/// No defined unit
|
|
ATT_UNIT_UNITLESS = ATT_UUID_16(0x2700),
|
|
/// Length Unit - Metre
|
|
ATT_UNIT_METRE = ATT_UUID_16(0x2701),
|
|
///Mass unit - Kilogram
|
|
ATT_UNIT_KG = ATT_UUID_16(0x2702),
|
|
///Time unit - second
|
|
ATT_UNIT_SECOND = ATT_UUID_16(0x2703),
|
|
///Electric current unit - Ampere
|
|
ATT_UNIT_AMPERE = ATT_UUID_16(0x2704),
|
|
///Thermodynamic Temperature unit - Kelvin
|
|
ATT_UNIT_KELVIN = ATT_UUID_16(0x2705),
|
|
/// Amount of substance unit - mole
|
|
ATT_UNIT_MOLE = ATT_UUID_16(0x2706),
|
|
///Luminous intensity unit - candela
|
|
ATT_UNIT_CANDELA = ATT_UUID_16(0x2707),
|
|
///Area unit - square metres
|
|
ATT_UNIT_SQ_METRE = ATT_UUID_16(0x2710),
|
|
///Colume unit - cubic metres
|
|
ATT_UNIT_CUBIC_METRE = ATT_UUID_16(0x2710),
|
|
///Velocity unit - metres per second
|
|
ATT_UNIT_METRE_PER_SECOND = ATT_UUID_16(0x2711),
|
|
///Acceleration unit - metres per second squared
|
|
ATT_UNIT_METRES_PER_SEC_SQ = ATT_UUID_16(0x2712),
|
|
///Wavenumber unit - reciprocal metre
|
|
ATT_UNIT_RECIPROCAL_METRE = ATT_UUID_16(0x2713),
|
|
///Density unit - kilogram per cubic metre
|
|
ATT_UNIT_DENS_KG_PER_CUBIC_METRE = ATT_UUID_16(0x2714),
|
|
///Surface density unit - kilogram per square metre
|
|
ATT_UNIT_KG_PER_SQ_METRE = ATT_UUID_16(0x2715),
|
|
///Specific volume unit - cubic metre per kilogram
|
|
ATT_UNIT_CUBIC_METRE_PER_KG = ATT_UUID_16(0x2716),
|
|
///Current density unit - ampere per square metre
|
|
ATT_UNIT_AMPERE_PER_SQ_METRE = ATT_UUID_16(0x2717),
|
|
///Magnetic field strength unit - Ampere per metre
|
|
ATT_UNIT_AMPERE_PER_METRE = ATT_UUID_16(0x2718),
|
|
///Amount concentration unit - mole per cubic metre
|
|
ATT_UNIT_MOLE_PER_CUBIC_METRE = ATT_UUID_16(0x2719),
|
|
///Mass Concentration unit - kilogram per cubic metre
|
|
ATT_UNIT_MASS_KG_PER_CUBIC_METRE = ATT_UUID_16(0x271A),
|
|
///Luminance unit - candela per square metre
|
|
ATT_UNIT_CANDELA_PER_SQ_METRE = ATT_UUID_16(0x271B),
|
|
///Refractive index unit
|
|
ATT_UNIT_REFRACTIVE_INDEX = ATT_UUID_16(0x271C),
|
|
///Relative permeability unit
|
|
ATT_UNIT_RELATIVE_PERMEABILITY = ATT_UUID_16(0x271D),
|
|
///Plane angle unit - radian
|
|
ATT_UNIT_RADIAN = ATT_UUID_16(0x2720),
|
|
///Solid angle unit - steradian
|
|
ATT_UNIT_STERADIAN = ATT_UUID_16(0x2721),
|
|
///Frequency unit - Hertz
|
|
ATT_UNIT_HERTZ = ATT_UUID_16(0x2722),
|
|
///Force unit - Newton
|
|
ATT_UNIT_NEWTON = ATT_UUID_16(0x2723),
|
|
///Pressure unit - Pascal
|
|
ATT_UNIT_PASCAL = ATT_UUID_16(0x2724),
|
|
///Energy unit - Joule
|
|
ATT_UNIT_JOULE = ATT_UUID_16(0x2725),
|
|
///Power unit - Watt
|
|
ATT_UNIT_WATT = ATT_UUID_16(0x2726),
|
|
///electric Charge unit - Coulomb
|
|
ATT_UNIT_COULOMB = ATT_UUID_16(0x2727),
|
|
///Electric potential difference - Volt
|
|
ATT_UNIT_VOLT = ATT_UUID_16(0x2728),
|
|
///Capacitance unit - Farad
|
|
ATT_UNIT_FARAD = ATT_UUID_16(0x2729),
|
|
///electric resistance unit - Ohm
|
|
ATT_UNIT_OHM = ATT_UUID_16(0x272A),
|
|
///Electric conductance - Siemens
|
|
ATT_UNIT_SIEMENS = ATT_UUID_16(0x272B),
|
|
///Magnetic flux unit - Weber
|
|
ATT_UNIT_WEBER = ATT_UUID_16(0x272C),
|
|
///Magnetic flux density unit - Tesla
|
|
ATT_UNIT_TESLA = ATT_UUID_16(0x272D),
|
|
///Inductance unit - Henry
|
|
ATT_UNIT_HENRY = ATT_UUID_16(0x272E),
|
|
///Temperature unit - degree Celsius
|
|
ATT_UNIT_CELSIUS = ATT_UUID_16(0x272F),
|
|
///Luminous flux unit - lumen
|
|
ATT_UNIT_LUMEN = ATT_UUID_16(0x2730),
|
|
///Illuminance unit - lux
|
|
ATT_UNIT_LUX = ATT_UUID_16(0x2731),
|
|
///Activity referred to a radionuclide unit - becquerel
|
|
ATT_UNIT_BECQUEREL = ATT_UUID_16(0x2732),
|
|
///Absorbed dose unit - Gray
|
|
ATT_UNIT_GRAY = ATT_UUID_16(0x2733),
|
|
///Dose equivalent unit - Sievert
|
|
ATT_UNIT_SIEVERT = ATT_UUID_16(0x2734),
|
|
///Catalytic activity unit - Katal
|
|
ATT_UNIT_KATAL = ATT_UUID_16(0x2735),
|
|
///Synamic viscosity unit - Pascal second
|
|
ATT_UNIT_PASCAL_SECOND = ATT_UUID_16(0x2740),
|
|
///Moment of force unit - Newton metre
|
|
ATT_UNIT_NEWTON_METRE = ATT_UUID_16(0x2741),
|
|
///surface tension unit - Newton per metre
|
|
ATT_UNIT_NEWTON_PER_METRE = ATT_UUID_16(0x2742),
|
|
///Angular velocity unit - radian per second
|
|
ATT_UNIT_RADIAN_PER_SECOND = ATT_UUID_16(0x2743),
|
|
///Angular acceleration unit - radian per second squared
|
|
ATT_UNIT_RADIAN_PER_SECOND_SQ = ATT_UUID_16(0x2744),
|
|
///Heat flux density unit - Watt per square metre
|
|
ATT_UNIT_WATT_PER_SQ_METRE = ATT_UUID_16(0x2745),
|
|
///HEat capacity unit - Joule per Kelvin
|
|
ATT_UNIT_JOULE_PER_KELVIN = ATT_UUID_16(0x2746),
|
|
///Specific heat capacity unit - Joule per kilogram kelvin
|
|
ATT_UNIT_JOULE_PER_KG_KELVIN = ATT_UUID_16(0x2747),
|
|
///Specific Energy unit - Joule per kilogram
|
|
ATT_UNIT_JOULE_PER_KG = ATT_UUID_16(0x2748),
|
|
///Thermal conductivity - Watt per metre Kelvin
|
|
ATT_UNIT_WATT_PER_METRE_KELVIN = ATT_UUID_16(0x2749),
|
|
///Energy Density unit - joule per cubic metre
|
|
ATT_UNIT_JOULE_PER_CUBIC_METRE = ATT_UUID_16(0x274A),
|
|
///Electric field strength unit - volt per metre
|
|
ATT_UNIT_VOLT_PER_METRE = ATT_UUID_16(0x274B),
|
|
///Electric charge density unit - coulomb per cubic metre
|
|
ATT_UNIT_COULOMB_PER_CUBIC_METRE = ATT_UUID_16(0x274C),
|
|
///Surface charge density unit - coulomb per square metre
|
|
ATT_UNIT_SURF_COULOMB_PER_SQ_METRE = ATT_UUID_16(0x274D),
|
|
///Electric flux density unit - coulomb per square metre
|
|
ATT_UNIT_FLUX_COULOMB_PER_SQ_METRE = ATT_UUID_16(0x274E),
|
|
///Permittivity unit - farad per metre
|
|
ATT_UNIT_FARAD_PER_METRE = ATT_UUID_16(0x274F),
|
|
///Permeability unit - henry per metre
|
|
ATT_UNIT_HENRY_PER_METRE = ATT_UUID_16(0x2750),
|
|
///Molar energy unit - joule per mole
|
|
ATT_UNIT_JOULE_PER_MOLE = ATT_UUID_16(0x2751),
|
|
///Molar entropy unit - joule per mole kelvin
|
|
ATT_UNIT_JOULE_PER_MOLE_KELVIN = ATT_UUID_16(0x2752),
|
|
///Exposure unit - coulomb per kilogram
|
|
ATT_UNIT_COULOMB_PER_KG = ATT_UUID_16(0x2753),
|
|
///Absorbed dose rate unit - gray per second
|
|
ATT_UNIT_GRAY_PER_SECOND = ATT_UUID_16(0x2754),
|
|
///Radiant intensity unit - watt per steradian
|
|
ATT_UNIT_WATT_PER_STERADIAN = ATT_UUID_16(0x2755),
|
|
///Radiance unit - watt per square meter steradian
|
|
ATT_UNIT_WATT_PER_SQ_METRE_STERADIAN = ATT_UUID_16(0x2756),
|
|
///Catalytic activity concentration unit - katal per cubic metre
|
|
ATT_UNIT_KATAL_PER_CUBIC_METRE = ATT_UUID_16(0x2757),
|
|
///Time unit - minute
|
|
ATT_UNIT_MINUTE = ATT_UUID_16(0x2760),
|
|
///Time unit - hour
|
|
ATT_UNIT_HOUR = ATT_UUID_16(0x2761),
|
|
///Time unit - day
|
|
ATT_UNIT_DAY = ATT_UUID_16(0x2762),
|
|
///Plane angle unit - degree
|
|
ATT_UNIT_ANGLE_DEGREE = ATT_UUID_16(0x2763),
|
|
///Plane angle unit - minute
|
|
ATT_UNIT_ANGLE_MINUTE = ATT_UUID_16(0x2764),
|
|
///Plane angle unit - second
|
|
ATT_UNIT_ANGLE_SECOND = ATT_UUID_16(0x2765),
|
|
///Area unit - hectare
|
|
ATT_UNIT_HECTARE = ATT_UUID_16(0x2766),
|
|
///Volume unit - litre
|
|
ATT_UNIT_LITRE = ATT_UUID_16(0x2767),
|
|
///Mass unit - tonne
|
|
ATT_UNIT_TONNE = ATT_UUID_16(0x2768),
|
|
///Pressure unit - bar
|
|
ATT_UNIT_BAR = ATT_UUID_16(0x2780),
|
|
///Pressure unit - millimetre of mercury
|
|
ATT_UNIT_MM_MERCURY = ATT_UUID_16(0x2781),
|
|
///Length unit - angstrom
|
|
ATT_UNIT_ANGSTROM = ATT_UUID_16(0x2782),
|
|
///Length unit - nautical mile
|
|
ATT_UNIT_NAUTICAL_MILE = ATT_UUID_16(0x2783),
|
|
///Area unit - barn
|
|
ATT_UNIT_BARN = ATT_UUID_16(0x2784),
|
|
///Velocity unit - knot
|
|
ATT_UNIT_KNOT = ATT_UUID_16(0x2785),
|
|
///Logarithmic radio quantity unit - neper
|
|
ATT_UNIT_NEPER = ATT_UUID_16(0x2786),
|
|
///Logarithmic radio quantity unit - bel
|
|
ATT_UNIT_BEL = ATT_UUID_16(0x2787),
|
|
///Length unit - yard
|
|
ATT_UNIT_YARD = ATT_UUID_16(0x27A0),
|
|
///Length unit - parsec
|
|
ATT_UNIT_PARSEC = ATT_UUID_16(0x27A1),
|
|
///length unit - inch
|
|
ATT_UNIT_INCH = ATT_UUID_16(0x27A2),
|
|
///length unit - foot
|
|
ATT_UNIT_FOOT = ATT_UUID_16(0x27A3),
|
|
///length unit - mile
|
|
ATT_UNIT_MILE = ATT_UUID_16(0x27A4),
|
|
///pressure unit - pound-force per square inch
|
|
ATT_UNIT_POUND_FORCE_PER_SQ_INCH = ATT_UUID_16(0x27A5),
|
|
///velocity unit - kilometre per hour
|
|
ATT_UNIT_KM_PER_HOUR = ATT_UUID_16(0x27A6),
|
|
///velocity unit - mile per hour
|
|
ATT_UNIT_MILE_PER_HOUR = ATT_UUID_16(0x27A7),
|
|
///angular velocity unit - revolution per minute
|
|
ATT_UNIT_REVOLUTION_PER_MINUTE = ATT_UUID_16(0x27A8),
|
|
///energy unit - gram calorie
|
|
ATT_UNIT_GRAM_CALORIE = ATT_UUID_16(0x27A9),
|
|
///energy unit - kilogram calorie
|
|
ATT_UNIT_KG_CALORIE = ATT_UUID_16(0x27AA),
|
|
/// energy unit - kilowatt hour
|
|
ATT_UNIT_KILOWATT_HOUR = ATT_UUID_16(0x27AB),
|
|
///thermodynamic temperature unit - degree Fahrenheit
|
|
ATT_UNIT_FAHRENHEIT = ATT_UUID_16(0x27AC),
|
|
///percentage
|
|
ATT_UNIT_PERCENTAGE = ATT_UUID_16(0x27AD),
|
|
///per mille
|
|
ATT_UNIT_PER_MILLE = ATT_UUID_16(0x27AE),
|
|
///period unit - beats per minute)
|
|
ATT_UNIT_BEATS_PER_MINUTE = ATT_UUID_16(0x27AF),
|
|
///electric charge unit - ampere hours
|
|
ATT_UNIT_AMPERE_HOURS = ATT_UUID_16(0x27B0),
|
|
///mass density unit - milligram per decilitre
|
|
ATT_UNIT_MILLIGRAM_PER_DECILITRE = ATT_UUID_16(0x27B1),
|
|
///mass density unit - millimole per litre
|
|
ATT_UNIT_MILLIMOLE_PER_LITRE = ATT_UUID_16(0x27B2),
|
|
///time unit - year
|
|
ATT_UNIT_YEAR = ATT_UUID_16(0x27B3),
|
|
////time unit - month
|
|
ATT_UNIT_MONTH = ATT_UUID_16(0x27B4),
|
|
|
|
|
|
/*---------------- DECLARATIONS -----------------*/
|
|
/// Primary service Declaration
|
|
ATT_DECL_PRIMARY_SERVICE = ATT_UUID_16(0x2800),
|
|
/// Secondary service Declaration
|
|
ATT_DECL_SECONDARY_SERVICE = ATT_UUID_16(0x2801),
|
|
/// Include Declaration
|
|
ATT_DECL_INCLUDE = ATT_UUID_16(0x2802),
|
|
/// Characteristic Declaration
|
|
ATT_DECL_CHARACTERISTIC = ATT_UUID_16(0x2803),
|
|
|
|
|
|
/*----------------- DESCRIPTORS -----------------*/
|
|
/// Characteristic extended properties
|
|
ATT_DESC_CHAR_EXT_PROPERTIES = ATT_UUID_16(0x2900),
|
|
/// Characteristic user description
|
|
ATT_DESC_CHAR_USER_DESCRIPTION = ATT_UUID_16(0x2901),
|
|
/// Client characteristic configuration
|
|
ATT_DESC_CLIENT_CHAR_CFG = ATT_UUID_16(0x2902),
|
|
/// Server characteristic configuration
|
|
ATT_DESC_SERVER_CHAR_CFG = ATT_UUID_16(0x2903),
|
|
/// Characteristic Presentation Format
|
|
ATT_DESC_CHAR_PRES_FORMAT = ATT_UUID_16(0x2904),
|
|
/// Characteristic Aggregate Format
|
|
ATT_DESC_CHAR_AGGREGATE_FORMAT = ATT_UUID_16(0x2905),
|
|
/// Valid Range
|
|
ATT_DESC_VALID_RANGE = ATT_UUID_16(0x2906),
|
|
/// External Report Reference
|
|
ATT_DESC_EXT_REPORT_REF = ATT_UUID_16(0x2907),
|
|
/// Report Reference
|
|
ATT_DESC_REPORT_REF = ATT_UUID_16(0x2908),
|
|
/// Environmental Sensing Configuration
|
|
ATT_DESC_ES_CONFIGURATION = ATT_UUID_16(0x290B),
|
|
/// Environmental Sensing Measurement
|
|
ATT_DESC_ES_MEASUREMENT = ATT_UUID_16(0x290C),
|
|
/// Environmental Sensing Trigger Setting
|
|
ATT_DESC_ES_TRIGGER_SETTING = ATT_UUID_16(0x290D),
|
|
|
|
|
|
/*--------------- CHARACTERISTICS ---------------*/
|
|
/// Device name
|
|
ATT_CHAR_DEVICE_NAME = ATT_UUID_16(0x2A00),
|
|
/// Appearance
|
|
ATT_CHAR_APPEARANCE = ATT_UUID_16(0x2A01),
|
|
/// Privacy flag
|
|
ATT_CHAR_PRIVACY_FLAG = ATT_UUID_16(0x2A02),
|
|
/// Reconnection address
|
|
ATT_CHAR_RECONNECTION_ADDR = ATT_UUID_16(0x2A03),
|
|
/// Peripheral preferred connection parameters
|
|
ATT_CHAR_PERIPH_PREF_CON_PARAM = ATT_UUID_16(0x2A04),
|
|
/// Service handles changed
|
|
ATT_CHAR_SERVICE_CHANGED = ATT_UUID_16(0x2A05),
|
|
/// Alert Level characteristic
|
|
ATT_CHAR_ALERT_LEVEL = ATT_UUID_16(0x2A06),
|
|
/// Tx Power Level
|
|
ATT_CHAR_TX_POWER_LEVEL = ATT_UUID_16(0x2A07),
|
|
/// Date Time
|
|
ATT_CHAR_DATE_TIME = ATT_UUID_16(0x2A08),
|
|
/// Day of Week
|
|
ATT_CHAR_DAY_WEEK = ATT_UUID_16(0x2A09),
|
|
/// Day Date Time
|
|
ATT_CHAR_DAY_DATE_TIME = ATT_UUID_16(0x2A0A),
|
|
/// Exact time 256
|
|
ATT_CHAR_EXACT_TIME_256 = ATT_UUID_16(0x2A0C),
|
|
/// DST Offset
|
|
ATT_CHAR_DST_OFFSET = ATT_UUID_16(0x2A0D),
|
|
/// Time zone
|
|
ATT_CHAR_TIME_ZONE = ATT_UUID_16(0x2A0E),
|
|
/// Local time Information
|
|
ATT_CHAR_LOCAL_TIME_INFO = ATT_UUID_16(0x2A0F),
|
|
/// Time with DST
|
|
ATT_CHAR_TIME_WITH_DST = ATT_UUID_16(0x2A11),
|
|
/// Time Accuracy
|
|
ATT_CHAR_TIME_ACCURACY = ATT_UUID_16(0x2A12),
|
|
///Time Source
|
|
ATT_CHAR_TIME_SOURCE = ATT_UUID_16(0x2A13),
|
|
/// Reference Time Information
|
|
ATT_CHAR_REFERENCE_TIME_INFO = ATT_UUID_16(0x2A14),
|
|
/// Time Update Control Point
|
|
ATT_CHAR_TIME_UPDATE_CNTL_POINT = ATT_UUID_16(0x2A16),
|
|
/// Time Update State
|
|
ATT_CHAR_TIME_UPDATE_STATE = ATT_UUID_16(0x2A17),
|
|
/// Glucose Measurement
|
|
ATT_CHAR_GLUCOSE_MEAS = ATT_UUID_16(0x2A18),
|
|
/// Battery Level
|
|
ATT_CHAR_BATTERY_LEVEL = ATT_UUID_16(0x2A19),
|
|
/// Temperature Measurement
|
|
ATT_CHAR_TEMPERATURE_MEAS = ATT_UUID_16(0x2A1C),
|
|
/// Temperature Type
|
|
ATT_CHAR_TEMPERATURE_TYPE = ATT_UUID_16(0x2A1D),
|
|
/// Intermediate Temperature
|
|
ATT_CHAR_INTERMED_TEMPERATURE = ATT_UUID_16(0x2A1E),
|
|
/// Measurement Interval
|
|
ATT_CHAR_MEAS_INTERVAL = ATT_UUID_16(0x2A21),
|
|
/// Boot Keyboard Input Report
|
|
ATT_CHAR_BOOT_KB_IN_REPORT = ATT_UUID_16(0x2A22),
|
|
/// System ID
|
|
ATT_CHAR_SYS_ID = ATT_UUID_16(0x2A23),
|
|
/// Model Number String
|
|
ATT_CHAR_MODEL_NB = ATT_UUID_16(0x2A24),
|
|
/// Serial Number String
|
|
ATT_CHAR_SERIAL_NB = ATT_UUID_16(0x2A25),
|
|
/// Firmware Revision String
|
|
ATT_CHAR_FW_REV = ATT_UUID_16(0x2A26),
|
|
/// Hardware revision String
|
|
ATT_CHAR_HW_REV = ATT_UUID_16(0x2A27),
|
|
/// Software Revision String
|
|
ATT_CHAR_SW_REV = ATT_UUID_16(0x2A28),
|
|
/// Manufacturer Name String
|
|
ATT_CHAR_MANUF_NAME = ATT_UUID_16(0x2A29),
|
|
/// IEEE Regulatory Certification Data List
|
|
ATT_CHAR_IEEE_CERTIF = ATT_UUID_16(0x2A2A),
|
|
/// CT Time
|
|
ATT_CHAR_CT_TIME = ATT_UUID_16(0x2A2B),
|
|
/// Magnetic Declination
|
|
ATT_CHAR_MAGN_DECLINE = ATT_UUID_16(0x2A2C),
|
|
/// Scan Refresh
|
|
ATT_CHAR_SCAN_REFRESH = ATT_UUID_16(0x2A31),
|
|
/// Boot Keyboard Output Report
|
|
ATT_CHAR_BOOT_KB_OUT_REPORT = ATT_UUID_16(0x2A32),
|
|
/// Boot Mouse Input Report
|
|
ATT_CHAR_BOOT_MOUSE_IN_REPORT = ATT_UUID_16(0x2A33),
|
|
/// Glucose Measurement Context
|
|
ATT_CHAR_GLUCOSE_MEAS_CTX = ATT_UUID_16(0x2A34),
|
|
/// Blood Pressure Measurement
|
|
ATT_CHAR_BLOOD_PRESSURE_MEAS = ATT_UUID_16(0x2A35),
|
|
/// Intermediate Cuff Pressure
|
|
ATT_CHAR_INTERMEDIATE_CUFF_PRESSURE = ATT_UUID_16(0x2A36),
|
|
/// Heart Rate Measurement
|
|
ATT_CHAR_HEART_RATE_MEAS = ATT_UUID_16(0x2A37),
|
|
/// Body Sensor Location
|
|
ATT_CHAR_BODY_SENSOR_LOCATION = ATT_UUID_16(0x2A38),
|
|
/// Heart Rate Control Point
|
|
ATT_CHAR_HEART_RATE_CNTL_POINT = ATT_UUID_16(0x2A39),
|
|
/// Alert Status
|
|
ATT_CHAR_ALERT_STATUS = ATT_UUID_16(0x2A3F),
|
|
/// Ringer Control Point
|
|
ATT_CHAR_RINGER_CNTL_POINT = ATT_UUID_16(0x2A40),
|
|
/// Ringer Setting
|
|
ATT_CHAR_RINGER_SETTING = ATT_UUID_16(0x2A41),
|
|
/// Alert Category ID Bit Mask
|
|
ATT_CHAR_ALERT_CAT_ID_BIT_MASK = ATT_UUID_16(0x2A42),
|
|
/// Alert Category ID
|
|
ATT_CHAR_ALERT_CAT_ID = ATT_UUID_16(0x2A43),
|
|
/// Alert Notification Control Point
|
|
ATT_CHAR_ALERT_NTF_CTNL_PT = ATT_UUID_16(0x2A44),
|
|
/// Unread Alert Status
|
|
ATT_CHAR_UNREAD_ALERT_STATUS = ATT_UUID_16(0x2A45),
|
|
/// New Alert
|
|
ATT_CHAR_NEW_ALERT = ATT_UUID_16(0x2A46),
|
|
/// Supported New Alert Category
|
|
ATT_CHAR_SUP_NEW_ALERT_CAT = ATT_UUID_16(0x2A47),
|
|
/// Supported Unread Alert Category
|
|
ATT_CHAR_SUP_UNREAD_ALERT_CAT = ATT_UUID_16(0x2A48),
|
|
/// Blood Pressure Feature
|
|
ATT_CHAR_BLOOD_PRESSURE_FEATURE = ATT_UUID_16(0x2A49),
|
|
/// HID Information
|
|
ATT_CHAR_HID_INFO = ATT_UUID_16(0x2A4A),
|
|
/// Report Map
|
|
ATT_CHAR_REPORT_MAP = ATT_UUID_16(0x2A4B),
|
|
/// HID Control Point
|
|
ATT_CHAR_HID_CTNL_PT = ATT_UUID_16(0x2A4C),
|
|
/// Report
|
|
ATT_CHAR_REPORT = ATT_UUID_16(0x2A4D),
|
|
/// Protocol Mode
|
|
ATT_CHAR_PROTOCOL_MODE = ATT_UUID_16(0x2A4E),
|
|
/// Scan Interval Window
|
|
ATT_CHAR_SCAN_INTV_WD = ATT_UUID_16(0x2A4F),
|
|
/// PnP ID
|
|
ATT_CHAR_PNP_ID = ATT_UUID_16(0x2A50),
|
|
/// Glucose Feature
|
|
ATT_CHAR_GLUCOSE_FEATURE = ATT_UUID_16(0x2A51),
|
|
/// Record access control point
|
|
ATT_CHAR_REC_ACCESS_CTRL_PT = ATT_UUID_16(0x2A52),
|
|
/// RSC Measurement
|
|
ATT_CHAR_RSC_MEAS = ATT_UUID_16(0x2A53),
|
|
/// RSC Feature
|
|
ATT_CHAR_RSC_FEAT = ATT_UUID_16(0x2A54),
|
|
/// SC Control Point
|
|
ATT_CHAR_SC_CNTL_PT = ATT_UUID_16(0x2A55),
|
|
/// CSC Measurement
|
|
ATT_CHAR_CSC_MEAS = ATT_UUID_16(0x2A5B),
|
|
/// CSC Feature
|
|
ATT_CHAR_CSC_FEAT = ATT_UUID_16(0x2A5C),
|
|
/// Sensor Location
|
|
ATT_CHAR_SENSOR_LOC = ATT_UUID_16(0x2A5D),
|
|
/// CP Measurement
|
|
ATT_CHAR_CP_MEAS = ATT_UUID_16(0x2A63),
|
|
/// CP Vector
|
|
ATT_CHAR_CP_VECTOR = ATT_UUID_16(0x2A64),
|
|
/// CP Feature
|
|
ATT_CHAR_CP_FEAT = ATT_UUID_16(0x2A65),
|
|
/// CP Control Point
|
|
ATT_CHAR_CP_CNTL_PT = ATT_UUID_16(0x2A66),
|
|
/// Location and Speed
|
|
ATT_CHAR_LOC_SPEED = ATT_UUID_16(0x2A67),
|
|
/// Navigation
|
|
ATT_CHAR_NAVIGATION = ATT_UUID_16(0x2A68),
|
|
/// Position Quality
|
|
ATT_CHAR_POS_QUALITY = ATT_UUID_16(0x2A69),
|
|
/// LN Feature
|
|
ATT_CHAR_LN_FEAT = ATT_UUID_16(0x2A6A),
|
|
/// LN Control Point
|
|
ATT_CHAR_LN_CNTL_PT = ATT_UUID_16(0x2A6B),
|
|
/// Elevation
|
|
ATT_CHAR_ELEVATION = ATT_UUID_16(0x2A6C),
|
|
/// Pressure
|
|
ATT_CHAR_PRESSURE = ATT_UUID_16(0x2A6D),
|
|
/// Temperature
|
|
ATT_CHAR_TEMPERATURE = ATT_UUID_16(0x2A6E),
|
|
/// Humidity
|
|
ATT_CHAR_HUMIDITY = ATT_UUID_16(0x2A6F),
|
|
/// True Wind Speed
|
|
ATT_CHAR_TRUE_WIND_SPEED = ATT_UUID_16(0x2A70),
|
|
/// True Wind Direction
|
|
ATT_CHAR_TRUE_WIND_DIR = ATT_UUID_16(0x2A71),
|
|
/// Apparent Wind Speed
|
|
ATT_CHAR_APRNT_WIND_SPEED = ATT_UUID_16(0x2A72),
|
|
/// Apparent Wind Direction
|
|
ATT_CHAR_APRNT_WIND_DIRECTION = ATT_UUID_16(0x2A73),
|
|
/// Gust Factor
|
|
ATT_CHAR_GUST_FACTOR = ATT_UUID_16(0x2A74),
|
|
/// Pollen Concentration
|
|
ATT_CHAR_POLLEN_CONC = ATT_UUID_16(0x2A75),
|
|
/// UV Index
|
|
ATT_CHAR_UV_INDEX = ATT_UUID_16(0x2A76),
|
|
/// Irradiance
|
|
ATT_CHAR_IRRADIANCE = ATT_UUID_16(0x2A77),
|
|
/// Rainfall
|
|
ATT_CHAR_RAINFALL = ATT_UUID_16(0x2A78),
|
|
/// Wind Chill
|
|
ATT_CHAR_WIND_CHILL = ATT_UUID_16(0x2A79),
|
|
/// Heat Index
|
|
ATT_CHAR_HEAT_INDEX = ATT_UUID_16(0x2A7A),
|
|
/// Dew Point
|
|
ATT_CHAR_DEW_POINT = ATT_UUID_16(0x2A7B),
|
|
/// Descriptor Value Changed
|
|
ATT_CHAR_DESCRIPTOR_VALUE_CHANGED = ATT_UUID_16(0x2A7D),
|
|
/// Aerobic Heart Rate Lower Limit
|
|
ATT_CHAR_AEROBIC_HEART_RATE_LOWER_LIMIT = ATT_UUID_16(0x2A7E),
|
|
/// Aerobic Threshhold
|
|
ATT_CHAR_AEROBIC_THRESHHOLD = ATT_UUID_16(0x2A7F),
|
|
/// Age
|
|
ATT_CHAR_AGE = ATT_UUID_16(0x2A80),
|
|
/// Anaerobic Heart Rate Lower Limit
|
|
ATT_CHAR_ANAEROBIC_HEART_RATE_LOWER_LIMIT = ATT_UUID_16(0x2A81),
|
|
/// Anaerobic Heart Rate Upper Limit
|
|
ATT_CHAR_ANAEROBIC_HEART_RATE_UPPER_LIMIT = ATT_UUID_16(0x2A82),
|
|
/// Anaerobic Threshhold
|
|
ATT_CHAR_ANAEROBIC_THRESHHOLD = ATT_UUID_16(0x2A83),
|
|
/// Aerobic Heart Rate Upper Limit
|
|
ATT_CHAR_AEROBIC_HEART_RATE_UPPER_LIMIT = ATT_UUID_16(0x2A84),
|
|
/// Date Of Birth
|
|
ATT_CHAR_DATE_OF_BIRTH = ATT_UUID_16(0x2A85),
|
|
/// Date Of Threshold Assessment
|
|
ATT_CHAR_DATE_OF_THRESHOLD_ASSESSMENT = ATT_UUID_16(0x2A86),
|
|
/// Email Address
|
|
ATT_CHAR_EMAIL_ADDRESS = ATT_UUID_16(0x2A87),
|
|
/// Fat Burn Heart Rate Lower Limit
|
|
ATT_CHAR_FAT_BURN_HEART_RATE_LOWER_LIMIT = ATT_UUID_16(0x2A88),
|
|
/// Fat Burn Heart Rate Upper Limit
|
|
ATT_CHAR_FAT_BURN_HEART_RATE_UPPER_LIMIT = ATT_UUID_16(0x2A89),
|
|
/// First Name
|
|
ATT_CHAR_FIRST_NAME = ATT_UUID_16(0x2A8A),
|
|
/// Five Zone Heart Rate Limits
|
|
ATT_CHAR_FIVE_ZONE_HEART_RATE_LIMITS = ATT_UUID_16(0x2A8B),
|
|
/// Gender
|
|
ATT_CHAR_GENDER = ATT_UUID_16(0x2A8C),
|
|
/// Max Heart Rate
|
|
ATT_CHAR_MAX_HEART_RATE = ATT_UUID_16(0x2A8D),
|
|
/// Height
|
|
ATT_CHAR_HEIGHT = ATT_UUID_16(0x2A8E),
|
|
/// Hip Circumference
|
|
ATT_CHAR_HIP_CIRCUMFERENCE = ATT_UUID_16(0x2A8F),
|
|
/// Last Name
|
|
ATT_CHAR_LAST_NAME = ATT_UUID_16(0x2A90),
|
|
/// Maximum Recommended Heart Rate
|
|
ATT_CHAR_MAXIMUM_RECOMMENDED_HEART_RATE = ATT_UUID_16(0x2A91),
|
|
/// Resting Heart Rate
|
|
ATT_CHAR_RESTING_HEART_RATE = ATT_UUID_16(0x2A92),
|
|
/// Sport Type For Aerobic And Anaerobic Thresholds
|
|
ATT_CHAR_SPORT_TYPE_FOR_AEROBIC_AND_ANAEROBIC_THRESHOLDS = ATT_UUID_16(0x2A93),
|
|
/// Three Zone Heart Rate Limits
|
|
ATT_CHAR_THREE_ZONE_HEART_RATE_LIMITS = ATT_UUID_16(0x2A94),
|
|
/// Two Zone Heart Rate Limit
|
|
ATT_CHAR_TWO_ZONE_HEART_RATE_LIMIT = ATT_UUID_16(0x2A95),
|
|
/// Vo2 Max
|
|
ATT_CHAR_VO2_MAX = ATT_UUID_16(0x2A96),
|
|
/// Waist Circumference
|
|
ATT_CHAR_WAIST_CIRCUMFERENCE = ATT_UUID_16(0x2A97),
|
|
/// Weight
|
|
ATT_CHAR_WEIGHT = ATT_UUID_16(0x2A98),
|
|
/// Database Change Increment
|
|
ATT_CHAR_DATABASE_CHANGE_INCREMENT = ATT_UUID_16(0x2A99),
|
|
/// User Index
|
|
ATT_CHAR_USER_INDEX = ATT_UUID_16(0x2A9A),
|
|
/// Body Composition Feature
|
|
ATT_CHAR_BODY_COMPOSITION_FEATURE = ATT_UUID_16(0x2A9B),
|
|
/// Body Composition Measurement
|
|
ATT_CHAR_BODY_COMPOSITION_MEASUREMENT = ATT_UUID_16(0x2A9C),
|
|
/// Weight Measurement
|
|
ATT_CHAR_WEIGHT_MEASUREMENT = ATT_UUID_16(0x2A9D),
|
|
/// Weight Scale Feature
|
|
ATT_CHAR_WEIGHT_SCALE_FEATURE = ATT_UUID_16(0x2A9E),
|
|
/// User Control Point
|
|
ATT_CHAR_USER_CONTROL_POINT = ATT_UUID_16(0x2A9F),
|
|
/// Flux Density - 2D
|
|
ATT_CHAR_MAGN_FLUX_2D = ATT_UUID_16(0x2AA0),
|
|
/// Magnetic Flux Density - 3D
|
|
ATT_CHAR_MAGN_FLUX_3D = ATT_UUID_16(0x2AA1),
|
|
/// Language string
|
|
ATT_CHAR_LANGUAGE = ATT_UUID_16(0x2AA2),
|
|
/// Barometric Pressure Trend
|
|
ATT_CHAR_BAR_PRES_TREND = ATT_UUID_16(0x2AA3),
|
|
/// Central Address Resolution Support
|
|
ATT_CHAR_CTL_ADDR_RESOL_SUPP = ATT_UUID_16(0x2AA6),
|
|
};
|
|
|
|
/// Format for Characteristic Presentation
|
|
enum {
|
|
/// unsigned 1-bit: true or false
|
|
ATT_FORMAT_BOOL = 0x01,
|
|
/// unsigned 2-bit integer
|
|
ATT_FORMAT_2BIT,
|
|
/// unsigned 4-bit integer
|
|
ATT_FORMAT_NIBBLE,
|
|
/// unsigned 8-bit integer
|
|
ATT_FORMAT_UINT8,
|
|
/// unsigned 12-bit integer
|
|
ATT_FORMAT_UINT12,
|
|
/// unsigned 16-bit integer
|
|
ATT_FORMAT_UINT16,
|
|
/// unsigned 24-bit integer
|
|
ATT_FORMAT_UINT24,
|
|
/// unsigned 32-bit integer
|
|
ATT_FORMAT_UINT32,
|
|
/// unsigned 48-bit integer
|
|
ATT_FORMAT_UINT48,
|
|
/// unsigned 64-bit integer
|
|
ATT_FORMAT_UINT64,
|
|
/// unsigned 128-bit integer
|
|
ATT_FORMAT_UINT128,
|
|
/// signed 8-bit integer
|
|
ATT_FORMAT_SINT8,
|
|
/// signed 12-bit integer
|
|
ATT_FORMAT_SINT12,
|
|
/// signed 16-bit integer
|
|
ATT_FORMAT_SINT16,
|
|
/// signed 24-bit integer
|
|
ATT_FORMAT_SINT24,
|
|
/// signed 32-bit integer
|
|
ATT_FORMAT_SINT32,
|
|
/// signed 48-bit integer
|
|
ATT_FORMAT_SINT48,
|
|
/// signed 64-bit integer
|
|
ATT_FORMAT_SINT64,
|
|
/// signed 128-bit integer
|
|
ATT_FORMAT_SINT128,
|
|
/// IEEE-754 32-bit floating point
|
|
ATT_FORMAT_FLOAT32,
|
|
/// IEEE-754 64-bit floating point
|
|
ATT_FORMAT_FLOAT64,
|
|
/// IEEE-11073 16-bit SFLOAT
|
|
ATT_FORMAT_SFLOAT,
|
|
/// IEEE-11073 32-bit FLOAT
|
|
ATT_FORMAT_FLOAT,
|
|
/// IEEE-20601 format
|
|
ATT_FORMAT_DUINT16,
|
|
/// UTF-8 string
|
|
ATT_FORMAT_UTF8S,
|
|
/// UTF-16 string
|
|
ATT_FORMAT_UTF16S,
|
|
/// Opaque structure
|
|
ATT_FORMAT_STRUCT,
|
|
/// Last format
|
|
ATT_FORMAT_LAST
|
|
};
|
|
|
|
|
|
/// Client Characteristic Configuration Codes
|
|
enum att_ccc_val
|
|
{
|
|
/// Stop notification/indication
|
|
ATT_CCC_STOP_NTFIND = 0x0000,
|
|
/// Start notification
|
|
ATT_CCC_START_NTF,
|
|
/// Start indication
|
|
ATT_CCC_START_IND
|
|
};
|
|
|
|
/*
|
|
* Type Definition
|
|
****************************************************************************************
|
|
*/
|
|
|
|
/// Attribute length type
|
|
typedef uint16_t att_size_t;
|
|
|
|
|
|
/// UUID - 128-bit type
|
|
struct att_uuid_128
|
|
{
|
|
/// 128-bit UUID
|
|
uint8_t uuid[ATT_UUID_128_LEN];
|
|
};
|
|
|
|
/// UUID - 32-bit type
|
|
struct att_uuid_32
|
|
{
|
|
/// 32-bit UUID
|
|
uint8_t uuid[ATT_UUID_32_LEN];
|
|
};
|
|
|
|
|
|
|
|
/// Characteristic Value Descriptor
|
|
struct att_char_desc
|
|
{
|
|
/// properties
|
|
uint8_t prop;
|
|
/// attribute handle
|
|
uint8_t attr_hdl[ATT_HANDLE_LEN];
|
|
/// attribute type
|
|
uint8_t attr_type[ATT_UUID_16_LEN];
|
|
};
|
|
|
|
/// Characteristic Value Descriptor
|
|
struct att_char128_desc
|
|
{
|
|
/// properties
|
|
uint8_t prop;
|
|
/// attribute handle
|
|
uint8_t attr_hdl[ATT_HANDLE_LEN];
|
|
/// attribute type
|
|
uint8_t attr_type[ATT_UUID_128_LEN];
|
|
};
|
|
|
|
/// Service Value Descriptor - 16-bit
|
|
typedef uint16_t att_svc_desc_t;
|
|
|
|
/// include service entry element
|
|
struct att_incl_desc
|
|
{
|
|
/// start handle value of included service
|
|
uint16_t start_hdl;
|
|
/// end handle value of included service
|
|
uint16_t end_hdl;
|
|
/// attribute value UUID
|
|
uint16_t uuid;
|
|
};
|
|
|
|
/// include service entry element
|
|
struct att_incl128_desc
|
|
{
|
|
/// start handle value of included service
|
|
uint16_t start_hdl;
|
|
/// end handle value of included service
|
|
uint16_t end_hdl;
|
|
};
|
|
|
|
|
|
// -------------------------- PDU HANDLER Definition --------------------------
|
|
|
|
/// used to know if PDU handler has been found
|
|
#define ATT_PDU_HANDLER_NOT_FOUND (0xff)
|
|
|
|
/// Format of a pdu handler function
|
|
typedef int (*att_func_t)(uint8_t conidx, void *pdu);
|
|
|
|
/// Element of a pdu handler table.
|
|
struct att_pdu_handler
|
|
{
|
|
/// PDU identifier of the message
|
|
uint8_t pdu_id;
|
|
/// Pointer to the handler function for the pdu above.
|
|
att_func_t handler;
|
|
};
|
|
|
|
|
|
// --------------------------- Database permissions -----------------------------
|
|
|
|
/// Macro used to retrieve access permission rights
|
|
#define PERM_GET(perm, access)\
|
|
(((perm) & (PERM_MASK_ ## access)) >> (PERM_POS_ ## access))
|
|
|
|
/// Macro used to retrieve permission value from access and rights on attribute.
|
|
#define PERM(access, right) \
|
|
(((PERM_RIGHT_ ## right) << (PERM_POS_ ## access)) & (PERM_MASK_ ## access))
|
|
|
|
/// Macro used know if permission is set or not.
|
|
#define PERM_IS_SET(perm, access, right) \
|
|
(((perm) & (((PERM_RIGHT_ ## right) << (PERM_POS_ ## access))) \
|
|
& (PERM_MASK_ ## access)) == PERM(access, right))
|
|
|
|
/// Macro used to create permission value
|
|
#define PERM_VAL(access, perm) \
|
|
((((perm) << (PERM_POS_ ## access))) & (PERM_MASK_ ## access))
|
|
|
|
|
|
|
|
/// Retrieve attribute security level from attribute right and service right
|
|
#define ATT_GET_SEC_LVL(att_right, svc_right) \
|
|
co_max(((att_right) & PERM_RIGHT_AUTH), ((svc_right) & PERM_RIGHT_AUTH));
|
|
|
|
/// Retrieve UUID LEN from UUID Length Permission
|
|
#define ATT_UUID_LEN(uuid_len_perm) ((uuid_len_perm == 0) ? ATT_UUID_16_LEN : \
|
|
((uuid_len_perm == 1) ? ATT_UUID_32_LEN : \
|
|
((uuid_len_perm == 2) ? ATT_UUID_128_LEN : 0)))
|
|
|
|
/// Initialization of attribute element
|
|
#define ATT_ELEMT_INIT {{NULL}, false}
|
|
|
|
/**
|
|
* 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
|
|
* +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
|
|
* |EXT | WS | I | N | WR | WC | RD | B | NP | IP | WP | RP |
|
|
* +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
|
|
*
|
|
* Bit [0-1] : Read Permission (0 = NO_AUTH, 1 = UNAUTH, 2 = AUTH, 3 = SEC_CON)
|
|
* Bit [2-3] : Write Permission (0 = NO_AUTH, 1 = UNAUTH, 2 = AUTH, 3 = SEC_CON)
|
|
* Bit [4-5] : Indication Permission (0 = NO_AUTH, 1 = UNAUTH, 2 = AUTH, 3 = SEC_CON)
|
|
* Bit [6-7] : Notification Permission (0 = NO_AUTH, 1 = UNAUTH, 2 = AUTH, 3 = SEC_CON)
|
|
*
|
|
* Bit [8] : Broadcast permission (only relevant for a characteristic value)
|
|
* Bit [9] : Read accepted
|
|
* Bit [10] : Write Command accepted
|
|
* Bit [11] : Write Request accepted
|
|
* Bit [12] : Notification accepted
|
|
* Bit [13] : Indication accepted
|
|
* Bit [14] : Write Signed accepted
|
|
* Bit [15] : Extended properties present (only relevant for a characteristic value)
|
|
*/
|
|
enum attm_perm_mask
|
|
{
|
|
/// retrieve all permission info
|
|
PERM_MASK_ALL = 0x0000,
|
|
/// Read Permission Mask
|
|
PERM_MASK_RP = 0x0003,
|
|
PERM_POS_RP = 0,
|
|
/// Write Permission Mask
|
|
PERM_MASK_WP = 0x000C,
|
|
PERM_POS_WP = 2,
|
|
/// Indication Access Mask
|
|
PERM_MASK_IP = 0x0030,
|
|
PERM_POS_IP = 4,
|
|
/// Notification Access Mask
|
|
PERM_MASK_NP = 0x00C0,
|
|
PERM_POS_NP = 6,
|
|
/// Broadcast descriptor present
|
|
PERM_MASK_BROADCAST = 0x0100,
|
|
PERM_POS_BROADCAST = 8,
|
|
/// Read Access Mask
|
|
PERM_MASK_RD = 0x0200,
|
|
PERM_POS_RD = 9,
|
|
/// Write Command Enabled attribute Mask
|
|
PERM_MASK_WRITE_COMMAND = 0x0400,
|
|
PERM_POS_WRITE_COMMAND = 10,
|
|
/// Write Request Enabled attribute Mask
|
|
PERM_MASK_WRITE_REQ = 0x0800,
|
|
PERM_POS_WRITE_REQ = 11,
|
|
/// Notification Access Mask
|
|
PERM_MASK_NTF = 0x1000,
|
|
PERM_POS_NTF = 12,
|
|
/// Indication Access Mask
|
|
PERM_MASK_IND = 0x2000,
|
|
PERM_POS_IND = 13,
|
|
/// Write Signed Enabled attribute Mask
|
|
PERM_MASK_WRITE_SIGNED = 0x4000,
|
|
PERM_POS_WRITE_SIGNED = 14,
|
|
/// Extended properties descriptor present
|
|
PERM_MASK_EXT = 0x8000,
|
|
PERM_POS_EXT = 15,
|
|
|
|
/// Properties
|
|
PERM_MASK_PROP = 0xFF00,
|
|
PERM_POS_PROP = 8,
|
|
};
|
|
|
|
/**
|
|
* Value permission bit field
|
|
*
|
|
* 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
|
|
* +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
|
|
* | RI |UUID_LEN |EKS | MAX_LEN (RI = 1) / Value Offset (RI = 0) |
|
|
* +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
|
|
*
|
|
* Bit [0-11] : Maximum Attribute Length or Value Offset pointer
|
|
* Bit [12] : Encryption key Size must be 16 bytes
|
|
* Bit [14-13]: UUID Length (0 = 16 bits, 1 = 32 bits, 2 = 128 bits, 3 = RFU)
|
|
* Bit [15] : Trigger Read Indication (0 = Value present in Database, 1 = Value not present in Database)
|
|
*/
|
|
enum attm_value_perm_mask
|
|
{
|
|
/// Maximum Attribute Length
|
|
PERM_MASK_MAX_LEN = 0x0FFF,
|
|
PERM_POS_MAX_LEN = 0,
|
|
/// Attribute value Offset
|
|
PERM_MASK_VAL_OFFSET = 0x0FFF,
|
|
PERM_POS_VAL_OFFSET = 0,
|
|
/// Check Encryption key size Mask
|
|
PERM_MASK_EKS = 0x1000,
|
|
PERM_POS_EKS = 12,
|
|
/// UUID Length
|
|
PERM_MASK_UUID_LEN = 0x6000,
|
|
PERM_POS_UUID_LEN = 13,
|
|
/// Read trigger Indication
|
|
PERM_MASK_RI = 0x8000,
|
|
PERM_POS_RI = 15,
|
|
};
|
|
|
|
|
|
/**
|
|
* Service permissions
|
|
*
|
|
* 7 6 5 4 3 2 1 0
|
|
* +----+----+----+----+----+----+----+----+
|
|
* |SEC |UUID_LEN |DIS | AUTH |EKS | MI |
|
|
* +----+----+----+----+----+----+----+----+
|
|
*
|
|
* Bit [0] : Task that manage service is multi-instantiated (Connection index is conveyed)
|
|
* Bit [1] : Encryption key Size must be 16 bytes
|
|
* Bit [2-3]: Service Permission (0 = NO_AUTH, 1 = UNAUTH, 2 = AUTH, 3 = Secure Connect)
|
|
* Bit [4] : Disable the service
|
|
* Bit [5-6]: UUID Length (0 = 16 bits, 1 = 32 bits, 2 = 128 bits, 3 = RFU)
|
|
* Bit [7] : Secondary Service (0 = Primary Service, 1 = Secondary Service)
|
|
*/
|
|
enum attm_svc_perm_mask
|
|
{
|
|
/// Task that manage service is multi-instantiated
|
|
PERM_MASK_SVC_MI = 0x01,
|
|
PERM_POS_SVC_MI = 0,
|
|
/// Check Encryption key size for service Access
|
|
PERM_MASK_SVC_EKS = 0x02,
|
|
PERM_POS_SVC_EKS = 1,
|
|
/// Service Permission authentication
|
|
PERM_MASK_SVC_AUTH = 0x0C,
|
|
PERM_POS_SVC_AUTH = 2,
|
|
/// Disable the service
|
|
PERM_MASK_SVC_DIS = 0x10,
|
|
PERM_POS_SVC_DIS = 4,
|
|
/// Service UUID Length
|
|
PERM_MASK_SVC_UUID_LEN = 0x60,
|
|
PERM_POS_SVC_UUID_LEN = 5,
|
|
/// Service type Secondary
|
|
PERM_MASK_SVC_SECONDARY = 0x80,
|
|
PERM_POS_SVC_SECONDARY = 7,
|
|
};
|
|
|
|
/// Attribute & Service access mode
|
|
enum
|
|
{
|
|
/// Disable access
|
|
PERM_RIGHT_DISABLE = 0,
|
|
/// Enable access
|
|
PERM_RIGHT_ENABLE = 1,
|
|
};
|
|
|
|
/// Attribute & Service access rights
|
|
enum
|
|
{
|
|
/// No Authentication
|
|
PERM_RIGHT_NO_AUTH = 0,
|
|
/// Access Requires Unauthenticated link
|
|
PERM_RIGHT_UNAUTH = 1,
|
|
/// Access Requires Authenticated link
|
|
PERM_RIGHT_AUTH = 2,
|
|
/// Access Requires Secure Connection link
|
|
PERM_RIGHT_SEC_CON = 3,
|
|
};
|
|
|
|
/// Attribute & Service UUID Length
|
|
enum
|
|
{
|
|
/// 16 bits UUID
|
|
PERM_UUID_16 = 0,
|
|
PERM_RIGHT_UUID_16 = 0,
|
|
/// 32 bits UUID
|
|
PERM_UUID_32 = 1,
|
|
PERM_RIGHT_UUID_32 = 1,
|
|
/// 128 bits UUID
|
|
PERM_UUID_128 = 2,
|
|
PERM_RIGHT_UUID_128 = 2,
|
|
/// Invalid
|
|
PERM_UUID_RFU = 3,
|
|
};
|
|
|
|
/// execute flags
|
|
enum
|
|
{
|
|
/// Cancel All the Reliable Writes
|
|
ATT_CANCEL_ALL_PREPARED_WRITES = 0x00,
|
|
/// Write All the Reliable Writes
|
|
ATT_EXECUTE_ALL_PREPARED_WRITES
|
|
};
|
|
|
|
|
|
|
|
/// @} ATT
|
|
#endif // ATT_H_
|