Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save hpssjellis/73be32a94e36525bdb9a171e6c4147b5 to your computer and use it in GitHub Desktop.
Save hpssjellis/73be32a94e36525bdb9a171e6c4147b5 to your computer and use it in GitHub Desktop.

Revisions

  1. Sameer revised this gist Jun 2, 2018. 7 changed files with 737 additions and 26 deletions.
    243 changes: 243 additions & 0 deletions AllGattCharacteristics.java
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,243 @@
    package com.sam016.vsflatomation.service.ble;

    import java.util.HashMap;
    import java.util.UUID;

    public class AllGattCharacteristics {
    private static HashMap<String, String> attributes = new HashMap();

    static {
    attributes.put("00002a00-0000-1000-8000-00805f9b34fb", "Device Name");
    attributes.put("00002a01-0000-1000-8000-00805f9b34fb", "Appearance");
    attributes.put("00002a02-0000-1000-8000-00805f9b34fb", "Peripheral Privacy Flag");
    attributes.put("00002a03-0000-1000-8000-00805f9b34fb", "Reconnection Address");
    attributes.put("00002a04-0000-1000-8000-00805f9b34fb", "Peripheral Preferred Connection Parameters");
    attributes.put("00002a05-0000-1000-8000-00805f9b34fb", "Service Changed");
    attributes.put("00002a06-0000-1000-8000-00805f9b34fb", "Alert Level");
    attributes.put("00002a07-0000-1000-8000-00805f9b34fb", "Tx Power Level");
    attributes.put("00002a08-0000-1000-8000-00805f9b34fb", "Date Time");
    attributes.put("00002a09-0000-1000-8000-00805f9b34fb", "Day of Week");
    attributes.put("00002a0a-0000-1000-8000-00805f9b34fb", "Day Date Time");
    attributes.put("00002a0b-0000-1000-8000-00805f9b34fb", "Exact Time 100");
    attributes.put("00002a0c-0000-1000-8000-00805f9b34fb", "Exact Time 256");
    attributes.put("00002a0d-0000-1000-8000-00805f9b34fb", "DST Offset");
    attributes.put("00002a0e-0000-1000-8000-00805f9b34fb", "Time Zone");
    attributes.put("00002a0f-0000-1000-8000-00805f9b34fb", "Local Time Information");
    attributes.put("00002a10-0000-1000-8000-00805f9b34fb", "Secondary Time Zone");
    attributes.put("00002a11-0000-1000-8000-00805f9b34fb", "Time with DST");
    attributes.put("00002a12-0000-1000-8000-00805f9b34fb", "Time Accuracy");
    attributes.put("00002a13-0000-1000-8000-00805f9b34fb", "Time Source");
    attributes.put("00002a14-0000-1000-8000-00805f9b34fb", "Reference Time Information");
    attributes.put("00002a15-0000-1000-8000-00805f9b34fb", "Time Broadcast");
    attributes.put("00002a16-0000-1000-8000-00805f9b34fb", "Time Update Control Point");
    attributes.put("00002a17-0000-1000-8000-00805f9b34fb", "Time Update State");
    attributes.put("00002a18-0000-1000-8000-00805f9b34fb", "Glucose Measurement");
    attributes.put("00002a19-0000-1000-8000-00805f9b34fb", "Battery Level");
    attributes.put("00002a1a-0000-1000-8000-00805f9b34fb", "Battery Power State");
    attributes.put("00002a1b-0000-1000-8000-00805f9b34fb", "Battery Level State");
    attributes.put("00002a1c-0000-1000-8000-00805f9b34fb", "Temperature Measurement");
    attributes.put("00002a1d-0000-1000-8000-00805f9b34fb", "Temperature Type");
    attributes.put("00002a1e-0000-1000-8000-00805f9b34fb", "Intermediate Temperature");
    attributes.put("00002a1f-0000-1000-8000-00805f9b34fb", "Temperature Celsius");
    attributes.put("00002a20-0000-1000-8000-00805f9b34fb", "Temperature Fahrenheit");
    attributes.put("00002a21-0000-1000-8000-00805f9b34fb", "Measurement Interval");
    attributes.put("00002a22-0000-1000-8000-00805f9b34fb", "Boot Keyboard Input Report");
    attributes.put("00002a23-0000-1000-8000-00805f9b34fb", "System ID");
    attributes.put("00002a24-0000-1000-8000-00805f9b34fb", "Model Number String");
    attributes.put("00002a25-0000-1000-8000-00805f9b34fb", "Serial Number String");
    attributes.put("00002a26-0000-1000-8000-00805f9b34fb", "Firmware Revision String");
    attributes.put("00002a27-0000-1000-8000-00805f9b34fb", "Hardware Revision String");
    attributes.put("00002a28-0000-1000-8000-00805f9b34fb", "Software Revision String");
    attributes.put("00002a29-0000-1000-8000-00805f9b34fb", "Manufacturer Name String");
    attributes.put("00002a2a-0000-1000-8000-00805f9b34fb", "IEEE 11073-20601 Regulatory Certification Data List");
    attributes.put("00002a2b-0000-1000-8000-00805f9b34fb", "Current Time");
    attributes.put("00002a2c-0000-1000-8000-00805f9b34fb", "Magnetic Declination");
    attributes.put("00002a2f-0000-1000-8000-00805f9b34fb", "Position 2D");
    attributes.put("00002a30-0000-1000-8000-00805f9b34fb", "Position 3D");
    attributes.put("00002a31-0000-1000-8000-00805f9b34fb", "Scan Refresh");
    attributes.put("00002a32-0000-1000-8000-00805f9b34fb", "Boot Keyboard Output Report");
    attributes.put("00002a33-0000-1000-8000-00805f9b34fb", "Boot Mouse Input Report");
    attributes.put("00002a34-0000-1000-8000-00805f9b34fb", "Glucose Measurement Context");
    attributes.put("00002a35-0000-1000-8000-00805f9b34fb", "Blood Pressure Measurement");
    attributes.put("00002a36-0000-1000-8000-00805f9b34fb", "Intermediate Cuff Pressure");
    attributes.put("00002a37-0000-1000-8000-00805f9b34fb", "Heart Rate Measurement");
    attributes.put("00002a38-0000-1000-8000-00805f9b34fb", "Body Sensor Location");
    attributes.put("00002a39-0000-1000-8000-00805f9b34fb", "Heart Rate Control Point");
    attributes.put("00002a3a-0000-1000-8000-00805f9b34fb", "Removable");
    attributes.put("00002a3b-0000-1000-8000-00805f9b34fb", "Service Required");
    attributes.put("00002a3c-0000-1000-8000-00805f9b34fb", "Scientific Temperature Celsius");
    attributes.put("00002a3d-0000-1000-8000-00805f9b34fb", "String");
    attributes.put("00002a3e-0000-1000-8000-00805f9b34fb", "Network Availability");
    attributes.put("00002a3f-0000-1000-8000-00805f9b34fb", "Alert Status");
    attributes.put("00002a40-0000-1000-8000-00805f9b34fb", "Ringer Control point");
    attributes.put("00002a41-0000-1000-8000-00805f9b34fb", "Ringer Setting");
    attributes.put("00002a42-0000-1000-8000-00805f9b34fb", "Alert Category ID Bit Mask");
    attributes.put("00002a43-0000-1000-8000-00805f9b34fb", "Alert Category ID");
    attributes.put("00002a44-0000-1000-8000-00805f9b34fb", "Alert Notification Control Point");
    attributes.put("00002a45-0000-1000-8000-00805f9b34fb", "Unread Alert Status");
    attributes.put("00002a46-0000-1000-8000-00805f9b34fb", "New Alert");
    attributes.put("00002a47-0000-1000-8000-00805f9b34fb", "Supported New Alert Category");
    attributes.put("00002a48-0000-1000-8000-00805f9b34fb", "Supported Unread Alert Category");
    attributes.put("00002a49-0000-1000-8000-00805f9b34fb", "Blood Pressure Feature");
    attributes.put("00002a4a-0000-1000-8000-00805f9b34fb", "HID Information");
    attributes.put("00002a4b-0000-1000-8000-00805f9b34fb", "Report Map");
    attributes.put("00002a4c-0000-1000-8000-00805f9b34fb", "HID Control Point");
    attributes.put("00002a4d-0000-1000-8000-00805f9b34fb", "Report");
    attributes.put("00002a4e-0000-1000-8000-00805f9b34fb", "Protocol Mode");
    attributes.put("00002a4f-0000-1000-8000-00805f9b34fb", "Scan Interval Window");
    attributes.put("00002a50-0000-1000-8000-00805f9b34fb", "PnP ID");
    attributes.put("00002a51-0000-1000-8000-00805f9b34fb", "Glucose Feature");
    attributes.put("00002a52-0000-1000-8000-00805f9b34fb", "Record Access Control Point");
    attributes.put("00002a53-0000-1000-8000-00805f9b34fb", "RSC Measurement");
    attributes.put("00002a54-0000-1000-8000-00805f9b34fb", "RSC Feature");
    attributes.put("00002a55-0000-1000-8000-00805f9b34fb", "SC Control Point");
    attributes.put("00002a56-0000-1000-8000-00805f9b34fb", "Digital");
    attributes.put("00002a57-0000-1000-8000-00805f9b34fb", "Digital Output");
    attributes.put("00002a58-0000-1000-8000-00805f9b34fb", "Analog");
    attributes.put("00002a59-0000-1000-8000-00805f9b34fb", "Analog Output");
    attributes.put("00002a5a-0000-1000-8000-00805f9b34fb", "Aggregate");
    attributes.put("00002a5b-0000-1000-8000-00805f9b34fb", "CSC Measurement");
    attributes.put("00002a5c-0000-1000-8000-00805f9b34fb", "CSC Feature");
    attributes.put("00002a5d-0000-1000-8000-00805f9b34fb", "Sensor Location");
    attributes.put("00002a5e-0000-1000-8000-00805f9b34fb", "PLX Spot-Check Measurement");
    attributes.put("00002a5f-0000-1000-8000-00805f9b34fb", "PLX Continuous Measurement Characteristic");
    attributes.put("00002a60-0000-1000-8000-00805f9b34fb", "PLX Features");
    attributes.put("00002a62-0000-1000-8000-00805f9b34fb", "Pulse Oximetry Control Point");
    attributes.put("00002a63-0000-1000-8000-00805f9b34fb", "Cycling Power Measurement");
    attributes.put("00002a64-0000-1000-8000-00805f9b34fb", "Cycling Power Vector");
    attributes.put("00002a65-0000-1000-8000-00805f9b34fb", "Cycling Power Feature");
    attributes.put("00002a66-0000-1000-8000-00805f9b34fb", "Cycling Power Control Point");
    attributes.put("00002a67-0000-1000-8000-00805f9b34fb", "Location and Speed Characteristic");
    attributes.put("00002a68-0000-1000-8000-00805f9b34fb", "Navigation");
    attributes.put("00002a69-0000-1000-8000-00805f9b34fb", "Position Quality");
    attributes.put("00002a6a-0000-1000-8000-00805f9b34fb", "LN Feature");
    attributes.put("00002a6b-0000-1000-8000-00805f9b34fb", "LN Control Point");
    attributes.put("00002a6c-0000-1000-8000-00805f9b34fb", "Elevation");
    attributes.put("00002a6d-0000-1000-8000-00805f9b34fb", "Pressure");
    attributes.put("00002a6e-0000-1000-8000-00805f9b34fb", "Temperature");
    attributes.put("00002a6f-0000-1000-8000-00805f9b34fb", "Humidity");
    attributes.put("00002a70-0000-1000-8000-00805f9b34fb", "True Wind Speed");
    attributes.put("00002a71-0000-1000-8000-00805f9b34fb", "True Wind Direction");
    attributes.put("00002a72-0000-1000-8000-00805f9b34fb", "Apparent Wind Speed");
    attributes.put("00002a73-0000-1000-8000-00805f9b34fb", "Apparent Wind Direction");
    attributes.put("00002a74-0000-1000-8000-00805f9b34fb", "Gust Factor");
    attributes.put("00002a75-0000-1000-8000-00805f9b34fb", "Pollen Concentration");
    attributes.put("00002a76-0000-1000-8000-00805f9b34fb", "UV Index");
    attributes.put("00002a77-0000-1000-8000-00805f9b34fb", "Irradiance");
    attributes.put("00002a78-0000-1000-8000-00805f9b34fb", "Rainfall");
    attributes.put("00002a79-0000-1000-8000-00805f9b34fb", "Wind Chill");
    attributes.put("00002a7a-0000-1000-8000-00805f9b34fb", "Heat Index");
    attributes.put("00002a7b-0000-1000-8000-00805f9b34fb", "Dew Point");
    attributes.put("00002a7d-0000-1000-8000-00805f9b34fb", "Descriptor Value Changed");
    attributes.put("00002a7e-0000-1000-8000-00805f9b34fb", "Aerobic Heart Rate Lower Limit");
    attributes.put("00002a7f-0000-1000-8000-00805f9b34fb", "Aerobic Threshold");
    attributes.put("00002a80-0000-1000-8000-00805f9b34fb", "Age");
    attributes.put("00002a81-0000-1000-8000-00805f9b34fb", "Anaerobic Heart Rate Lower Limit");
    attributes.put("00002a82-0000-1000-8000-00805f9b34fb", "Anaerobic Heart Rate Upper Limit");
    attributes.put("00002a83-0000-1000-8000-00805f9b34fb", "Anaerobic Threshold");
    attributes.put("00002a84-0000-1000-8000-00805f9b34fb", "Aerobic Heart Rate Upper Limit");
    attributes.put("00002a85-0000-1000-8000-00805f9b34fb", "Date of Birth");
    attributes.put("00002a86-0000-1000-8000-00805f9b34fb", "Date of Threshold Assessment");
    attributes.put("00002a87-0000-1000-8000-00805f9b34fb", "Email Address");
    attributes.put("00002a88-0000-1000-8000-00805f9b34fb", "Fat Burn Heart Rate Lower Limit");
    attributes.put("00002a89-0000-1000-8000-00805f9b34fb", "Fat Burn Heart Rate Upper Limit");
    attributes.put("00002a8a-0000-1000-8000-00805f9b34fb", "First Name");
    attributes.put("00002a8b-0000-1000-8000-00805f9b34fb", "Five Zone Heart Rate Limits");
    attributes.put("00002a8c-0000-1000-8000-00805f9b34fb", "Gender");
    attributes.put("00002a8d-0000-1000-8000-00805f9b34fb", "Heart Rate Max");
    attributes.put("00002a8e-0000-1000-8000-00805f9b34fb", "Height");
    attributes.put("00002a8f-0000-1000-8000-00805f9b34fb", "Hip Circumference");
    attributes.put("00002a90-0000-1000-8000-00805f9b34fb", "Last Name");
    attributes.put("00002a91-0000-1000-8000-00805f9b34fb", "Maximum Recommended Heart Rate");
    attributes.put("00002a92-0000-1000-8000-00805f9b34fb", "Resting Heart Rate");
    attributes.put("00002a93-0000-1000-8000-00805f9b34fb", "Sport Type for Aerobic and Anaerobic Thresholds");
    attributes.put("00002a94-0000-1000-8000-00805f9b34fb", "Three Zone Heart Rate Limits");
    attributes.put("00002a95-0000-1000-8000-00805f9b34fb", "Two Zone Heart Rate Limit");
    attributes.put("00002a96-0000-1000-8000-00805f9b34fb", "VO2 Max");
    attributes.put("00002a97-0000-1000-8000-00805f9b34fb", "Waist Circumference");
    attributes.put("00002a98-0000-1000-8000-00805f9b34fb", "Weight");
    attributes.put("00002a99-0000-1000-8000-00805f9b34fb", "Database Change Increment");
    attributes.put("00002a9a-0000-1000-8000-00805f9b34fb", "User Index");
    attributes.put("00002a9b-0000-1000-8000-00805f9b34fb", "Body Composition Feature");
    attributes.put("00002a9c-0000-1000-8000-00805f9b34fb", "Body Composition Measurement");
    attributes.put("00002a9d-0000-1000-8000-00805f9b34fb", "Weight Measurement");
    attributes.put("00002a9e-0000-1000-8000-00805f9b34fb", "Weight Scale Feature");
    attributes.put("00002a9f-0000-1000-8000-00805f9b34fb", "User Control Point");
    attributes.put("00002aa0-0000-1000-8000-00805f9b34fb", "Magnetic Flux Density - 2D");
    attributes.put("00002aa1-0000-1000-8000-00805f9b34fb", "Magnetic Flux Density - 3D");
    attributes.put("00002aa2-0000-1000-8000-00805f9b34fb", "Language");
    attributes.put("00002aa3-0000-1000-8000-00805f9b34fb", "Barometric Pressure Trend");
    attributes.put("00002aa4-0000-1000-8000-00805f9b34fb", "Bond Management Control Point");
    attributes.put("00002aa5-0000-1000-8000-00805f9b34fb", "Bond Management Features");
    attributes.put("00002aa6-0000-1000-8000-00805f9b34fb", "Central Address Resolution");
    attributes.put("00002aa7-0000-1000-8000-00805f9b34fb", "CGM Measurement");
    attributes.put("00002aa8-0000-1000-8000-00805f9b34fb", "CGM Feature");
    attributes.put("00002aa9-0000-1000-8000-00805f9b34fb", "CGM Status");
    attributes.put("00002aaa-0000-1000-8000-00805f9b34fb", "CGM Session Start Time");
    attributes.put("00002aab-0000-1000-8000-00805f9b34fb", "CGM Session Run Time");
    attributes.put("00002aac-0000-1000-8000-00805f9b34fb", "CGM Specific Ops Control Point");
    attributes.put("00002aad-0000-1000-8000-00805f9b34fb", "Indoor Positioning Configuration");
    attributes.put("00002aae-0000-1000-8000-00805f9b34fb", "Latitude");
    attributes.put("00002aaf-0000-1000-8000-00805f9b34fb", "Longitude");
    attributes.put("00002ab0-0000-1000-8000-00805f9b34fb", "Local North Coordinate");
    attributes.put("00002ab1-0000-1000-8000-00805f9b34fb", "Local East Coordinate");
    attributes.put("00002ab2-0000-1000-8000-00805f9b34fb", "Floor Number");
    attributes.put("00002ab3-0000-1000-8000-00805f9b34fb", "Altitude");
    attributes.put("00002ab4-0000-1000-8000-00805f9b34fb", "Uncertainty");
    attributes.put("00002ab5-0000-1000-8000-00805f9b34fb", "Location Name");
    attributes.put("00002ab6-0000-1000-8000-00805f9b34fb", "URI");
    attributes.put("00002ab7-0000-1000-8000-00805f9b34fb", "HTTP Headers");
    attributes.put("00002ab8-0000-1000-8000-00805f9b34fb", "HTTP Status Code");
    attributes.put("00002ab9-0000-1000-8000-00805f9b34fb", "HTTP Entity Body");
    attributes.put("00002aba-0000-1000-8000-00805f9b34fb", "HTTP Control Point");
    attributes.put("00002abb-0000-1000-8000-00805f9b34fb", "HTTPS Security");
    attributes.put("00002abc-0000-1000-8000-00805f9b34fb", "TDS Control Point");
    attributes.put("00002abd-0000-1000-8000-00805f9b34fb", "OTS Feature");
    attributes.put("00002abe-0000-1000-8000-00805f9b34fb", "Object Name");
    attributes.put("00002abf-0000-1000-8000-00805f9b34fb", "Object Type");
    attributes.put("00002ac0-0000-1000-8000-00805f9b34fb", "Object Size");
    attributes.put("00002ac1-0000-1000-8000-00805f9b34fb", "Object First-Created");
    attributes.put("00002ac2-0000-1000-8000-00805f9b34fb", "Object Last-Modified");
    attributes.put("00002ac3-0000-1000-8000-00805f9b34fb", "Object ID");
    attributes.put("00002ac4-0000-1000-8000-00805f9b34fb", "Object Properties");
    attributes.put("00002ac5-0000-1000-8000-00805f9b34fb", "Object Action Control Point");
    attributes.put("00002ac6-0000-1000-8000-00805f9b34fb", "Object List Control Point");
    attributes.put("00002ac7-0000-1000-8000-00805f9b34fb", "Object List Filter");
    attributes.put("00002ac8-0000-1000-8000-00805f9b34fb", "Object Changed");
    attributes.put("00002ac9-0000-1000-8000-00805f9b34fb", "Resolvable Private Address Only");
    attributes.put("00002acc-0000-1000-8000-00805f9b34fb", "Fitness Machine Feature");
    attributes.put("00002acd-0000-1000-8000-00805f9b34fb", "Treadmill Data");
    attributes.put("00002ace-0000-1000-8000-00805f9b34fb", "Cross Trainer Data");
    attributes.put("00002acf-0000-1000-8000-00805f9b34fb", "Step Climber Data");
    attributes.put("00002ad0-0000-1000-8000-00805f9b34fb", "Stair Climber Data");
    attributes.put("00002ad1-0000-1000-8000-00805f9b34fb", "Rower Data");
    attributes.put("00002ad2-0000-1000-8000-00805f9b34fb", "Indoor Bike Data");
    attributes.put("00002ad3-0000-1000-8000-00805f9b34fb", "Training Status");
    attributes.put("00002ad4-0000-1000-8000-00805f9b34fb", "Supported Speed Range");
    attributes.put("00002ad5-0000-1000-8000-00805f9b34fb", "Supported Inclination Range");
    attributes.put("00002ad6-0000-1000-8000-00805f9b34fb", "Supported Resistance Level Range");
    attributes.put("00002ad7-0000-1000-8000-00805f9b34fb", "Supported Heart Rate Range");
    attributes.put("00002ad8-0000-1000-8000-00805f9b34fb", "Supported Power Range");
    attributes.put("00002ad9-0000-1000-8000-00805f9b34fb", "Fitness Machine Control Point");
    attributes.put("00002ada-0000-1000-8000-00805f9b34fb", "Fitness Machine Status");
    attributes.put("00002aed-0000-1000-8000-00805f9b34fb", "Date UTC");
    attributes.put("00002b1d-0000-1000-8000-00805f9b34fb", "RC Feature");
    attributes.put("00002b1e-0000-1000-8000-00805f9b34fb", "RC Settings");
    attributes.put("00002b1f-0000-1000-8000-00805f9b34fb", "Reconnection Configuration Control Point");

    }

    public static String lookup(String uuid) {
    return lookup(uuid, "--");
    }

    public static String lookup(UUID uuid) {
    return lookup(uuid.toString(), "--");
    }

    public static String lookup(String uuid, String defaultName) {
    String name = attributes.get(uuid);
    return name == null ? defaultName : name;
    }

    }
    36 changes: 36 additions & 0 deletions AllGattDescriptors.java
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,36 @@
    package com.sam016.vsflatomation.service.ble;

    import java.util.HashMap;
    import java.util.UUID;

    public class AllGattDescriptors {
    private static HashMap<String, String> attributes = new HashMap();

    static {
    attributes.put("00002900-0000-1000-8000-00805f9b34fb", "Characteristic Extended Properties");
    attributes.put("00002901-0000-1000-8000-00805f9b34fb", "Characteristic User Description");
    attributes.put("00002902-0000-1000-8000-00805f9b34fb", "Client Characteristic Configuration");
    attributes.put("00002903-0000-1000-8000-00805f9b34fb", "Server Characteristic Configuration");
    attributes.put("00002904-0000-1000-8000-00805f9b34fb", "Characteristic Presentation Format");
    attributes.put("00002905-0000-1000-8000-00805f9b34fb", "Characteristic Aggregate Format");
    attributes.put("00002906-0000-1000-8000-00805f9b34fb", "Valid Range");
    attributes.put("00002907-0000-1000-8000-00805f9b34fb", "External Report Reference");
    attributes.put("00002908-0000-1000-8000-00805f9b34fb", "Report Reference");
    attributes.put("00002909-0000-1000-8000-00805f9b34fb", "Number of Digitals");
    attributes.put("0000290a-0000-1000-8000-00805f9b34fb", "Value Trigger Setting");
    attributes.put("0000290b-0000-1000-8000-00805f9b34fb", "Environmental Sensing Configuration");
    attributes.put("0000290c-0000-1000-8000-00805f9b34fb", "Environmental Sensing Measurement");
    attributes.put("0000290d-0000-1000-8000-00805f9b34fb", "Environmental Sensing Trigger Setting");
    attributes.put("0000290e-0000-1000-8000-00805f9b34fb", "Time Trigger Setting");
    }

    public static String lookup(UUID uuid) {
    return lookup(uuid.toString(), "--");
    }

    public static String lookup(String uuid, String defaultName) {
    String name = attributes.get(uuid);
    return name == null ? defaultName : name;
    }

    }
    75 changes: 75 additions & 0 deletions AllGattServices.java
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,75 @@
    package com.sam016.vsflatomation.service.ble;

    import java.util.HashMap;
    import java.util.UUID;

    public class AllGattServices {
    private static HashMap<String, String> attributes = new HashMap();

    public static String HEART_RATE_MEASUREMENT = "00002a37-0000-1000-8000-00805f9b34fb";

    static {
    attributes.put("00001800-0000-1000-8000-00805f9b34fb", "Generic Access");
    attributes.put("00001801-0000-1000-8000-00805f9b34fb", "Generic Attribute");
    attributes.put("00001802-0000-1000-8000-00805f9b34fb", "Immediate Alert");
    attributes.put("00001803-0000-1000-8000-00805f9b34fb", "Link Loss");
    attributes.put("00001804-0000-1000-8000-00805f9b34fb", "Tx Power");
    attributes.put("00001805-0000-1000-8000-00805f9b34fb", "Current Time Service");
    attributes.put("00001806-0000-1000-8000-00805f9b34fb", "Reference Time Update Service");
    attributes.put("00001807-0000-1000-8000-00805f9b34fb", "Next DST Change Service");
    attributes.put("00001808-0000-1000-8000-00805f9b34fb", "Glucose");
    attributes.put("00001809-0000-1000-8000-00805f9b34fb", "Health Thermometer");
    attributes.put("0000180a-0000-1000-8000-00805f9b34fb", "Device Information");
    attributes.put("0000180d-0000-1000-8000-00805f9b34fb", "Heart Rate");
    attributes.put("0000180e-0000-1000-8000-00805f9b34fb", "Phone Alert Status Service");
    attributes.put("0000180f-0000-1000-8000-00805f9b34fb", "Battery Service");
    attributes.put("00001810-0000-1000-8000-00805f9b34fb", "Blood Pressure");
    attributes.put("00001811-0000-1000-8000-00805f9b34fb", "Alert Notification Service");
    attributes.put("00001812-0000-1000-8000-00805f9b34fb", "Human Interface Device");
    attributes.put("00001813-0000-1000-8000-00805f9b34fb", "Scan Parameters");
    attributes.put("00001814-0000-1000-8000-00805f9b34fb", "Running Speed and Cadence");
    attributes.put("00001815-0000-1000-8000-00805f9b34fb", "Automation IO");
    attributes.put("00001816-0000-1000-8000-00805f9b34fb", "Cycling Speed and Cadence");
    attributes.put("00001818-0000-1000-8000-00805f9b34fb", "Cycling Power");
    attributes.put("00001819-0000-1000-8000-00805f9b34fb", "Location and Navigation");
    attributes.put("0000181a-0000-1000-8000-00805f9b34fb", "Environmental Sensing");
    attributes.put("0000181b-0000-1000-8000-00805f9b34fb", "Body Composition");
    attributes.put("0000181c-0000-1000-8000-00805f9b34fb", "User Data");
    attributes.put("0000181d-0000-1000-8000-00805f9b34fb", "Weight Scale");
    attributes.put("0000181e-0000-1000-8000-00805f9b34fb", "Bond Management Service");
    attributes.put("0000181f-0000-1000-8000-00805f9b34fb", "Continuous Glucose Monitoring");
    attributes.put("00001820-0000-1000-8000-00805f9b34fb", "Internet Protocol Support Service");
    attributes.put("00001821-0000-1000-8000-00805f9b34fb", "Indoor Positioning");
    attributes.put("00001822-0000-1000-8000-00805f9b34fb", "Pulse Oximeter Service");
    attributes.put("00001823-0000-1000-8000-00805f9b34fb", "HTTP Proxy");
    attributes.put("00001824-0000-1000-8000-00805f9b34fb", "Transport Discovery");
    attributes.put("00001825-0000-1000-8000-00805f9b34fb", "Object Transfer Service");
    attributes.put("00001826-0000-1000-8000-00805f9b34fb", "Fitness Machine");
    attributes.put("00001827-0000-1000-8000-00805f9b34fb", "Mesh Provisioning Service");
    attributes.put("00001828-0000-1000-8000-00805f9b34fb", "Mesh Proxy Service");
    attributes.put("00001829-0000-1000-8000-00805f9b34fb", "Reconnection Configuration");


    // Sample Characteristics.
    attributes.put(HEART_RATE_MEASUREMENT, "Heart Rate Measurement");
    attributes.put("00002a29-0000-1000-8000-00805f9b34fb", "Manufacturer Name String");

    attributes.put("00002a00-0000-1000-8000-00805f9b34fb", "Device Name");
    attributes.put("00002a01-0000-1000-8000-00805f9b34fb", "Appearance");
    attributes.put("00002a02-0000-1000-8000-00805f9b34fb", "Peripheral Privacy Flag");
    attributes.put("00002a03-0000-1000-8000-00805f9b34fb", "Reconnection Address");
    attributes.put("00002a04-0000-1000-8000-00805f9b34fb", "Manufacturer Name String");
    attributes.put("00002a05-0000-1000-8000-00805f9b34fb", "Service Changed");
    attributes.put("00002A06-0000-1000-8000-00805f9b34fb", "Alert level");
    }

    public static String lookup(UUID uuid) {
    return lookup(uuid.toString(), "--");
    }

    public static String lookup(String uuid, String defaultName) {
    String name = attributes.get(uuid);
    return name == null ? defaultName : name;
    }

    }
    92 changes: 92 additions & 0 deletions gatt-descriptors-list.json
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,92 @@
    [
    {
    "id": "org.bluetooth.descriptor.gatt.characteristic_extended_properties",
    "name": "Characteristic Extended Properties",
    "code": "0x2900",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.descriptor.gatt.characteristic_user_description",
    "name": "Characteristic User Description",
    "code": "0x2901",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.descriptor.gatt.client_characteristic_configuration",
    "name": "Client Characteristic Configuration",
    "code": "0x2902",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.descriptor.gatt.server_characteristic_configuration",
    "name": "Server Characteristic Configuration",
    "code": "0x2903",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.descriptor.gatt.characteristic_presentation_format",
    "name": "Characteristic Presentation Format",
    "code": "0x2904",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.descriptor.gatt.characteristic_aggregate_format",
    "name": "Characteristic Aggregate Format",
    "code": "0x2905",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.descriptor.valid_range",
    "name": "Valid Range",
    "code": "0x2906",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.descriptor.external_report_reference",
    "name": "External Report Reference",
    "code": "0x2907",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.descriptor.report_reference",
    "name": "Report Reference",
    "code": "0x2908",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.descriptor.number_of_digitals",
    "name": "Number of Digitals",
    "code": "0x2909",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.descriptor.value_trigger_setting",
    "name": "Value Trigger Setting",
    "code": "0x290A",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.descriptor.es_configuration",
    "name": "Environmental Sensing Configuration",
    "code": "0x290B",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.descriptor.es_measurement",
    "name": "Environmental Sensing Measurement",
    "code": "0x290C",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.descriptor.es_trigger_setting",
    "name": "Environmental Sensing Trigger Setting",
    "code": "0x290D",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.descriptor.time_trigger_setting",
    "name": "Time Trigger Setting",
    "code": "0x290E",
    "specification": "GSS"
    }
    ]
    236 changes: 236 additions & 0 deletions gatt-services-list.json
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,236 @@
    [
    {
    "id": "org.bluetooth.service.generic_access",
    "name": "Generic Access",
    "code": "0x1800",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.service.generic_attribute",
    "name": "Generic Attribute",
    "code": "0x1801",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.service.immediate_alert",
    "name": "Immediate Alert",
    "code": "0x1802",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.service.link_loss",
    "name": "Link Loss",
    "code": "0x1803",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.service.tx_power",
    "name": "Tx Power",
    "code": "0x1804",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.service.current_time",
    "name": "Current Time Service",
    "code": "0x1805",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.service.reference_time_update",
    "name": "Reference Time Update Service",
    "code": "0x1806",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.service.next_dst_change",
    "name": "Next DST Change Service",
    "code": "0x1807",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.service.glucose",
    "name": "Glucose",
    "code": "0x1808",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.service.health_thermometer",
    "name": "Health Thermometer",
    "code": "0x1809",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.service.device_information",
    "name": "Device Information",
    "code": "0x180A",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.service.heart_rate",
    "name": "Heart Rate",
    "code": "0x180D",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.service.phone_alert_status",
    "name": "Phone Alert Status Service",
    "code": "0x180E",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.service.battery_service",
    "name": "Battery Service",
    "code": "0x180F",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.service.blood_pressure",
    "name": "Blood Pressure",
    "code": "0x1810",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.service.alert_notification",
    "name": "Alert Notification Service",
    "code": "0x1811",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.service.human_interface_device",
    "name": "Human Interface Device",
    "code": "0x1812",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.service.scan_parameters",
    "name": "Scan Parameters",
    "code": "0x1813",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.service.running_speed_and_cadence",
    "name": "Running Speed and Cadence",
    "code": "0x1814",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.service.automation_io",
    "name": "Automation IO",
    "code": "0x1815",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.service.cycling_speed_and_cadence",
    "name": "Cycling Speed and Cadence",
    "code": "0x1816",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.service.cycling_power",
    "name": "Cycling Power",
    "code": "0x1818",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.service.location_and_navigation",
    "name": "Location and Navigation",
    "code": "0x1819",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.service.environmental_sensing",
    "name": "Environmental Sensing",
    "code": "0x181A",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.service.body_composition",
    "name": "Body Composition",
    "code": "0x181B",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.service.user_data",
    "name": "User Data",
    "code": "0x181C",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.service.weight_scale",
    "name": "Weight Scale",
    "code": "0x181D",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.service.bond_management",
    "name": "Bond Management Service",
    "code": "0x181E",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.service.continuous_glucose_monitoring",
    "name": "Continuous Glucose Monitoring",
    "code": "0x181F",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.service.internet_protocol_support",
    "name": "Internet Protocol Support Service",
    "code": "0x1820",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.service.indoor_positioning",
    "name": "Indoor Positioning",
    "code": "0x1821",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.service.pulse_oximeter",
    "name": "Pulse Oximeter Service",
    "code": "0x1822",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.service.http_proxy",
    "name": "HTTP Proxy",
    "code": "0x1823",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.service.transport_discovery",
    "name": "Transport Discovery",
    "code": "0x1824",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.service.object_transfer",
    "name": "Object Transfer Service",
    "code": "0x1825",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.service.fitness_machine",
    "name": "Fitness Machine",
    "code": "0x1826",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.service.mesh_provisioning",
    "name": "Mesh Provisioning Service",
    "code": "0x1827",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.service.mesh_proxy",
    "name": "Mesh Proxy Service",
    "code": "0x1828",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.service.reconnection_configuration",
    "name": "Reconnection Configuration",
    "code": "0x1829",
    "specification": "GSS"
    }
    ]
    26 changes: 0 additions & 26 deletions script-gatt-characteristics-list.js
    Original file line number Diff line number Diff line change
    @@ -1,26 +0,0 @@
    (function() {
    /*
    Queries the GATT Characteristics table in https://www.bluetooth.com/specifications/gatt/characteristics
    to print the info as JSON
    */
    var rows = document.querySelectorAll("tr[class]");
    var data = [];

    Array.prototype.forEach.call(rows, (row) => {
    data.push({
    id: row.children[1].innerText,
    name: row.children[0].innerText,
    code: row.children[2].innerText,
    specification: row.children[3].innerText
    });
    });

    // sorting by code
    data = data.sort((a, b) => {
    if (a.code < b.code) return -1;
    if (a.code > b.code) return 1;
    return 0;
    });

    console.log(JSON.stringify(data, null, 2));
    })();
    55 changes: 55 additions & 0 deletions script-gatt-list.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,55 @@
    (function() {
    /*
    Queries the GATT table in
    - https://www.bluetooth.com/specifications/gatt/characteristics
    - https://www.bluetooth.com/specifications/gatt/services
    - https://www.bluetooth.com/specifications/gatt/descriptors
    to print the info as JSON
    {
    {
    "id": "org.bluetooth.service.generic_access",
    "name": "Generic Access",
    "code": "0x1800",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.service.generic_attribute",
    "name": "Generic Attribute",
    "code": "0x1801",
    "specification": "GSS"
    }
    ,...
    }
    */
    var rows = document.querySelectorAll("tr[class]");
    var data = [];

    Array.prototype.forEach.call(rows, (row) => {
    data.push({
    id: row.children[1].innerText,
    name: row.children[0].innerText,
    code: row.children[2].innerText,
    specification: row.children[3].innerText
    });
    });

    // sorting by code
    data = data.sort((a, b) => {
    if (a.code < b.code) return -1;
    if (a.code > b.code) return 1;
    return 0;
    });

    console.log(JSON.stringify(data, null, 2));
    })();

    /*
    Gets the java static list from above data
    */
    function getJavaStaticList(data) {
    var result = '';
    data.forEach(d=>{
    result += `attributes.put("0000${d.code.substr(2).toLowerCase()}-0000-1000-8000-00805f9b34fb", "${d.name}");\n`;
    });
    return result;
    }
  2. Sameer revised this gist Jun 2, 2018. 1 changed file with 1304 additions and 0 deletions.
    1,304 changes: 1,304 additions & 0 deletions gatt-characteristics-list.json
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,1304 @@
    [
    {
    "id": "org.bluetooth.characteristic.gap.device_name",
    "name": "Device Name",
    "code": "0x2A00",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.gap.appearance",
    "name": "Appearance",
    "code": "0x2A01",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.gap.peripheral_privacy_flag",
    "name": "Peripheral Privacy Flag",
    "code": "0x2A02",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.gap.reconnection_address",
    "name": "Reconnection Address",
    "code": "0x2A03",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.gap.peripheral_preferred_connection_parameters",
    "name": "Peripheral Preferred Connection Parameters",
    "code": "0x2A04",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.gatt.service_changed",
    "name": "Service Changed",
    "code": "0x2A05",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.alert_level",
    "name": "Alert Level",
    "code": "0x2A06",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.tx_power_level",
    "name": "Tx Power Level",
    "code": "0x2A07",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.date_time",
    "name": "Date Time",
    "code": "0x2A08",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.day_of_week",
    "name": "Day of Week",
    "code": "0x2A09",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.day_date_time",
    "name": "Day Date Time",
    "code": "0x2A0A",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.exact_time_100",
    "name": "Exact Time 100",
    "code": "0x2A0B",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.exact_time_256",
    "name": "Exact Time 256",
    "code": "0x2A0C",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.dst_offset",
    "name": "DST Offset",
    "code": "0x2A0D",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.time_zone",
    "name": "Time Zone",
    "code": "0x2A0E",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.local_time_information",
    "name": "Local Time Information",
    "code": "0x2A0F",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.secondary_time_zone",
    "name": "Secondary Time Zone",
    "code": "0x2A10",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.time_with_dst",
    "name": "Time with DST",
    "code": "0x2A11",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.time_accuracy",
    "name": "Time Accuracy",
    "code": "0x2A12",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.time_source",
    "name": "Time Source",
    "code": "0x2A13",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.reference_time_information",
    "name": "Reference Time Information",
    "code": "0x2A14",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.time_broadcast",
    "name": "Time Broadcast",
    "code": "0x2A15",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.time_update_control_point",
    "name": "Time Update Control Point",
    "code": "0x2A16",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.time_update_state",
    "name": "Time Update State",
    "code": "0x2A17",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.glucose_measurement",
    "name": "Glucose Measurement",
    "code": "0x2A18",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.battery_level",
    "name": "Battery Level",
    "code": "0x2A19",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.battery_power_state",
    "name": "Battery Power State",
    "code": "0x2A1A",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.battery_level_state",
    "name": "Battery Level State",
    "code": "0x2A1B",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.temperature_measurement",
    "name": "Temperature Measurement",
    "code": "0x2A1C",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.temperature_type",
    "name": "Temperature Type",
    "code": "0x2A1D",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.intermediate_temperature",
    "name": "Intermediate Temperature",
    "code": "0x2A1E",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.temperature_celsius",
    "name": "Temperature Celsius",
    "code": "0x2A1F",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.temperature_fahrenheit",
    "name": "Temperature Fahrenheit",
    "code": "0x2A20",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.measurement_interval",
    "name": "Measurement Interval",
    "code": "0x2A21",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.boot_keyboard_input_report",
    "name": "Boot Keyboard Input Report",
    "code": "0x2A22",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.system_id",
    "name": "System ID",
    "code": "0x2A23",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.model_number_string",
    "name": "Model Number String",
    "code": "0x2A24",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.serial_number_string",
    "name": "Serial Number String",
    "code": "0x2A25",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.firmware_revision_string",
    "name": "Firmware Revision String",
    "code": "0x2A26",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.hardware_revision_string",
    "name": "Hardware Revision String",
    "code": "0x2A27",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.software_revision_string",
    "name": "Software Revision String",
    "code": "0x2A28",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.manufacturer_name_string",
    "name": "Manufacturer Name String",
    "code": "0x2A29",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.ieee_11073-20601_regulatory_certification_data_list",
    "name": "IEEE 11073-20601 Regulatory Certification Data List",
    "code": "0x2A2A",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.current_time",
    "name": "Current Time",
    "code": "0x2A2B",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.magnetic_declination",
    "name": "Magnetic Declination",
    "code": "0x2A2C",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.position_2d",
    "name": "Position 2D",
    "code": "0x2A2F",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.position_3d",
    "name": "Position 3D",
    "code": "0x2A30",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.scan_refresh",
    "name": "Scan Refresh",
    "code": "0x2A31",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.boot_keyboard_output_report",
    "name": "Boot Keyboard Output Report",
    "code": "0x2A32",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.boot_mouse_input_report",
    "name": "Boot Mouse Input Report",
    "code": "0x2A33",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.glucose_measurement_context",
    "name": "Glucose Measurement Context",
    "code": "0x2A34",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.blood_pressure_measurement",
    "name": "Blood Pressure Measurement",
    "code": "0x2A35",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.intermediate_cuff_pressure",
    "name": "Intermediate Cuff Pressure",
    "code": "0x2A36",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.heart_rate_measurement",
    "name": "Heart Rate Measurement",
    "code": "0x2A37",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.body_sensor_location",
    "name": "Body Sensor Location",
    "code": "0x2A38",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.heart_rate_control_point",
    "name": "Heart Rate Control Point",
    "code": "0x2A39",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.removable",
    "name": "Removable",
    "code": "0x2A3A",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.service_required",
    "name": "Service Required",
    "code": "0x2A3B",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.scientific_temperature_celsius",
    "name": "Scientific Temperature Celsius",
    "code": "0x2A3C",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.string",
    "name": "String",
    "code": "0x2A3D",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.network_availability",
    "name": "Network Availability",
    "code": "0x2A3E",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.alert_status",
    "name": "Alert Status",
    "code": "0x2A3F",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.ringer_control_point",
    "name": "Ringer Control point",
    "code": "0x2A40",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.ringer_setting",
    "name": "Ringer Setting",
    "code": "0x2A41",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.alert_category_id_bit_mask",
    "name": "Alert Category ID Bit Mask",
    "code": "0x2A42",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.alert_category_id",
    "name": "Alert Category ID",
    "code": "0x2A43",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.alert_notification_control_point",
    "name": "Alert Notification Control Point",
    "code": "0x2A44",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.unread_alert_status",
    "name": "Unread Alert Status",
    "code": "0x2A45",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.new_alert",
    "name": "New Alert",
    "code": "0x2A46",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.supported_new_alert_category",
    "name": "Supported New Alert Category",
    "code": "0x2A47",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.supported_unread_alert_category",
    "name": "Supported Unread Alert Category",
    "code": "0x2A48",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.blood_pressure_feature",
    "name": "Blood Pressure Feature",
    "code": "0x2A49",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.hid_information",
    "name": "HID Information",
    "code": "0x2A4A",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.report_map",
    "name": "Report Map",
    "code": "0x2A4B",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.hid_control_point",
    "name": "HID Control Point",
    "code": "0x2A4C",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.report",
    "name": "Report",
    "code": "0x2A4D",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.protocol_mode",
    "name": "Protocol Mode",
    "code": "0x2A4E",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.scan_interval_window",
    "name": "Scan Interval Window",
    "code": "0x2A4F",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.pnp_id",
    "name": "PnP ID",
    "code": "0x2A50",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.glucose_feature",
    "name": "Glucose Feature",
    "code": "0x2A51",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.record_access_control_point",
    "name": "Record Access Control Point",
    "code": "0x2A52",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.rsc_measurement",
    "name": "RSC Measurement",
    "code": "0x2A53",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.rsc_feature",
    "name": "RSC Feature",
    "code": "0x2A54",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.sc_control_point",
    "name": "SC Control Point",
    "code": "0x2A55",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.digital",
    "name": "Digital",
    "code": "0x2A56",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.digital_output",
    "name": "Digital Output",
    "code": "0x2A57",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.analog",
    "name": "Analog",
    "code": "0x2A58",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.analog_output",
    "name": "Analog Output",
    "code": "0x2A59",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.aggregate",
    "name": "Aggregate",
    "code": "0x2A5A",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.csc_measurement",
    "name": "CSC Measurement",
    "code": "0x2A5B",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.csc_feature",
    "name": "CSC Feature",
    "code": "0x2A5C",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.sensor_location",
    "name": "Sensor Location",
    "code": "0x2A5D",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.plx_spot_check_measurement",
    "name": "PLX Spot-Check Measurement",
    "code": "0x2A5E",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.plx_continuous_measurement",
    "name": "PLX Continuous Measurement Characteristic",
    "code": "0x2A5F",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.plx_features",
    "name": "PLX Features",
    "code": "0x2A60",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.pulse_oximetry_control_point",
    "name": "Pulse Oximetry Control Point",
    "code": "0x2A62",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.cycling_power_measurement",
    "name": "Cycling Power Measurement",
    "code": "0x2A63",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.cycling_power_vector",
    "name": "Cycling Power Vector",
    "code": "0x2A64",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.cycling_power_feature",
    "name": "Cycling Power Feature",
    "code": "0x2A65",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.cycling_power_control_point",
    "name": "Cycling Power Control Point",
    "code": "0x2A66",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.location_and_speed",
    "name": "Location and Speed Characteristic",
    "code": "0x2A67",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.navigation",
    "name": "Navigation",
    "code": "0x2A68",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.position_quality",
    "name": "Position Quality",
    "code": "0x2A69",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.ln_feature",
    "name": "LN Feature",
    "code": "0x2A6A",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.ln_control_point",
    "name": "LN Control Point",
    "code": "0x2A6B",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.elevation",
    "name": "Elevation",
    "code": "0x2A6C",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.pressure",
    "name": "Pressure",
    "code": "0x2A6D",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.temperature",
    "name": "Temperature",
    "code": "0x2A6E",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.humidity",
    "name": "Humidity",
    "code": "0x2A6F",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.true_wind_speed",
    "name": "True Wind Speed",
    "code": "0x2A70",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.true_wind_direction",
    "name": "True Wind Direction",
    "code": "0x2A71",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.apparent_wind_speed",
    "name": "Apparent Wind Speed",
    "code": "0x2A72",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.apparent_wind_direction",
    "name": "Apparent Wind Direction",
    "code": "0x2A73",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.gust_factor",
    "name": "Gust Factor",
    "code": "0x2A74",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.pollen_concentration",
    "name": "Pollen Concentration",
    "code": "0x2A75",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.uv_index",
    "name": "UV Index",
    "code": "0x2A76",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.irradiance",
    "name": "Irradiance",
    "code": "0x2A77",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.rainfall",
    "name": "Rainfall",
    "code": "0x2A78",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.wind_chill",
    "name": "Wind Chill",
    "code": "0x2A79",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.heat_index",
    "name": "Heat Index",
    "code": "0x2A7A",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.dew_point",
    "name": "Dew Point",
    "code": "0x2A7B",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.descriptor_value_changed",
    "name": "Descriptor Value Changed",
    "code": "0x2A7D",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.aerobic_heart_rate_lower_limit",
    "name": "Aerobic Heart Rate Lower Limit",
    "code": "0x2A7E",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.aerobic_threshold",
    "name": "Aerobic Threshold",
    "code": "0x2A7F",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.age",
    "name": "Age",
    "code": "0x2A80",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.anaerobic_heart_rate_lower_limit",
    "name": "Anaerobic Heart Rate Lower Limit",
    "code": "0x2A81",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.anaerobic_heart_rate_upper_limit",
    "name": "Anaerobic Heart Rate Upper Limit",
    "code": "0x2A82",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.anaerobic_threshold",
    "name": "Anaerobic Threshold",
    "code": "0x2A83",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.aerobic_heart_rate_upper_limit",
    "name": "Aerobic Heart Rate Upper Limit",
    "code": "0x2A84",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.date_of_birth",
    "name": "Date of Birth",
    "code": "0x2A85",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.date_of_threshold_assessment",
    "name": "Date of Threshold Assessment",
    "code": "0x2A86",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.email_address",
    "name": "Email Address",
    "code": "0x2A87",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.fat_burn_heart_rate_lower_limit",
    "name": "Fat Burn Heart Rate Lower Limit",
    "code": "0x2A88",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.fat_burn_heart_rate_upper_limit",
    "name": "Fat Burn Heart Rate Upper Limit",
    "code": "0x2A89",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.first_name",
    "name": "First Name",
    "code": "0x2A8A",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.five_zone_heart_rate_limits",
    "name": "Five Zone Heart Rate Limits",
    "code": "0x2A8B",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.gender",
    "name": "Gender",
    "code": "0x2A8C",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.heart_rate_max",
    "name": "Heart Rate Max",
    "code": "0x2A8D",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.height",
    "name": "Height",
    "code": "0x2A8E",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.hip_circumference",
    "name": "Hip Circumference",
    "code": "0x2A8F",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.last_name",
    "name": "Last Name",
    "code": "0x2A90",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.maximum_recommended_heart_rate",
    "name": "Maximum Recommended Heart Rate",
    "code": "0x2A91",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.resting_heart_rate",
    "name": "Resting Heart Rate",
    "code": "0x2A92",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.sport_type_for_aerobic_and_anaerobic_thresholds",
    "name": "Sport Type for Aerobic and Anaerobic Thresholds",
    "code": "0x2A93",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.three_zone_heart_rate_limits",
    "name": "Three Zone Heart Rate Limits",
    "code": "0x2A94",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.two_zone_heart_rate_limit",
    "name": "Two Zone Heart Rate Limit",
    "code": "0x2A95",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.vo2_max",
    "name": "VO2 Max",
    "code": "0x2A96",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.waist_circumference",
    "name": "Waist Circumference",
    "code": "0x2A97",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.weight",
    "name": "Weight",
    "code": "0x2A98",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.database_change_increment",
    "name": "Database Change Increment",
    "code": "0x2A99",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.user_index",
    "name": "User Index",
    "code": "0x2A9A",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.body_composition_feature",
    "name": "Body Composition Feature",
    "code": "0x2A9B",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.body_composition_measurement",
    "name": "Body Composition Measurement",
    "code": "0x2A9C",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.weight_measurement",
    "name": "Weight Measurement",
    "code": "0x2A9D",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.weight_scale_feature",
    "name": "Weight Scale Feature",
    "code": "0x2A9E",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.user_control_point",
    "name": "User Control Point",
    "code": "0x2A9F",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.Magnetic_flux_density_2D",
    "name": "Magnetic Flux Density - 2D",
    "code": "0x2AA0",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.Magnetic_flux_density_3D",
    "name": "Magnetic Flux Density - 3D",
    "code": "0x2AA1",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.language",
    "name": "Language",
    "code": "0x2AA2",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.barometric_pressure_trend",
    "name": "Barometric Pressure Trend",
    "code": "0x2AA3",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.bond_management_control_point",
    "name": "Bond Management Control Point",
    "code": "0x2AA4",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.bond_management_feature",
    "name": "Bond Management Features",
    "code": "0x2AA5",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.gap.central_address_resolution",
    "name": "Central Address Resolution",
    "code": "0x2AA6",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.cgm_measurement",
    "name": "CGM Measurement",
    "code": "0x2AA7",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.cgm_feature",
    "name": "CGM Feature",
    "code": "0x2AA8",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.cgm_status",
    "name": "CGM Status",
    "code": "0x2AA9",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.cgm_session_start_time",
    "name": "CGM Session Start Time",
    "code": "0x2AAA",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.cgm_session_run_time",
    "name": "CGM Session Run Time",
    "code": "0x2AAB",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.cgm_specific_ops_control_point",
    "name": "CGM Specific Ops Control Point",
    "code": "0x2AAC",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.indoor_positioning_configuration",
    "name": "Indoor Positioning Configuration",
    "code": "0x2AAD",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.latitude",
    "name": "Latitude",
    "code": "0x2AAE",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.Longitude",
    "name": "Longitude",
    "code": "0x2AAF",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.local_north_coordinate",
    "name": "Local North Coordinate",
    "code": "0x2AB0",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.local_east_coordinate",
    "name": "Local East Coordinate",
    "code": "0x2AB1",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.floor_number",
    "name": "Floor Number",
    "code": "0x2AB2",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.altitude",
    "name": "Altitude",
    "code": "0x2AB3",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.uncertainty",
    "name": "Uncertainty",
    "code": "0x2AB4",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.location_name",
    "name": "Location Name",
    "code": "0x2AB5",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.uri",
    "name": "URI",
    "code": "0x2AB6",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.http_headers",
    "name": "HTTP Headers",
    "code": "0x2AB7",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.http_status_code",
    "name": "HTTP Status Code",
    "code": "0x2AB8",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.http_entity_body",
    "name": "HTTP Entity Body",
    "code": "0x2AB9",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.http_control_point",
    "name": "HTTP Control Point",
    "code": "0x2ABA",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.https_security",
    "name": "HTTPS Security",
    "code": "0x2ABB",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.tds_control_point",
    "name": "TDS Control Point",
    "code": "0x2ABC",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.ots_feature",
    "name": "OTS Feature",
    "code": "0x2ABD",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.object_name",
    "name": "Object Name",
    "code": "0x2ABE",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.object_type",
    "name": "Object Type",
    "code": "0x2ABF",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.object_size",
    "name": "Object Size",
    "code": "0x2AC0",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.object_first_created",
    "name": "Object First-Created",
    "code": "0x2AC1",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.object_last_modified",
    "name": "Object Last-Modified",
    "code": "0x2AC2",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.object_id",
    "name": "Object ID",
    "code": "0x2AC3",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.object_properties",
    "name": "Object Properties",
    "code": "0x2AC4",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.object_action_control_point",
    "name": "Object Action Control Point",
    "code": "0x2AC5",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.object_list_control_point",
    "name": "Object List Control Point",
    "code": "0x2AC6",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.object_list_filter",
    "name": "Object List Filter",
    "code": "0x2AC7",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.object_changed",
    "name": "Object Changed",
    "code": "0x2AC8",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.resolvable_private_address_only",
    "name": "Resolvable Private Address Only",
    "code": "0x2AC9",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.fitness_machine_feature",
    "name": "Fitness Machine Feature",
    "code": "0x2ACC",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.treadmill_data",
    "name": "Treadmill Data",
    "code": "0x2ACD",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.cross_trainer_data",
    "name": "Cross Trainer Data",
    "code": "0x2ACE",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.step_climber_data",
    "name": "Step Climber Data",
    "code": "0x2ACF",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.stair_climber_data",
    "name": "Stair Climber Data",
    "code": "0x2AD0",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.rower_data",
    "name": "Rower Data",
    "code": "0x2AD1",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.indoor_bike_data",
    "name": "Indoor Bike Data",
    "code": "0x2AD2",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.training_status",
    "name": "Training Status",
    "code": "0x2AD3",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.supported_speed_range",
    "name": "Supported Speed Range",
    "code": "0x2AD4",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.supported_inclination_range",
    "name": "Supported Inclination Range",
    "code": "0x2AD5",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.supported_resistance_level_range",
    "name": "Supported Resistance Level Range",
    "code": "0x2AD6",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.supported_heart_rate_range",
    "name": "Supported Heart Rate Range",
    "code": "0x2AD7",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.supported_power_range",
    "name": "Supported Power Range",
    "code": "0x2AD8",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.fitness_machine_control_point",
    "name": "Fitness Machine Control Point",
    "code": "0x2AD9",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.fitness_machine_status",
    "name": "Fitness Machine Status",
    "code": "0x2ADA",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.date_utc",
    "name": "Date UTC",
    "code": "0x2AED",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.rc_feature",
    "name": "RC Feature",
    "code": "0x2B1D",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.rc_settings",
    "name": "RC Settings",
    "code": "0x2B1E",
    "specification": "GSS"
    },
    {
    "id": "org.bluetooth.characteristic.reconnection_configuration_control_point",
    "name": "Reconnection Configuration Control Point",
    "code": "0x2B1F",
    "specification": "GSS"
    }
    ]
  3. Sameer revised this gist Jun 2, 2018. 1 changed file with 19 additions and 12 deletions.
    31 changes: 19 additions & 12 deletions script-gatt-characteristics-list.js
    Original file line number Diff line number Diff line change
    @@ -1,19 +1,26 @@
    (function() {
    /*
    Queries the GATT Characteristics table in https://www.bluetooth.com/specifications/gatt/characteristics
    to print the info as JSON
    */
    /*
    Queries the GATT Characteristics table in https://www.bluetooth.com/specifications/gatt/characteristics
    to print the info as JSON
    */
    var rows = document.querySelectorAll("tr[class]");
    var data = [];

    Array.prototype.forEach.call(rows, (row)=>{
    Array.prototype.forEach.call(rows, (row) => {
    data.push({
    id: row.children[1].innerText,
    name: row.children[0].innerText,
    code: row.children[2].innerText,
    specification: row.children[3].innerText
    }
    );
    id: row.children[1].innerText,
    name: row.children[0].innerText,
    code: row.children[2].innerText,
    specification: row.children[3].innerText
    });
    });
    console.log(data);

    // sorting by code
    data = data.sort((a, b) => {
    if (a.code < b.code) return -1;
    if (a.code > b.code) return 1;
    return 0;
    });

    console.log(JSON.stringify(data, null, 2));
    })();
  4. Sameer created this gist Jun 2, 2018.
    19 changes: 19 additions & 0 deletions script-gatt-characteristics-list.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,19 @@
    (function() {
    /*
    Queries the GATT Characteristics table in https://www.bluetooth.com/specifications/gatt/characteristics
    to print the info as JSON
    */
    var rows = document.querySelectorAll("tr[class]");
    var data = [];

    Array.prototype.forEach.call(rows, (row)=>{
    data.push({
    id: row.children[1].innerText,
    name: row.children[0].innerText,
    code: row.children[2].innerText,
    specification: row.children[3].innerText
    }
    );
    });
    console.log(data);
    })();