UUID
“GATT层”中定义的所有属性都有⼀个UUID值,UUID是全球唯⼀的128位的号码,它⽤来识别不同的特性。
1 蓝⽛技术联盟 UUID
蓝⽛核⼼规范制定了两种不同的UUID,⼀种是基本的UUID,⼀种是代替基本UUID的16位UUID。
所有的蓝⽛技术联盟定义UUID共⽤了⼀个基本的UUID:0x0000xxxx-0000-1000-8000-00805F9B34FB为了进⼀步简化基本UUID,每⼀个蓝⽛技术联盟定义的属性有⼀个唯⼀的,每⼀个蓝⽛技术联盟定义的属性有16位UUID,以代替上⾯的基本UUID的‘x’部分。例如,Heart Rate Measurement使⽤0X2A37作为它的16位UUID,因此它完整的128位UUID为:0x00002A37-0000-1000-8000-00805F9B34FB
虽然蓝⽛技术联盟使⽤相同的基本UUID,但是16位的UUID⾜够唯⼀地识别蓝⽛技术联盟所定义的各种属性。
蓝⽛技术联盟所⽤的基本UUID不能⽤于任何定制的属性、服务和特性。对于定制的属性,必对于定制的属性,必须使⽤另外完整的128位UUID。
2 供应商特定的UUID
SoftDevice 根据蓝⽛技术联盟定义UUID类似的⽅式定义UUID:先增加⼀个特定的基本
UUID,再定义⼀个16位的UUID(类似于⼀个别名),再加载在基本UUID之上。这种采⽤为所
有的定制属性定义⼀个共⽤的基本UUID的⽅式使得应⽤变为更加简单,⾄少在同⼀服务中更是
如此。
使⽤软件nRFgo Studio⾮常容易产⽣⼀个新的基本UUID:
例如,在LED BUTTON⽰例中,采⽤0x0000xxxx-1212-EFDE-1523-785FEABCD123作为基
本UUID。
蓝⽛核⼼规范没有任何规则或是建议如何对加⼊基本UUID的16位UUID进⾏分配,因此你可以
按照你的意图来任意分配。
例如,在LED BUTTON⽰例中,0x1523作为服务的UUID,0x1524作为LED特性的
UUID,0x1525作为按键状态特性的UUID。
GATT 中用到的UUID定义
/**
GATT Service UUIDs
*/
#define IMMEDIATE_ALERT_SERV_UUID 0x1802 // Immediate Alert
#define LINK_LOSS_SERV_UUID 0x1803 // Link Loss
#define TX_PWR_LEVEL_SERV_UUID 0x1804 // Tx Power
#define CURRENT_TIME_SERV_UUID 0x1805 // Current Time Service
#define REF_TIME_UPDATE_SERV_UUID 0x1806 // Reference Time Update Service
#define NEXT_DST_CHANGE_SERV_UUID 0x1807 // Next DST Change Service
#define GLUCOSE_SERV_UUID 0x1808 // Glucose
#define THERMOMETER_SERV_UUID 0x1809 // Health Thermometer
#define DEVINFO_SERV_UUID 0x180A // Device Information
#define NWA_SERV_UUID 0x180B // Network Availability
#define HEARTRATE_SERV_UUID 0x180D // Heart Rate
#define PHONE_ALERT_STS_SERV_UUID 0x180E // Phone Alert Status Service
#define BATT_SERV_UUID 0x180F // Battery Service
#define BLOODPRESSURE_SERV_UUID 0x1810 // Blood Pressure
#define ALERT_NOTIF_SERV_UUID 0x1811 // Alert Notification Service
#define HID_SERV_UUID 0x1812 // Human Interface Device
#define SCAN_PARAM_SERV_UUID 0x1813 // Scan Parameters
#define RSC_SERV_UUID 0x1814 // Running Speed and Cadence
#define CSC_SERV_UUID 0x1816 // Cycling Speed and Cadence
#define CYCPWR_SERV_UUID 0x1818 // Cycling Power
#define LOC_NAV_SERV_UUID 0x1819 // Location and Navigation
/**
GATT Characteristic UUIDs
*/
#define ALERT_LEVEL_UUID 0x2A06 // Alert Level
#define TX_PWR_LEVEL_UUID 0x2A07 // Tx Power Level
#define DATE_TIME_UUID 0x2A08 // Date Time
#define DAY_OF_WEEK_UUID 0x2A09 // Day of Week
#define DAY_DATE_TIME_UUID 0x2A0A // Day Date Time
#define EXACT_TIME_256_UUID 0x2A0C // Exact Time 256
#define DST_OFFSET_UUID 0x2A0D // DST Offset
#define TIME_ZONE_UUID 0x2A0E // Time Zone
#define LOCAL_TIME_INFO_UUID 0x2A0F // Local Time Information
#define TIME_WITH_DST_UUID 0x2A11 // Time with DST
#define TIME_ACCURACY_UUID 0x2A12 // Time Accuracy
#define TIME_SOURCE_UUID 0x2A13 // Time Source
#define REF_TIME_INFO_UUID 0x2A14 // Reference Time Information
#define TIME_UPDATE_CTRL_PT_UUID 0x2A16 // Time Update Control Point
#define TIME_UPDATE_STATE_UUID 0x2A17 // Time Update State
#define GLUCOSE_MEAS_UUID 0x2A18 // Glucose Measurement
#define BATT_LEVEL_UUID 0x2A19 // Battery Level
#define TEMP_MEAS_UUID 0x2A1C // Temperature Measurement
#define TEMP_TYPE_UUID 0x2A1D // Temperature Type
#define IMEDIATE_TEMP_UUID 0x2A1E // Intermediate Temperature
#define MEAS_INTERVAL_UUID 0x2A21 // Measurement Interval
#define BOOT_KEY_INPUT_UUID 0x2A22 // Boot Keyboard Input Report
#define SYSTEM_ID_UUID 0x2A23 // System ID
#define MODEL_NUMBER_UUID 0x2A24 // Model Number String
#define SERIAL_NUMBER_UUID 0x2A25 // Serial Number String
#define FIRMWARE_REV_UUID 0x2A26 // Firmware Revision String
#define HARDWARE_REV_UUID 0x2A27 // Hardware Revision String
#define SOFTWARE_REV_UUID 0x2A28 // Software Revision String
#define MANUFACTURER_NAME_UUID 0x2A29 // Manufacturer Name String
#define IEEE_11073_CERT_DATA_UUID 0x2A2A // IEEE 11073-20601 Regulatory Certification Data List
#define CURRENT_TIME_UUID 0x2A2B // Current Time
#define SCAN_REFRESH_UUID 0x2A31 // Scan Refresh
#define BOOT_KEY_OUTPUT_UUID 0x2A32 // Boot Keyboard Output Report
#define BOOT_MOUSE_INPUT_UUID 0x2A33 // Boot Mouse Input Report
#define GLUCOSE_CONTEXT_UUID 0x2A34 // Glucose Measurement Context
#define BLOODPRESSURE_MEAS_UUID 0x2A35 // Blood Pressure Measurement
#define IMEDIATE_CUFF_PRESSURE_UUID 0x2A36 // Intermediate Cuff Pressure
#define HEARTRATE_MEAS_UUID 0x2A37 // Heart Rate Measurement
#define BODY_SENSOR_LOC_UUID 0x2A38 // Body Sensor Location
#define HEARTRATE_CTRL_PT_UUID 0x2A39 // Heart Rate Control Point
#define NETWORK_AVAIL_UUID 0x2A3E // Network Availability
#define ALERT_STATUS_UUID 0x2A3F // Alert Status
#define RINGER_CTRL_PT_UUID 0x2A40 // Ringer Control Point
#define RINGER_SETTING_UUID 0x2A41 // Ringer Setting
#define ALERT_CAT_ID_BMASK_UUID 0x2A42 // Alert Category ID Bit Mask
#define ALERT_CAT_ID_UUID 0x2A43 // Alert Category ID
#define ALERT_NOTIF_CTRL_PT_UUID 0x2A44 // Alert Notification Control Point
#define UNREAD_ALERT_STATUS_UUID 0x2A45 // Unread Alert Status
#define NEW_ALERT_UUID 0x2A46 // New Alert
#define SUP_NEW_ALERT_CAT_UUID 0x2A47 // Supported New Alert Category
#define SUP_UNREAD_ALERT_CAT_UUID 0x2A48 // Supported Unread Alert Category
#define BLOODPRESSURE_FEATURE_UUID 0x2A49 // Blood Pressure Feature
#define HID_INFORMATION_UUID 0x2A4A // HID Information
#define REPORT_MAP_UUID 0x2A4B // Report Map
#define HID_CTRL_PT_UUID 0x2A4C // HID Control Point
#define REPORT_UUID 0x2A4D // Report
#define PROTOCOL_MODE_UUID 0x2A4E // Protocol Mode
#define SCAN_INTERVAL_WINDOW_UUID 0x2A4F // Scan Interval Window
#define PNP_ID_UUID 0x2A50 // PnP ID
#define GLUCOSE_FEATURE_UUID 0x2A51 // Glucose Feature
#define RECORD_CTRL_PT_UUID 0x2A52 // Record Access Control Point
#define RSC_MEAS_UUID 0x2A53 // RSC Measurement
#define RSC_FEATURE_UUID 0x2A54 // RSC Feature
#define SC_CTRL_PT_UUID 0x2A55 // SC Control Point
#define CSC_MEAS_UUID 0x2A5B // CSC Measurement
#define CSC_FEATURE_UUID 0x2A5C // CSC Feature
#define SENSOR_LOC_UUID 0x2A5D // Sensor Location
#define CYCPWR_MEAS_UUID 0x2A63 // Cycling Power Measurement
#define CYCPWR_VECTOR_UUID 0x2A64 // Cycling Power Vector
#define CYCPWR_FEATURE_UUID 0x2A65 // Cycling Power Feature
#define CYCPWR_CTRL_PT_UUID 0x2A66 // Cycling Power Control Point
#define LOC_SPEED_UUID 0x2A67 // Location and Speed
#define NAV_UUID 0x2A68 // Navigation
#define POS_QUALITY_UUID 0x2A69 // Position Quality
#define LN_FEATURE_UUID 0x2A6A // LN Feature
#define LN_CTRL_PT_UUID 0x2A6B // LN Control Point
/**
GATT Unit UUIDs
*/
#define GATT_UNITLESS_UUID 0x2700 // <Symbol>, <Expressed in terms of SI base units>
#define GATT_UNIT_LENGTH_METER_UUID 0x2701 // m, m
#define GATT_UNIT_MASS_KGRAM_UUID 0x2702 // kg, kg
#define GATT_UNIT_TIME_SECOND_UUID 0x2703 // s, s
#define GATT_UNIT_ELECTRIC_CURRENT_A_UUID 0x2704 // A, A
#define GATT_UNIT_THERMODYN_TEMP_K_UUID 0x2705 // K, K
#define GATT_UNIT_AMOUNT_SUBSTANCE_M_UUID 0x2706 // mol, mol
#define GATT_UNIT_LUMINOUS_INTENSITY_C_UUID 0x2707 // cd, cd
#define GATT_UNIT_AREA_SQ_MTR_UUID 0x2710 // m^2, m^2
#define GATT_UNIT_VOLUME_CUBIC_MTR_UUID 0x2711 // m^3, m^3
#define GATT_UNIT_VELOCITY_MPS_UUID 0x2712 // m/s, m s^-1
#define GATT_UNIT_ACCELERATION_MPS_SQ_UUID 0x2713 // m/s^2, m s^-2
#define GATT_UNIT_WAVENUMBER_RM_UUID 0x2714 // ? m^-1
#define GATT_UNIT_DENSITY_KGPCM_UUID 0x2715 // p, kg m^-3
#define GATT_UNIT_SURFACE_DENSITY_KGPSM_UUID 0x2716 // pA, kg m^-2
#define GATT_UNIT_SPECIFIC_VOLUME_CMPKG_UUID 0x2717 // v, m^3 kg^-1
#define GATT_UNIT_CURRENT_DENSITY_APSM_UUID 0x2718 // j, A m^-2
#define GATT_UNIT_MAG_FIELD_STRENGTH_UUID 0x2719 // H, A m
#define GATT_UNIT_AMOUNT_CONC_MPCM_UUID 0x271A // c, mol m^-3
#define GATT_UNIT_MASS_CONC_KGPCM_UUID 0x271B // c, kg m^-3
#define GATT_UNIT_LUMINANCE_CPSM_UUID 0x271C // Lv, cd m^-2
#define GATT_UNIT_REFRACTIVE_INDEX_UUID 0x271D // n, 1
#define GATT_UNIT_RELATIVE_PERMEABLILTY_UUID 0x271E // u, 1
#define GATT_UNIT_PLANE_ANGLE_RAD_UUID 0x2720 // rad, m m-1
#define GATT_UNIT_SOLID_ANGLE_STERAD_UUID 0x2721 // sr, m2 m-2
#define GATT_UNIT_FREQUENCY_HTZ_UUID 0x2722 // Hz, s-1
#define GATT_UNIT_FORCE_NEWTON_UUID 0x2723 // N, m kg s-2
#define GATT_UNIT_PRESSURE_PASCAL_UUID 0x2724 // Pa, N/m2 = m2 kg s-2
#define GATT_UNIT_ENERGY_JOULE_UUID 0x2725 // J, N m = m2 kg s-2
#define GATT_UNIT_POWER_WATT_UUID 0x2726 // W, J/s = m2 kg s-3
#define GATT_UNIT_E_CHARGE_C_UUID 0x2727 // C, sA
#define GATT_UNIT_E_POTENTIAL_DIF_V_UUID 0x2728 // V, W/A = m2 kg s-3 A-1
#define GATT_UNIT_CELSIUS_TEMP_DC_UUID 0x272F // oC, t/oC = T/K - 273.15
#define GATT_UNIT_TIME_MINUTE_UUID 0x2760 // min, 60 s
#define GATT_UNIT_TIME_HOUR_UUID 0x2761 // h, 3600 s
#define GATT_UNIT_TIME_DAY_UUID 0x2762 // d, 86400 s
#define GATT_UNIT_PLANE_ANGLE_DEGREE_UUID 0x2763 // o, (pi/180) rad
#define GATT_UNIT_PLANE_ANGLE_MINUTE_UUID 0x2764 // ', (pi/10800) rad
#define GATT_UNIT_PLANE_ANGLE_SECOND_UUID 0x2765 // '', (pi/648000) rad
#define GATT_UNIT_AREA_HECTARE_UUID 0x2766 // ha, 10^4 m^2
#define GATT_UNIT_VOLUME_LITRE_UUID 0x2767 // l, 10^-3 m^3
#define GATT_UNIT_MASS_TONNE_UUID 0x2768 // t, 10^3 kg
#define GATT_UINT_LENGTH_YARD_UUID 0x27A0 // yd, 0.9144 m
#define GATT_UNIT_LENGTH_PARSEC_UUID 0x27A1 // pc, 3.085678 ?1016 m
#define GATT_UNIT_LENGTH_INCH_UUID 0x27A2 // in, 0.0254 m
#define GATT_UNIT_LENGTH_FOOT_UUID 0x27A3 // ft, 0.3048 m
#define GATT_UNIT_LENGTH_MILE_UUID 0x27A4 // mi, 1609.347 m
#define GATT_UNIT_PRESSURE_PFPSI_UUID 0x27A5 // psi, 6.894757 ?103 Pa
#define GATT_UNIT_VELOCITY_KMPH_UUID 0x27A6 // km/h, 0.2777778 m^s-1
#define GATT_UNIT_VELOCITY_MPH_UUID 0x27A7 // mi/h, 0.44704 m^ s-1
#define GATT_UNIT_ANGULAR_VELOCITY_RPM_UUID 0x27A8 // r/min, 0.1047198 rad s-1
#define GATT_UNIT_ENERGY_GCAL_UUID 0x27A9 //
#define GATT_UNIT_ENERGY_KCAL_UUID 0x27AA // kcal, 4190.02 J
#define GATT_UNIT_ENERGY_KWH_UUID 0x27AB // kWh, 3600000 J
#define GATT_UNIT_THERMODYN_TEMP_DF_UUID 0x27AC // oF, t/oF = T/K ?1.8 - 459.67
#define GATT_UNIT_PERCENTAGE_UUID 0x27AD // %
#define GATT_UNIT_PER_MILE_UUID 0x27AE //
#define GATT_UNIT_PERIOD_BPM_UUID 0x27AF //
#define GATT_UNIT_E_CHARGE_AH_UUID 0x27B0 //
#define GATT_UNIT_MASS_DENSITY_MGPD_UUID 0x27B1 //
#define GATT_UNIT_MASS_DENSITY_MMPL_UUID 0x27B2 //
#define GATT_UNIT_TIME_YEAR_UUID 0x27B3 //
#define GATT_UNIT_TIME_MONTH_UUID 0x27B4 //