/*******************************************************************************
 * Copyright (C) 2016 Maxim Integrated Products, Inc., All Rights Reserved.
 * <p>
 * Permission is hereby granted, free of charge, to any person obtaining a
 * copy of this software and associated documentation files (the "Software"),
 * to deal in the Software without restriction, including without limitation
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
 * and/or sell copies of the Software, and to permit persons to whom the
 * Software is furnished to do so, subject to the following conditions:
 * <p>
 * The above copyright notice and this permission notice shall be included
 * in all copies or substantial portions of the Software.
 * <p>
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
 * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
 * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
 * OTHER DEALINGS IN THE SOFTWARE.
 * <p>
 * Except as contained in this notice, the name of Maxim Integrated
 * Products, Inc. shall not be used except as stated in the Maxim Integrated
 * Products, Inc. Branding Policy.
 * <p>
 * The mere transfer of this software does not imply any licenses
 * of trade secrets, proprietary technology, copyrights, patents,
 * trademarks, maskwork rights, or any other form of intellectual
 * property whatsoever. Maxim Integrated Products, Inc. retains all
 * ownership rights.
 * ******************************************************************************
 */
package com.example.android.bluetoothlegatt;

import java.util.HashMap;
import java.util.Locale;
import java.util.Map;

/**
 * This contains an effective look-up table of Service UUID as a key
 *  and the friendly name of the service as the value
 */ 
