package uk.co.alt236.bluetoothlelib.resolvers;

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

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



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

	public static String getAttributeName(String uuid, 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<String, String>();

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



		return map;
	}
}
