From df90eecdecaf0a0831ca496d17f64d1acce049c9 Mon Sep 17 00:00:00 2001 From: Alexandros Schillings Date: Thu, 20 Mar 2014 16:16:39 +0000 Subject: [PATCH] Added Company Identifier resolver and updated UUIDs --- documents/.~lock.COMPANY_IDENTIFIERS.ods# | 1 + documents/Bluetooth_UUIDs.ods | Bin 13810 -> 28957 bytes documents/COMPANY_IDENTIFIERS.ods | Bin 0 -> 49120 bytes .../resolvers/CompanyIdentifierResolver.java | 646 ++++++++++++++++++ .../resolvers/GattAttributeResolver.java | 489 ++++++++----- 5 files changed, 973 insertions(+), 163 deletions(-) create mode 100644 documents/.~lock.COMPANY_IDENTIFIERS.ods# create mode 100644 documents/COMPANY_IDENTIFIERS.ods create mode 100644 library/src/uk/co/alt236/bluetoothlelib/resolvers/CompanyIdentifierResolver.java diff --git a/documents/.~lock.COMPANY_IDENTIFIERS.ods# b/documents/.~lock.COMPANY_IDENTIFIERS.ods# new file mode 100644 index 0000000..a4af225 --- /dev/null +++ b/documents/.~lock.COMPANY_IDENTIFIERS.ods# @@ -0,0 +1 @@ +alex ,alex,alex-HP-ProBook-6550b,20.03.2014 16:05,file:///home/alex/.config/libreoffice/4; \ No newline at end of file diff --git a/documents/Bluetooth_UUIDs.ods b/documents/Bluetooth_UUIDs.ods index 17e4f5b18bb4719601496d0617c743388a641e54..66a6aecb4cc024f601c5b9d34dd4c665d93a5d98 100644 GIT binary patch literal 28957 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
y<~N_mW8YS``Sw~v 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