public class GattAttributeLookupTable {
    public static final String BASE_GUID = "00000000-0000-1000-8000-00805f9b34fb";
    public static final String SERVICE_DISCOVERY_PROTOCOL_SDP = "00000001-0000-1000-8000-00805f9b34fb";
    public static final String USER_DATAGRAM_PROTOCOL_UDP = "00000002-0000-1000-8000-00805f9b34fb";
    public static final String RADIO_FREQUENCY_COMMUNICATION_PROTOCOL_RFCOMM = "00000003-0000-1000-8000-00805f9b34fb";
    public static final String TCP = "00000004-0000-1000-8000-00805f9b34fb";
    public static final String TCSBIN = "00000005-0000-1000-8000-00805f9b34fb";
    public static final String TCSAT = "00000006-0000-1000-8000-00805f9b34fb";
    public static final String OBJECT_EXCHANGE_PROTOCOL_OBEX = "00000008-0000-1000-8000-00805f9b34fb";
    public static final String IP = "00000009-0000-1000-8000-00805f9b34fb";
    public static final String FTP = "0000000a-0000-1000-8000-00805f9b34fb";
    public static final String HTTP = "0000000c-0000-1000-8000-00805f9b34fb";
    public static final String WSP = "0000000e-0000-1000-8000-00805f9b34fb";
    public static final String BNEP_SVC = "0000000f-0000-1000-8000-00805f9b34fb";
    public static final String UPNP_PROTOCOL = "00000010-0000-1000-8000-00805f9b34fb";
    public static final String HIDP = "00000011-0000-1000-8000-00805f9b34fb";
    public static final String HARDCOPY_CONTROL_CHANNEL_PROTOCOL = "00000012-0000-1000-8000-00805f9b34fb";
    public static final String HARDCOPY_DATA_CHANNEL_PROTOCOL = "00000014-0000-1000-8000-00805f9b34fb";
    public static final String HARDCOPY_NOTIFICATION_PROTOCOL = "00000016-0000-1000-8000-00805f9b34fb";
    public static final String VCTP_PROTOCOL = "00000017-0000-1000-8000-00805f9b34fb";
    public static final String VDTP_PROTOCOL = "00000019-0000-1000-8000-00805f9b34fb";
    public static final String CMPT_PROTOCOL = "0000001b-0000-1000-8000-00805f9b34fb";
    public static final String UDI_C_PLANE_PROTOCOL = "0000001d-0000-1000-8000-00805f9b34fb";
    public static final String MCAP_CONTROL_CHANNEL = "0000001e-0000-1000-8000-00805f9b34fb";
    public static final String MCAP_DATA_CHANNEL = "0000001f-0000-1000-8000-00805f9b34fb";
    public static final String L2CAP = "00000100-0000-1000-8000-00805f9b34fb";
    public static final String SERVICE_DISCOVERY_SERVER = "00001000-0000-1000-8000-00805f9b34fb";
    public static final String BROWSE_GROUP_DESCRIPTOR = "00001001-0000-1000-8000-00805f9b34fb";
    public static final String PUBLIC_BROWSE_GROUP = "00001002-0000-1000-8000-00805f9b34fb";
    public static final String SPP = "00001101-0000-1000-8000-00805f9b34fb";
    public static final String LAN_ACCESS_USING_PPP = "00001102-0000-1000-8000-00805f9b34fb";
    public static final String DUN_GW = "00001103-0000-1000-8000-00805f9b34fb";
    public static final String OBEX_SYNC = "00001104-0000-1000-8000-00805f9b34fb";
    public static final String OBEX_OBJECT_PUSH = "00001105-0000-1000-8000-00805f9b34fb";
    public static final String OBEX_FILE_TRANSFER = "00001106-0000-1000-8000-00805f9b34fb";
    public static final String IRMC_SYNC_COMMAND = "00001107-0000-1000-8000-00805f9b34fb";
    public static final String HSP_HS = "00001108-0000-1000-8000-00805f9b34fb";
    public static final String CORDLESS_TELEPHONY = "00001109-0000-1000-8000-00805f9b34fb";
    public static final String AUDIO_SOURCE = "0000110a-0000-1000-8000-00805f9b34fb";
    public static final String AUDIO_SINK = "0000110b-0000-1000-8000-00805f9b34fb";
    public static final String AV_REMOTE_CONTROL_TARGET = "0000110c-0000-1000-8000-00805f9b34fb";
    public static final String ADVANCED_AUDIO = "0000110d-0000-1000-8000-00805f9b34fb";
    public static final String AVRCP_REMOTE = "0000110e-0000-1000-8000-00805f9b34fb";
    public static final String VIDEO_CONFERENCING = "0000110f-0000-1000-8000-00805f9b34fb";
    public static final String INTERCOM = "00001110-0000-1000-8000-00805f9b34fb";
    public static final String FAX = "00001111-0000-1000-8000-00805f9b34fb";
    public static final String HEADSET_PROFILE_HSP_AUDIO_GATEWAY = "00001112-0000-1000-8000-00805f9b34fb";
    public static final String WAP = "00001113-0000-1000-8000-00805f9b34fb";
    public static final String WAP_CLIENT = "00001114-0000-1000-8000-00805f9b34fb";
    public static final String PANU = "00001115-0000-1000-8000-00805f9b34fb";
    public static final String NAP = "00001116-0000-1000-8000-00805f9b34fb";
    public static final String GN = "00001117-0000-1000-8000-00805f9b34fb";
    public static final String DIRECT_PRINTING = "00001118-0000-1000-8000-00805f9b34fb";
    public static final String REFERENCE_PRINTING = "00001119-0000-1000-8000-00805f9b34fb";
    public static final String IMAGING = "0000111a-0000-1000-8000-00805f9b34fb";
    public static final String IMAGING_RESPONDER = "0000111b-0000-1000-8000-00805f9b34fb";
    public static final String IMAGING_AUTOMATIC_ARCHIVE = "0000111c-0000-1000-8000-00805f9b34fb";
    public static final String IMAGING_REFERENCE_OBJECTS = "0000111d-0000-1000-8000-00805f9b34fb";
    public static final String HANDS_FREE_PROFILE_HFP = "0000111e-0000-1000-8000-00805f9b34fb";
    public static final String HANDS_FREE_PROFILE_HFP_AUDIO_GATEWAY = "0000111f-0000-1000-8000-00805f9b34fb";
    public static final String DIRECT_PRINTING_REFERENCE_OBJECTS = "00001120-0000-1000-8000-00805f9b34fb";
    public static final String REFLECTED_UI = "00001121-0000-1000-8000-00805f9b34fb";
    public static final String BASIC_PRINTING = "00001122-0000-1000-8000-00805f9b34fb";
    public static final String PRINTING_STATUS = "00001123-0000-1000-8000-00805f9b34fb";
    public static final String HID = "00001124-0000-1000-8000-00805f9b34fb";
    public static final String HARDCOPY_CABLE_REPLACEMENT = "00001125-0000-1000-8000-00805f9b34fb";
    public static final String HCR_PRINT = "00001126-0000-1000-8000-00805f9b34fb";
    public static final String HCR_SCAN = "00001127-0000-1000-8000-00805f9b34fb";
    public static final String COMMON_ISDN_ACCESS = "00001128-0000-1000-8000-00805f9b34fb";
    public static final String VIDEO_CONFERENCING_GATEWAY = "00001129-0000-1000-8000-00805f9b34fb";
    public static final String UDIMT = "0000112a-0000-1000-8000-00805f9b34fb";
    public static final String UDITA = "0000112b-0000-1000-8000-00805f9b34fb";
    public static final String AUDIO_VIDEO = "0000112c-0000-1000-8000-00805f9b34fb";
    public static final String SIM_ACCESS = "0000112d-0000-1000-8000-00805f9b34fb";
    public static final String OBEX_PCE = "0000112e-0000-1000-8000-00805f9b34fb";
    public static final String OBEX_PSE = "0000112f-0000-1000-8000-00805f9b34fb";
    public static final String OBEX_PBAP = "00001130-0000-1000-8000-00805f9b34fb";
    public static final String OBEX_MAS = "00001132-0000-1000-8000-00805f9b34fb";
    public static final String OBEX_MNS = "00001133-0000-1000-8000-00805f9b34fb";
    public static final String OBEX_MAP = "00001134-0000-1000-8000-00805f9b34fb";
    public static final String PNP = "00001200-0000-1000-8000-00805f9b34fb";
    public static final String GENERIC_NETWORKING = "00001201-0000-1000-8000-00805f9b34fb";
    public static final String GENERIC_FILE_TRANSFER = "00001202-0000-1000-8000-00805f9b34fb";
    public static final String GENERIC_AUDIO = "00001203-0000-1000-8000-00805f9b34fb";
    public static final String GENERIC_TELEPHONY = "00001204-0000-1000-8000-00805f9b34fb";
    public static final String UPNP = "00001205-0000-1000-8000-00805f9b34fb";
    public static final String UPNP_IP = "00001206-0000-1000-8000-00805f9b34fb";
    public static final String ESDP_UPNP_IP_PAN = "00001300-0000-1000-8000-00805f9b34fb";
    public static final String ESDP_UPNP_IP_LAP = "00001301-0000-1000-8000-00805f9b34fb";
    public static final String ESDP_UPNP_L2CAP = "00001302-0000-1000-8000-00805f9b34fb";
    public static final String VIDEO_DISTRIBUTION_PROFILE_VDP_SOURCE = "00001303-0000-1000-8000-00805f9b34fb";
    public static final String VIDEO_DISTRIBUTION_PROFILE_VDP_SINK = "00001304-0000-1000-8000-00805f9b34fb";
    public static final String VIDEO_DISTRIBUTION_PROFILE_VDP = "00001305-0000-1000-8000-00805f9b34fb";
    public static final String HEALTH_DEVICE_PROFILE_HDP = "00001400-0000-1000-8000-00805f9b34fb";
    public static final String HEALTH_DEVICE_PROFILE_HDP_SOURCE = "00001401-0000-1000-8000-00805f9b34fb";
    public static final String HEALTH_DEVICE_PROFILE_HDP_SINK = "00001402-0000-1000-8000-00805f9b34fb";
    public static final String GAP = "00001800-0000-1000-8000-00805f9b34fb";
    public static final String GATT = "00001801-0000-1000-8000-00805f9b34fb";
    public static final String IMMEDIATE_ALERT = "00001802-0000-1000-8000-00805f9b34fb";
    public static final String LINK_LOSS = "00001803-0000-1000-8000-00805f9b34fb";
    public static final String TX_POWER = "00001804-0000-1000-8000-00805f9b34fb";
    public static final String HEALTH_THERMOMETER = "00001809-0000-1000-8000-00805f9b34fb";
    public static final String DEVICE_INFORMATION = "0000180a-0000-1000-8000-00805f9b34fb";
    public static final String HEART_RATE = "0000180d-0000-1000-8000-00805f9b34fb";
    public static final String CYCLING_SC = "00001816-0000-1000-8000-00805f9b34fb";
    public static final String CLIENT_CHARACTERISTIC_CONFIG = "00002902-0000-1000-8000-00805f9b34fb";
    public static final String DEVICE_NAME = "00002a00-0000-1000-8000-00805f9b34fb";
    public static final String APPEARANCE = "00002a01-0000-1000-8000-00805f9b34fb";
    public static final String PERIPHERAL_PRIVACY_FLAG = "00002a02-0000-1000-8000-00805f9b34fb";
    public static final String RECONNECTION_ADDRESS = "00002a03-0000-1000-8000-00805f9b34fb";
    public static final String PERIPHERAL_PREFERRED_CONNECTION_PARAMETERS = "00002a04-0000-1000-8000-00805f9b34fb";
    public static final String SERVICE_CHANGED = "00002a05-0000-1000-8000-00805f9b34fb";
    public static final String ALERT_LEVEL = "00002a06-0000-1000-8000-00805f9b34fb";
    public static final String TX_POWER_LEVEL = "00002a07-0000-1000-8000-00805f9b34fb";
    public static final String DATE_TIME = "00002a08-0000-1000-8000-00805f9b34fb";
    public static final String DAY_OF_WEEK = "00002a09-0000-1000-8000-00805f9b34fb";
    public static final String DAY_DATE_TIME = "00002a0a-0000-1000-8000-00805f9b34fb";
    public static final String EXACT_TIME_256 = "00002a0c-0000-1000-8000-00805f9b34fb";
    public static final String DST_OFFSET = "00002a0d-0000-1000-8000-00805f9b34fb";
    public static final String TIME_ZONE = "00002a0e-0000-1000-8000-00805f9b34fb";
    public static final String LOCAL_TIME_INFORMATION = "00002a0f-0000-1000-8000-00805f9b34fb";
    public static final String TIME_WITH_DST = "00002a11-0000-1000-8000-00805f9b34fb";
    public static final String TIME_ACCURACY = "00002a12-0000-1000-8000-00805f9b34fb";
    public static final String TIME_SOURCE = "00002a13-0000-1000-8000-00805f9b34fb";
    public static final String REFERENCE_TIME_INFORMATION = "00002a14-0000-1000-8000-00805f9b34fb";
    public static final String TIME_UPDATE_CONTROL_POINT = "00002a16-0000-1000-8000-00805f9b34fb";
    public static final String TIME_UPDATE_STATE = "00002a17-0000-1000-8000-00805f9b34fb";
    public static final String TEMPERATURE_MEASUREMENT = "00002a1c-0000-1000-8000-00805f9b34fb";
    public static final String TEMPERATURE_TYPE = "00002a1d-0000-1000-8000-00805f9b34fb";
    public static final String INTERMEDIATE_TEMPERATURE = "00002a1e-0000-1000-8000-00805f9b34fb";
    public static final String MEASUREMENT_INTERVAL = "00002a21-0000-1000-8000-00805f9b34fb";
    public static final String SYSTEM_ID = "00002a23-0000-1000-8000-00805f9b34fb";
    public static final String MODEL_NUMBER_STRING = "00002a24-0000-1000-8000-00805f9b34fb";
    public static final String SERIAL_NUMBER_STRING = "00002a25-0000-1000-8000-00805f9b34fb";
    public static final String FIRMWARE_REVISION_STRING = "00002a26-0000-1000-8000-00805f9b34fb";
    public static final String HARDWARE_REVISION_STRING = "00002a27-0000-1000-8000-00805f9b34fb";
    public static final String SOFTWARE_REVISION_STRING = "00002a28-0000-1000-8000-00805f9b34fb";
    public static final String MANUFACTURER_NAME_STRING = "00002a29-0000-1000-8000-00805f9b34fb";
    public static final String IEEE_1107320601_REGULATORY = "00002a2a-0000-1000-8000-00805f9b34fb";
    public static final String CURRENT_TIME = "00002a2b-0000-1000-8000-00805f9b34fb";
    public static final String BLOOD_PRESSURE_MEASUREMENT = "00002a35-0000-1000-8000-00805f9b34fb";
    public static final String INTERMEDIATE_CUFF_PRESSURE = "00002a36-0000-1000-8000-00805f9b34fb";
    public static final String HEART_RATE_MEASUREMENT = "00002a37-0000-1000-8000-00805f9b34fb";
    public static final String BODY_SENSOR_LOCATION = "00002a38-0000-1000-8000-00805f9b34fb";
    public static final String HEART_RATE_CONTROL_POINT = "00002a39-0000-1000-8000-00805f9b34fb";
    public static final String ALERT_STATUS = "00002a3f-0000-1000-8000-00805f9b34fb";
    public static final String RINGER_CONTROL_POINT = "00002a40-0000-1000-8000-00805f9b34fb";
    public static final String RINGER_SETTING = "00002a41-0000-1000-8000-00805f9b34fb";
    public static final String ALERT_CATEGORY_ID_BIT_MASK = "00002a42-0000-1000-8000-00805f9b34fb";
    public static final String ALERT_CATEGORY_ID = "00002a43-0000-1000-8000-00805f9b34fb";
    public static final String ALERT_NOTIFICATION_CONTROL_POINT = "00002a44-0000-1000-8000-00805f9b34fb";
    public static final String UNREAD_ALERT_STATUS = "00002a45-0000-1000-8000-00805f9b34fb";
    public static final String NEW_ALERT = "00002a46-0000-1000-8000-00805f9b34fb";
    public static final String SUPPORTED_NEW_ALERT_CATEGORY = "00002a47-0000-1000-8000-00805f9b34fb";
    public static final String SUPPORTED_UNREAD_ALERT_CATEGORY = "00002a48-0000-1000-8000-00805f9b34fb";
    public static final String BLOOD_PRESSURE_FEATURE = "00002a49-0000-1000-8000-00805f9b34fb";
    public static final String PNPID = "00002a50-0000-1000-8000-00805f9b34fb";
    public static final String SC_CONTROL_POINT = "00002a55-0000-1000-8000-00805f9b34fb";
    public static final String CSC_MEASUREMENT = "00002a5b-0000-1000-8000-00805f9b34fb";
    public static final String CSC_FEATURE = "00002a5c-0000-1000-8000-00805f9b34fb";
    public static final String SENSOR_LOCATION = "00002a5d-0000-1000-8000-00805f9b34fb";
    public static final String ACTIVESYNC = "831c4071-7bc8-4a9c-a01c-15df25a4adbc";
    public static final String ESTIMOTE_SERVICE = "b9403000-f5f8-466e-aff9-25556b57fe6d";
    public static final String ESTIMOTE_UUID = "b9403003-f5f8-466e-aff9-25556b57fe6d";
    public static final String ESTIMOTE_MAJOR = "b9403001-f5f8-466e-aff9-25556b57fe6d";
    public static final String ESTIMOTE_MINOR = "b9403002-f5f8-466e-aff9-25556b57fe6d";
    public static final String ESTIMOTE_BATTERY = "b9403041-f5f8-466e-aff9-25556b57fe6d";
    public static final String ESTIMOTE_TEMPERATURE = "b9403021-f5f8-466e-aff9-25556b57fe6d";
    public static final String ESTIMOTE_POWER = "b9403011-f5f8-466e-aff9-25556b57fe6d";
    public static final String ESTIMOTE_ADVERTISING_INTERVAL = "b9403012-f5f8-466e-aff9-25556b57fe6d";
    public static final String ESTIMOTE_VERSION_SERVICE = "b9404000-f5f8-466e-aff9-25556b57fe6d";
    public static final String ESTIMOTE_SOFTWARE_VERSION = "b9404001-f5f8-466e-aff9-25556b57fe6d";
    public static final String ESTIMOTE_HARDWARE_VERSION = "b9404002-f5f8-466e-aff9-25556b57fe6d";
    public static final String ESTIMOTE_AUTHENTICATION_SERVICE = "b9402000-f5f8-466e-aff9-25556b57fe6d";
    public static final String ESTIMOTE_ADVERTISING_SEED = "b9402001-f5f8-466e-aff9-25556b57fe6d";
    public static final String ESTIMOTE_ADVERTISING_VECTOR = "b9402002-f5f8-466e-aff9-25556b57fe6d";

