diff --git a/CONTRIBUTING.rst b/CONTRIBUTING.rst index e9fbe6a6..b1d7a776 100644 --- a/CONTRIBUTING.rst +++ b/CONTRIBUTING.rst @@ -102,9 +102,7 @@ Before you submit a pull request, check that it meets these guidelines: 2. If the pull request adds functionality, the docs should be updated. Put your new functionality into a function with a docstring, and add the feature to the list in README.rst. -3. The pull request should work for Python 2.6, 2.7, 3.3, 3.4 and 3.5, and for PyPy. Check - https://travis-ci.org/hbldh/bleak/pull_requests - and make sure that the tests pass for all supported Python versions. +3. The pull request should work for Python 3.5+. Tips ---- diff --git a/bleak/__version__.py b/bleak/__version__.py index 8c83ef38..336fba87 100644 --- a/bleak/__version__.py +++ b/bleak/__version__.py @@ -1,3 +1,3 @@ # -*- coding: utf-8 -*- -__version__ = "0.4.1a1" +__version__ = "0.4.1a2" diff --git a/bleak/backends/_manufacturers.py b/bleak/backends/_manufacturers.py new file mode 100644 index 00000000..4a16beee --- /dev/null +++ b/bleak/backends/_manufacturers.py @@ -0,0 +1,1936 @@ +""" +Manufacturer data retrieved from https://www.bluetooth.com/specifications/assigned-numbers/company-identifiers +""" + +MANUFACTURERS = { + 0x0000: "Ericsson Technology Licensing", + 0x0001: "Nokia Mobile Phones", + 0x0002: "Intel Corp.", + 0x0003: "IBM Corp.", + 0x0004: "Toshiba Corp.", + 0x0005: "3Com", + 0x0006: "Microsoft", + 0x0007: "Lucent", + 0x0008: "Motorola", + 0x0009: "Infineon Technologies AG", + 0x000A: "Qualcomm Technologies International, Ltd. (QTIL)", + 0x000B: "Silicon Wave", + 0x000C: "Digianswer A/S", + 0x000D: "Texas Instruments Inc.", + 0x000E: "Parthus Technologies Inc.", + 0x000F: "Broadcom Corporation", + 0x0010: "Mitel Semiconductor", + 0x0011: "Widcomm, Inc.", + 0x0012: "Zeevo, Inc.", + 0x0013: "Atmel Corporation", + 0x0014: "Mitsubishi Electric Corporation", + 0x0015: "RTX Telecom A/S", + 0x0016: "KC Technology Inc.", + 0x0017: "Newlogic", + 0x0018: "Transilica, Inc.", + 0x0019: "Rohde & Schwarz GmbH & Co. KG", + 0x001A: "TTPCom Limited", + 0x001B: "Signia Technologies, Inc.", + 0x001C: "Conexant Systems Inc.", + 0x001D: "Qualcomm", + 0x001E: "Inventel", + 0x001F: "AVM Berlin", + 0x0020: "BandSpeed, Inc.", + 0x0021: "Mansella Ltd", + 0x0022: "NEC Corporation", + 0x0023: "WavePlus Technology Co., Ltd.", + 0x0024: "Alcatel", + 0x0025: "NXP Semiconductors (formerly Philips Semiconductors)", + 0x0026: "C Technologies", + 0x0027: "Open Interface", + 0x0028: "R F Micro Devices", + 0x0029: "Hitachi Ltd", + 0x002A: "Symbol Technologies, Inc.", + 0x002B: "Tenovis", + 0x002C: "Macronix International Co. Ltd.", + 0x002D: "GCT Semiconductor", + 0x002E: "Norwood Systems", + 0x002F: "MewTel Technology Inc.", + 0x0030: "ST Microelectronics", + 0x0031: "Synopsys, Inc.", + 0x0032: "Red-M (Communications) Ltd", + 0x0033: "Commil Ltd", + 0x0034: "Computer Access Technology Corporation (CATC)", + 0x0035: "Eclipse (HQ Espana) S.L.", + 0x0036: "Renesas Electronics Corporation", + 0x0037: "Mobilian Corporation", + 0x0038: "Syntronix Corporation", + 0x0039: "Integrated System Solution Corp.", + 0x003A: "Matsushita Electric Industrial Co., Ltd.", + 0x003B: "Gennum Corporation", + 0x003C: "BlackBerry Limited (formerly Research In Motion)", + 0x003D: "IPextreme, Inc.", + 0x003E: "Systems and Chips, Inc", + 0x003F: "Bluetooth SIG, Inc", + 0x0040: "Seiko Epson Corporation", + 0x0041: "Integrated Silicon Solution Taiwan, Inc.", + 0x0042: "CONWISE Technology Corporation Ltd", + 0x0043: "PARROT AUTOMOTIVE SAS", + 0x0044: "Socket Mobile", + 0x0045: "Atheros Communications, Inc.", + 0x0046: "MediaTek, Inc.", + 0x0047: "Bluegiga", + 0x0048: "Marvell Technology Group Ltd.", + 0x0049: "3DSP Corporation", + 0x004A: "Accel Semiconductor Ltd.", + 0x004B: "Continental Automotive Systems", + 0x004C: "Apple, Inc.", + 0x004D: "Staccato Communications, Inc.", + 0x004E: "Avago Technologies", + 0x004F: "APT Ltd.", + 0x0050: "SiRF Technology, Inc.", + 0x0051: "Tzero Technologies, Inc.", + 0x0052: "J&M Corporation", + 0x0053: "Free2move AB", + 0x0054: "3DiJoy Corporation", + 0x0055: "Plantronics, Inc.", + 0x0056: "Sony Ericsson Mobile Communications", + 0x0057: "Harman International Industries, Inc.", + 0x0058: "Vizio, Inc.", + 0x0059: "Nordic Semiconductor ASA", + 0x005A: "EM Microelectronic-Marin SA", + 0x005B: "Ralink Technology Corporation", + 0x005C: "Belkin International, Inc.", + 0x005D: "Realtek Semiconductor Corporation", + 0x005E: "Stonestreet One, LLC", + 0x005F: "Wicentric, Inc.", + 0x0060: "RivieraWaves S.A.S", + 0x0061: "RDA Microelectronics", + 0x0062: "Gibson Guitars", + 0x0063: "MiCommand Inc.", + 0x0064: "Band XI International, LLC", + 0x0065: "Hewlett-Packard Company", + 0x0066: "9Solutions Oy", + 0x0067: "GN Netcom A/S", + 0x0068: "General Motors", + 0x0069: "A&D Engineering, Inc.", + 0x006A: "MindTree Ltd.", + 0x006B: "Polar Electro OY", + 0x006C: "Beautiful Enterprise Co., Ltd.", + 0x006D: "BriarTek, Inc", + 0x006E: "Summit Data Communications, Inc.", + 0x006F: "Sound ID", + 0x0070: "Monster, LLC", + 0x0071: "connectBlue AB", + 0x0072: "ShangHai Super Smart Electronics Co. Ltd.", + 0x0073: "Group Sense Ltd.", + 0x0074: "Zomm, LLC", + 0x0075: "Samsung Electronics Co. Ltd.", + 0x0076: "Creative Technology Ltd.", + 0x0077: "Laird Technologies", + 0x0078: "Nike, Inc.", + 0x0079: "lesswire AG", + 0x007A: "MStar Semiconductor, Inc.", + 0x007B: "Hanlynn Technologies", + 0x007C: "A & R Cambridge", + 0x007D: "Seers Technology Co., Ltd.", + 0x007E: "Sports Tracking Technologies Ltd.", + 0x007F: "Autonet Mobile", + 0x0080: "DeLorme Publishing Company, Inc.", + 0x0081: "WuXi Vimicro", + 0x0082: "Sennheiser Communications A/S", + 0x0083: "TimeKeeping Systems, Inc.", + 0x0084: "Ludus Helsinki Ltd.", + 0x0085: "BlueRadios, Inc.", + 0x0086: "Equinux AG", + 0x0087: "Garmin International, Inc.", + 0x0088: "Ecotest", + 0x0089: "GN ReSound A/S", + 0x008A: "Jawbone", + 0x008B: "Topcon Positioning Systems, LLC", + 0x008C: "Gimbal Inc. (formerly Qualcomm Labs, Inc. and Qualcomm Retail Solutions, Inc.)", + 0x008D: "Zscan Software", + 0x008E: "Quintic Corp", + 0x008F: "Telit Wireless Solutions GmbH (formerly Stollmann E+V GmbH)", + 0x0090: "Funai Electric Co., Ltd.", + 0x0091: "Advanced PANMOBIL systems GmbH & Co. KG", + 0x0092: "ThinkOptics, Inc.", + 0x0093: "Universal Electronics, Inc.", + 0x0094: "Airoha Technology Corp.", + 0x0095: "NEC Lighting, Ltd.", + 0x0096: "ODM Technology, Inc.", + 0x0097: "ConnecteDevice Ltd.", + 0x0098: "zero1.tv GmbH", + 0x0099: "i.Tech Dynamic Global Distribution Ltd.", + 0x009A: "Alpwise", + 0x009B: "Jiangsu Toppower Automotive Electronics Co., Ltd.", + 0x009C: "Colorfy, Inc.", + 0x009D: "Geoforce Inc.", + 0x009E: "Bose Corporation", + 0x009F: "Suunto Oy", + 0x00A0: "Kensington Computer Products Group", + 0x00A1: "SR-Medizinelektronik", + 0x00A2: "Vertu Corporation Limited", + 0x00A3: "Meta Watch Ltd.", + 0x00A4: "LINAK A/S", + 0x00A5: "OTL Dynamics LLC", + 0x00A6: "Panda Ocean Inc.", + 0x00A7: "Visteon Corporation", + 0x00A8: "ARP Devices Limited", + 0x00A9: "Magneti Marelli S.p.A", + 0x00AA: "CAEN RFID srl", + 0x00AB: "Ingenieur-Systemgruppe Zahn GmbH", + 0x00AC: "Green Throttle Games", + 0x00AD: "Peter Systemtechnik GmbH", + 0x00AE: "Omegawave Oy", + 0x00AF: "Cinetix", + 0x00B0: "Passif Semiconductor Corp", + 0x00B1: "Saris Cycling Group, Inc", + 0x00B2: "Bekey A/S", + 0x00B3: "Clarinox Technologies Pty. Ltd.", + 0x00B4: "BDE Technology Co., Ltd.", + 0x00B5: "Swirl Networks", + 0x00B6: "Meso international", + 0x00B7: "TreLab Ltd", + 0x00B8: "Qualcomm Innovation Center, Inc. (QuIC)", + 0x00B9: "Johnson Controls, Inc.", + 0x00BA: "Starkey Laboratories Inc.", + 0x00BB: "S-Power Electronics Limited", + 0x00BC: "Ace Sensor Inc", + 0x00BD: "Aplix Corporation", + 0x00BE: "AAMP of America", + 0x00BF: "Stalmart Technology Limited", + 0x00C0: "AMICCOM Electronics Corporation", + 0x00C1: "Shenzhen Excelsecu Data Technology Co.,Ltd", + 0x00C2: "Geneq Inc.", + 0x00C3: "adidas AG", + 0x00C4: "LG Electronics", + 0x00C5: "Onset Computer Corporation", + 0x00C6: "Selfly BV", + 0x00C7: "Quuppa Oy.", + 0x00C8: "GeLo Inc", + 0x00C9: "Evluma", + 0x00CA: "MC10", + 0x00CB: "Binauric SE", + 0x00CC: "Beats Electronics", + 0x00CD: "Microchip Technology Inc.", + 0x00CE: "Elgato Systems GmbH", + 0x00CF: "ARCHOS SA", + 0x00D0: "Dexcom, Inc.", + 0x00D1: "Polar Electro Europe B.V.", + 0x00D2: "Dialog Semiconductor B.V.", + 0x00D3: "Taixingbang Technology (HK) Co,. LTD.", + 0x00D4: "Kawantech", + 0x00D5: "Austco Communication Systems", + 0x00D6: "Timex Group USA, Inc.", + 0x00D7: "Qualcomm Technologies, Inc.", + 0x00D8: "Qualcomm Connected Experiences, Inc.", + 0x00D9: "Voyetra Turtle Beach", + 0x00DA: "txtr GmbH", + 0x00DB: "Biosentronics", + 0x00DC: "Procter & Gamble", + 0x00DD: "Hosiden Corporation", + 0x00DE: "Muzik LLC", + 0x00DF: "Misfit Wearables Corp", + 0x00E0: "Google", + 0x00E1: "Danlers Ltd", + 0x00E2: "Semilink Inc", + 0x00E3: "inMusic Brands, Inc", + 0x00E4: "L.S. Research Inc.", + 0x00E5: "Eden Software Consultants Ltd.", + 0x00E6: "Freshtemp", + 0x00E7: "KS Technologies", + 0x00E8: "ACTS Technologies", + 0x00E9: "Vtrack Systems", + 0x00EA: "Nielsen-Kellerman Company", + 0x00EB: "Server Technology Inc.", + 0x00EC: "BioResearch Associates", + 0x00ED: "Jolly Logic, LLC", + 0x00EE: "Above Average Outcomes, Inc.", + 0x00EF: "Bitsplitters GmbH", + 0x00F0: "PayPal, Inc.", + 0x00F1: "Witron Technology Limited", + 0x00F2: "Morse Project Inc.", + 0x00F3: "Kent Displays Inc.", + 0x00F4: "Nautilus Inc.", + 0x00F5: "Smartifier Oy", + 0x00F6: "Elcometer Limited", + 0x00F7: "VSN Technologies, Inc.", + 0x00F8: "AceUni Corp., Ltd.", + 0x00F9: "StickNFind", + 0x00FA: "Crystal Code AB", + 0x00FB: "KOUKAAM a.s.", + 0x00FC: "Delphi Corporation", + 0x00FD: "ValenceTech Limited", + 0x00FE: "Stanley Black and Decker", + 0x00FF: "Typo Products, LLC", + 0x0100: "TomTom International BV", + 0x0101: "Fugoo, Inc.", + 0x0102: "Keiser Corporation", + 0x0103: "Bang & Olufsen A/S", + 0x0104: "PLUS Location Systems Pty Ltd", + 0x0105: "Ubiquitous Computing Technology Corporation", + 0x0106: "Innovative Yachtter Solutions", + 0x0107: "William Demant Holding A/S", + 0x0108: "Chicony Electronics Co., Ltd.", + 0x0109: "Atus BV", + 0x010A: "Codegate Ltd", + 0x010B: "ERi, Inc", + 0x010C: "Transducers Direct, LLC", + 0x010D: "Fujitsu Ten LImited", + 0x010E: "Audi AG", + 0x010F: "HiSilicon Technologies Col, Ltd.", + 0x0110: "Nippon Seiki Co., Ltd.", + 0x0111: "Steelseries ApS", + 0x0112: "Visybl Inc.", + 0x0113: "Openbrain Technologies, Co., Ltd.", + 0x0114: "Xensr", + 0x0115: "e.solutions", + 0x0116: "10AK Technologies", + 0x0117: "Wimoto Technologies Inc", + 0x0118: "Radius Networks, Inc.", + 0x0119: "Wize Technology Co., Ltd.", + 0x011A: "Qualcomm Labs, Inc.", + 0x011B: "Hewlett Packard Enterprise", + 0x011C: "Baidu", + 0x011D: "Arendi AG", + 0x011E: "Skoda Auto a.s.", + 0x011F: "Volkswagen AG", + 0x0120: "Porsche AG", + 0x0121: "Sino Wealth Electronic Ltd.", + 0x0122: "AirTurn, Inc.", + 0x0123: "Kinsa, Inc", + 0x0124: "HID Global", + 0x0125: "SEAT es", + 0x0126: "Promethean Ltd.", + 0x0127: "Salutica Allied Solutions", + 0x0128: "GPSI Group Pty Ltd", + 0x0129: "Nimble Devices Oy", + 0x012A: "Changzhou Yongse Infotech Co., Ltd.", + 0x012B: "SportIQ", + 0x012C: "TEMEC Instruments B.V.", + 0x012D: "Sony Corporation", + 0x012E: "ASSA ABLOY", + 0x012F: "Clarion Co. Inc.", + 0x0130: "Warehouse Innovations", + 0x0131: "Cypress Semiconductor", + 0x0132: "MADS Inc", + 0x0133: "Blue Maestro Limited", + 0x0134: "Resolution Products, Ltd.", + 0x0135: "Aireware LLC", + 0x0136: "Silvair, Inc.", + 0x0137: "Prestigio Plaza Ltd.", + 0x0138: "NTEO Inc.", + 0x0139: "Focus Systems Corporation", + 0x013A: "Tencent Holdings Ltd.", + 0x013B: "Allegion", + 0x013C: "Murata Manufacturing Co., Ltd.", + 0x013D: "WirelessWERX", + 0x013E: "Nod, Inc.", + 0x013F: "B&B Manufacturing Company", + 0x0140: "Alpine Electronics (China) Co., Ltd", + 0x0141: "FedEx Services", + 0x0142: "Grape Systems Inc.", + 0x0143: "Bkon Connect", + 0x0144: "Lintech GmbH", + 0x0145: "Novatel Wireless", + 0x0146: "Ciright", + 0x0147: "Mighty Cast, Inc.", + 0x0148: "Ambimat Electronics", + 0x0149: "Perytons Ltd.", + 0x014A: "Tivoli Audio, LLC", + 0x014B: "Master Lock", + 0x014C: "Mesh-Net Ltd", + 0x014D: "HUIZHOU DESAY SV AUTOMOTIVE CO., LTD.", + 0x014E: "Tangerine, Inc.", + 0x014F: "B&W Group Ltd.", + 0x0150: "Pioneer Corporation", + 0x0151: "OnBeep", + 0x0152: "Vernier Software & Technology", + 0x0153: "ROL Ergo", + 0x0154: "Pebble Technology", + 0x0155: "NETATMO", + 0x0156: "Accumulate AB", + 0x0157: "Anhui Huami Information Technology Co., Ltd.", + 0x0158: "Inmite s.r.o.", + 0x0159: "ChefSteps, Inc.", + 0x015A: "micas AG", + 0x015B: "Biomedical Research Ltd.", + 0x015C: "Pitius Tec S.L.", + 0x015D: "Estimote, Inc.", + 0x015E: "Unikey Technologies, Inc.", + 0x015F: "Timer Cap Co.", + 0x0160: "AwoX", + 0x0161: "yikes", + 0x0162: "MADSGlobalNZ Ltd.", + 0x0163: "PCH International", + 0x0164: "Qingdao Yeelink Information Technology Co., Ltd.", + 0x0165: "Milwaukee Tool (Formally Milwaukee Electric Tools)", + 0x0166: "MISHIK Pte Ltd", + 0x0167: "Ascensia Diabetes Care US Inc.", + 0x0168: "Spicebox LLC", + 0x0169: "emberlight", + 0x016A: "Cooper-Atkins Corporation", + 0x016B: "Qblinks", + 0x016C: "MYSPHERA", + 0x016D: "LifeScan Inc", + 0x016E: "Volantic AB", + 0x016F: "Podo Labs, Inc", + 0x0170: "Roche Diabetes Care AG", + 0x0171: "Amazon Fulfillment Service", + 0x0172: "Connovate Technology Private Limited", + 0x0173: "Kocomojo, LLC", + 0x0174: "Everykey Inc.", + 0x0175: "Dynamic Controls", + 0x0176: "SentriLock", + 0x0177: "I-SYST inc.", + 0x0178: "CASIO COMPUTER CO., LTD.", + 0x0179: "LAPIS Semiconductor Co., Ltd.", + 0x017A: "Telemonitor, Inc.", + 0x017B: "taskit GmbH", + 0x017C: "Daimler AG", + 0x017D: "BatAndCat", + 0x017E: "BluDotz Ltd", + 0x017F: "XTel Wireless ApS", + 0x0180: "Gigaset Communications GmbH", + 0x0181: "Gecko Health Innovations, Inc.", + 0x0182: "HOP Ubiquitous", + 0x0183: "Walt Disney", + 0x0184: "Nectar", + 0x0185: "bel'apps LLC", + 0x0186: "CORE Lighting Ltd", + 0x0187: "Seraphim Sense Ltd", + 0x0188: "Unico RBC", + 0x0189: "Physical Enterprises Inc.", + 0x018A: "Able Trend Technology Limited", + 0x018B: "Konica Minolta, Inc.", + 0x018C: "Wilo SE", + 0x018D: "Extron Design Services", + 0x018E: "Fitbit, Inc.", + 0x018F: "Fireflies Systems", + 0x0190: "Intelletto Technologies Inc.", + 0x0191: "FDK CORPORATION", + 0x0192: "Cloudleaf, Inc", + 0x0193: "Maveric Automation LLC", + 0x0194: "Acoustic Stream Corporation", + 0x0195: "Zuli", + 0x0196: "Paxton Access Ltd", + 0x0197: "WiSilica Inc.", + 0x0198: "VENGIT Korlatolt Felelossegu Tarsasag", + 0x0199: "SALTO SYSTEMS S.L.", + 0x019A: "TRON Forum (formerly T-Engine Forum)", + 0x019B: "CUBETECH s.r.o.", + 0x019C: "Cokiya Incorporated", + 0x019D: "CVS Health", + 0x019E: "Ceruus", + 0x019F: "Strainstall Ltd", + 0x01A0: "Channel Enterprises (HK) Ltd.", + 0x01A1: "FIAMM", + 0x01A2: "GIGALANE.CO.,LTD", + 0x01A3: "EROAD", + 0x01A4: "Mine Safety Appliances", + 0x01A5: "Icon Health and Fitness", + 0x01A6: "Wille Engineering (formely as Asandoo GmbH)", + 0x01A7: "ENERGOUS CORPORATION", + 0x01A8: "Taobao", + 0x01A9: "Canon Inc.", + 0x01AA: "Geophysical Technology Inc.", + 0x01AB: "Facebook, Inc.", + 0x01AC: "Trividia Health, Inc.", + 0x01AD: "FlightSafety International", + 0x01AE: "Earlens Corporation", + 0x01AF: "Sunrise Micro Devices, Inc.", + 0x01B0: "Star Micronics Co., Ltd.", + 0x01B1: "Netizens Sp. z o.o.", + 0x01B2: "Nymi Inc.", + 0x01B3: "Nytec, Inc.", + 0x01B4: "Trineo Sp. z o.o.", + 0x01B5: "Nest Labs Inc.", + 0x01B6: "LM Technologies Ltd", + 0x01B7: "General Electric Company", + 0x01B8: "i+D3 S.L.", + 0x01B9: "HANA Micron", + 0x01BA: "Stages Cycling LLC", + 0x01BB: "Cochlear Bone Anchored Solutions AB", + 0x01BC: "SenionLab AB", + 0x01BD: "Syszone Co., Ltd", + 0x01BE: "Pulsate Mobile Ltd.", + 0x01BF: "Hong Kong HunterSun Electronic Limited", + 0x01C0: "pironex GmbH", + 0x01C1: "BRADATECH Corp.", + 0x01C2: "Transenergooil AG", + 0x01C3: "Bunch", + 0x01C4: "DME Microelectronics", + 0x01C5: "Bitcraze AB", + 0x01C6: "HASWARE Inc.", + 0x01C7: "Abiogenix Inc.", + 0x01C8: "Poly-Control ApS", + 0x01C9: "Avi-on", + 0x01CA: "Laerdal Medical AS", + 0x01CB: "Fetch My Pet", + 0x01CC: "Sam Labs Ltd.", + 0x01CD: "Chengdu Synwing Technology Ltd", + 0x01CE: "HOUWA SYSTEM DESIGN, k.k.", + 0x01CF: "BSH", + 0x01D0: "Primus Inter Pares Ltd", + 0x01D1: "August Home, Inc", + 0x01D2: "Gill Electronics", + 0x01D3: "Sky Wave Design", + 0x01D4: "Newlab S.r.l.", + 0x01D5: "ELAD srl", + 0x01D6: "G-wearables inc.", + 0x01D7: "Squadrone Systems Inc.", + 0x01D8: "Code Corporation", + 0x01D9: "Savant Systems LLC", + 0x01DA: "Logitech International SA", + 0x01DB: "Innblue Consulting", + 0x01DC: "iParking Ltd.", + 0x01DD: "Koninklijke Philips Electronics N.V.", + 0x01DE: "Minelab Electronics Pty Limited", + 0x01DF: "Bison Group Ltd.", + 0x01E0: "Widex A/S", + 0x01E1: "Jolla Ltd", + 0x01E2: "Lectronix, Inc.", + 0x01E3: "Caterpillar Inc", + 0x01E4: "Freedom Innovations", + 0x01E5: "Dynamic Devices Ltd", + 0x01E6: "Technology Solutions (UK) Ltd", + 0x01E7: "IPS Group Inc.", + 0x01E8: "STIR", + 0x01E9: "Sano, Inc.", + 0x01EA: "Advanced Application Design, Inc.", + 0x01EB: "AutoMap LLC", + 0x01EC: "Spreadtrum Communications Shanghai Ltd", + 0x01ED: "CuteCircuit LTD", + 0x01EE: "Valeo Service", + 0x01EF: "Fullpower Technologies, Inc.", + 0x01F0: "KloudNation", + 0x01F1: "Zebra Technologies Corporation", + 0x01F2: "Itron, Inc.", + 0x01F3: "The University of Tokyo", + 0x01F4: "UTC Fire and Security", + 0x01F5: "Cool Webthings Limited", + 0x01F6: "DJO Global", + 0x01F7: "Gelliner Limited", + 0x01F8: "Anyka (Guangzhou) Microelectronics Technology Co, LTD", + 0x01F9: "Medtronic Inc.", + 0x01FA: "Gozio Inc.", + 0x01FB: "Form Lifting, LLC", + 0x01FC: "Wahoo Fitness, LLC", + 0x01FD: "Kontakt Micro-Location Sp. z o.o.", + 0x01FE: "Radio Systems Corporation", + 0x01FF: "Freescale Semiconductor, Inc.", + 0x0200: "Verifone Systems Pte Ltd. Taiwan Branch", + 0x0201: "AR Timing", + 0x0202: "Rigado LLC", + 0x0203: "Kemppi Oy", + 0x0204: "Tapcentive Inc.", + 0x0205: "Smartbotics Inc.", + 0x0206: "Otter Products, LLC", + 0x0207: "STEMP Inc.", + 0x0208: "LumiGeek LLC", + 0x0209: "InvisionHeart Inc.", + 0x020A: "Macnica Inc.", + 0x020B: "Jaguar Land Rover Limited", + 0x020C: "CoroWare Technologies, Inc", + 0x020D: "Simplo Technology Co., LTD", + 0x020E: "Omron Healthcare Co., LTD", + 0x020F: "Comodule GMBH", + 0x0210: "ikeGPS", + 0x0211: "Telink Semiconductor Co. Ltd", + 0x0212: "Interplan Co., Ltd", + 0x0213: "Wyler AG", + 0x0214: "IK Multimedia Production srl", + 0x0215: "Lukoton Experience Oy", + 0x0216: "MTI Ltd", + 0x0217: "Tech4home, Lda", + 0x0218: "Hiotech AB", + 0x0219: "DOTT Limited", + 0x021A: "Blue Speck Labs, LLC", + 0x021B: "Cisco Systems, Inc", + 0x021C: "Mobicomm Inc", + 0x021D: "Edamic", + 0x021E: "Goodnet, Ltd", + 0x021F: "Luster Leaf Products Inc", + 0x0220: "Manus Machina BV", + 0x0221: "Mobiquity Networks Inc", + 0x0222: "Praxis Dynamics", + 0x0223: "Philip Morris Products S.A.", + 0x0224: "Comarch SA", + 0x0225: "Nestl Nespresso S.A.", + 0x0226: "Merlinia A/S", + 0x0227: "LifeBEAM Technologies", + 0x0228: "Twocanoes Labs, LLC", + 0x0229: "Muoverti Limited", + 0x022A: "Stamer Musikanlagen GMBH", + 0x022B: "Tesla Motors", + 0x022C: "Pharynks Corporation", + 0x022D: "Lupine", + 0x022E: "Siemens AG", + 0x022F: "Huami (Shanghai) Culture Communication CO., LTD", + 0x0230: "Foster Electric Company, Ltd", + 0x0231: "ETA SA", + 0x0232: "x-Senso Solutions Kft", + 0x0233: "Shenzhen SuLong Communication Ltd", + 0x0234: "FengFan (BeiJing) Technology Co, Ltd", + 0x0235: "Qrio Inc", + 0x0236: "Pitpatpet Ltd", + 0x0237: "MSHeli s.r.l.", + 0x0238: "Trakm8 Ltd", + 0x0239: "JIN CO, Ltd", + 0x023A: "Alatech Tehnology", + 0x023B: "Beijing CarePulse Electronic Technology Co, Ltd", + 0x023C: "Awarepoint", + 0x023D: "ViCentra B.V.", + 0x023E: "Raven Industries", + 0x023F: "WaveWare Technologies Inc.", + 0x0240: "Argenox Technologies", + 0x0241: "Bragi GmbH", + 0x0242: "16Lab Inc", + 0x0243: "Masimo Corp", + 0x0244: "Iotera Inc", + 0x0245: "Endress+Hauser", + 0x0246: "ACKme Networks, Inc.", + 0x0247: "FiftyThree Inc.", + 0x0248: "Parker Hannifin Corp", + 0x0249: "Transcranial Ltd", + 0x024A: "Uwatec AG", + 0x024B: "Orlan LLC", + 0x024C: "Blue Clover Devices", + 0x024D: "M-Way Solutions GmbH", + 0x024E: "Microtronics Engineering GmbH", + 0x024F: "Schneider Schreibgerte GmbH", + 0x0250: "Sapphire Circuits LLC", + 0x0251: "Lumo Bodytech Inc.", + 0x0252: "UKC Technosolution", + 0x0253: "Xicato Inc.", + 0x0254: "Playbrush", + 0x0255: "Dai Nippon Printing Co., Ltd.", + 0x0256: "G24 Power Limited", + 0x0257: "AdBabble Local Commerce Inc.", + 0x0258: "Devialet SA", + 0x0259: "ALTYOR", + 0x025A: "University of Applied Sciences Valais/Haute Ecole Valaisanne", + 0x025B: "Five Interactive, LLC dba Zendo", + 0x025C: "NetEaseHangzhouNetwork co.Ltd.", + 0x025D: "Lexmark International Inc.", + 0x025E: "Fluke Corporation", + 0x025F: "Yardarm Technologies", + 0x0260: "SensaRx", + 0x0261: "SECVRE GmbH", + 0x0262: "Glacial Ridge Technologies", + 0x0263: "Identiv, Inc.", + 0x0264: "DDS, Inc.", + 0x0265: "SMK Corporation", + 0x0266: "Schawbel Technologies LLC", + 0x0267: "XMI Systems SA", + 0x0268: "Cerevo", + 0x0269: "Torrox GmbH & Co KG", + 0x026A: "Gemalto", + 0x026B: "DEKA Research & Development Corp.", + 0x026C: "Domster Tadeusz Szydlowski", + 0x026D: "Technogym SPA", + 0x026E: "FLEURBAEY BVBA", + 0x026F: "Aptcode Solutions", + 0x0270: "LSI ADL Technology", + 0x0271: "Animas Corp", + 0x0272: "Alps Electric Co., Ltd.", + 0x0273: "OCEASOFT", + 0x0274: "Motsai Research", + 0x0275: "Geotab", + 0x0276: "E.G.O. Elektro-Gertebau GmbH", + 0x0277: "bewhere inc", + 0x0278: "Johnson Outdoors Inc", + 0x0279: "steute Schaltgerate GmbH & Co. KG", + 0x027A: "Ekomini inc.", + 0x027B: "DEFA AS", + 0x027C: "Aseptika Ltd", + 0x027D: "HUAWEI Technologies Co., Ltd. ( )", + 0x027E: "HabitAware, LLC", + 0x027F: "ruwido austria gmbh", + 0x0280: "ITEC corporation", + 0x0281: "StoneL", + 0x0282: "Sonova AG", + 0x0283: "Maven Machines, Inc.", + 0x0284: "Synapse Electronics", + 0x0285: "Standard Innovation Inc.", + 0x0286: "RF Code, Inc.", + 0x0287: "Wally Ventures S.L.", + 0x0288: "Willowbank Electronics Ltd", + 0x0289: "SK Telecom", + 0x028A: "Jetro AS", + 0x028B: "Code Gears LTD", + 0x028C: "NANOLINK APS", + 0x028D: "IF, LLC", + 0x028E: "RF Digital Corp", + 0x028F: "Church & Dwight Co., Inc", + 0x0290: "Multibit Oy", + 0x0291: "CliniCloud Inc", + 0x0292: "SwiftSensors", + 0x0293: "Blue Bite", + 0x0294: "ELIAS GmbH", + 0x0295: "Sivantos GmbH", + 0x0296: "Petzl", + 0x0297: "storm power ltd", + 0x0298: "EISST Ltd", + 0x0299: "Inexess Technology Simma KG", + 0x029A: "Currant, Inc.", + 0x029B: "C2 Development, Inc.", + 0x029C: "Blue Sky Scientific, LLC", + 0x029D: "ALOTTAZS LABS, LLC", + 0x029E: "Kupson spol. s r.o.", + 0x029F: "Areus Engineering GmbH", + 0x02A0: "Impossible Camera GmbH", + 0x02A1: "InventureTrack Systems", + 0x02A2: "LockedUp", + 0x02A3: "Itude", + 0x02A4: "Pacific Lock Company", + 0x02A5: "Tendyron Corporation ( )", + 0x02A6: "Robert Bosch GmbH", + 0x02A7: "Illuxtron international B.V.", + 0x02A8: "miSport Ltd.", + 0x02A9: "Chargelib", + 0x02AA: "Doppler Lab", + 0x02AB: "BBPOS Limited", + 0x02AC: "RTB Elektronik GmbH & Co. KG", + 0x02AD: "Rx Networks, Inc.", + 0x02AE: "WeatherFlow, Inc.", + 0x02AF: "Technicolor USA Inc.", + 0x02B0: "Bestechnic(Shanghai),Ltd", + 0x02B1: "Raden Inc", + 0x02B2: "JouZen Oy", + 0x02B3: "CLABER S.P.A.", + 0x02B4: "Hyginex, Inc.", + 0x02B5: "HANSHIN ELECTRIC RAILWAY CO.,LTD.", + 0x02B6: "Schneider Electric", + 0x02B7: "Oort Technologies LLC", + 0x02B8: "Chrono Therapeutics", + 0x02B9: "Rinnai Corporation", + 0x02BA: "Swissprime Technologies AG", + 0x02BB: "Koha.,Co.Ltd", + 0x02BC: "Genevac Ltd", + 0x02BD: "Chemtronics", + 0x02BE: "Seguro Technology Sp. z o.o.", + 0x02BF: "Redbird Flight Simulations", + 0x02C0: "Dash Robotics", + 0x02C1: "LINE Corporation", + 0x02C2: "Guillemot Corporation", + 0x02C3: "Techtronic Power Tools Technology Limited", + 0x02C4: "Wilson Sporting Goods", + 0x02C5: "Lenovo (Singapore) Pte Ltd. ( )", + 0x02C6: "Ayatan Sensors", + 0x02C7: "Electronics Tomorrow Limited", + 0x02C8: "VASCO Data Security International, Inc.", + 0x02C9: "PayRange Inc.", + 0x02CA: "ABOV Semiconductor", + 0x02CB: "AINA-Wireless Inc.", + 0x02CC: "Eijkelkamp Soil & Water", + 0x02CD: "BMA ergonomics b.v.", + 0x02CE: "Teva Branded Pharmaceutical Products R&D, Inc.", + 0x02CF: "Anima", + 0x02D0: "3M", + 0x02D1: "Empatica Srl", + 0x02D2: "Afero, Inc.", + 0x02D3: "Powercast Corporation", + 0x02D4: "Secuyou ApS", + 0x02D5: "OMRON Corporation", + 0x02D6: "Send Solutions", + 0x02D7: "NIPPON SYSTEMWARE CO.,LTD.", + 0x02D8: "Neosfar", + 0x02D9: "Fliegl Agrartechnik GmbH", + 0x02DA: "Gilvader", + 0x02DB: "Digi International Inc (R)", + 0x02DC: "DeWalch Technologies, Inc.", + 0x02DD: "Flint Rehabilitation Devices, LLC", + 0x02DE: "Samsung SDS Co., Ltd.", + 0x02DF: "Blur Product Development", + 0x02E0: "University of Michigan", + 0x02E1: "Victron Energy BV", + 0x02E2: "NTT docomo", + 0x02E3: "Carmanah Technologies Corp.", + 0x02E4: "Bytestorm Ltd.", + 0x02E5: "Espressif Incorporated ( () )", + 0x02E6: "Unwire", + 0x02E7: "Connected Yard, Inc.", + 0x02E8: "American Music Environments", + 0x02E9: "Sensogram Technologies, Inc.", + 0x02EA: "Fujitsu Limited", + 0x02EB: "Ardic Technology", + 0x02EC: "Delta Systems, Inc", + 0x02ED: "HTC Corporation", + 0x02EE: "Citizen Holdings Co., Ltd.", + 0x02EF: "SMART-INNOVATION.inc", + 0x02F0: "Blackrat Software", + 0x02F1: "The Idea Cave, LLC", + 0x02F2: "GoPro, Inc.", + 0x02F3: "AuthAir, Inc", + 0x02F4: "Vensi, Inc.", + 0x02F5: "Indagem Tech LLC", + 0x02F6: "Intemo Technologies", + 0x02F7: "DreamVisions co., Ltd.", + 0x02F8: "Runteq Oy Ltd", + 0x02F9: "IMAGINATION TECHNOLOGIES LTD", + 0x02FA: "CoSTAR TEchnologies", + 0x02FB: "Clarius Mobile Health Corp.", + 0x02FC: "Shanghai Frequen Microelectronics Co., Ltd.", + 0x02FD: "Uwanna, Inc.", + 0x02FE: "Lierda Science & Technology Group Co., Ltd.", + 0x02FF: "Silicon Laboratories", + 0x0300: "World Moto Inc.", + 0x0301: "Giatec Scientific Inc.", + 0x0302: "Loop Devices, Inc", + 0x0303: "IACA electronique", + 0x0304: "Proxy Technologies, Inc.", + 0x0305: "Swipp ApS", + 0x0306: "Life Laboratory Inc.", + 0x0307: "FUJI INDUSTRIAL CO.,LTD.", + 0x0308: "Surefire, LLC", + 0x0309: "Dolby Labs", + 0x030A: "Ellisys", + 0x030B: "Magnitude Lighting Converters", + 0x030C: "Hilti AG", + 0x030D: "Devdata S.r.l.", + 0x030E: "Deviceworx", + 0x030F: "Shortcut Labs", + 0x0310: "SGL Italia S.r.l.", + 0x0311: "PEEQ DATA", + 0x0312: "Ducere Technologies Pvt Ltd", + 0x0313: "DiveNav, Inc.", + 0x0314: "RIIG AI Sp. z o.o.", + 0x0315: "Thermo Fisher Scientific", + 0x0316: "AG Measurematics Pvt. Ltd.", + 0x0317: "CHUO Electronics CO., LTD.", + 0x0318: "Aspenta International", + 0x0319: "Eugster Frismag AG", + 0x031A: "Amber wireless GmbH", + 0x031B: "HQ Inc", + 0x031C: "Lab Sensor Solutions", + 0x031D: "Enterlab ApS", + 0x031E: "Eyefi, Inc.", + 0x031F: "MetaSystem S.p.A.", + 0x0320: "SONO ELECTRONICS. CO., LTD", + 0x0321: "Jewelbots", + 0x0322: "Compumedics Limited", + 0x0323: "Rotor Bike Components", + 0x0324: "Astro, Inc.", + 0x0325: "Amotus Solutions", + 0x0326: "Healthwear Technologies (Changzhou)Ltd", + 0x0327: "Essex Electronics", + 0x0328: "Grundfos A/S", + 0x0329: "Eargo, Inc.", + 0x032A: "Electronic Design Lab", + 0x032B: "ESYLUX", + 0x032C: "NIPPON SMT.CO.,Ltd", + 0x032D: "BM innovations GmbH", + 0x032E: "indoormap", + 0x032F: "OttoQ Inc", + 0x0330: "North Pole Engineering", + 0x0331: "3flares Technologies Inc.", + 0x0332: "Electrocompaniet A.S.", + 0x0333: "Mul-T-Lock", + 0x0334: "Corentium AS", + 0x0335: "Enlighted Inc", + 0x0336: "GISTIC", + 0x0337: "AJP2 Holdings, LLC", + 0x0338: "COBI GmbH", + 0x0339: "Blue Sky Scientific, LLC", + 0x033A: "Appception, Inc.", + 0x033B: "Courtney Thorne Limited", + 0x033C: "Virtuosys", + 0x033D: "TPV Technology Limited", + 0x033E: "Monitra SA", + 0x033F: "Automation Components, Inc.", + 0x0340: "Letsense s.r.l.", + 0x0341: "Etesian Technologies LLC", + 0x0342: "GERTEC BRASIL LTDA.", + 0x0343: "Drekker Development Pty. Ltd.", + 0x0344: "Whirl Inc", + 0x0345: "Locus Positioning", + 0x0346: "Acuity Brands Lighting, Inc", + 0x0347: "Prevent Biometrics", + 0x0348: "Arioneo", + 0x0349: "VersaMe", + 0x034A: "Vaddio", + 0x034B: "Libratone A/S", + 0x034C: "HM Electronics, Inc.", + 0x034D: "TASER International, Inc.", + 0x034E: "SafeTrust Inc.", + 0x034F: "Heartland Payment Systems", + 0x0350: "Bitstrata Systems Inc.", + 0x0351: "Pieps GmbH", + 0x0352: "iRiding(Xiamen)Technology Co.,Ltd.", + 0x0353: "Alpha Audiotronics, Inc.", + 0x0354: "TOPPAN FORMS CO.,LTD.", + 0x0355: "Sigma Designs, Inc.", + 0x0356: "Spectrum Brands, Inc.", + 0x0357: "Polymap Wireless", + 0x0358: "MagniWare Ltd.", + 0x0359: "Novotec Medical GmbH", + 0x035A: "Medicom Innovation Partner a/s", + 0x035B: "Matrix Inc.", + 0x035C: "Eaton Corporation", + 0x035D: "KYS", + 0x035E: "Naya Health, Inc.", + 0x035F: "Acromag", + 0x0360: "Insulet Corporation", + 0x0361: "Wellinks Inc.", + 0x0362: "ON Semiconductor", + 0x0363: "FREELAP SA", + 0x0364: "Favero Electronics Srl", + 0x0365: "BioMech Sensor LLC", + 0x0366: "BOLTT Sports technologies Private limited", + 0x0367: "Saphe International", + 0x0368: "Metormote AB", + 0x0369: "littleBits", + 0x036A: "SetPoint Medical", + 0x036B: "BRControls Products BV", + 0x036C: "Zipcar", + 0x036D: "AirBolt Pty Ltd", + 0x036E: "KeepTruckin Inc", + 0x036F: "Motiv, Inc.", + 0x0370: "Wazombi Labs O", + 0x0371: "ORBCOMM", + 0x0372: "Nixie Labs, Inc.", + 0x0373: "AppNearMe Ltd", + 0x0374: "Holman Industries", + 0x0375: "Expain AS", + 0x0376: "Electronic Temperature Instruments Ltd", + 0x0377: "Plejd AB", + 0x0378: "Propeller Health", + 0x0379: "Shenzhen iMCO Electronic Technology Co.,Ltd", + 0x037A: "Algoria", + 0x037B: "Apption Labs Inc.", + 0x037C: "Cronologics Corporation", + 0x037D: "MICRODIA Ltd.", + 0x037E: "lulabytes S.L.", + 0x037F: "Nestec S.A.", + 0x0380: 'LLC "MEGA-F service"', + 0x0381: "Sharp Corporation", + 0x0382: "Precision Outcomes Ltd", + 0x0383: "Kronos Incorporated", + 0x0384: "OCOSMOS Co., Ltd.", + 0x0385: "Embedded Electronic Solutions Ltd. dba e2Solutions", + 0x0386: "Aterica Inc.", + 0x0387: "BluStor PMC, Inc.", + 0x0388: "Kapsch TrafficCom AB", + 0x0389: "ActiveBlu Corporation", + 0x038A: "Kohler Mira Limited", + 0x038B: "Noke", + 0x038C: "Appion Inc.", + 0x038D: "Resmed Ltd", + 0x038E: "Crownstone B.V.", + 0x038F: "Xiaomi Inc.", + 0x0390: "INFOTECH s.r.o.", + 0x0391: "Thingsquare AB", + 0x0392: "T&D", + 0x0393: "LAVAZZA S.p.A.", + 0x0394: "Netclearance Systems, Inc.", + 0x0395: "SDATAWAY", + 0x0396: "BLOKS GmbH", + 0x0397: "LEGO System A/S", + 0x0398: "Thetatronics Ltd", + 0x0399: "Nikon Corporation", + 0x039A: "NeST", + 0x039B: "South Silicon Valley Microelectronics", + 0x039C: "ALE International", + 0x039D: "CareView Communications, Inc.", + 0x039E: "SchoolBoard Limited", + 0x039F: "Molex Corporation", + 0x03A0: "BARROT TECHNOLOGY LIMITED (formerly IVT Wireless Limited)", + 0x03A1: "Alpine Labs LLC", + 0x03A2: "Candura Instruments", + 0x03A3: "SmartMovt Technology Co., Ltd", + 0x03A4: "Token Zero Ltd", + 0x03A5: "ACE CAD Enterprise Co., Ltd. (ACECAD)", + 0x03A6: "Medela, Inc", + 0x03A7: "AeroScout", + 0x03A8: "Esrille Inc.", + 0x03A9: "THINKERLY SRL", + 0x03AA: "Exon Sp. z o.o.", + 0x03AB: "Meizu Technology Co., Ltd.", + 0x03AC: "Smablo LTD", + 0x03AD: "XiQ", + 0x03AE: "Allswell Inc.", + 0x03AF: "Comm-N-Sense Corp DBA Verigo", + 0x03B0: "VIBRADORM GmbH", + 0x03B1: "Otodata Wireless Network Inc.", + 0x03B2: "Propagation Systems Limited", + 0x03B3: "Midwest Instruments & Controls", + 0x03B4: "Alpha Nodus, inc.", + 0x03B5: "petPOMM, Inc", + 0x03B6: "Mattel", + 0x03B7: "Airbly Inc.", + 0x03B8: "A-Safe Limited", + 0x03B9: "FREDERIQUE CONSTANT SA", + 0x03BA: "Maxscend Microelectronics Company Limited", + 0x03BB: "Abbott Diabetes Care", + 0x03BC: "ASB Bank Ltd", + 0x03BD: "amadas", + 0x03BE: "Applied Science, Inc.", + 0x03BF: "iLumi Solutions Inc.", + 0x03C0: "Arch Systems Inc.", + 0x03C1: "Ember Technologies, Inc.", + 0x03C2: "Snapchat Inc", + 0x03C3: "Casambi Technologies Oy", + 0x03C4: "Pico Technology Inc.", + 0x03C5: "St. Jude Medical, Inc.", + 0x03C6: "Intricon", + 0x03C7: "Structural Health Systems, Inc.", + 0x03C8: "Avvel International", + 0x03C9: "Gallagher Group", + 0x03CA: "In2things Automation Pvt. Ltd.", + 0x03CB: "SYSDEV Srl", + 0x03CC: "Vonkil Technologies Ltd", + 0x03CD: "Wynd Technologies, Inc.", + 0x03CE: "CONTRINEX S.A.", + 0x03CF: "MIRA, Inc.", + 0x03D0: "Watteam Ltd", + 0x03D1: "Density Inc.", + 0x03D2: "IOT Pot India Private Limited", + 0x03D3: "Sigma Connectivity AB", + 0x03D4: "PEG PEREGO SPA", + 0x03D5: "Wyzelink Systems Inc.", + 0x03D6: "Yota Devices LTD", + 0x03D7: "FINSECUR", + 0x03D8: "Zen-Me Labs Ltd", + 0x03D9: "3IWare Co., Ltd.", + 0x03DA: "EnOcean GmbH", + 0x03DB: "Instabeat, Inc", + 0x03DC: "Nima Labs", + 0x03DD: "Andreas Stihl AG & Co. KG", + 0x03DE: "Nathan Rhoades LLC", + 0x03DF: "Grob Technologies, LLC", + 0x03E0: "Actions (Zhuhai) Technology Co., Limited", + 0x03E1: "SPD Development Company Ltd", + 0x03E2: "Sensoan Oy", + 0x03E3: "Qualcomm Life Inc", + 0x03E4: "Chip-ing AG", + 0x03E5: "ffly4u", + 0x03E6: "IoT Instruments Oy", + 0x03E7: "TRUE Fitness Technology", + 0x03E8: "Reiner Kartengeraete GmbH & Co. KG.", + 0x03E9: "SHENZHEN LEMONJOY TECHNOLOGY CO., LTD.", + 0x03EA: "Hello Inc.", + 0x03EB: "Evollve Inc.", + 0x03EC: "Jigowatts Inc.", + 0x03ED: "BASIC MICRO.COM,INC.", + 0x03EE: "CUBE TECHNOLOGIES", + 0x03EF: "foolography GmbH", + 0x03F0: "CLINK", + 0x03F1: "Hestan Smart Cooking Inc.", + 0x03F2: "WindowMaster A/S", + 0x03F3: "Flowscape AB", + 0x03F4: "PAL Technologies Ltd", + 0x03F5: "WHERE, Inc.", + 0x03F6: "Iton Technology Corp.", + 0x03F7: "Owl Labs Inc.", + 0x03F8: "Rockford Corp.", + 0x03F9: "Becon Technologies Co.,Ltd.", + 0x03FA: "Vyassoft Technologies Inc", + 0x03FB: "Nox Medical", + 0x03FC: "Kimberly-Clark", + 0x03FD: "Trimble Navigation Ltd.", + 0x03FE: "Littelfuse", + 0x03FF: "Withings", + 0x0400: "i-developer IT Beratung UG", + 0x0401: "", + 0x0402: "Sears Holdings Corporation", + 0x0403: "Gantner Electronic GmbH", + 0x0404: "Authomate Inc", + 0x0405: "Vertex International, Inc.", + 0x0406: "Airtago", + 0x0407: "Swiss Audio SA", + 0x0408: "ToGetHome Inc.", + 0x0409: "AXIS", + 0x040A: "Openmatics", + 0x040B: "Jana Care Inc.", + 0x040C: "Senix Corporation", + 0x040D: "NorthStar Battery Company, LLC", + 0x040E: "SKF (U.K.) Limited", + 0x040F: "CO-AX Technology, Inc.", + 0x0410: "Fender Musical Instruments", + 0x0411: "Luidia Inc", + 0x0412: "SEFAM", + 0x0413: "Wireless Cables Inc", + 0x0414: "Lightning Protection International Pty Ltd", + 0x0415: "Uber Technologies Inc", + 0x0416: "SODA GmbH", + 0x0417: "Fatigue Science", + 0x0418: "Alpine Electronics Inc.", + 0x0419: "Novalogy LTD", + 0x041A: "Friday Labs Limited", + 0x041B: "OrthoAccel Technologies", + 0x041C: "WaterGuru, Inc.", + 0x041D: "Benning Elektrotechnik und Elektronik GmbH & Co. KG", + 0x041E: "Dell Computer Corporation", + 0x041F: "Kopin Corporation", + 0x0420: "TecBakery GmbH", + 0x0421: "Backbone Labs, Inc.", + 0x0422: "DELSEY SA", + 0x0423: "Chargifi Limited", + 0x0424: "Trainesense Ltd.", + 0x0425: "Unify Software and Solutions GmbH & Co. KG", + 0x0426: "Husqvarna AB", + 0x0427: "Focus fleet and fuel management inc", + 0x0428: "SmallLoop, LLC", + 0x0429: "Prolon Inc.", + 0x042A: "BD Medical", + 0x042B: "iMicroMed Incorporated", + 0x042C: "Ticto N.V.", + 0x042D: "Meshtech AS", + 0x042E: "MemCachier Inc.", + 0x042F: "Danfoss A/S", + 0x0430: "SnapStyk Inc.", + 0x0431: "Amway Corporation", + 0x0432: "Silk Labs, Inc.", + 0x0433: "Pillsy Inc.", + 0x0434: "Hatch Baby, Inc.", + 0x0435: "Blocks Wearables Ltd.", + 0x0436: "Drayson Technologies (Europe) Limited", + 0x0437: "eBest IOT Inc.", + 0x0438: "Helvar Ltd", + 0x0439: "Radiance Technologies", + 0x043A: "Nuheara Limited", + 0x043B: "Appside co., ltd.", + 0x043C: "DeLaval", + 0x043D: "Coiler Corporation", + 0x043E: "Thermomedics, Inc.", + 0x043F: "Tentacle Sync GmbH", + 0x0440: "Valencell, Inc.", + 0x0441: "iProtoXi Oy", + 0x0442: "SECOM CO., LTD.", + 0x0443: "Tucker International LLC", + 0x0444: "Metanate Limited", + 0x0445: "Kobian Canada Inc.", + 0x0446: "NETGEAR, Inc.", + 0x0447: "Fabtronics Australia Pty Ltd", + 0x0448: "Grand Centrix GmbH", + 0x0449: "1UP USA.com llc", + 0x044A: "SHIMANO INC.", + 0x044B: "Nain Inc.", + 0x044C: "LifeStyle Lock, LLC", + 0x044D: "VEGA Grieshaber KG", + 0x044E: "Xtrava Inc.", + 0x044F: "TTS Tooltechnic Systems AG & Co. KG", + 0x0450: "Teenage Engineering AB", + 0x0451: "Tunstall Nordic AB", + 0x0452: "Svep Design Center AB", + 0x0453: "GreenPeak Technologies BV", + 0x0454: "Sphinx Electronics GmbH & Co KG", + 0x0455: "Atomation", + 0x0456: "Nemik Consulting Inc", + 0x0457: "RF INNOVATION", + 0x0458: "Mini Solution Co., Ltd.", + 0x0459: "Lumenetix, Inc", + 0x045A: "2048450 Ontario Inc", + 0x045B: "SPACEEK LTD", + 0x045C: "Delta T Corporation", + 0x045D: "Boston Scientific Corporation", + 0x045E: "Nuviz, Inc.", + 0x045F: "Real Time Automation, Inc.", + 0x0460: "Kolibree", + 0x0461: "vhf elektronik GmbH", + 0x0462: "Bonsai Systems GmbH", + 0x0463: "Fathom Systems Inc.", + 0x0464: "Bellman & Symfon", + 0x0465: "International Forte Group LLC", + 0x0466: "CycleLabs Solutions inc.", + 0x0467: "Codenex Oy", + 0x0468: "Kynesim Ltd", + 0x0469: "Palago AB", + 0x046A: "INSIGMA INC.", + 0x046B: "PMD Solutions", + 0x046C: "Qingdao Realtime Technology Co., Ltd.", + 0x046D: "BEGA Gantenbrink-Leuchten KG", + 0x046E: "Pambor Ltd.", + 0x046F: "Develco Products A/S", + 0x0470: "iDesign s.r.l.", + 0x0471: "TiVo Corp", + 0x0472: "Control-J Pty Ltd", + 0x0473: "Steelcase, Inc.", + 0x0474: "iApartment co., ltd.", + 0x0475: "Icom inc.", + 0x0476: "Oxstren Wearable Technologies Private Limited", + 0x0477: "Blue Spark Technologies", + 0x0478: "FarSite Communications Limited", + 0x0479: "mywerk system GmbH", + 0x047A: "Sinosun Technology Co., Ltd.", + 0x047B: "MIYOSHI ELECTRONICS CORPORATION", + 0x047C: "POWERMAT LTD", + 0x047D: "Occly LLC", + 0x047E: "OurHub Dev IvS", + 0x047F: "Pro-Mark, Inc.", + 0x0480: "Dynometrics Inc.", + 0x0481: "Quintrax Limited", + 0x0482: "POS Tuning Udo Vosshenrich GmbH & Co. KG", + 0x0483: "Multi Care Systems B.V.", + 0x0484: "Revol Technologies Inc", + 0x0485: "SKIDATA AG", + 0x0486: "DEV TECNOLOGIA INDUSTRIA, COMERCIO E MANUTENCAO DE EQUIPAMENTOS LTDA. - ME", + 0x0487: "Centrica Connected Home", + 0x0488: "Automotive Data Solutions Inc", + 0x0489: "Igarashi Engineering", + 0x048A: "Taelek Oy", + 0x048B: "CP Electronics Limited", + 0x048C: "Vectronix AG", + 0x048D: "S-Labs Sp. z o.o.", + 0x048E: "Companion Medical, Inc.", + 0x048F: "BlueKitchen GmbH", + 0x0490: "Matting AB", + 0x0491: "SOREX - Wireless Solutions GmbH", + 0x0492: "ADC Technology, Inc.", + 0x0493: "Lynxemi Pte Ltd", + 0x0494: "SENNHEISER electronic GmbH & Co. KG", + 0x0495: "LMT Mercer Group, Inc", + 0x0496: "Polymorphic Labs LLC", + 0x0497: "Cochlear Limited", + 0x0498: "METER Group, Inc. USA", + 0x0499: "Ruuvi Innovations Ltd.", + 0x049A: "Situne AS", + 0x049B: "nVisti, LLC", + 0x049C: "DyOcean", + 0x049D: "Uhlmann & Zacher GmbH", + 0x049E: "AND!XOR LLC", + 0x049F: "tictote AB", + 0x04A0: "Vypin, LLC", + 0x04A1: "PNI Sensor Corporation", + 0x04A2: "ovrEngineered, LLC", + 0x04A3: "GT-tronics HK Ltd", + 0x04A4: "Herbert Waldmann GmbH & Co. KG", + 0x04A5: "Guangzhou FiiO Electronics Technology Co.,Ltd", + 0x04A6: "Vinetech Co., Ltd", + 0x04A7: "Dallas Logic Corporation", + 0x04A8: "BioTex, Inc.", + 0x04A9: "DISCOVERY SOUND TECHNOLOGY, LLC", + 0x04AA: "LINKIO SAS", + 0x04AB: "Harbortronics, Inc.", + 0x04AC: "Undagrid B.V.", + 0x04AD: "Shure Inc", + 0x04AE: "ERM Electronic Systems LTD", + 0x04AF: "BIOROWER Handelsagentur GmbH", + 0x04B0: "Weba Sport und Med. Artikel GmbH", + 0x04B1: "Kartographers Technologies Pvt. Ltd.", + 0x04B2: "The Shadow on the Moon", + 0x04B3: "mobike (Hong Kong) Limited", + 0x04B4: "Inuheat Group AB", + 0x04B5: "Swiftronix AB", + 0x04B6: "Diagnoptics Technologies", + 0x04B7: "Analog Devices, Inc.", + 0x04B8: "Soraa Inc.", + 0x04B9: "CSR Building Products Limited", + 0x04BA: "Crestron Electronics, Inc.", + 0x04BB: "Neatebox Ltd", + 0x04BC: "Draegerwerk AG & Co. KGaA", + 0x04BD: "AlbynMedical", + 0x04BE: "Averos FZCO", + 0x04BF: "VIT Initiative, LLC", + 0x04C0: "Statsports International", + 0x04C1: "Sospitas, s.r.o.", + 0x04C2: "Dmet Products Corp.", + 0x04C3: "Mantracourt Electronics Limited", + 0x04C4: "TeAM Hutchins AB", + 0x04C5: "Seibert Williams Glass, LLC", + 0x04C6: "Insta GmbH", + 0x04C7: "Svantek Sp. z o.o.", + 0x04C8: "Shanghai Flyco Electrical Appliance Co., Ltd.", + 0x04C9: "Thornwave Labs Inc", + 0x04CA: "Steiner-Optik GmbH", + 0x04CB: "Novo Nordisk A/S", + 0x04CC: "Enflux Inc.", + 0x04CD: "Safetech Products LLC", + 0x04CE: "GOOOLED S.R.L.", + 0x04CF: "DOM Sicherheitstechnik GmbH & Co. KG", + 0x04D0: "Olympus Corporation", + 0x04D1: "KTS GmbH", + 0x04D2: "Anloq Technologies Inc.", + 0x04D3: "Queercon, Inc", + 0x04D4: "5th Element Ltd", + 0x04D5: "Gooee Limited", + 0x04D6: "LUGLOC LLC", + 0x04D7: "Blincam, Inc.", + 0x04D8: "FUJIFILM Corporation", + 0x04D9: "RandMcNally", + 0x04DA: "Franceschi Marina snc", + 0x04DB: "Engineered Audio, LLC.", + 0x04DC: "IOTTIVE (OPC) PRIVATE LIMITED", + 0x04DD: "4MOD Technology", + 0x04DE: "Lutron Electronics Co., Inc.", + 0x04DF: "Emerson", + 0x04E0: "Guardtec, Inc.", + 0x04E1: "REACTEC LIMITED", + 0x04E2: "EllieGrid", + 0x04E3: "Under Armour", + 0x04E4: "Woodenshark", + 0x04E5: "Avack Oy", + 0x04E6: "Smart Solution Technology, Inc.", + 0x04E7: "REHABTRONICS INC.", + 0x04E8: "STABILO International", + 0x04E9: "Busch Jaeger Elektro GmbH", + 0x04EA: "Pacific Bioscience Laboratories, Inc", + 0x04EB: "Bird Home Automation GmbH", + 0x04EC: "Motorola Solutions", + 0x04ED: "R9 Technology, Inc.", + 0x04EE: "Auxivia", + 0x04EF: "DaisyWorks, Inc", + 0x04F0: "Kosi Limited", + 0x04F1: "Theben AG", + 0x04F2: "InDreamer Techsol Private Limited", + 0x04F3: "Cerevast Medical", + 0x04F4: "ZanCompute Inc.", + 0x04F5: "Pirelli Tyre S.P.A.", + 0x04F6: "McLear Limited", + 0x04F7: "Shenzhen Huiding Technology Co.,Ltd.", + 0x04F8: "Convergence Systems Limited", + 0x04F9: "Interactio", + 0x04FA: "Androtec GmbH", + 0x04FB: "Benchmark Drives GmbH & Co. KG", + 0x04FC: "SwingLync L. L. C.", + 0x04FD: "Tapkey GmbH", + 0x04FE: "Woosim Systems Inc.", + 0x04FF: "Microsemi Corporation", + 0x0500: "Wiliot LTD.", + 0x0501: "Polaris IND", + 0x0502: "Specifi-Kali LLC", + 0x0503: "Locoroll, Inc", + 0x0504: "PHYPLUS Inc", + 0x0505: "Inplay Technologies LLC", + 0x0506: "Hager", + 0x0507: "Yellowcog", + 0x0508: "Axes System sp. z o. o.", + 0x0509: "myLIFTER Inc.", + 0x050A: "Shake-on B.V.", + 0x050B: "Vibrissa Inc.", + 0x050C: "OSRAM GmbH", + 0x050D: "TRSystems GmbH", + 0x050E: "Yichip Microelectronics (Hangzhou) Co.,Ltd.", + 0x050F: "Foundation Engineering LLC", + 0x0510: "UNI-ELECTRONICS, INC.", + 0x0511: "Brookfield Equinox LLC", + 0x0512: "Soprod SA", + 0x0513: "9974091 Canada Inc.", + 0x0514: "FIBRO GmbH", + 0x0515: "RB Controls Co., Ltd.", + 0x0516: "Footmarks", + 0x0517: "Amtronic Sverige AB (formerly Amcore AB)", + 0x0518: "MAMORIO.inc", + 0x0519: "Tyto Life LLC", + 0x051A: "Leica Camera AG", + 0x051B: "Angee Technologies Ltd.", + 0x051C: "EDPS", + 0x051D: "OFF Line Co., Ltd.", + 0x051E: "Detect Blue Limited", + 0x051F: "Setec Pty Ltd", + 0x0520: "Target Corporation", + 0x0521: "IAI Corporation", + 0x0522: "NS Tech, Inc.", + 0x0523: "MTG Co., Ltd.", + 0x0524: "Hangzhou iMagic Technology Co., Ltd", + 0x0525: "HONGKONG NANO IC TECHNOLOGIES CO., LIMITED", + 0x0526: "Honeywell International Inc.", + 0x0527: "Albrecht JUNG", + 0x0528: "Lunera Lighting Inc.", + 0x0529: "Lumen UAB", + 0x052A: "Keynes Controls Ltd", + 0x052B: "Novartis AG", + 0x052C: "Geosatis SA", + 0x052D: "EXFO, Inc.", + 0x052E: "LEDVANCE GmbH", + 0x052F: "Center ID Corp.", + 0x0530: "Adolene, Inc.", + 0x0531: "D&M Holdings Inc.", + 0x0532: "CRESCO Wireless, Inc.", + 0x0533: "Nura Operations Pty Ltd", + 0x0534: "Frontiergadget, Inc.", + 0x0535: "Smart Component Technologies Limited", + 0x0536: "ZTR Control Systems LLC", + 0x0537: "MetaLogics Corporation", + 0x0538: "Medela AG", + 0x0539: "OPPLE Lighting Co., Ltd", + 0x053A: "Savitech Corp.,", + 0x053B: "prodigy", + 0x053C: "Screenovate Technologies Ltd", + 0x053D: "TESA SA", + 0x053E: "CLIM8 LIMITED", + 0x053F: "Silergy Corp", + 0x0540: "SilverPlus, Inc", + 0x0541: "Sharknet srl", + 0x0542: "Mist Systems, Inc.", + 0x0543: "MIWA LOCK CO.,Ltd", + 0x0544: "OrthoSensor, Inc.", + 0x0545: "Candy Hoover Group s.r.l", + 0x0546: "Apexar Technologies S.A.", + 0x0547: "LOGICDATA d.o.o.", + 0x0548: "Knick Elektronische Messgeraete GmbH & Co. KG", + 0x0549: "Smart Technologies and Investment Limited", + 0x054A: "Linough Inc.", + 0x054B: "Advanced Electronic Designs, Inc.", + 0x054C: "Carefree Scott Fetzer Co Inc", + 0x054D: "Sensome", + 0x054E: "FORTRONIK storitve d.o.o.", + 0x054F: "Sinnoz", + 0x0550: "Versa Networks, Inc.", + 0x0551: "Sylero", + 0x0552: "Avempace SARL", + 0x0553: "Nintendo Co., Ltd.", + 0x0554: "National Instruments", + 0x0555: "KROHNE Messtechnik GmbH", + 0x0556: "Otodynamics Ltd", + 0x0557: "Arwin Technology Limited", + 0x0558: "benegear, inc.", + 0x0559: "Newcon Optik", + 0x055A: "CANDY HOUSE, Inc.", + 0x055B: "FRANKLIN TECHNOLOGY INC", + 0x055C: "Lely", + 0x055D: "Valve Corporation", + 0x055E: "Hekatron Vertriebs GmbH", + 0x055F: "PROTECH S.A.S. DI GIRARDI ANDREA & C.", + 0x0560: "Sarita CareTech APS (formerly Sarita CareTech IVS)", + 0x0561: "Finder S.p.A.", + 0x0562: "Thalmic Labs Inc.", + 0x0563: "Steinel Vertrieb GmbH", + 0x0564: "Beghelli Spa", + 0x0565: "Beijing Smartspace Technologies Inc.", + 0x0566: "CORE TRANSPORT TECHNOLOGIES NZ LIMITED", + 0x0567: "Xiamen Everesports Goods Co., Ltd", + 0x0568: "Bodyport Inc.", + 0x0569: "Audionics System, INC.", + 0x056A: "Flipnavi Co.,Ltd.", + 0x056B: "Rion Co., Ltd.", + 0x056C: "Long Range Systems, LLC", + 0x056D: "Redmond Industrial Group LLC", + 0x056E: "VIZPIN INC.", + 0x056F: "BikeFinder AS", + 0x0570: "Consumer Sleep Solutions LLC", + 0x0571: "PSIKICK, INC.", + 0x0572: "AntTail.com", + 0x0573: "Lighting Science Group Corp.", + 0x0574: "AFFORDABLE ELECTRONICS INC", + 0x0575: "Integral Memroy Plc", + 0x0576: "Globalstar, Inc.", + 0x0577: "True Wearables, Inc.", + 0x0578: "Wellington Drive Technologies Ltd", + 0x0579: "Ensemble Tech Private Limited", + 0x057A: "OMNI Remotes", + 0x057B: "Duracell U.S. Operations Inc.", + 0x057C: "Toor Technologies LLC", + 0x057D: "Instinct Performance", + 0x057E: "Beco, Inc", + 0x057F: "Scuf Gaming International, LLC", + 0x0580: "ARANZ Medical Limited", + 0x0581: "LYS TECHNOLOGIES LTD", + 0x0582: "Breakwall Analytics, LLC", + 0x0583: "Code Blue Communications", + 0x0584: "Gira Giersiepen GmbH & Co. KG", + 0x0585: "Hearing Lab Technology", + 0x0586: "LEGRAND", + 0x0587: "Derichs GmbH", + 0x0588: "ALT-TEKNIK LLC", + 0x0589: "Star Technologies", + 0x058A: "START TODAY CO.,LTD.", + 0x058B: "Maxim Integrated Products", + 0x058C: "MERCK Kommanditgesellschaft auf Aktien", + 0x058D: "Jungheinrich Aktiengesellschaft", + 0x058E: "Oculus VR, LLC", + 0x058F: "HENDON SEMICONDUCTORS PTY LTD", + 0x0590: "Pur3 Ltd", + 0x0591: "Viasat Group S.p.A.", + 0x0592: "IZITHERM", + 0x0593: "Spaulding Clinical Research", + 0x0594: "Kohler Company", + 0x0595: "Inor Process AB", + 0x0596: "My Smart Blinds", + 0x0597: "RadioPulse Inc", + 0x0598: "rapitag GmbH", + 0x0599: "Lazlo326, LLC.", + 0x059A: "Teledyne Lecroy, Inc.", + 0x059B: "Dataflow Systems Limited", + 0x059C: "Macrogiga Electronics", + 0x059D: "Tandem Diabetes Care", + 0x059E: "Polycom, Inc.", + 0x059F: "Fisher & Paykel Healthcare", + 0x05A0: "RCP Software Oy", + 0x05A1: "Shanghai Xiaoyi Technology Co.,Ltd.", + 0x05A2: "ADHERIUM(NZ) LIMITED", + 0x05A3: "Axiomware Systems Incorporated", + 0x05A4: "O. E. M. Controls, Inc.", + 0x05A5: "Kiiroo BV", + 0x05A6: "Telecon Mobile Limited", + 0x05A7: "Sonos Inc", + 0x05A8: "Tom Allebrandi Consulting", + 0x05A9: "Monidor", + 0x05AA: "Tramex Limited", + 0x05AB: "Nofence AS", + 0x05AC: "GoerTek Dynaudio Co., Ltd.", + 0x05AD: "INIA", + 0x05AE: "CARMATE MFG.CO.,LTD", + 0x05AF: "ONvocal", + 0x05B0: "NewTec GmbH", + 0x05B1: "Medallion Instrumentation Systems", + 0x05B2: "CAREL INDUSTRIES S.P.A.", + 0x05B3: "Parabit Systems, Inc.", + 0x05B4: "White Horse Scientific ltd", + 0x05B5: "verisilicon", + 0x05B6: "Elecs Industry Co.,Ltd.", + 0x05B7: "Beijing Pinecone Electronics Co.,Ltd.", + 0x05B8: "Ambystoma Labs Inc.", + 0x05B9: "Suzhou Pairlink Network Technology", + 0x05BA: "igloohome", + 0x05BB: "Oxford Metrics plc", + 0x05BC: "Leviton Mfg. Co., Inc.", + 0x05BD: "ULC Robotics Inc.", + 0x05BE: "RFID Global by Softwork SrL", + 0x05BF: "Real-World-Systems Corporation", + 0x05C0: "Nalu Medical, Inc.", + 0x05C1: "P.I.Engineering", + 0x05C2: "Grote Industries", + 0x05C3: "Runtime, Inc.", + 0x05C4: "Codecoup sp. z o.o. sp. k.", + 0x05C5: "SELVE GmbH & Co. KG", + 0x05C6: "Smart Animal Training Systems, LLC", + 0x05C7: "Lippert Components, INC", + 0x05C8: "SOMFY SAS", + 0x05C9: "TBS Electronics B.V.", + 0x05CA: "MHL Custom Inc", + 0x05CB: "LucentWear LLC", + 0x05CC: "WATTS ELECTRONICS", + 0x05CD: "RJ Brands LLC", + 0x05CE: "V-ZUG Ltd", + 0x05CF: "Biowatch SA", + 0x05D0: "Anova Applied Electronics", + 0x05D1: "Lindab AB", + 0x05D2: "frogblue TECHNOLOGY GmbH", + 0x05D3: "Acurable Limited", + 0x05D4: "LAMPLIGHT Co., Ltd.", + 0x05D5: "TEGAM, Inc.", + 0x05D6: "Zhuhai Jieli technology Co.,Ltd", + 0x05D7: "modum.io AG", + 0x05D8: "Farm Jenny LLC", + 0x05D9: "Toyo Electronics Corporation", + 0x05DA: "Applied Neural Research Corp", + 0x05DB: "Avid Identification Systems, Inc.", + 0x05DC: "Petronics Inc.", + 0x05DD: "essentim GmbH", + 0x05DE: "QT Medical INC.", + 0x05DF: "VIRTUALCLINIC.DIRECT LIMITED", + 0x05E0: "Viper Design LLC", + 0x05E1: "Human, Incorporated", + 0x05E2: "stAPPtronics GmbH", + 0x05E3: "Elemental Machines, Inc.", + 0x05E4: "Taiyo Yuden Co., Ltd", + 0x05E5: "INEO ENERGY& SYSTEMS", + 0x05E6: "Motion Instruments Inc.", + 0x05E7: "PressurePro", + 0x05E8: "COWBOY", + 0x05E9: "iconmobile GmbH", + 0x05EA: "ACS-Control-System GmbH", + 0x05EB: "Bayerische Motoren Werke AG", + 0x05EC: "Gycom Svenska AB", + 0x05ED: "Fuji Xerox Co., Ltd", + 0x05EE: "Glide Inc.", + 0x05EF: "SIKOM AS", + 0x05F0: "beken", + 0x05F1: "The Linux Foundation", + 0x05F2: "Try and E CO.,LTD.", + 0x05F3: "SeeScan", + 0x05F4: "Clearity, LLC", + 0x05F5: "GS TAG", + 0x05F6: "DPTechnics", + 0x05F7: "TRACMO, INC.", + 0x05F8: "Anki Inc.", + 0x05F9: "Hagleitner Hygiene International GmbH", + 0x05FA: "Konami Sports Life Co., Ltd.", + 0x05FB: "Arblet Inc.", + 0x05FC: "Masbando GmbH", + 0x05FD: "Innoseis", + 0x05FE: "Niko", + 0x05FF: "Wellnomics Ltd", + 0x0600: "iRobot Corporation", + 0x0601: "Schrader Electronics", + 0x0602: "Geberit International AG", + 0x0603: "Fourth Evolution Inc", + 0x0604: "Cell2Jack LLC", + 0x0605: "FMW electronic Futterer u. Maier-Wolf OHG", + 0x0606: "John Deere", + 0x0607: "Rookery Technology Ltd", + 0x0608: "KeySafe-Cloud", + 0x0609: "BUCHI Labortechnik AG", + 0x060A: "IQAir AG", + 0x060B: "Triax Technologies Inc", + 0x060C: "Vuzix Corporation", + 0x060D: "TDK Corporation", + 0x060E: "Blueair AB", + 0x060F: "Signify Netherlands (formerlyPhilips Lighting B.V.)", + 0x0610: "ADH GUARDIAN USA LLC", + 0x0611: "Beurer GmbH", + 0x0612: "Playfinity AS", + 0x0613: "Hans Dinslage GmbH", + 0x0614: "OnAsset Intelligence, Inc.", + 0x0615: "INTER ACTION Corporation", + 0x0616: "OS42 UG (haftungsbeschraenkt)", + 0x0617: "WIZCONNECTED COMPANY LIMITED", + 0x0618: "Audio-Technica Corporation", + 0x0619: "Six Guys Labs, s.r.o.", + 0x061A: "R.W. Beckett Corporation", + 0x061B: "silex technology, inc.", + 0x061C: "Univations Limited", + 0x061D: "SENS Innovation ApS", + 0x061E: "Diamond Kinetics, Inc.", + 0x061F: "Phrame Inc.", + 0x0620: "Forciot Oy", + 0x0621: "Noordung d.o.o.", + 0x0622: "Beam Labs, LLC", + 0x0623: "Philadelphia Scientific (U.K.) Limited", + 0x0624: "Biovotion AG", + 0x0625: "Square Panda, Inc.", + 0x0626: "Amplifico", + 0x0627: "WEG S.A.", + 0x0628: "Ensto Oy", + 0x0629: "PHONEPE PVT LTD", + 0x062A: "Lunatico Astronomia SL", + 0x062B: "MinebeaMitsumi Inc.", + 0x062C: "ASPion GmbH", + 0x062D: "Vossloh-Schwabe Deutschland GmbH", + 0x062E: "Procept", + 0x062F: "ONKYO Corporation", + 0x0630: "Asthrea D.O.O.", + 0x0631: "Fortiori Design LLC", + 0x0632: "Hugo Muller GmbH & Co KG", + 0x0633: "Wangi Lai PLT", + 0x0634: "Fanstel Corp", + 0x0635: "Crookwood", + 0x0636: "ELECTRONICA INTEGRAL DE SONIDO S.A.", + 0x0637: "GiP Innovation Tools GmbH", + 0x0638: "LX SOLUTIONS PTY LIMITED", + 0x0639: "Shenzhen Minew Technologies Co., Ltd.", + 0x063A: "Prolojik Limited", + 0x063B: "Kromek Group Plc", + 0x063C: "Contec Medical Systems Co., Ltd.", + 0x063D: "Xradio Technology Co.,Ltd.", + 0x063E: "The Indoor Lab, LLC", + 0x063F: "LDL TECHNOLOGY", + 0x0640: "Parkifi", + 0x0641: "Revenue Collection Systems FRANCE SAS", + 0x0642: "Bluetrum Technology Co.,Ltd", + 0x0643: "makita corporation", + 0x0644: "Apogee Instruments", + 0x0645: "BM3", + 0x0646: "SGV Group Holding GmbH & Co. KG", + 0x0647: "MED-EL", + 0x0648: "Ultune Technologies", + 0x0649: "Ryeex Technology Co.,Ltd.", + 0x064A: "Open Research Institute, Inc.", + 0x064B: "Scale-Tec, Ltd", + 0x064C: "Zumtobel Group AG", + 0x064D: "iLOQ Oy", + 0x064E: "KRUXWorks Technologies Private Limited", + 0x064F: "Digital Matter Pty Ltd", + 0x0650: "Coravin, Inc.", + 0x0651: "Stasis Labs, Inc.", + 0x0652: "ITZ Innovations- und Technologiezentrum GmbH", + 0x0653: "Meggitt SA", + 0x0654: "Ledlenser GmbH & Co. KG", + 0x0655: "Renishaw PLC", + 0x0656: "ZhuHai AdvanPro Technology Company Limited", + 0x0657: "Meshtronix Limited", + 0x0658: "Payex Norge AS", + 0x0659: "UnSeen Technologies Oy", + 0x065A: "Zound Industries International AB", + 0x065B: "Sesam Solutions BV", + 0x065C: "PixArt Imaging Inc.", + 0x065D: "Panduit Corp.", + 0x065E: "Alo AB", + 0x065F: "Ricoh Company Ltd", + 0x0660: "RTC Industries, Inc.", + 0x0661: "Mode Lighting Limited", + 0x0662: "Particle Industries, Inc.", + 0x0663: "Advanced Telemetry Systems, Inc.", + 0x0664: "RHA TECHNOLOGIES LTD", + 0x0665: "Pure International Limited", + 0x0666: "WTO Werkzeug-Einrichtungen GmbH", + 0x0667: "Spark Technology Labs Inc.", + 0x0668: "Bleb Technology srl", + 0x0669: "Livanova USA, Inc.", + 0x066A: "Brady Worldwide Inc.", + 0x066B: "DewertOkin GmbH", + 0x066C: "Ztove ApS", + 0x066D: "Venso EcoSolutions AB", + 0x066E: "Eurotronik Kranj d.o.o.", + 0x066F: "Hug Technology Ltd", + 0x0670: "Gema Switzerland GmbH", + 0x0671: "Buzz Products Ltd.", + 0x0672: "Kopi", + 0x0673: "Innova Ideas Limited", + 0x0674: "BeSpoon", + 0x0675: "Deco Enterprises, Inc.", + 0x0676: "Expai Solutions Private Limited", + 0x0677: "Innovation First, Inc.", + 0x0678: "SABIK Offshore GmbH", + 0x0679: "4iiii Innovations Inc.", + 0x067A: "The Energy Conservatory, Inc.", + 0x067B: "I.FARM, INC.", + 0x067C: "Tile, Inc.", + 0x067D: "Form Athletica Inc.", + 0x067E: "MbientLab Inc", + 0x067F: "NETGRID S.N.C. DI BISSOLI MATTEO, CAMPOREALE SIMONE, TOGNETTI FEDERICO", + 0x0680: "Mannkind Corporation", + 0x0681: "Trade FIDES a.s.", + 0x0682: "Photron Limited", + 0x0683: "Eltako GmbH", + 0x0684: "Dermalapps, LLC", + 0x0685: "Greenwald Industries", + 0x0686: "inQs Co., Ltd.", + 0x0687: "Cherry GmbH", + 0x0688: "Amsted Digital Solutions Inc.", + 0x0689: "Tacx b.v.", + 0x068A: "Raytac Corporation", + 0x068B: "Jiangsu Teranovo Tech Co., Ltd.", + 0x068C: "Changzhou Sound Dragon Electronics and Acoustics Co., Ltd", + 0x068D: "JetBeep Inc.", + 0x068E: "Razer Inc.", + 0x068F: "JRM Group Limited", + 0x0690: "Eccrine Systems, Inc.", + 0x0691: "Curie Point AB", + 0x0692: "Georg Fischer AG", + 0x0693: "Hach - Danaher", + 0x0694: "T&A Laboratories LLC", + 0x0695: "Koki Holdings Co., Ltd.", + 0x0696: "Gunakar Private Limited", + 0x0697: "Stemco Products Inc", + 0x0698: "Wood IT Security, LLC", + 0x0699: "RandomLab SAS", + 0x069A: "Adero, Inc. (formerly as TrackR, Inc.)", + 0x069B: "Dragonchip Limited", + 0x069C: "Noomi AB", + 0x069D: "Vakaros LLC", + 0x069E: "Delta Electronics, Inc.", + 0x069F: "FlowMotion Technologies AS", + 0x06A0: "OBIQ Location Technology Inc.", + 0x06A1: "Cardo Systems, Ltd", + 0x06A2: "Globalworx GmbH", + 0x06A3: "Nymbus, LLC", + 0x06A4: "Sanyo Techno Solutions Tottori Co., Ltd.", + 0x06A5: "TEKZITEL PTY LTD", + 0x06A6: "Roambee Corporation", + 0x06A7: "Chipsea Technologies (ShenZhen) Corp.", + 0x06A8: "GD Midea Air-Conditioning Equipment Co., Ltd.", + 0x06A9: "Soundmax Electronics Limited", + 0x06AA: "Produal Oy", + 0x06AB: "HMS Industrial Networks AB", + 0x06AC: "Ingchips Technology Co., Ltd.", + 0x06AD: "InnovaSea Systems Inc.", + 0x06AE: "SenseQ Inc.", + 0x06AF: "Shoof Technologies", + 0x06B0: "BRK Brands, Inc.", + 0x06B1: "SimpliSafe, Inc.", + 0x06B2: "Tussock Innovation 2013 Limited", + 0x06B3: "The Hablab ApS", + 0x06B4: "Sencilion Oy", + 0x06B5: "Wabilogic Ltd.", + 0x06B6: "Sociometric Solutions, Inc.", + 0x06B7: "iCOGNIZE GmbH", + 0x06B8: "ShadeCraft, Inc", + 0x06B9: "Beflex Inc.", + 0x06BA: "Beaconzone Ltd", + 0x06BB: "Leaftronix Analogic Solutions Private Limited", + 0x06BC: "TWS Srl", + 0x06BD: "ABB Oy", + 0x06BE: "HitSeed Oy", + 0x06BF: "Delcom Products Inc.", + 0x06C0: "CAME S.p.A.", + 0x06C1: "Alarm.com Holdings, Inc", + 0x06C2: "Measurlogic Inc.", + 0x06C3: "King I Electronics.Co.,Ltd", + 0x06C4: "Dream Labs GmbH", + 0x06C5: "Urban Compass, Inc", + 0x06C6: "Simm Tronic Limited", + 0x06C7: "Somatix Inc", + 0x06C8: "Storz & Bickel GmbH & Co. KG", + 0x06C9: "MYLAPS B.V.", + 0x06CA: "Shenzhen Zhongguang Infotech Technology Development Co., Ltd", + 0x06CB: "Dyeware, LLC", + 0x06CC: "Dongguan SmartAction Technology Co.,Ltd.", + 0x06CD: "DIG Corporation", + 0x06CE: "FIOR & GENTZ", + 0x06CF: "Belparts N.V.", + 0x06D0: "Etekcity Corporation", + 0x06D1: "Meyer Sound Laboratories, Incorporated", + 0x06D2: "CeoTronics AG", + 0x06D3: "TriTeq Lock and Security, LLC", + 0x06D4: "DYNAKODE TECHNOLOGY PRIVATE LIMITED", + 0x06D5: "Sensirion AG", + 0x06D6: "JCT Healthcare Pty Ltd", + 0x06D7: "FUBA Automotive Electronics GmbH", + 0x06D8: "AW Company", + 0x06D9: "Shanghai Mountain View Silicon Co.,Ltd.", + 0x06DA: "Zliide Technologies ApS", + 0x06DB: "Automatic Labs, Inc.", + 0x06DC: "Industrial Network Controls, LLC", + 0x06DD: "Intellithings Ltd.", + 0x06DE: "Navcast, Inc.", + 0x06DF: "Hubbell Lighting, Inc.", + 0x06E0: "Avaya", + 0x06E1: "Milestone AV Technologies LLC", + 0x06E2: "Alango Technologies Ltd", + 0x06E3: "Spinlock Ltd", + 0x06E4: "Aluna", + 0x06E5: "OPTEX CO.,LTD.", + 0x06E6: "NIHON DENGYO KOUSAKU", + 0x06E7: "VELUX A/S", + 0x06E8: "Almendo Technologies GmbH", + 0x06E9: "Zmartfun Electronics, Inc.", + 0x06EA: "SafeLine Sweden AB", + 0x06EB: "Houston Radar LLC", + 0x06EC: "Sigur", + 0x06ED: "J Neades Ltd", + 0x06EE: "Avantis Systems Limited", + 0x06EF: "ALCARE Co., Ltd.", + 0x06F0: "Chargy Technologies, SL", + 0x06F1: "Shibutani Co., Ltd.", + 0x06F2: "Trapper Data AB", + 0x06F3: "Alfred International Inc.", + 0x06F4: "Near Field Solutions Ltd", + 0x06F5: "Vigil Technologies Inc.", + 0x06F6: "Vitulo Plus BV", + 0x06F7: "WILKA Schliesstechnik GmbH", + 0x06F8: "BodyPlus Technology Co.,Ltd", + 0x06F9: "happybrush GmbH", + 0x06FA: "Enequi AB", + 0x06FB: "Sartorius AG", + 0x06FC: "Tom Communication Industrial Co.,Ltd.", + 0x06FD: "ESS Embedded System Solutions Inc.", + 0x06FE: "Mahr GmbH", + 0x06FF: "Redpine Signals Inc", + 0x0700: "TraqFreq LLC", + 0x0701: "PAFERS TECH", + 0x0702: 'Akciju sabiedriba "SAF TEHNIKA"', + 0x0703: "Beijing Jingdong Century Trading Co., Ltd.", + 0x0704: "JBX Designs Inc.", + 0x0705: "AB Electrolux", + 0x0706: "Wernher von Braun Center for ASdvanced Research", + 0x0707: "Essity Hygiene and Health Aktiebolag", + 0x0708: "Be Interactive Co., Ltd", + 0x0709: "Carewear Corp.", + 0x070A: "Huf Hlsbeck & Frst GmbH & Co. KG", + 0x070B: "Element Products, Inc.", + 0x070C: "Beijing Winner Microelectronics Co.,Ltd", + 0x070D: "SmartSnugg Pty Ltd", + 0x070E: "FiveCo Sarl", + 0x070F: "California Things Inc.", + 0x0710: "Audiodo AB", + 0x0711: "ABAX AS", + 0x0712: "Bull Group Company Limited", + 0x0713: "Respiri Limited", + 0x0714: "MindPeace Safety LLC", + 0x0715: "MBARC LABS Inc (formerly Vgyan Solutions)", + 0x0716: "Altonics", + 0x0717: "iQsquare BV", + 0x0718: "IDIBAIX enginneering", + 0x0719: "ECSG", + 0x071A: "REVSMART WEARABLE HK CO LTD", + 0x071B: "Precor", + 0x071C: "F5 Sports, Inc", + 0x071D: "exoTIC Systems", + 0x071E: "DONGGUAN HELE ELECTRONICS CO., LTD", + 0x071F: "Dongguan Liesheng Electronic Co.Ltd", + 0x0720: "Oculeve, Inc.", + 0x0721: "Clover Network, Inc.", + 0x0722: "Xiamen Eholder Electronics Co.Ltd", + 0x0723: "Ford Motor Company", + 0x0724: "Guangzhou SuperSound Information Technology Co.,Ltd", + 0x0725: "Tedee Sp. z o.o.", + 0x0726: "PHC Corporation", + 0x0727: "STALKIT AS", + 0x0728: "Eli Lilly and Company", + 0x0729: "SwaraLink Technologies", + 0x072A: "JMR embedded systems GmbH", + 0x072B: "Bitkey Inc.", + 0x072C: "GWA Hygiene GmbH", + 0x072D: "Safera Oy", + 0x072E: "Open Platform Systems LLC", + 0x072F: "OnePlus Electronics (Shenzhen) Co., Ltd.", + 0x0730: "Wildlife Acoustics, Inc.", + 0x0731: "ABLIC Inc.", + 0x0732: "Dairy Tech, Inc.", + 0x0733: "Iguanavation, Inc.", + 0x0734: "DiUS Computing Pty Ltd", + 0x0735: "UpRight Technologies LTD", + 0x0736: "FrancisFund, LLC", + 0x0737: "LLC Navitek", + 0x0738: "Glass Security Pte Ltd", + 0x0739: "Jiangsu Qinheng Co., Ltd.", + 0x073A: "Chandler Systems Inc.", + 0x073B: "Fantini Cosmi s.p.a.", + 0x073C: "Acubit ApS", + 0x073D: "Beijing Hao Heng Tian Tech Co., Ltd.", + 0x073E: "Bluepack S.R.L.", + 0x073F: "Beijing Unisoc Technologies Co., Ltd.", + 0x0740: "HITIQ LIMITED", + 0x0741: "MAC SRL", + 0x0742: "DML LLC", + 0x0743: "Sanofi", + 0x0744: "SOCOMEC", + 0x0745: "WIZNOVA, Inc.", + 0x0746: "Seitec Elektronik GmbH", + 0x0747: "OR Technologies Pty Ltd", + 0x0748: "GuangZhou KuGou Computer Technology Co.Ltd", + 0x0749: "DIAODIAO (Beijing) Technology Co., Ltd.", + 0x074A: "Illusory Studios LLC", + 0x074B: "Sarvavid Software Solutions LLP", + 0x074C: "iopool s.a.", + 0x074D: "Amtech Systems, LLC", + 0x074E: "EAGLE DETECTION SA", + 0x074F: "MEDIATECH S.R.L.", + 0x0750: "Hamilton Professional Services of Canada Incorporated", + 0x0751: "Changsha JEMO IC Design Co.,Ltd", + 0x0752: "Elatec GmbH", + 0x0753: "JLG Industries, Inc.", + 0x0754: "Michael Parkin", + 0x0755: "Brother Industries, Ltd", + 0x0756: "Lumens For Less, Inc", + 0x0757: "ELA Innovation", + 0x0758: "umanSense AB", + 0x0759: "Shanghai InGeek Cyber Security Co., Ltd.", + 0x075A: "HARMAN CO.,LTD.", + 0x075B: "Smart Sensor Devices AB", + 0x075C: "Antitronics Inc.", + 0x075D: "RHOMBUS SYSTEMS, INC.", + 0x075E: "Katerra Inc.", + 0x075F: "Remote Solution Co., LTD.", + 0x0760: "Vimar SpA", + 0x0761: "Mantis Tech LLC", + 0x0762: "TerOpta Ltd", + 0x0763: "PIKOLIN S.L.", + 0x0764: "WWZN Information Technology Company Limited", + 0x0765: "Voxx International", + 0x0766: "ART AND PROGRAM, INC.", + 0x0767: "NITTO DENKO ASIA TECHNICAL CENTRE PTE. LTD.", + 0x0768: "Peloton Interactive Inc.", + 0x0769: "Force Impact Technologies", + 0x076A: "Dmac Mobile Developments, LLC", + 0x076B: "Engineered Medical Technologies", + 0x076C: "Noodle Technology inc", + 0x076D: "Graesslin GmbH", + 0x076E: "WuQi technologies, Inc.", + 0x076F: "Successful Endeavours Pty Ltd", + 0x0770: "InnoCon Medical ApS", + 0x0771: "Corvex Connected Safety", + 0x0772: "Thirdwayv Inc.", + 0x0773: "Echoflex Solutions Inc.", + 0x0774: "C-MAX Asia Limited", + 0x0775: "4eBusiness GmbH", + 0x0776: "Cyber Transport Control GmbH", + 0x0777: "Cue", + 0x0778: "KOAMTAC INC.", + 0x0779: "Loopshore Oy", + 0x077A: "Niruha Systems Private Limited", + 0x077B: "AmaterZ, Inc.", + 0x077C: "radius co., ltd.", + 0x077D: "Sensority, s.r.o.", + 0x077E: "Sparkage Inc.", + 0x077F: "Glenview Software Corporation", + 0x0780: "Finch Technologies Ltd.", + 0x0781: "Qingping Technology (Beijing) Co., Ltd.", + 0x0782: "DeviceDrive AS", + 0x0783: "ESEMBER LIMITED LIABILITY COMPANY", + 0x0784: "audifon GmbH & Co. KG", + 0x0785: "O2 Micro, Inc.", + 0x0786: "HLP Controls Pty Limited", + 0x0787: "Pangaea Solution", + 0x0788: "BubblyNet, LLC", + 0xFFFF: "This value has special meaning depending on the context in which it used. Link Manager Protocol (LMP): This value may be used in the internal and interoperability tests before a Company ID has been assigned. This value shall not be used in shipping end products. Device ID Profile: This value is reserved as the default vendor ID when no Device ID service record is present in a remote device.", +} diff --git a/bleak/backends/device.py b/bleak/backends/device.py index ed8d4aa6..813e3de1 100644 --- a/bleak/backends/device.py +++ b/bleak/backends/device.py @@ -6,6 +6,7 @@ Created on 2018-04-23 by hbldh """ +from ._manufacturers import MANUFACTURERS class BLEDevice(object): @@ -13,7 +14,7 @@ class BLEDevice(object): a `discover` call. - When using Windows backend, `details` attribute is a - `Windows.Devices.Enumeration.DeviceInformation` object. + `Windows.Devices.Bluetooth.Advertisement.BluetoothLEAdvertisement` object. - When using Linux backend, `details` attribute is a string path to the DBus device object. - When using macOS backend, `details` attribute will be @@ -21,10 +22,21 @@ class BLEDevice(object): """ - def __init__(self, address, name, details=None): + def __init__(self, address, name, details=None, **kwargs): self.address = address self.name = name if name else "Unknown" self.details = details + self.metadata = kwargs def __str__(self): + if self.name == "Unknown": + if "manufacturer_data" in self.metadata: + ks = list(self.metadata["manufacturer_data"].keys()) + if len(ks): + mf = MANUFACTURERS.get(ks[0], MANUFACTURERS.get(0xffff)) + value = self.metadata["manufacturer_data"].get( + ks[0], MANUFACTURERS.get(0xffff) + ) + # TODO: Evaluate how to interpret the value of the company identifier... + return "{0}: {1} ({2})".format(self.address, mf, value) return "{0}: {1}".format(self.address, self.name) diff --git a/bleak/backends/dotnet/client.py b/bleak/backends/dotnet/client.py index 8d5238db..f80f82db 100644 --- a/bleak/backends/dotnet/client.py +++ b/bleak/backends/dotnet/client.py @@ -30,7 +30,7 @@ from BleakBridge import Bridge # Import of other CLR components needed. -from System import Array, Byte +from System import Array, Byte, UInt64 from Windows.Foundation import IAsyncOperation, TypedEventHandler from Windows.Storage.Streams import DataReader, DataWriter, IBuffer from Windows.Devices.Bluetooth import ( @@ -98,9 +98,12 @@ async def connect(self) -> bool: ) logger.debug("Connecting to BLE device @ {0}".format(self.address)) + self._requester = await wrap_IAsyncOperation( IAsyncOperation[BluetoothLEDevice]( - BluetoothLEDevice.FromIdAsync(self._device_info.Id) + BluetoothLEDevice.FromBluetoothAddressAsync( + UInt64(self._device_info.BluetoothAddress) + ) ), return_type=BluetoothLEDevice, loop=self.loop, @@ -136,10 +139,6 @@ async def disconnect(self) -> bool: # TODO: Make sure all notifications are removed prior to Dispose. # Dispose all components that we have requested and created. for service in self.services: - # for characteristic in service.characteristics: - # for descriptor in characteristic.descriptors: - # descriptor.obj.Dispose() - # characteristic.obj.Dispose() service.obj.Dispose() self.services = BleakGATTServiceCollection() self._requester.Dispose() @@ -259,7 +258,7 @@ async def read_gatt_char(self, _uuid: str, use_cached=False, **kwargs) -> bytear ) if read_result.Status == GattCommunicationStatus.Success: reader = DataReader.FromBuffer(IBuffer(read_result.Value)) - output = Array[Byte]([0] * reader.UnconsumedBufferLength) + output = Array.CreateInstance(Byte, reader.UnconsumedBufferLength) reader.ReadBytes(output) value = bytearray(output) logger.debug("Read Characteristic {0} : {1}".format(_uuid, value)) @@ -302,7 +301,7 @@ async def read_gatt_descriptor( ) if read_result.Status == GattCommunicationStatus.Success: reader = DataReader.FromBuffer(IBuffer(read_result.Value)) - output = Array[Byte]([0] * reader.UnconsumedBufferLength) + output = Array.CreateInstance(Byte, reader.UnconsumedBufferLength) reader.ReadBytes(output) value = bytearray(output) logger.debug("Read Descriptor {0} : {1}".format(handle, value)) @@ -367,7 +366,6 @@ async def write_gatt_char( ) async def write_gatt_descriptor(self, handle: int, data: bytearray) -> None: - """Perform a write operation on the specified GATT descriptor. Args: @@ -381,23 +379,6 @@ async def write_gatt_descriptor(self, handle: int, data: bytearray) -> None: writer = DataWriter() writer.WriteBytes(Array[Byte](data)) - # if response: - # - # write_result = await wrap_IAsyncOperation( - # IAsyncOperation[GattWriteResult]( - # descriptor.obj.WriteValueWithResultAsync(writer.DetachBuffer()) - # ), - # return_type=GattWriteResult, - # loop=self.loop, - # ) - # else: - # write_result = await wrap_IAsyncOperation( - # IAsyncOperation[GattWriteResult]( - # descriptor.obj.WriteValueAsync(writer.DetachBuffer()) - # ), - # return_type=GattWriteResult, - # loop=self.loop, - # ) write_result = await wrap_IAsyncOperation( IAsyncOperation[GattWriteResult]( descriptor.obj.WriteValueAsync(writer.DetachBuffer()) @@ -545,7 +526,7 @@ def dotnet_notification_parser(sender: Any, args: Any): # Return only the UUID string representation as sender. # Also do a conversion from System.Bytes[] to bytearray. reader = DataReader.FromBuffer(args.CharacteristicValue) - output = Array[Byte]([0] * reader.UnconsumedBufferLength) + output = Array.CreateInstance(Byte, reader.UnconsumedBufferLength) reader.ReadBytes(output) return func(sender.Uuid.ToString(), bytearray(output)) diff --git a/bleak/backends/dotnet/discovery.py b/bleak/backends/dotnet/discovery.py index 1de48d18..02c1cfeb 100644 --- a/bleak/backends/dotnet/discovery.py +++ b/bleak/backends/dotnet/discovery.py @@ -16,8 +16,9 @@ # Import of Bleak CLR->UWP Bridge. It is not needed here, but it enables loading of Windows.Devices from BleakBridge import Bridge -from System import Array -from Windows.Devices import Enumeration +from System import Array, Byte +from Windows.Devices.Bluetooth.Advertisement import BluetoothLEAdvertisementWatcher +from Windows.Storage.Streams import DataReader, IBuffer logger = logging.getLogger(__name__) _here = pathlib.Path(__file__).parent @@ -42,62 +43,29 @@ async def discover( """ loop = loop if loop else asyncio.get_event_loop() - requested_properties = Array[str]( - [ - "System.Devices.Aep.DeviceAddress", - "System.Devices.Aep.IsConnected", - "System.Devices.Aep.Bluetooth.Le.IsConnectable", - ] - ) - aqs_all_bluetooth_le_devices = '(System.Devices.Aep.ProtocolId:="' '{bb7bb05e-5972-42b5-94fc-76eaa7084d49}")' - watcher = Enumeration.DeviceInformation.CreateWatcher( - aqs_all_bluetooth_le_devices, - requested_properties, - Enumeration.DeviceInformationKind.AssociationEndpoint, - ) + watcher = BluetoothLEAdvertisementWatcher() devices = {} - def _format_device_info(d): + def _format_bdaddr(a): + return ":".join("{:02X}".format(x) for x in a.to_bytes(6, byteorder="big")) + + def _format_event_args(e): try: return "{0}: {1}".format( - d.Id.split("-")[-1], d.Name if d.Name else "Unknown" + _format_bdaddr(e.BluetoothAddress), + e.Advertisement.LocalName or "Unknown", ) except Exception: - return d.Id - - def DeviceWatcher_Added(sender, dinfo): - if sender == watcher: - - logger.debug("Added {0}.".format(_format_device_info(dinfo))) - if dinfo.Id not in devices: - devices[dinfo.Id] = dinfo - - def DeviceWatcher_Updated(sender, dinfo_update): - if sender == watcher: - if dinfo_update.Id in devices: - logger.debug( - "Updated {0}.".format(_format_device_info(devices[dinfo_update.Id])) - ) - devices[dinfo_update.Id].Update(dinfo_update) + return e.BluetoothAddress - def DeviceWatcher_Removed(sender, dinfo_update): + def AdvertisementWatcher_Received(sender, e): if sender == watcher: - logger.debug( - "Removed {0}.".format(_format_device_info(devices[dinfo_update.Id])) - ) - if dinfo_update.Id in devices: - devices.pop(dinfo_update.Id) - - def DeviceWatcher_EnumCompleted(sender, obj): - if sender == watcher: - logger.debug( - "{0} devices found. Enumeration completed. Watching for updates...".format( - len(devices) - ) - ) + logger.debug("Received {0}.".format(_format_event_args(e))) + if e.BluetoothAddress not in devices: + devices[e.BluetoothAddress] = e - def DeviceWatcher_Stopped(sender, obj): + def AdvertisementWatcher_Stopped(sender, e): if sender == watcher: logger.debug( "{0} devices found. Watcher status: {1}.".format( @@ -105,11 +73,8 @@ def DeviceWatcher_Stopped(sender, obj): ) ) - watcher.Added += DeviceWatcher_Added - watcher.Updated += DeviceWatcher_Updated - watcher.Removed += DeviceWatcher_Removed - watcher.EnumerationCompleted += DeviceWatcher_EnumCompleted - watcher.Stopped += DeviceWatcher_Stopped + watcher.Received += AdvertisementWatcher_Received + watcher.Stopped += AdvertisementWatcher_Stopped # Watcher works outside of the Python process. watcher.Start() @@ -117,19 +82,25 @@ def DeviceWatcher_Stopped(sender, obj): watcher.Stop() try: - watcher.Added -= DeviceWatcher_Added - watcher.Updated -= DeviceWatcher_Updated - watcher.Removed -= DeviceWatcher_Removed - watcher.EnumerationCompleted -= DeviceWatcher_EnumCompleted - watcher.Stopped -= DeviceWatcher_Stopped + watcher.Received -= AdvertisementWatcher_Received + watcher.Stopped -= AdvertisementWatcher_Stopped except Exception as e: logger.debug("Could not remove event handlers: {0}...".format(e)) found = [] for d in devices.values(): - properties = {p.Key: p.Value for p in d.Properties} - found.append( - BLEDevice(properties["System.Devices.Aep.DeviceAddress"], d.Name, d) - ) + bdaddr = _format_bdaddr(d.BluetoothAddress) + name = d.Advertisement.LocalName + uuids = [] + for u in d.Advertisement.ServiceUuids: + uuids.append(u.ToString()) + data = {} + for m in d.Advertisement.ManufacturerData: + md = IBuffer(m.Data) + b = Array.CreateInstance(Byte, md.Length) + reader = DataReader.FromBuffer(md) + reader.ReadBytes(b) + data[m.CompanyId] = bytes(b) + found.append(BLEDevice(bdaddr, name, d, uuids=uuids, manufacturer_data=data)) return found