E8C8ogJ+qi# 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 TVi*_%z!yIj2F8FD`nUfDOr|}A literal 13810 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 diff --git a/documents/COMPANY_IDENTIFIERS.ods b/documents/COMPANY_IDENTIFIERS.ods new file mode 100644 index 0000000000000000000000000000000000000000..8fcef9cfc71cc90e451e09bd22c07a9fe13bc005 GIT binary patch literal 49120 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 QxZsx{A_Vf{9qe!a3z-!V?EnA( literal 0 HcmV?d00001 diff --git a/library/src/uk/co/alt236/bluetoothlelib/resolvers/CompanyIdentifierResolver.java b/library/src/uk/co/alt236/bluetoothlelib/resolvers/CompanyIdentifierResolver.java new file mode 100644 index 0000000..231cfad --- /dev/null +++ b/library/src/uk/co/alt236/bluetoothlelib/resolvers/CompanyIdentifierResolver.java @@ -0,0 +1,646 @@ +package uk.co.alt236.bluetoothlelib.resolvers; + +import android.util.SparseArray; + +public class CompanyIdentifierResolver { + public static final int ERICSSON_TECHNOLOGY_LICENSING = 0x0000; + public static final int NOKIA_MOBILE_PHONES = 0x0001; + public static final int INTEL_CORP = 0x0002; + public static final int IBM_CORP = 0x0003; + public static final int TOSHIBA_CORP = 0x0004; + public static final int THREE_COM = 0x0005; + public static final int MICROSOFT = 0x0006; + public static final int LUCENT = 0x0007; + public static final int MOTOROLA = 0x0008; + public static final int INFINEON_TECHNOLOGIES_AG = 0x0009; + public static final int CAMBRIDGE_SILICON_RADIO = 0x000A; + public static final int SILICON_WAVE = 0x000B; + public static final int DIGIANSWER_A_S = 0x000C; + public static final int TEXAS_INSTRUMENTS_INC = 0x000D; + public static final int CEVA_INC_FORMERLY_PARTHUS_TECHNOLOGIES_INC = 0x000E; + public static final int BROADCOM_CORPORATION = 0x000F; + public static final int MITEL_SEMICONDUCTOR = 0x0010; + public static final int WIDCOMM_INC = 0x0011; + public static final int ZEEVO_INC = 0x0012; + public static final int ATMEL_CORPORATION = 0x0013; + public static final int MITSUBISHI_ELECTRIC_CORPORATION = 0x0014; + public static final int RTX_TELECOM_A_S = 0x0015; + public static final int KC_TECHNOLOGY_INC = 0x0016; + public static final int NEWLOGIC = 0x0017; + public static final int TRANSILICA_INC = 0x0018; + public static final int ROHDE_SCHWARZ_GMBH_CO_KG = 0x0019; + public static final int TTPCOM_LIMITED = 0x001A; + public static final int SIGNIA_TECHNOLOGIES_INC = 0x001B; + public static final int CONEXANT_SYSTEMS_INC = 0x001C; + public static final int QUALCOMM = 0x001D; + public static final int INVENTEL = 0x001E; + public static final int AVM_BERLIN = 0x001F; + public static final int BANDSPEED_INC = 0x0020; + public static final int MANSELLA_LTD = 0x0021; + public static final int NEC_CORPORATION = 0x0022; + public static final int WAVEPLUS_TECHNOLOGY_CO_LTD = 0x0023; + public static final int ALCATEL = 0x0024; + public static final int PHILIPS_SEMICONDUCTORS = 0x0025; + public static final int C_TECHNOLOGIES = 0x0026; + public static final int OPEN_INTERFACE = 0x0027; + public static final int R_F_MICRO_DEVICES = 0x0028; + public static final int HITACHI_LTD = 0x0029; + public static final int SYMBOL_TECHNOLOGIES_INC = 0x002A; + public static final int TENOVIS = 0x002B; + public static final int MACRONIX_INTERNATIONAL_CO_LTD = 0x002C; + public static final int GCT_SEMICONDUCTOR = 0x002D; + public static final int NORWOOD_SYSTEMS = 0x002E; + public static final int MEWTEL_TECHNOLOGY_INC = 0x002F; + public static final int ST_MICROELECTRONICS = 0x0030; + public static final int SYNOPSIS = 0x0031; + public static final int REDM_COMMUNICATIONS_LTD = 0x0032; + public static final int COMMIL_LTD = 0x0033; + public static final int COMPUTER_ACCESS_TECHNOLOGY_CORPORATION_CATC = 0x0034; + public static final int ECLIPSE_HQ_ESPANA_SL = 0x0035; + public static final int RENESAS_TECHNOLOGY_CORP = 0x0036; + public static final int MOBILIAN_CORPORATION = 0x0037; + public static final int TERAX = 0x0038; + public static final int INTEGRATED_SYSTEM_SOLUTION_CORP = 0x0039; + public static final int MATSUSHITA_ELECTRIC_INDUSTRIAL_CO_LTD = 0x003A; + public static final int GENNUM_CORPORATION = 0x003B; + public static final int RESEARCH_IN_MOTION = 0x003C; + public static final int IPEXTREME_INC = 0x003D; + public static final int SYSTEMS_AND_CHIPS_INC = 0x003E; + public static final int BLUETOOTH_SIG_INC = 0x003F; + public static final int SEIKO_EPSON_CORPORATION = 0x0040; + public static final int INTEGRATED_SILICON_SOLUTION_TAIWAN_INC = 0x0041; + public static final int CONWISE_TECHNOLOGY_CORPORATION_LTD = 0x0042; + public static final int PARROT_SA = 0x0043; + public static final int SOCKET_MOBILE = 0x0044; + public static final int ATHEROS_COMMUNICATIONS_INC = 0x0045; + public static final int MEDIATEK_INC = 0x0046; + public static final int BLUEGIGA = 0x0047; + public static final int MARVELL_TECHNOLOGY_GROUP_LTD = 0x0048; + public static final int THREE_DSP_CORPORATION = 0x0049; + public static final int ACCEL_SEMICONDUCTOR_LTD = 0x004A; + public static final int CONTINENTAL_AUTOMOTIVE_SYSTEMS = 0x004B; + public static final int APPLE_INC = 0x004C; + public static final int STACCATO_COMMUNICATIONS_INC = 0x004D; + public static final int AVAGO_TECHNOLOGIES = 0x004E; + public static final int APT_LICENSING_LTD = 0x004F; + public static final int SIRF_TECHNOLOGY = 0x0050; + public static final int TZERO_TECHNOLOGIES_INC = 0x0051; + public static final int JM_CORPORATION = 0x0052; + public static final int FREE2MOVE_AB = 0x0053; + public static final int THREE_DIJOY_CORPORATION = 0x0054; + public static final int PLANTRONICS_INC = 0x0055; + public static final int SONY_ERICSSON_MOBILE_COMMUNICATIONS = 0x0056; + public static final int HARMAN_INTERNATIONAL_INDUSTRIES_INC = 0x0057; + public static final int VIZIO_INC = 0x0058; + public static final int NORDIC_SEMICONDUCTOR_ASA = 0x0059; + public static final int EM_MICROELECTRONICMARIN_SA = 0x005A; + public static final int RALINK_TECHNOLOGY_CORPORATION = 0x005B; + public static final int BELKIN_INTERNATIONAL_INC = 0x005C; + public static final int REALTEK_SEMICONDUCTOR_CORPORATION = 0x005D; + public static final int STONESTREET_ONE_LLC = 0x005E; + public static final int WICENTRIC_INC = 0x005F; + public static final int RIVIERAWAVES_SAS = 0x0060; + public static final int RDA_MICROELECTRONICS = 0x0061; + public static final int GIBSON_GUITARS = 0x0062; + public static final int MICOMMAND_INC = 0x0063; + public static final int BAND_XI_INTERNATIONAL_LLC = 0x0064; + public static final int HEWLETTPACKARD_COMPANY = 0x0065; + public static final int NINE_SOLUTIONS_OY = 0x0066; + public static final int GN_NETCOM_A_S = 0x0067; + public static final int GENERAL_MOTORS = 0x0068; + public static final int AD_ENGINEERING_INC = 0x0069; + public static final int MINDTREE_LTD = 0x006A; + public static final int POLAR_ELECTRO_OY = 0x006B; + public static final int BEAUTIFUL_ENTERPRISE_CO_LTD = 0x006C; + public static final int BRIARTEK_INC = 0x006D; + public static final int SUMMIT_DATA_COMMUNICATIONS_INC = 0x006E; + public static final int SOUND_ID = 0x006F; + public static final int MONSTER_LLC = 0x0070; + public static final int CONNECTBLUE_AB = 0x0071; + public static final int SHANGHAI_SUPER_SMART_ELECTRONICS_CO_LTD = 0x0072; + public static final int GROUP_SENSE_LTD = 0x0073; + public static final int ZOMM_LLC = 0x0074; + public static final int SAMSUNG_ELECTRONICS_CO_LTD = 0x0075; + public static final int CREATIVE_TECHNOLOGY_LTD = 0x0076; + public static final int LAIRD_TECHNOLOGIES = 0x0077; + public static final int NIKE_INC = 0x0078; + public static final int LESSWIRE_AG = 0x0079; + public static final int MSTAR_SEMICONDUCTOR_INC = 0x007A; + public static final int HANLYNN_TECHNOLOGIES = 0x007B; + public static final int A_R_CAMBRIDGE = 0x007C; + public static final int SEERS_TECHNOLOGY_CO_LTD = 0x007D; + public static final int SPORTS_TRACKING_TECHNOLOGIES_LTD = 0x007E; + public static final int AUTONET_MOBILE = 0x007F; + public static final int DELORME_PUBLISHING_COMPANY_INC = 0x0080; + public static final int WUXI_VIMICRO = 0x0081; + public static final int SENNHEISER_COMMUNICATIONS_A_S = 0x0082; + public static final int TIMEKEEPING_SYSTEMS_INC = 0x0083; + public static final int LUDUS_HELSINKI_LTD = 0x0084; + public static final int BLUERADIOS_INC = 0x0085; + public static final int EQUINOX_AG = 0x0086; + public static final int GARMIN_INTERNATIONAL_INC = 0x0087; + public static final int ECOTEST = 0x0088; + public static final int GN_RESOUND_A_S = 0x0089; + public static final int JAWBONE = 0x008A; + public static final int TOPCORN_POSITIONING_SYSTEMS_LLC = 0x008B; + public static final int QUALCOMM_RETAIL_SOLUTIONS_INC_FORMERLY_QUALCOMM_LABS_INC = 0x008C; + public static final int ZSCAN_SOFTWARE = 0x008D; + public static final int QUINTIC_CORP = 0x008E; + public static final int STOLLMAN_EV_GMBH = 0x008F; + public static final int FUNAI_ELECTRIC_CO_LTD = 0x0090; + public static final int ADVANCED_PANMOBIL_SYSTEMS_GMBH_CO_KG = 0x0091; + public static final int THINKOPTICS_INC = 0x0092; + public static final int UNIVERSAL_ELECTRONICS_INC = 0x0093; + public static final int AIROHA_TECHNOLOGY_CORP = 0x0094; + public static final int NEC_LIGHTING_LTD = 0x0095; + public static final int ODM_TECHNOLOGY_INC = 0x0096; + public static final int CONNECTEDEVICE_LTD = 0x0097; + public static final int ZER01TV_GMBH = 0x0098; + public static final int ITECH_DYNAMIC_GLOBAL_DISTRIBUTION_LTD = 0x0099; + public static final int ALPWISE = 0x009A; + public static final int JIANGSU_TOPPOWER_AUTOMOTIVE_ELECTRONICS_CO_LTD = 0x009B; + public static final int COLORFY_INC = 0x009C; + public static final int GEOFORCE_INC = 0x009D; + public static final int BOSE_CORPORATION = 0x009E; + public static final int SUUNTO_OY = 0x009F; + public static final int KENSINGTON_COMPUTER_PRODUCTS_GROUP = 0x00A0; + public static final int SRMEDIZINELEKTRONIK = 0x00A1; + public static final int VERTU_CORPORATION_LIMITED = 0x00A2; + public static final int META_WATCH_LTD = 0x00A3; + public static final int LINAK_A_S = 0x00A4; + public static final int OTL_DYNAMICS_LLC = 0x00A5; + public static final int PANDA_OCEAN_INC = 0x00A6; + public static final int VISTEON_CORPORATION = 0x00A7; + public static final int ARP_DEVICES_LIMITED = 0x00A8; + public static final int MAGNETI_MARELLI_SPA = 0x00A9; + public static final int CAEN_RFID_SRL = 0x00AA; + public static final int INGENIEURSYSTEMGRUPPE_ZAHN_GMBH = 0x00AB; + public static final int GREEN_THROTTLE_GAMES = 0x00AC; + public static final int PETER_SYSTEMTECHNIK_GMBH = 0x00AD; + public static final int OMEGAWAVE_OY = 0x00AE; + public static final int CINETIX = 0x00AF; + public static final int PASSIF_SEMICONDUCTOR_CORP = 0x00B0; + public static final int SARIS_CYCLING_GROUP_INC = 0x00B1; + public static final int BEKEY_A_S = 0x00B2; + public static final int CLARINOX_TECHNOLOGIES_PTY_LTD = 0x00B3; + public static final int BDE_TECHNOLOGY_CO_LTD = 0x00B4; + public static final int SWIRL_NETWORKS = 0x00B5; + public static final int MESO_INTERNATIONAL = 0x00B6; + public static final int TRELAB_LTD = 0x00B7; + public static final int QUALCOMM_INNOVATION_CENTER_INC_QUIC = 0x00B8; + public static final int JOHNSON_CONTROLS_INC = 0x00B9; + public static final int STARKEY_LABORATORIES_INC = 0x00BA; + public static final int SPOWER_ELECTRONICS_LIMITED = 0x00BB; + public static final int ACE_SENSOR_INC = 0x00BC; + public static final int APLIX_CORPORATION = 0x00BD; + public static final int AAMP_OF_AMERICA = 0x00BE; + public static final int STALMART_TECHNOLOGY_LIMITED = 0x00BF; + public static final int AMICCOM_ELECTRONICS_CORPORATION = 0x00C0; + public static final int SHENZHEN_EXCELSECU_DATA_TECHNOLOGY_COLTD = 0x00C1; + public static final int GENEQ_INC = 0x00C2; + public static final int ADIDAS_AG = 0x00C3; + public static final int LG_ELECTRONICS = 0x00C4; + public static final int ONSET_COMPUTER_CORPORATION = 0x00C5; + public static final int SELFLY_BV = 0x00C6; + public static final int QUUPPA_OY = 0x00C7; + public static final int GELO_INC = 0x00C8; + public static final int EVLUMA = 0x00C9; + public static final int MC10 = 0x00CA; + public static final int BINAURIC_SE = 0x00CB; + public static final int BEATS_ELECTRONICS = 0x00CC; + public static final int MICROCHIP_TECHNOLOGY_INC = 0x00CD; + public static final int ELGATO_SYSTEMS_GMBH = 0x00CE; + public static final int ARCHOS_SA = 0x00CF; + public static final int DEXCOM_INC = 0x00D0; + public static final int POLAR_ELECTRO_EUROPE_BV = 0x00D1; + public static final int DIALOG_SEMICONDUCTOR_BV = 0x00D2; + public static final int TAIXINGBANG_TECHNOLOGY_HK_CO_LTD = 0x00D3; + public static final int KAWANTECH = 0x00D4; + public static final int AUSTCO_COMMUNICATION_SYSTEMS = 0x00D5; + public static final int TIMEX_GROUP_USA_INC = 0x00D6; + public static final int QUALCOMM_TECHNOLOGIES_INC = 0x00D7; + public static final int QUALCOMM_CONNECTED_EXPERIENCES_INC = 0x00D8; + public static final int VOYETRA_TURTLE_BEACH = 0x00D9; + public static final int TXTR_GMBH = 0x00DA; + public static final int BIOSENTRONICS = 0x00DB; + public static final int PROCTER_GAMBLE = 0x00DC; + public static final int HOSIDEN_CORPORATION = 0x00DD; + public static final int MUZIK_LLC = 0x00DE; + public static final int MISFIT_WEARABLES_CORP = 0x00DF; + public static final int GOOGLE = 0x00E0; + public static final int DANLERS_LTD = 0x00E1; + public static final int SEMILINK_INC = 0x00E2; + public static final int INMUSIC_BRANDS_INC = 0x00E3; + public static final int LS_RESEARCH_INC = 0x00E4; + public static final int EDEN_SOFTWARE_CONSULTANTS_LTD = 0x00E5; + public static final int FRESHTEMP = 0x00E6; + public static final int KS_TECHNOLOGIES = 0x00E7; + public static final int ACTS_TECHNOLOGIES = 0x00E8; + public static final int VTRACK_SYSTEMS = 0x00E9; + public static final int NIELSENKELLERMAN_COMPANY = 0x00EA; + public static final int SERVER_TECHNOLOGY_INC = 0x00EB; + public static final int BIORESEARCH_ASSOCIATES = 0x00EC; + public static final int JOLLY_LOGIC_LLC = 0x00ED; + public static final int ABOVE_AVERAGE_OUTCOMES_INC = 0x00EE; + public static final int BITSPLITTERS_GMBH = 0x00EF; + public static final int PAYPAL_INC = 0x00F0; + public static final int WITRON_TECHNOLOGY_LIMITED = 0x00F1; + public static final int MORSE_PROJECT_INC = 0x00F2; + public static final int KENT_DISPLAYS_INC = 0x00F3; + public static final int NAUTILUS_INC = 0x00F4; + public static final int SMARTIFIER_OY = 0x00F5; + public static final int ELCOMETER_LIMITED = 0x00F6; + public static final int VSN_TECHNOLOGIES_INC = 0x00F7; + public static final int ACEUNI_CORP_LTD = 0x00F8; + public static final int STICKNFIND = 0x00F9; + public static final int CRYSTAL_CODE_AB = 0x00FA; + public static final int KOUKAAM_AS = 0x00FB; + public static final int DELPHI_CORPORATION = 0x00FC; + public static final int VALENCETECH_LIMITED = 0x00FD; + public static final int RESERVED = 0x00FE; + public static final int TYPO_PRODUCTS_LLC = 0x00FF; + public static final int TOMTOM_INTERNATIONAL_BV = 0x0100; + public static final int FUGOO_INC = 0x0101; + public static final int KEISER_CORPORATION = 0x0102; + public static final int BANG_OLUFSEN_A_S = 0x0103; + public static final int PLUS_LOCATIONS_SYSTEMS_PTY_LTD = 0x0104; + public static final int UBIQUITOUS_COMPUTING_TECHNOLOGY_CORPORATION = 0x0105; + public static final int INNOVATIVE_YACHTTER_SOLUTIONS = 0x0106; + public static final int WILLIAM_DEMANT_HOLDING_A_S = 0x0107; + public static final int CHICONY_ELECTRONICS_CO_LTD = 0x0108; + public static final int ATUS_BV = 0x0109; + public static final int CODEGATE_LTD = 0x010A; + public static final int ERI_INC = 0x010B; + public static final int TRANSDUCERS_DIRECT_LLC = 0x010C; + public static final int FUJITSU_TEN_LIMITED = 0x010D; + public static final int AUDI_AG = 0x010E; + public static final int HISILICON_TECHNOLOGIES_CO_LTD = 0x010F; + public static final int NIPPON_SEIKI_CO_LTD = 0x0110; + public static final int STEELSERIES_APS = 0x0111; + public static final int VYZYBL_INC = 0x0112; + public static final int OPENBRAIN_TECHNOLOGIES_CO_LTD = 0x0113; + public static final int XENSR = 0x0114; + public static final int ESOLUTIONS = 0x0115; + public static final int ONE_OAK_TECHNOLOGIES = 0x0116; + public static final int WIMOTO_TECHNOLOGIES_INC = 0x0117; + public static final int RADIUS_NETWORKS_INC = 0x0118; + public static final int WIZE_TECHNOLOGY_CO_LTD = 0x0119; + public static final int QUALCOMM_LABS_INC = 0x011A; + public static final int ARUBA_NETWORKS = 0x011B; + public static final int BAIDU = 0x011C; + public static final int ARENDI_AG = 0x011D; + public static final int SKODA_AUTO_AS = 0x011E; + public static final int VOLKSWAGON_AG = 0x011F; + public static final int PORSCHE_AG = 0x0120; + public static final int SINO_WEALTH_ELECTRONIC_LTD = 0x0121; + public static final int AIRTURN_INC = 0x0122; + public static final int KINSA_INC = 0x0123; + public static final int HID_GLOBAL = 0x0124; + public static final int SEAT_ES = 0x0125; + public static final int PROMETHEAN_LTD = 0x0126; + public static final int SALUTICA_ALLIED_SOLUTIONS = 0x0127; + public static final int GPSI_GROUP_PTY_LTD = 0x0128; + public static final int NIMBLE_DEVICES_OY = 0x0129; + public static final int CHANGZHOU_YONGSE_INFOTECH_CO_LTD = 0x012A; + public static final int SPORTIQ = 0x012B; + public static final int TEMEC_INSTRUMENTS_BV = 0x012C; + public static final int SONY_CORPORATION = 0x012D; + public static final int ASSA_ABLOY = 0x012E; + public static final int CLARION_CO_LTD = 0x012F; + public static final int WAREHOUSE_INNOVATIONS = 0x0130; + public static final int CYPRESS_SEMICONDUCTOR_CORPORATION = 0x0131; + public static final int MADS_INC = 0x0132; + public static final int BLUE_MAESTRO_LIMITED = 0x0133; + public static final int RESOLUTION_PRODUCTS_INC = 0x0134; + public static final int AIREWEAR_LLC = 0x0135; + public static final int ETC_SP_ZOO = 0x0136; + public static final int PRESTIGIO_PLAZA_LTD = 0x0137; + + private static final SparseArray COMPANY_NAME_MAP = populateCompanyNameMap(); + + public static String getCompanyName(int companyId, String fallback){ + final String name = COMPANY_NAME_MAP.get(companyId); + return name == null ? fallback : name; + } + + private static SparseArray populateCompanyNameMap() { + final SparseArray map = new SparseArray(); + + map.put(ERICSSON_TECHNOLOGY_LICENSING , "Ericsson Technology Licensing"); + map.put(NOKIA_MOBILE_PHONES , "Nokia Mobile Phones"); + map.put(INTEL_CORP , "Intel Corp."); + map.put(IBM_CORP , "IBM Corp."); + map.put(TOSHIBA_CORP , "Toshiba Corp."); + map.put(THREE_COM , "3Com"); + map.put(MICROSOFT , "Microsoft"); + map.put(LUCENT , "Lucent"); + map.put(MOTOROLA , "Motorola"); + map.put(INFINEON_TECHNOLOGIES_AG , "Infineon Technologies AG"); + map.put(CAMBRIDGE_SILICON_RADIO , "Cambridge Silicon Radio"); + map.put(SILICON_WAVE , "Silicon Wave"); + map.put(DIGIANSWER_A_S , "Digianswer A/S"); + map.put(TEXAS_INSTRUMENTS_INC , "Texas Instruments Inc."); + map.put(CEVA_INC_FORMERLY_PARTHUS_TECHNOLOGIES_INC , "Ceva, Inc. (formerly Parthus Technologies, Inc.)"); + map.put(BROADCOM_CORPORATION , "Broadcom Corporation"); + map.put(MITEL_SEMICONDUCTOR , "Mitel Semiconductor"); + map.put(WIDCOMM_INC , "Widcomm, Inc"); + map.put(ZEEVO_INC , "Zeevo, Inc."); + map.put(ATMEL_CORPORATION , "Atmel Corporation"); + map.put(MITSUBISHI_ELECTRIC_CORPORATION , "Mitsubishi Electric Corporation"); + map.put(RTX_TELECOM_A_S , "RTX Telecom A/S"); + map.put(KC_TECHNOLOGY_INC , "KC Technology Inc."); + map.put(NEWLOGIC , "NewLogic"); + map.put(TRANSILICA_INC , "Transilica, Inc."); + map.put(ROHDE_SCHWARZ_GMBH_CO_KG , "Rohde & Schwarz GmbH & Co. KG"); + map.put(TTPCOM_LIMITED , "TTPCom Limited"); + map.put(SIGNIA_TECHNOLOGIES_INC , "Signia Technologies, Inc."); + map.put(CONEXANT_SYSTEMS_INC , "Conexant Systems Inc."); + map.put(QUALCOMM , "Qualcomm"); + map.put(INVENTEL , "Inventel"); + map.put(AVM_BERLIN , "AVM Berlin"); + map.put(BANDSPEED_INC , "BandSpeed, Inc."); + map.put(MANSELLA_LTD , "Mansella Ltd"); + map.put(NEC_CORPORATION , "NEC Corporation"); + map.put(WAVEPLUS_TECHNOLOGY_CO_LTD , "WavePlus Technology Co., Ltd."); + map.put(ALCATEL , "Alcatel"); + map.put(PHILIPS_SEMICONDUCTORS , "Philips Semiconductors"); + map.put(C_TECHNOLOGIES , "C Technologies"); + map.put(OPEN_INTERFACE , "Open Interface"); + map.put(R_F_MICRO_DEVICES , "R F Micro Devices"); + map.put(HITACHI_LTD , "Hitachi Ltd"); + map.put(SYMBOL_TECHNOLOGIES_INC , "Symbol Technologies, Inc."); + map.put(TENOVIS , "Tenovis"); + map.put(MACRONIX_INTERNATIONAL_CO_LTD , "Macronix International Co. Ltd."); + map.put(GCT_SEMICONDUCTOR , "GCT Semiconductor"); + map.put(NORWOOD_SYSTEMS , "Norwood Systems"); + map.put(MEWTEL_TECHNOLOGY_INC , "MewTel Technology Inc."); + map.put(ST_MICROELECTRONICS , "ST Microelectronics"); + map.put(SYNOPSIS , "Synopsis"); + map.put(REDM_COMMUNICATIONS_LTD , "Red-M (Communications) Ltd"); + map.put(COMMIL_LTD , "Commil Ltd"); + map.put(COMPUTER_ACCESS_TECHNOLOGY_CORPORATION_CATC , "Computer Access Technology Corporation (CATC)"); + map.put(ECLIPSE_HQ_ESPANA_SL , "Eclipse (HQ Espana) S.L."); + map.put(RENESAS_TECHNOLOGY_CORP , "Renesas Technology Corp."); + map.put(MOBILIAN_CORPORATION , "Mobilian Corporation"); + map.put(TERAX , "Terax"); + map.put(INTEGRATED_SYSTEM_SOLUTION_CORP , "Integrated System Solution Corp."); + map.put(MATSUSHITA_ELECTRIC_INDUSTRIAL_CO_LTD , "Matsushita Electric Industrial Co., Ltd."); + map.put(GENNUM_CORPORATION , "Gennum Corporation"); + map.put(RESEARCH_IN_MOTION , "Research In Motion"); + map.put(IPEXTREME_INC , "IPextreme, Inc."); + map.put(SYSTEMS_AND_CHIPS_INC , "Systems and Chips, Inc."); + map.put(BLUETOOTH_SIG_INC , "Bluetooth SIG, Inc."); + map.put(SEIKO_EPSON_CORPORATION , "Seiko Epson Corporation"); + map.put(INTEGRATED_SILICON_SOLUTION_TAIWAN_INC , "Integrated Silicon Solution Taiwan, Inc."); + map.put(CONWISE_TECHNOLOGY_CORPORATION_LTD , "CONWISE Technology Corporation Ltd"); + map.put(PARROT_SA , "PARROT SA"); + map.put(SOCKET_MOBILE , "Socket Mobile"); + map.put(ATHEROS_COMMUNICATIONS_INC , "Atheros Communications, Inc."); + map.put(MEDIATEK_INC , "MediaTek, Inc."); + map.put(BLUEGIGA , "Bluegiga"); + map.put(MARVELL_TECHNOLOGY_GROUP_LTD , "Marvell Technology Group Ltd."); + map.put(THREE_DSP_CORPORATION , "3DSP Corporation"); + map.put(ACCEL_SEMICONDUCTOR_LTD , "Accel Semiconductor Ltd."); + map.put(CONTINENTAL_AUTOMOTIVE_SYSTEMS , "Continental Automotive Systems"); + map.put(APPLE_INC , "Apple, Inc."); + map.put(STACCATO_COMMUNICATIONS_INC , "Staccato Communications, Inc."); + map.put(AVAGO_TECHNOLOGIES , "Avago Technologies"); + map.put(APT_LICENSING_LTD , "APT Licensing Ltd."); + map.put(SIRF_TECHNOLOGY , "SiRF Technology"); + map.put(TZERO_TECHNOLOGIES_INC , "Tzero Technologies, Inc."); + map.put(JM_CORPORATION , "J&M Corporation"); + map.put(FREE2MOVE_AB , "Free2move AB"); + map.put(THREE_DIJOY_CORPORATION , "3DiJoy Corporation"); + map.put(PLANTRONICS_INC , "Plantronics, Inc."); + map.put(SONY_ERICSSON_MOBILE_COMMUNICATIONS , "Sony Ericsson Mobile Communications"); + map.put(HARMAN_INTERNATIONAL_INDUSTRIES_INC , "Harman International Industries, Inc."); + map.put(VIZIO_INC , "Vizio, Inc."); + map.put(NORDIC_SEMICONDUCTOR_ASA , "Nordic Semiconductor ASA"); + map.put(EM_MICROELECTRONICMARIN_SA , "EM Microelectronic-Marin SA"); + map.put(RALINK_TECHNOLOGY_CORPORATION , "Ralink Technology Corporation"); + map.put(BELKIN_INTERNATIONAL_INC , "Belkin International, Inc."); + map.put(REALTEK_SEMICONDUCTOR_CORPORATION , "Realtek Semiconductor Corporation"); + map.put(STONESTREET_ONE_LLC , "Stonestreet One, LLC"); + map.put(WICENTRIC_INC , "Wicentric, Inc."); + map.put(RIVIERAWAVES_SAS , "RivieraWaves S.A.S"); + map.put(RDA_MICROELECTRONICS , "RDA Microelectronics"); + map.put(GIBSON_GUITARS , "Gibson Guitars"); + map.put(MICOMMAND_INC , "MiCommand Inc."); + map.put(BAND_XI_INTERNATIONAL_LLC , "Band XI International, LLC"); + map.put(HEWLETTPACKARD_COMPANY , "Hewlett-Packard Company"); + map.put(NINE_SOLUTIONS_OY , "9Solutions Oy"); + map.put(GN_NETCOM_A_S , "GN Netcom A/S"); + map.put(GENERAL_MOTORS , "General Motors"); + map.put(AD_ENGINEERING_INC , "A&D Engineering, Inc."); + map.put(MINDTREE_LTD , "MindTree Ltd."); + map.put(POLAR_ELECTRO_OY , "Polar Electro OY"); + map.put(BEAUTIFUL_ENTERPRISE_CO_LTD , "Beautiful Enterprise Co., Ltd."); + map.put(BRIARTEK_INC , "BriarTek, Inc."); + map.put(SUMMIT_DATA_COMMUNICATIONS_INC , "Summit Data Communications, Inc."); + map.put(SOUND_ID , "Sound ID"); + map.put(MONSTER_LLC , "Monster, LLC"); + map.put(CONNECTBLUE_AB , "connectBlue AB"); + map.put(SHANGHAI_SUPER_SMART_ELECTRONICS_CO_LTD , "ShangHai Super Smart Electronics Co. Ltd."); + map.put(GROUP_SENSE_LTD , "Group Sense Ltd."); + map.put(ZOMM_LLC , "Zomm, LLC"); + map.put(SAMSUNG_ELECTRONICS_CO_LTD , "Samsung Electronics Co. Ltd."); + map.put(CREATIVE_TECHNOLOGY_LTD , "Creative Technology Ltd."); + map.put(LAIRD_TECHNOLOGIES , "Laird Technologies"); + map.put(NIKE_INC , "Nike, Inc."); + map.put(LESSWIRE_AG , "lesswire AG"); + map.put(MSTAR_SEMICONDUCTOR_INC , "MStar Semiconductor, Inc."); + map.put(HANLYNN_TECHNOLOGIES , "Hanlynn Technologies"); + map.put(A_R_CAMBRIDGE , "A & R Cambridge"); + map.put(SEERS_TECHNOLOGY_CO_LTD , "Seers Technology Co. Ltd"); + map.put(SPORTS_TRACKING_TECHNOLOGIES_LTD , "Sports Tracking Technologies Ltd."); + map.put(AUTONET_MOBILE , "Autonet Mobile"); + map.put(DELORME_PUBLISHING_COMPANY_INC , "DeLorme Publishing Company, Inc."); + map.put(WUXI_VIMICRO , "WuXi Vimicro"); + map.put(SENNHEISER_COMMUNICATIONS_A_S , "Sennheiser Communications A/S"); + map.put(TIMEKEEPING_SYSTEMS_INC , "TimeKeeping Systems, Inc."); + map.put(LUDUS_HELSINKI_LTD , "Ludus Helsinki Ltd."); + map.put(BLUERADIOS_INC , "BlueRadios, Inc."); + map.put(EQUINOX_AG , "equinox AG"); + map.put(GARMIN_INTERNATIONAL_INC , "Garmin International, Inc."); + map.put(ECOTEST , "Ecotest"); + map.put(GN_RESOUND_A_S , "GN ReSound A/S"); + map.put(JAWBONE , "Jawbone"); + map.put(TOPCORN_POSITIONING_SYSTEMS_LLC , "Topcorn Positioning Systems, LLC"); + map.put(QUALCOMM_RETAIL_SOLUTIONS_INC_FORMERLY_QUALCOMM_LABS_INC , "Qualcomm Retail Solutions, Inc. (formerly Qualcomm Labs, Inc.)"); + map.put(ZSCAN_SOFTWARE , "Zscan Software"); + map.put(QUINTIC_CORP , "Quintic Corp."); + map.put(STOLLMAN_EV_GMBH , "Stollman E+V GmbH"); + map.put(FUNAI_ELECTRIC_CO_LTD , "Funai Electric Co., Ltd."); + map.put(ADVANCED_PANMOBIL_SYSTEMS_GMBH_CO_KG , "Advanced PANMOBIL Systems GmbH & Co. KG"); + map.put(THINKOPTICS_INC , "ThinkOptics, Inc."); + map.put(UNIVERSAL_ELECTRONICS_INC , "Universal Electronics, Inc."); + map.put(AIROHA_TECHNOLOGY_CORP , "Airoha Technology Corp."); + map.put(NEC_LIGHTING_LTD , "NEC Lighting, Ltd."); + map.put(ODM_TECHNOLOGY_INC , "ODM Technology, Inc."); + map.put(CONNECTEDEVICE_LTD , "ConnecteDevice Ltd."); + map.put(ZER01TV_GMBH , "zer01.tv GmbH"); + map.put(ITECH_DYNAMIC_GLOBAL_DISTRIBUTION_LTD , "i.Tech Dynamic Global Distribution Ltd."); + map.put(ALPWISE , "Alpwise"); + map.put(JIANGSU_TOPPOWER_AUTOMOTIVE_ELECTRONICS_CO_LTD , "Jiangsu Toppower Automotive Electronics Co., Ltd."); + map.put(COLORFY_INC , "Colorfy, Inc."); + map.put(GEOFORCE_INC , "Geoforce Inc."); + map.put(BOSE_CORPORATION , "Bose Corporation"); + map.put(SUUNTO_OY , "Suunto Oy"); + map.put(KENSINGTON_COMPUTER_PRODUCTS_GROUP , "Kensington Computer Products Group"); + map.put(SRMEDIZINELEKTRONIK , "SR-Medizinelektronik"); + map.put(VERTU_CORPORATION_LIMITED , "Vertu Corporation Limited"); + map.put(META_WATCH_LTD , "Meta Watch Ltd."); + map.put(LINAK_A_S , "LINAK A/S"); + map.put(OTL_DYNAMICS_LLC , "OTL Dynamics LLC"); + map.put(PANDA_OCEAN_INC , "Panda Ocean Inc."); + map.put(VISTEON_CORPORATION , "Visteon Corporation"); + map.put(ARP_DEVICES_LIMITED , "ARP Devices Limited"); + map.put(MAGNETI_MARELLI_SPA , "Magneti Marelli S.p.A"); + map.put(CAEN_RFID_SRL , "CAEN RFID srl"); + map.put(INGENIEURSYSTEMGRUPPE_ZAHN_GMBH , "Ingenieur-Systemgruppe Zahn GmbH"); + map.put(GREEN_THROTTLE_GAMES , "Green Throttle Games"); + map.put(PETER_SYSTEMTECHNIK_GMBH , "Peter Systemtechnik GmbH"); + map.put(OMEGAWAVE_OY , "Omegawave Oy"); + map.put(CINETIX , "Cinetix"); + map.put(PASSIF_SEMICONDUCTOR_CORP , "Passif Semiconductor Corp"); + map.put(SARIS_CYCLING_GROUP_INC , "Saris Cycling Group, Inc"); + map.put(BEKEY_A_S , "Bekey A/S"); + map.put(CLARINOX_TECHNOLOGIES_PTY_LTD , "Clarinox Technologies Pty. Ltd."); + map.put(BDE_TECHNOLOGY_CO_LTD , "BDE Technology Co., Ltd."); + map.put(SWIRL_NETWORKS , "Swirl Networks"); + map.put(MESO_INTERNATIONAL , "Meso international"); + map.put(TRELAB_LTD , "TreLab Ltd"); + map.put(QUALCOMM_INNOVATION_CENTER_INC_QUIC , "Qualcomm Innovation Center, Inc. (QuIC)"); + map.put(JOHNSON_CONTROLS_INC , "Johnson Controls, Inc."); + map.put(STARKEY_LABORATORIES_INC , "Starkey Laboratories Inc."); + map.put(SPOWER_ELECTRONICS_LIMITED , "S-Power Electronics Limited"); + map.put(ACE_SENSOR_INC , "Ace Sensor Inc"); + map.put(APLIX_CORPORATION , "Aplix Corporation"); + map.put(AAMP_OF_AMERICA , "AAMP of America"); + map.put(STALMART_TECHNOLOGY_LIMITED , "Stalmart Technology Limited"); + map.put(AMICCOM_ELECTRONICS_CORPORATION , "AMICCOM Electronics Corporation"); + map.put(SHENZHEN_EXCELSECU_DATA_TECHNOLOGY_COLTD , "Shenzhen Excelsecu Data Technology Co.,Ltd"); + map.put(GENEQ_INC , "Geneq Inc."); + map.put(ADIDAS_AG , "adidas AG"); + map.put(LG_ELECTRONICS , "LG Electronics"); + map.put(ONSET_COMPUTER_CORPORATION , "Onset Computer Corporation"); + map.put(SELFLY_BV , "Selfly BV"); + map.put(QUUPPA_OY , "Quuppa Oy."); + map.put(GELO_INC , "GeLo Inc"); + map.put(EVLUMA , "Evluma"); + map.put(MC10 , "MC10"); + map.put(BINAURIC_SE , "Binauric SE"); + map.put(BEATS_ELECTRONICS , "Beats Electronics"); + map.put(MICROCHIP_TECHNOLOGY_INC , "Microchip Technology Inc."); + map.put(ELGATO_SYSTEMS_GMBH , "Elgato Systems GmbH"); + map.put(ARCHOS_SA , "ARCHOS SA"); + map.put(DEXCOM_INC , "Dexcom, Inc."); + map.put(POLAR_ELECTRO_EUROPE_BV , "Polar Electro Europe B.V."); + map.put(DIALOG_SEMICONDUCTOR_BV , "Dialog Semiconductor B.V."); + map.put(TAIXINGBANG_TECHNOLOGY_HK_CO_LTD , "Taixingbang Technology (HK) Co,. LTD."); + map.put(KAWANTECH , "Kawantech"); + map.put(AUSTCO_COMMUNICATION_SYSTEMS , "Austco Communication Systems"); + map.put(TIMEX_GROUP_USA_INC , "Timex Group USA, Inc."); + map.put(QUALCOMM_TECHNOLOGIES_INC , "Qualcomm Technologies, Inc."); + map.put(QUALCOMM_CONNECTED_EXPERIENCES_INC , "Qualcomm Connected Experiences, Inc."); + map.put(VOYETRA_TURTLE_BEACH , "Voyetra Turtle Beach"); + map.put(TXTR_GMBH , "txtr GmbH"); + map.put(BIOSENTRONICS , "Biosentronics"); + map.put(PROCTER_GAMBLE , "Procter & Gamble"); + map.put(HOSIDEN_CORPORATION , "Hosiden Corporation"); + map.put(MUZIK_LLC , "Muzik LLC"); + map.put(MISFIT_WEARABLES_CORP , "Misfit Wearables Corp"); + map.put(GOOGLE , "Google"); + map.put(DANLERS_LTD , "Danlers Ltd"); + map.put(SEMILINK_INC , "Semilink Inc"); + map.put(INMUSIC_BRANDS_INC , "inMusic Brands, Inc"); + map.put(LS_RESEARCH_INC , "L.S. Research Inc."); + map.put(EDEN_SOFTWARE_CONSULTANTS_LTD , "Eden Software Consultants Ltd."); + map.put(FRESHTEMP , "Freshtemp"); + map.put(KS_TECHNOLOGIES , "KS Technologies"); + map.put(ACTS_TECHNOLOGIES , "ACTS Technologies"); + map.put(VTRACK_SYSTEMS , "Vtrack Systems"); + map.put(NIELSENKELLERMAN_COMPANY , "Nielsen-Kellerman Company"); + map.put(SERVER_TECHNOLOGY_INC , "Server Technology, Inc."); + map.put(BIORESEARCH_ASSOCIATES , "BioResearch Associates"); + map.put(JOLLY_LOGIC_LLC , "Jolly Logic, LLC"); + map.put(ABOVE_AVERAGE_OUTCOMES_INC , "Above Average Outcomes, Inc."); + map.put(BITSPLITTERS_GMBH , "Bitsplitters GmbH"); + map.put(PAYPAL_INC , "PayPal, Inc."); + map.put(WITRON_TECHNOLOGY_LIMITED , "Witron Technology Limited"); + map.put(MORSE_PROJECT_INC , "Morse Project Inc."); + map.put(KENT_DISPLAYS_INC , "Kent Displays Inc."); + map.put(NAUTILUS_INC , "Nautilus Inc."); + map.put(SMARTIFIER_OY , "Smartifier Oy"); + map.put(ELCOMETER_LIMITED , "Elcometer Limited"); + map.put(VSN_TECHNOLOGIES_INC , "VSN Technologies Inc."); + map.put(ACEUNI_CORP_LTD , "AceUni Corp., Ltd."); + map.put(STICKNFIND , "StickNFind"); + map.put(CRYSTAL_CODE_AB , "Crystal Code AB"); + map.put(KOUKAAM_AS , "KOUKAAM a.s."); + map.put(DELPHI_CORPORATION , "Delphi Corporation"); + map.put(VALENCETECH_LIMITED , "ValenceTech Limited"); + map.put(RESERVED , "Reserved"); + map.put(TYPO_PRODUCTS_LLC , "Typo Products, LLC"); + map.put(TOMTOM_INTERNATIONAL_BV , "TomTom International BV"); + map.put(FUGOO_INC , "Fugoo, Inc"); + map.put(KEISER_CORPORATION , "Keiser Corporation"); + map.put(BANG_OLUFSEN_A_S , "Bang & Olufsen A/S"); + map.put(PLUS_LOCATIONS_SYSTEMS_PTY_LTD , "PLUS Locations Systems Pty Ltd"); + map.put(UBIQUITOUS_COMPUTING_TECHNOLOGY_CORPORATION , "Ubiquitous Computing Technology Corporation"); + map.put(INNOVATIVE_YACHTTER_SOLUTIONS , "Innovative Yachtter Solutions"); + map.put(WILLIAM_DEMANT_HOLDING_A_S , "William Demant Holding A/S"); + map.put(CHICONY_ELECTRONICS_CO_LTD , "Chicony Electronics Co., Ltd."); + map.put(ATUS_BV , "Atus BV"); + map.put(CODEGATE_LTD , "Codegate Ltd."); + map.put(ERI_INC , "ERi, Inc."); + map.put(TRANSDUCERS_DIRECT_LLC , "Transducers Direct, LLC"); + map.put(FUJITSU_TEN_LIMITED , "Fujitsu Ten Limited"); + map.put(AUDI_AG , "Audi AG"); + map.put(HISILICON_TECHNOLOGIES_CO_LTD , "HiSilicon Technologies Co., Ltd."); + map.put(NIPPON_SEIKI_CO_LTD , "Nippon Seiki Co., Ltd."); + map.put(STEELSERIES_APS , "Steelseries ApS"); + map.put(VYZYBL_INC , "vyzybl Inc."); + map.put(OPENBRAIN_TECHNOLOGIES_CO_LTD , "Openbrain Technologies, Co., Ltd."); + map.put(XENSR , "Xensr"); + map.put(ESOLUTIONS , "e.solutions"); + map.put(ONE_OAK_TECHNOLOGIES , "1OAK Technologies"); + map.put(WIMOTO_TECHNOLOGIES_INC , "Wimoto Technologies Inc"); + map.put(RADIUS_NETWORKS_INC , "Radius Networks, Inc."); + map.put(WIZE_TECHNOLOGY_CO_LTD , "Wize Technology Co., Ltd."); + map.put(QUALCOMM_LABS_INC , "Qualcomm Labs, Inc."); + map.put(ARUBA_NETWORKS , "Aruba Networks"); + map.put(BAIDU , "Baidu"); + map.put(ARENDI_AG , "Arendi AG"); + map.put(SKODA_AUTO_AS , "Skoda Auto a.s."); + map.put(VOLKSWAGON_AG , "Volkswagon AG"); + map.put(PORSCHE_AG , "Porsche AG"); + map.put(SINO_WEALTH_ELECTRONIC_LTD , "Sino Wealth Electronic Ltd."); + map.put(AIRTURN_INC , "AirTurn, Inc."); + map.put(KINSA_INC , "Kinsa, Inc."); + map.put(HID_GLOBAL , "HID Global"); + map.put(SEAT_ES , "SEAT es"); + map.put(PROMETHEAN_LTD , "Promethean Ltd."); + map.put(SALUTICA_ALLIED_SOLUTIONS , "Salutica Allied Solutions"); + map.put(GPSI_GROUP_PTY_LTD , "GPSI Group Pty Ltd"); + map.put(NIMBLE_DEVICES_OY , "Nimble Devices Oy"); + map.put(CHANGZHOU_YONGSE_INFOTECH_CO_LTD , "Changzhou Yongse Infotech Co., Ltd"); + map.put(SPORTIQ , "SportIQ"); + map.put(TEMEC_INSTRUMENTS_BV , "TEMEC Instruments B.V."); + map.put(SONY_CORPORATION , "Sony Corporation"); + map.put(ASSA_ABLOY , "ASSA ABLOY"); + map.put(CLARION_CO_LTD , "Clarion Co., Ltd."); + map.put(WAREHOUSE_INNOVATIONS , "Warehouse Innovations"); + map.put(CYPRESS_SEMICONDUCTOR_CORPORATION , "Cypress Semiconductor Corporation"); + map.put(MADS_INC , "MADS Inc"); + map.put(BLUE_MAESTRO_LIMITED , "Blue Maestro Limited"); + map.put(RESOLUTION_PRODUCTS_INC , "Resolution Products, Inc."); + map.put(AIREWEAR_LLC , "Airewear LLC"); + map.put(ETC_SP_ZOO , "ETC sp. z.o.o."); + map.put(PRESTIGIO_PLAZA_LTD , "Prestigio Plaza Ltd."); + + return map; + } + + +} diff --git a/library/src/uk/co/alt236/bluetoothlelib/resolvers/GattAttributeResolver.java b/library/src/uk/co/alt236/bluetoothlelib/resolvers/GattAttributeResolver.java index be90b88..60671fa 100644 --- a/library/src/uk/co/alt236/bluetoothlelib/resolvers/GattAttributeResolver.java +++ b/library/src/uk/co/alt236/bluetoothlelib/resolvers/GattAttributeResolver.java @@ -15,8 +15,169 @@ import java.util.Map; * */ public class GattAttributeResolver { - public final static String HEART_RATE_MEASUREMENT = "00002a37-0000-1000-8000-00805f9b34fb"; - public final static String CLIENT_CHARACTERISTIC_CONFIG = "00002902-0000-1000-8000-00805f9b34fb"; + 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 sGattAttributesMap = populateGattAttributesMap(); @@ -28,167 +189,169 @@ public class GattAttributeResolver { private static Map populateGattAttributesMap() { final Map map = new HashMap(); - map.put("00000000-0000-1000-8000-00805f9b34fb","Base GUID"); - map.put("00000001-0000-1000-8000-00805f9b34fb","Service Discovery Protocol (SDP)"); - map.put("00000002-0000-1000-8000-00805f9b34fb","User Datagram Protocol (UDP)"); - map.put("00000003-0000-1000-8000-00805f9b34fb","Radio Frequency Communication Protocol (RFCOMM)"); - map.put("00000004-0000-1000-8000-00805f9b34fb","TCP"); - map.put("00000005-0000-1000-8000-00805f9b34fb","TCSBIN"); - map.put("00000006-0000-1000-8000-00805f9b34fb","TCSAT"); - map.put("00000008-0000-1000-8000-00805f9b34fb","Object Exchange Protocol (OBEX)"); - map.put("00000009-0000-1000-8000-00805f9b34fb","IP"); - map.put("0000000a-0000-1000-8000-00805f9b34fb","FTP"); - map.put("0000000c-0000-1000-8000-00805f9b34fb","HTTP"); - map.put("0000000e-0000-1000-8000-00805f9b34fb","WSP"); - map.put("0000000f-0000-1000-8000-00805f9b34fb","BNEP_SVC"); - map.put("00000010-0000-1000-8000-00805f9b34fb","UPNP"); - map.put("00000011-0000-1000-8000-00805f9b34fb","HIDP"); - map.put("00000012-0000-1000-8000-00805f9b34fb","Hardcopy Control Channel Protocol"); - map.put("00000014-0000-1000-8000-00805f9b34fb","Hardcopy Data Channel Protocol"); - map.put("00000016-0000-1000-8000-00805f9b34fb","Hardcopy Notification Protocol"); - map.put("00000017-0000-1000-8000-00805f9b34fb","VCTP Protocol"); - map.put("00000019-0000-1000-8000-00805f9b34fb","VDTP Protocol"); - map.put("0000001b-0000-1000-8000-00805f9b34fb","CMPT Protocol"); - map.put("0000001d-0000-1000-8000-00805f9b34fb","UDI C Plane Protocol"); - map.put("0000001e-0000-1000-8000-00805f9b34fb","MCAP Control Channel"); - map.put("0000001f-0000-1000-8000-00805f9b34fb","MCAP Data Channel"); - map.put("00000100-0000-1000-8000-00805f9b34fb","L2CAP"); - map.put("00001000-0000-1000-8000-00805f9b34fb","Service Discovery Server"); - map.put("00001001-0000-1000-8000-00805f9b34fb","Browse Group Descriptor"); - map.put("00001002-0000-1000-8000-00805f9b34fb","Public Browse Group"); - map.put("00001101-0000-1000-8000-00805f9b34fb","SPP"); - map.put("00001102-0000-1000-8000-00805f9b34fb","LAN Access Using PPP"); - map.put("00001103-0000-1000-8000-00805f9b34fb","DUN_GW"); - map.put("00001104-0000-1000-8000-00805f9b34fb","OBEX_SYNC"); - map.put("00001105-0000-1000-8000-00805f9b34fb","OBEX Object Push"); - map.put("00001106-0000-1000-8000-00805f9b34fb","OBEX File Transfer"); - map.put("00001107-0000-1000-8000-00805f9b34fb","IrMC Sync Command"); - map.put("00001108-0000-1000-8000-00805f9b34fb","HSP_HS"); - map.put("00001109-0000-1000-8000-00805f9b34fb","Cordless Telephony"); - map.put("0000110a-0000-1000-8000-00805f9b34fb","Audio Source"); - map.put("0000110b-0000-1000-8000-00805f9b34fb","Audio Sink"); - map.put("0000110c-0000-1000-8000-00805f9b34fb","AV Remote Control Target"); - map.put("0000110d-0000-1000-8000-00805f9b34fb","ADVANCED_AUDIO"); - map.put("0000110e-0000-1000-8000-00805f9b34fb","AVRCP_REMOTE"); - map.put("0000110f-0000-1000-8000-00805f9b34fb","Video Conferencing"); - map.put("00001110-0000-1000-8000-00805f9b34fb","Intercom"); - map.put("00001111-0000-1000-8000-00805f9b34fb","FAX"); - map.put("00001112-0000-1000-8000-00805f9b34fb","Headset Profile (HSP) - Audio Gateway"); - map.put("00001113-0000-1000-8000-00805f9b34fb","WAP"); - map.put("00001114-0000-1000-8000-00805f9b34fb","WAP Client"); - map.put("00001115-0000-1000-8000-00805f9b34fb","PANU"); - map.put("00001116-0000-1000-8000-00805f9b34fb","NAP"); - map.put("00001117-0000-1000-8000-00805f9b34fb","GN"); - map.put("00001118-0000-1000-8000-00805f9b34fb","Direct Printing"); - map.put("00001119-0000-1000-8000-00805f9b34fb","Reference Printing"); - map.put("0000111a-0000-1000-8000-00805f9b34fb","Imaging"); - map.put("0000111b-0000-1000-8000-00805f9b34fb","Imaging Responder"); - map.put("0000111c-0000-1000-8000-00805f9b34fb","Imaging Automatic Archive"); - map.put("0000111d-0000-1000-8000-00805f9b34fb","Imaging Reference Objects"); - map.put("0000111e-0000-1000-8000-00805f9b34fb","Hands Free Profile (HFP)"); - map.put("0000111f-0000-1000-8000-00805f9b34fb","Hands Free Profile (HFP) – Audio Gateway"); - map.put("00001120-0000-1000-8000-00805f9b34fb","Direct Printing Reference Objects"); - map.put("00001121-0000-1000-8000-00805f9b34fb","Reflected UI"); - map.put("00001122-0000-1000-8000-00805f9b34fb","Basic Printing"); - map.put("00001123-0000-1000-8000-00805f9b34fb","Printing Status"); - map.put("00001124-0000-1000-8000-00805f9b34fb","HID"); - map.put("00001125-0000-1000-8000-00805f9b34fb","Hardcopy Cable Replacement"); - map.put("00001126-0000-1000-8000-00805f9b34fb","HCR Print"); - map.put("00001127-0000-1000-8000-00805f9b34fb","HCR Scan"); - map.put("00001128-0000-1000-8000-00805f9b34fb","Common ISDN Access"); - map.put("00001129-0000-1000-8000-00805f9b34fb","Video Conferencing Gateway"); - map.put("0000112a-0000-1000-8000-00805f9b34fb","UDIMT"); - map.put("0000112b-0000-1000-8000-00805f9b34fb","UDITA"); - map.put("0000112c-0000-1000-8000-00805f9b34fb","Audio Video"); - map.put("0000112d-0000-1000-8000-00805f9b34fb","SIM Access"); - map.put("0000112e-0000-1000-8000-00805f9b34fb","OBEX PCE"); - map.put("0000112f-0000-1000-8000-00805f9b34fb","OBEX PSE"); - map.put("00001130-0000-1000-8000-00805f9b34fb","OBEX PBAP"); - map.put("00001132-0000-1000-8000-00805f9b34fb","OBEX MAS"); - map.put("00001133-0000-1000-8000-00805f9b34fb","OBEX MNS"); - map.put("00001134-0000-1000-8000-00805f9b34fb","OBEX MAP"); - map.put("00001200-0000-1000-8000-00805f9b34fb","PNP"); - map.put("00001201-0000-1000-8000-00805f9b34fb","Generic Networking"); - map.put("00001202-0000-1000-8000-00805f9b34fb","Generic File Transfer"); - map.put("00001203-0000-1000-8000-00805f9b34fb","Generic Audio"); - map.put("00001204-0000-1000-8000-00805f9b34fb","Generic Telephony"); - map.put("00001205-0000-1000-8000-00805f9b34fb","UPNP"); - map.put("00001206-0000-1000-8000-00805f9b34fb","UPNP IP"); - map.put("00001300-0000-1000-8000-00805f9b34fb","ESDP UPnP IP PAN"); - map.put("00001301-0000-1000-8000-00805f9b34fb","ESDP UPnP IP LAP"); - map.put("00001302-0000-1000-8000-00805f9b34fb","ESDP Upnp L2CAP"); - map.put("00001303-0000-1000-8000-00805f9b34fb","Video Distribution Profile (VDP) - Source"); - map.put("00001304-0000-1000-8000-00805f9b34fb","Video Distribution Profile (VDP) - Sink"); - map.put("00001305-0000-1000-8000-00805f9b34fb","Video Distribution Profile (VDP)"); - map.put("00001400-0000-1000-8000-00805f9b34fb","Health Device Profile (HDP)"); - map.put("00001401-0000-1000-8000-00805f9b34fb","Health Device Profile (HDP) - Source"); - map.put("00001402-0000-1000-8000-00805f9b34fb","Health Device Profile (HDP) - Sink"); - map.put("00001800-0000-1000-8000-00805f9b34fb","GAP"); - map.put("00001801-0000-1000-8000-00805f9b34fb","GATT"); - map.put("00001802-0000-1000-8000-00805f9b34fb","IMMEDIATE_ALERT"); - map.put("00001803-0000-1000-8000-00805f9b34fb","LINK_LOSS"); - map.put("00001804-0000-1000-8000-00805f9b34fb","TX_POWER"); - map.put("00001809-0000-1000-8000-00805f9b34fb","Health Thermometer"); - map.put("0000180a-0000-1000-8000-00805f9b34fb","Device Information"); - map.put("0000180d-0000-1000-8000-00805f9b34fb","HEART_RATE"); - map.put("00001816-0000-1000-8000-00805f9b34fb","CYCLING_SC"); - map.put(CLIENT_CHARACTERISTIC_CONFIG,"Client Characteristic Config"); - map.put("00002a00-0000-1000-8000-00805f9b34fb","Device Name"); - map.put("00002a01-0000-1000-8000-00805f9b34fb","Appearance"); - map.put("00002a02-0000-1000-8000-00805f9b34fb","Peripheral Privacy Flag"); - map.put("00002a03-0000-1000-8000-00805f9b34fb","Reconnection Address"); - map.put("00002a04-0000-1000-8000-00805f9b34fb","Peripheral Preferred Connection Parameters"); - map.put("00002a05-0000-1000-8000-00805f9b34fb","Service Changed"); - map.put("00002a06-0000-1000-8000-00805f9b34fb","Alert Level"); - map.put("00002a07-0000-1000-8000-00805f9b34fb","Tx Power Level"); - map.put("00002a08-0000-1000-8000-00805f9b34fb","Date Time"); - map.put("00002a09-0000-1000-8000-00805f9b34fb","Day of Week"); - map.put("00002a0a-0000-1000-8000-00805f9b34fb","Day Date Time"); - map.put("00002a0c-0000-1000-8000-00805f9b34fb","Exact Time 256"); - map.put("00002a0d-0000-1000-8000-00805f9b34fb","DST Offset"); - map.put("00002a0e-0000-1000-8000-00805f9b34fb","Time Zone"); - map.put("00002a0f-0000-1000-8000-00805f9b34fb","Local Time Information"); - map.put("00002a11-0000-1000-8000-00805f9b34fb","Time with DST"); - map.put("00002a12-0000-1000-8000-00805f9b34fb","Time Accuracy"); - map.put("00002a13-0000-1000-8000-00805f9b34fb","Time Source"); - map.put("00002a14-0000-1000-8000-00805f9b34fb","Reference Time Information"); - map.put("00002a16-0000-1000-8000-00805f9b34fb","Time Update Control Point"); - map.put("00002a17-0000-1000-8000-00805f9b34fb","Time Update State"); - map.put("00002a1c-0000-1000-8000-00805f9b34fb","Temperature Measurement"); - map.put("00002a1d-0000-1000-8000-00805f9b34fb","Temperature Type"); - map.put("00002a1e-0000-1000-8000-00805f9b34fb","Intermediate Temperature"); - map.put("00002a21-0000-1000-8000-00805f9b34fb","Measurement Interval"); - map.put("00002a23-0000-1000-8000-00805f9b34fb","System ID"); - map.put("00002a24-0000-1000-8000-00805f9b34fb","Model Number String"); - map.put("00002a25-0000-1000-8000-00805f9b34fb","Serial Number String"); - map.put("00002a26-0000-1000-8000-00805f9b34fb","Firmware Revision String"); - map.put("00002a27-0000-1000-8000-00805f9b34fb","Hardware Revision String"); - map.put("00002a28-0000-1000-8000-00805f9b34fb","Software Revision String"); - map.put("00002a29-0000-1000-8000-00805f9b34fb","Manufacturer Name String"); - map.put("00002a2a-0000-1000-8000-00805f9b34fb","IEEE 11073-20601 Regulatory"); - map.put("00002a2b-0000-1000-8000-00805f9b34fb","Current Time"); - map.put("00002a35-0000-1000-8000-00805f9b34fb","Blood Pressure Measurement"); - map.put("00002a36-0000-1000-8000-00805f9b34fb","Intermediate Cuff Pressure"); - map.put(HEART_RATE_MEASUREMENT,"Heart Rate Measurement"); - map.put("00002a38-0000-1000-8000-00805f9b34fb","Body Sensor Location"); - map.put("00002a39-0000-1000-8000-00805f9b34fb","Heart Rate Control Point"); - map.put("00002a3f-0000-1000-8000-00805f9b34fb","Alert Status"); - map.put("00002a40-0000-1000-8000-00805f9b34fb","Ringer Control Point"); - map.put("00002a41-0000-1000-8000-00805f9b34fb","Ringer Setting"); - map.put("00002a42-0000-1000-8000-00805f9b34fb","Alert Category ID Bit Mask"); - map.put("00002a43-0000-1000-8000-00805f9b34fb","Alert Category ID"); - map.put("00002a44-0000-1000-8000-00805f9b34fb","Alert Notification Control Point"); - map.put("00002a45-0000-1000-8000-00805f9b34fb","Unread Alert Status"); - map.put("00002a46-0000-1000-8000-00805f9b34fb","New Alert"); - map.put("00002a47-0000-1000-8000-00805f9b34fb","Supported New Alert Category"); - map.put("00002a48-0000-1000-8000-00805f9b34fb","Supported Unread Alert Category"); - map.put("00002a49-0000-1000-8000-00805f9b34fb","Blood Pressure Feature"); - map.put("00002a50-0000-1000-8000-00805f9b34fb","PNPID"); - map.put("00002a55-0000-1000-8000-00805f9b34fb","SC_CONTROL_POINT"); - map.put("00002a5b-0000-1000-8000-00805f9b34fb","CSC_MEASUREMENT"); - map.put("00002a5c-0000-1000-8000-00805f9b34fb","CSC_FEATURE"); - map.put("00002a5d-0000-1000-8000-00805f9b34fb","SENSOR_LOCATION"); - map.put("831c4071-7bc8-4a9c-a01c-15df25a4adbc","ActiveSync"); + 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; }