    private final static Map<String, String> sGattAttributesMap = populateGattAttributesMap();

    public static String getAttributeName(final String uuid, final String fallback) {
        final String name = sGattAttributesMap.get(uuid.toLowerCase(Locale.US));
        return name == null ? fallback : name;
    }

    private static Map<String, String> populateGattAttributesMap() {
        final Map<String, String> map = new HashMap<>();

        map.put(BASE_GUID, "Base GUID");
        map.put(SERVICE_DISCOVERY_PROTOCOL_SDP, "Service Discovery Protocol (SDP)");
        map.put(USER_DATAGRAM_PROTOCOL_UDP, "User Datagram Protocol (UDP)");
        map.put(RADIO_FREQUENCY_COMMUNICATION_PROTOCOL_RFCOMM, "Radio Frequency Communication Protocol (RFCOMM)");
        map.put(TCP, "TCP");
        map.put(TCSBIN, "TCSBIN");
        map.put(TCSAT, "TCSAT");
        map.put(OBJECT_EXCHANGE_PROTOCOL_OBEX, "Object Exchange Protocol (OBEX)");
        map.put(IP, "IP");
        map.put(FTP, "FTP");
        map.put(HTTP, "HTTP");
        map.put(WSP, "WSP");
        map.put(BNEP_SVC, "BNEP_SVC");
        map.put(UPNP_PROTOCOL, "UPNP Protocol");
        map.put(HIDP, "HIDP");
        map.put(HARDCOPY_CONTROL_CHANNEL_PROTOCOL, "Hardcopy Control Channel Protocol");
        map.put(HARDCOPY_DATA_CHANNEL_PROTOCOL, "Hardcopy Data Channel Protocol");
        map.put(HARDCOPY_NOTIFICATION_PROTOCOL, "Hardcopy Notification Protocol");
        map.put(VCTP_PROTOCOL, "VCTP Protocol");
        map.put(VDTP_PROTOCOL, "VDTP Protocol");
        map.put(CMPT_PROTOCOL, "CMPT Protocol");
        map.put(UDI_C_PLANE_PROTOCOL, "UDI C Plane Protocol");
        map.put(MCAP_CONTROL_CHANNEL, "MCAP Control Channel");
        map.put(MCAP_DATA_CHANNEL, "MCAP Data Channel");
        map.put(L2CAP, "L2CAP");
        map.put(SERVICE_DISCOVERY_SERVER, "Service Discovery Server");
        map.put(BROWSE_GROUP_DESCRIPTOR, "Browse Group Descriptor");
        map.put(PUBLIC_BROWSE_GROUP, "Public Browse Group");
        map.put(SPP, "SPP");
        map.put(LAN_ACCESS_USING_PPP, "LAN Access Using PPP");
        map.put(DUN_GW, "DUN_GW");
        map.put(OBEX_SYNC, "OBEX_SYNC");
        map.put(OBEX_OBJECT_PUSH, "OBEX Object Push");
        map.put(OBEX_FILE_TRANSFER, "OBEX File Transfer");
        map.put(IRMC_SYNC_COMMAND, "IrMC Sync Command");
        map.put(HSP_HS, "HSP_HS");
        map.put(CORDLESS_TELEPHONY, "Cordless Telephony");
        map.put(AUDIO_SOURCE, "Audio Source");
        map.put(AUDIO_SINK, "Audio Sink");
        map.put(AV_REMOTE_CONTROL_TARGET, "AV Remote Control Target");
        map.put(ADVANCED_AUDIO, "ADVANCED_AUDIO");
        map.put(AVRCP_REMOTE, "AVRCP_REMOTE");
        map.put(VIDEO_CONFERENCING, "Video Conferencing");
        map.put(INTERCOM, "Intercom");
        map.put(FAX, "FAX");
        map.put(HEADSET_PROFILE_HSP_AUDIO_GATEWAY, "Headset Profile (HSP) - Audio Gateway");
        map.put(WAP, "WAP");
        map.put(WAP_CLIENT, "WAP Client");
        map.put(PANU, "PANU");
        map.put(NAP, "NAP");
        map.put(GN, "GN");
        map.put(DIRECT_PRINTING, "Direct Printing");
        map.put(REFERENCE_PRINTING, "Reference Printing");
        map.put(IMAGING, "Imaging");
        map.put(IMAGING_RESPONDER, "Imaging Responder");
        map.put(IMAGING_AUTOMATIC_ARCHIVE, "Imaging Automatic Archive");
        map.put(IMAGING_REFERENCE_OBJECTS, "Imaging Reference Objects");
        map.put(HANDS_FREE_PROFILE_HFP, "Hands Free Profile (HFP)");
        map.put(HANDS_FREE_PROFILE_HFP_AUDIO_GATEWAY, "Hands Free Profile (HFP) – Audio Gateway");
        map.put(DIRECT_PRINTING_REFERENCE_OBJECTS, "Direct Printing Reference Objects");
        map.put(REFLECTED_UI, "Reflected UI");
        map.put(BASIC_PRINTING, "Basic Printing");
        map.put(PRINTING_STATUS, "Printing Status");
        map.put(HID, "HID");
        map.put(HARDCOPY_CABLE_REPLACEMENT, "Hardcopy Cable Replacement");
        map.put(HCR_PRINT, "HCR Print");
        map.put(HCR_SCAN, "HCR Scan");
        map.put(COMMON_ISDN_ACCESS, "Common ISDN Access");
        map.put(VIDEO_CONFERENCING_GATEWAY, "Video Conferencing Gateway");
        map.put(UDIMT, "UDIMT");
        map.put(UDITA, "UDITA");
        map.put(AUDIO_VIDEO, "Audio Video");
        map.put(SIM_ACCESS, "SIM Access");
        map.put(OBEX_PCE, "OBEX PCE");
        map.put(OBEX_PSE, "OBEX PSE");
        map.put(OBEX_PBAP, "OBEX PBAP");
        map.put(OBEX_MAS, "OBEX MAS");
        map.put(OBEX_MNS, "OBEX MNS");
        map.put(OBEX_MAP, "OBEX MAP");
        map.put(PNP, "PNP");
        map.put(GENERIC_NETWORKING, "Generic Networking");
        map.put(GENERIC_FILE_TRANSFER, "Generic File Transfer");
        map.put(GENERIC_AUDIO, "Generic Audio");
        map.put(GENERIC_TELEPHONY, "Generic Telephony");
        map.put(UPNP, "UPNP");
        map.put(UPNP_IP, "UPNP IP");
        map.put(ESDP_UPNP_IP_PAN, "ESDP UPnP IP PAN");
        map.put(ESDP_UPNP_IP_LAP, "ESDP UPnP IP LAP");
        map.put(ESDP_UPNP_L2CAP, "ESDP Upnp L2CAP");
        map.put(VIDEO_DISTRIBUTION_PROFILE_VDP_SOURCE, "Video Distribution Profile (VDP) - Source");
        map.put(VIDEO_DISTRIBUTION_PROFILE_VDP_SINK, "Video Distribution Profile (VDP) - Sink");
        map.put(VIDEO_DISTRIBUTION_PROFILE_VDP, "Video Distribution Profile (VDP)");
        map.put(HEALTH_DEVICE_PROFILE_HDP, "Health Device Profile (HDP)");
        map.put(HEALTH_DEVICE_PROFILE_HDP_SOURCE, "Health Device Profile (HDP) - Source");
        map.put(HEALTH_DEVICE_PROFILE_HDP_SINK, "Health Device Profile (HDP) - Sink");
        map.put(GAP, "GAP");
        map.put(GATT, "GATT");
        map.put(IMMEDIATE_ALERT, "IMMEDIATE_ALERT");
        map.put(LINK_LOSS, "LINK_LOSS");
        map.put(TX_POWER, "TX_POWER");
        map.put(HEALTH_THERMOMETER, "Health Thermometer");
        map.put(DEVICE_INFORMATION, "Device Information");
        map.put(HEART_RATE, "HEART_RATE");
        map.put(CYCLING_SC, "CYCLING_SC");
        map.put(CLIENT_CHARACTERISTIC_CONFIG, "CLIENT_CHARACTERISTIC_CONFIG");
        map.put(DEVICE_NAME, "Device Name");
        map.put(APPEARANCE, "Appearance");
        map.put(PERIPHERAL_PRIVACY_FLAG, "Peripheral Privacy Flag");
        map.put(RECONNECTION_ADDRESS, "Reconnection Address");
        map.put(PERIPHERAL_PREFERRED_CONNECTION_PARAMETERS, "Peripheral Preferred Connection Parameters");
        map.put(SERVICE_CHANGED, "Service Changed");
        map.put(ALERT_LEVEL, "Alert Level");
        map.put(TX_POWER_LEVEL, "Tx Power Level");
        map.put(DATE_TIME, "Date Time");
        map.put(DAY_OF_WEEK, "Day of Week");
        map.put(DAY_DATE_TIME, "Day Date Time");
        map.put(EXACT_TIME_256, "Exact Time 256");
        map.put(DST_OFFSET, "DST Offset");
        map.put(TIME_ZONE, "Time Zone");
        map.put(LOCAL_TIME_INFORMATION, "Local Time Information");
        map.put(TIME_WITH_DST, "Time with DST");
        map.put(TIME_ACCURACY, "Time Accuracy");
        map.put(TIME_SOURCE, "Time Source");
        map.put(REFERENCE_TIME_INFORMATION, "Reference Time Information");
        map.put(TIME_UPDATE_CONTROL_POINT, "Time Update Control Point");
        map.put(TIME_UPDATE_STATE, "Time Update State");
        map.put(TEMPERATURE_MEASUREMENT, "Temperature Measurement");
        map.put(TEMPERATURE_TYPE, "Temperature Type");
        map.put(INTERMEDIATE_TEMPERATURE, "Intermediate Temperature");
        map.put(MEASUREMENT_INTERVAL, "Measurement Interval");
        map.put(SYSTEM_ID, "System ID");
        map.put(MODEL_NUMBER_STRING, "Model Number String");
        map.put(SERIAL_NUMBER_STRING, "Serial Number String");
        map.put(FIRMWARE_REVISION_STRING, "Firmware Revision String");
        map.put(HARDWARE_REVISION_STRING, "Hardware Revision String");
        map.put(SOFTWARE_REVISION_STRING, "Software Revision String");
        map.put(MANUFACTURER_NAME_STRING, "Manufacturer Name String");
        map.put(IEEE_1107320601_REGULATORY, "IEEE 11073-20601 Regulatory");
        map.put(CURRENT_TIME, "Current Time");
        map.put(BLOOD_PRESSURE_MEASUREMENT, "Blood Pressure Measurement");
        map.put(INTERMEDIATE_CUFF_PRESSURE, "Intermediate Cuff Pressure");
        map.put(HEART_RATE_MEASUREMENT, "Heart Rate Measurement");
        map.put(BODY_SENSOR_LOCATION, "Body Sensor Location");
        map.put(HEART_RATE_CONTROL_POINT, "Heart Rate Control Point");
        map.put(ALERT_STATUS, "Alert Status");
        map.put(RINGER_CONTROL_POINT, "Ringer Control Point");
        map.put(RINGER_SETTING, "Ringer Setting");
        map.put(ALERT_CATEGORY_ID_BIT_MASK, "Alert Category ID Bit Mask");
        map.put(ALERT_CATEGORY_ID, "Alert Category ID");
        map.put(ALERT_NOTIFICATION_CONTROL_POINT, "Alert Notification Control Point");
        map.put(UNREAD_ALERT_STATUS, "Unread Alert Status");
        map.put(NEW_ALERT, "New Alert");
        map.put(SUPPORTED_NEW_ALERT_CATEGORY, "Supported New Alert Category");
        map.put(SUPPORTED_UNREAD_ALERT_CATEGORY, "Supported Unread Alert Category");
        map.put(BLOOD_PRESSURE_FEATURE, "Blood Pressure Feature");
        map.put(PNPID, "PNPID");
        map.put(SC_CONTROL_POINT, "SC_CONTROL_POINT");
        map.put(CSC_MEASUREMENT, "CSC_MEASUREMENT");
        map.put(CSC_FEATURE, "CSC_FEATURE");
        map.put(SENSOR_LOCATION, "SENSOR_LOCATION");
        map.put(ACTIVESYNC, "ActiveSync");
        map.put(ESTIMOTE_SERVICE, "Estimote Service");
        map.put(ESTIMOTE_UUID, "Estimote UUID");
        map.put(ESTIMOTE_MAJOR, "Estimote Major");
        map.put(ESTIMOTE_MINOR, "Estimote Minor");
        map.put(ESTIMOTE_BATTERY, "Estimote Battery");
        map.put(ESTIMOTE_TEMPERATURE, "Estimote Temperature");
        map.put(ESTIMOTE_POWER, "Estimote Power");
        map.put(ESTIMOTE_ADVERTISING_INTERVAL, "Estimote Advertising Interval");
        map.put(ESTIMOTE_VERSION_SERVICE, "Estimote Version Service");
        map.put(ESTIMOTE_SOFTWARE_VERSION, "Estimote Software Version");
        map.put(ESTIMOTE_HARDWARE_VERSION, "Estimote Hardware Version");
        map.put(ESTIMOTE_AUTHENTICATION_SERVICE, "Estimote Authentication Service");
        map.put(ESTIMOTE_ADVERTISING_SEED, "Estimote Advertising Seed");
        map.put(ESTIMOTE_ADVERTISING_VECTOR, "Estimote Advertising Vector");

        return map;
    }
}
