"""
HART manufacturer ID lookup table.

Source: FieldComm Group registered manufacturer list (551 entries).
Generated from oida_device_database.json (FieldComm Group Support Portal).
"""

from __future__ import annotations

# {manufacturer_id: name}
MANUFACTURERS: dict[int, str] = {
    0x00: "Reserved",
    0x03: "AMETEK Process Instruments",
    0x04: "Analog Devices",
    0x0A: "Brooks Instrument",
    0x0D: "Daniel Industries",
    0x0E: "Delta",
    0x11: "Endress+Hauser",
    0x12: "ABB - Bailey Fischer and Porter",
    0x13: "Fisher Controls Intl LLC",
    0x14: "Schneider Electric Systems USA",
    0x15: "Fuji",
    0x16: "ABB - Hartmann & Braun",
    0x17: "Honeywell",
    0x19: "Thermo Measure Tech",
    0x1A: "ABB",
    0x1D: "M-System Co.",
    0x1F: "Micro Motion",
    0x20: "Moore Industries",
    0x25: "Ronan",
    0x26: "Rosemount (Emerson)",
    0x2A: "Siemens",
    0x2C: "Toshiba",
    0x2E: "Rosemount Analytical",
    0x2F: "Valmet",
    0x30: "Flowserve",
    0x32: "Viatran",
    0x33: "Delta/Weed",
    0x34: "Westinghouse",
    0x36: "Azbil Corporation (Yamatake)",
    0x37: "Yokogawa",
    0x3E: "Smar",
    0x3F: "Schneider Electric Systems USA",
    0x42: "Samson",
    0x43: "Sparling Instruments",
    0x45: "Krohne",
    0x48: "SOR",
    0x4A: "Spirax Sarco",
    0x4D: "Westlock Controls",
    0x4E: "AMETEK Drexelbrook",
    0x4F: "Rosemount Tank Radar",
    0x50: "ABB - K-TEK",
    0x52: "Draeger",
    0x53: "Raytek",
    0x54: "Siemens Milltronics PI",
    0x55: "BTG",
    0x56: "AMETEK Magnetrol",
    0x57: "Valmet Flow Control Oy",
    0x58: "Siemens Milltronics PI",
    0x5A: "Anderson Instrument Company",
    0x5B: "INOR",
    0x5D: "PEPPERL+FUCHS",
    0x60: "Baumer",
    0x61: "Knick",
    0x62: "VEGA Grieshaber KG",
    0x63: "Temposonics",
    0x64: "Oval",
    0x65: "Masoneilan",
    0x67: "Ohmart",
    0x68: "Harold Beck and Sons",
    0x69: "Rittmeyer Instrumentation",
    0x6B: "WIKA",
    0x6C: "Bopp & Reuther Messtechnik",
    0x6D: "PR Electronics",
    0x6E: "Rotork Process Controls",
    0x72: "Dynisco",
    0x73: "TERRANOVA",
    0x75: "Klay Instruments",
    0x76: "CiDRA CORP.",
    0x7D: "Fisher-Rosemount Performance Technologies",
    0x7E: "Paper Machine Components",
    0x7F: "LABOM",
    0x82: "TOKYO KEISO",
    0x83: "SMC",
    0x84: "Status Instruments",
    0x86: "Autrol by DUON System",
    0x87: "Vortek Instruments",
    0x8C: "ISE-Magtech",
    0x8E: "Mettler Toledo",
    0x8F: "Det-Tronics",
    0x92: "Phase Dynamics",
    0x93: "WELLTECH SHANGHAI",
    0x94: "ENRAF",
    0x97: "Nivelco",
    0x99: "Metran",
    0x9B: "PMV",
    0x9D: "Panametrics",
    0x9E: "R. Stahl",
    0xA0: "FINT",
    0xA1: "BERTHOLD",
    0xA2: "InterCorr",
    0xA5: "Sierra Instruments",
    0xA6: "Fluid Components",
    0xA8: "Meriam Instrument",
    0xA9: "Invensys",
    0xAA: "S-Products",
    0xAB: "CRANE",
    0xAE: "TRACERCO",
    0xAF: "AGAR",
    0xB0: "Phoenix Contact",
    0xB3: "Hawk",
    0xB4: "Rotork YTC",
    0xB5: "Pyromation LLC",
    0xB6: "Satron Instruments",
    0xB7: "BIFFI",
    0xB8: "Shanghai Automation Instrumentation",
    0xB9: "BD Sensors",
    0xBC: "APLISENS",
    0xBD: "Badger Meter",
    0xBE: "HIMA",
    0xBF: "GP:50",
    0xC0: "Kongsberg Maritime",
    0xC1: "ASA S.p.A.",
    0xC4: "Spectrum Controls",
    0xC5: "Kajaani Process Measurements",
    0xC7: "Endress+Hauser SICK",
    0xCA: "Spirax Sarco SRL",
    0xCB: "L&J TECHNOLOGIES",
    0xCC: "Tecfluid S.A.",
    0xCF: "KOSO",
    0xD1: "GE Energy",
    0xD2: "Honeywell Analytics",
    0xD3: "HEINRICHS",
    0xD4: "SIC",
    0xD5: "HACH Lange GmbH",
    0xD6: "Exalon Instruments",
    0xD8: "STI S.r.l.",
    0xD9: "Manometer Factory LLC",
    0xDA: "Dalian-Instruments",
    0xDB: "Spectrex",
    0xDC: "SIPAI Instruments",
    0xDE: "REXA",
    0xDF: "General Monitors by MSA",
    # -- Extended manufacturer IDs (16-bit, HART 7+) --
    0x6000: "ExSaf",
    0x6001: "SEOJIN INSTECH",
    0x6003: "Power-Genex Ltd.",
    0x6005: "BIFOLD ORANGE",
    0x6007: "Detcon",
    0x6008: "MSA",
    0x6009: "METROVAL",
    0x600C: "KSB",
    0x600E: "NET SAFETY",
    0x600F: "SECanada",
    0x6010: "SUPCON",
    0x6011: "DKK - TOA",
    0x6012: "Dwyer Instruments",
    0x6013: "FineTek",
    0x6014: "TopWorx Inc.",
    0x6015: "HOFFER FLOW CONTROLS",
    0x6016: "DUST NETWORKS",
    0x6017: "Forbes Marshall",
    0x6019: "Pepperl+Fuchs",
    0x601A: "CSI",
    0x601B: "TC Fluid Control",
    0x601C: "Rohrback Cosasco",
    0x601E: "Microcyber Corporation",
    0x6021: "FLEXIM",
    0x6022: "TOKYO KEIKI INC.",
    0x6023: "SBEM",
    0x6025: "StoneL Corporation",
    0x6026: "EUREKA FLOW",
    0x6027: "BEKA associates",
    0x6028: "CAPSTAR AUTOMATION",
    0x6029: "Pulsar",
    0x602A: "ELEMER",
    0x602D: "ENOTEC GmbH",
    0x602E: "Val Controls A/S",
    0x602F: "Kurz Instruments",
    0x6031: "Crowcon",
    0x6032: "GEORGIN",
    0x6033: "Eldridge Products",
    0x6034: "DDTOP",
    0x6035: "KSR Kuebler",
    0x6036: "Armstrong Intl",
    0x6037: "Hitachi High-Tech",
    0x6038: "AMFLOW",
    0x6039: "Fluidwell",
    0x603A: "Mecon",
    0x603B: "Fox Thermal Instruments",
    0x603E: "Dinel, s.r.o.",
    0x603F: "Simtronics ASA",
    0x6041: "Softing",
    0x6043: "FUTURE INSTRUMENT",
    0x6044: "MOTOYAMA",
    0x6045: "Thorsis Technologies GmbH",
    0x6047: "AWIATECH",
    0x6049: "United Electric",
    0x604A: "Sinoto",
    0x604B: "Matsushima Measure Tech",
    0x604C: "Westcontrol AS",
    0x604D: "Oldham",
    0x604F: "trianglemicrosol",
    0x6050: "Nivo Controls Pvt Ltd",
    0x6053: "ESP Safety",
    0x6054: "HollySys",
    0x6055: "GF Signet",
    0x6057: "Sierra Monitor",
    0x6058: "Schneider Electric Systems USA",
    0x6059: "Emerson",
    0x605A: "ABM Sensor Tech",
    0x605B: "RIKEN KEIKI",
    0x605D: "Thermal Instruments Co.",
    0x605E: "HYDAC ELECTRONIC",
    0x605F: "GNEUSS",
    0x6060: "Actuation Technologies",
    0x6061: "Roxar",
    0x6062: "GASTRON CO.,LTD",
    0x6063: "HAMILTON Bonaduz",
    0x6065: "ECD",
    0x6069: "Scott Safety",
    0x606A: "Welkin Co., Ltd.",
    0x606B: "Teplopribor",
    0x606C: "Auburn Systems",
    0x606D: "Therm-O-Disc",
    0x606E: "SWISA INSTRUMENT",
    0x606F: "Sage Metering, Inc.",
    0x6072: "Groveley Detection",
    0x6074: "Universal Flow",
    0x6075: "Imtex Controls Ltd",
    0x6078: "Amtec Corporation",
    0x6079: "MTI",
    0x607A: "BJZRZC",
    0x607B: "Volcatek Co., Ltd",
    0x607C: "AUMA",
    0x607D: "Maxim Integrated",
    0x607E: "Novus Automation",
    0x6080: "MISTRAS Group, Inc.",
    0x6081: "Gefran S.p.A.",
    0x6082: "Lumasense Technologies",
    0x6083: "Advanced Sensors Ltd",
    0x6084: "3S",
    0x6085: "akYtec GmbH",
    0x6086: "Euromag International S.r.l.",
    0x6087: "Permasense",
    0x6088: "Isoil-Hemina",
    0x6089: "Walsn",
    0x608B: "SENSE",
    0x608C: "JUMO GmbH & Co KG",
    0x608E: "Adaptive Wireless Solutions",
    0x608F: "NEW COSMOS ELECTRIC",
    0x6090: "Scan-Sense AS",
    0x6091: "PSM Instrumentation Ltd",
    0x6092: "Nuoan",
    0x6093: "SPA ANALITPRIBOR",
    0x6096: "Precision Digital",
    0x6097: "Define Instruments",
    0x6098: "Huizhong",
    0x6099: "GASENSOR",
    0x609A: "Flowline",
    0x609B: "Norgren",
    0x609D: "Chromalox",
    0x609E: "Etrol",
    0x609F: "ZeHong",
    0x60A0: "ANALOG SYSTEMS",
    0x60A1: "Teplokontrol",
    0x60A3: "Bernard Controls",
    0x60A4: "Action",
    0x60A5: "GASTECH AUSTRALIA",
    0x60A7: "Maxonic",
    0x60A8: "Wilcoxon Research",
    0x60A9: "Shucheng S&T",
    0x60AA: "RAE Systems (Shanghai)",
    0x60AB: "XI'AN DONG FENG MACHINERY",
    0x60AC: "Techni AS",
    0x60AD: "OOO NPO Vakuummash",
    0x60AF: "Albatros",
    0x60B0: "Texas Instruments",
    0x60B1: "Beijing Yanshan Times Instrument",
    0x60B2: "Point LLC",
    0x60B3: "Guided Ultrasonics",
    0x60B4: "PLT",
    0x60B5: "SWAN Analytical Instruments",
    0x60B7: "Sensia",
    0x60B8: "Hoerbiger",
    0x60B9: "Shanghai Yinuo",
    0x60BA: "VIP NPK",
    0x60BB: "HBSENSORS",
    0x60BC: "ProComSol, Ltd",
    0x60BD: "HORIBA Advanced Techno",
    0x60BE: "Vivace",
    0x60BF: "Andisoon",
    0x60C0: "ELMETRO",
    0x60C1: "LIMACO",
    0x60C2: "Rhosonics Analytical BV",
    0x60C4: "STF BACS",
    0x60C5: "EMIS",
    0x60C7: "Unifire",
    0x60C8: "A3 Monitoring Ltd",
    0x60C9: "Argosy Analytics Ltd.",
    0x60CA: "VALTEK SULAMERICANA",
    0x60CB: "Elimko Ltd. Sti.",
    0x60CD: "GODA Instruments",
    0x60CE: "Festo SE & Co. KG",
    0x60D0: "Emco Controls A/S",
    0x60D3: "Rotex",
    0x60D4: "ONICON Inc",
    0x60D5: "DVG Automation",
    0x60D6: "CHENZHU INSTRUMENT",
    0x60D7: "Hoentzsch GmbH",
    0x60D8: "Chongqing ChuanYi Automation",
    0x60D9: "ANCN",
    0x60DA: "Mitsubishi Heavy Industries",
    0x60DB: "OTIS Instruments",
    0x60DC: "KANEKO SANGYO",
    0x60DD: "Kobold Messring",
    0x60DE: "SAMHOI",
    0x60E0: "The Clark-Reliance Corp.",
    0x60E1: "BALLUFF",
    0x60E2: "WNK",
    0x60E3: "SME TEC ltd",
    0x60E4: "Piezus Ltd",
    0x60E5: "G.M. International",
    0x60E6: "UniteQ Engineering BV",
    0x60E7: "Barksdale Control Products",
    0x60E8: "ERIS",
    0x60EA: "HACH",
    0x60EB: "NIVUS",
    0x60EC: "FilterSense",
    0x60ED: "BJ Huade Safety Eng.",
    0x60EE: "Guangzhou Xitai",
    0x60EF: "BELA INSTRUMENTS",
    0x60F0: "KEM Kueppers Elektromechanik",
    0x60F1: "Energoflow AG",
    0x60F2: "IGM-Detector",
    0x60F3: "WECAN INSTRUMENTS",
    0x60F4: "VZLJOT",
    0x60F5: "ROCKSENSOR",
    0x60F6: "TISSIN",
    0x60F7: "Heilongjiang Tongbao Sensor",
    0x60F8: "SBEM Pvt. Ltd.",
    0x60F9: "Noah Actuation",
    0x60FA: "NOSHOK, Inc.",
    0x60FB: "Energopribor",
    0x60FC: "POWERFLOW",
    0x60FD: "ADZ NAGANO",
    0x60FE: "LEEG",
    0x60FF: "Appleton Grp LLC",
    0x6100: "Canada Sensors Technology",
    0x6102: "EIP Enviro - Noida",
    0x6104: "NEO Monitors AS",
    0x6105: "OOO OKB VEKTOR",
    0x6106: "CENTERO",
    0x6107: "KMG Automation",
    0x6108: "CLOU",
    0x6109: "GREYLINE",
    0x610A: "DELTA CONTROLS",
    0x610B: "WISE CONTROL INC",
    0x610C: "Metal Samples",
    0x610D: "Beite Instruments",
    0x610E: "CURTO",
    0x610F: "Samil PNU",
    0x6110: "Uniphos Envirotronic Pvt Ltd",
    0x6111: "Smart Embedded Systems",
    0x6112: "Tek-Trol",
    0x6113: "YEPEF",
    0x6114: "Adept Fluidyne Pvt. Ltd.",
    0x6115: "WUXI GLT",
    0x6117: "SADI Inc.",
    0x6118: "Vibrotech Inc.",
    0x6119: "Aoxin Instrument",
    0x611A: "3-Sci",
    0x611B: "Utthunga Technologies",
    0x611C: "Syscor",
    0x611D: "Molex",
    0x611E: "SHENYANG LANSHEN INSTRUMENT",
    0x611F: "TERMOTRONIC",
    0x6120: "SENKO",
    0x6121: "Aarohi Embedded Systems Pvt Ltd",
    0x6122: "Control Data Systems SRL",
    0x6123: "SHTRAY",
    0x6124: "Toshniwal Industries",
    0x6125: "JSC EPF SIBNA",
    0x6126: "FGD",
    0x6127: "FELLOW KOGYO CO., LTD.",
    0x6128: "Motherwell Tank Gauging",
    0x6129: "Taiyuan taico cmf co.,ltd",
    0x612A: "Divigraph",
    0x612B: "Wuzhong Instrument",
    0x612C: "Chang Sung Ace Co., Ltd.",
    0x612D: "Ashcroft Instruments GmbH",
    0x612E: "Adept Fluidyne Pvt Ltd",
    0x612F: "Korosi Specindo",
    0x6130: "Diyuan",
    0x6131: "New Power",
    0x6132: "Rheonik",
    0x6133: "Aegis",
    0x6134: "SEG",
    0x6135: "Hanwei Electronics Group",
    0x6136: "GEMU",
    0x6137: "BALDOTA CONTROL",
    0x6138: "Lauris Technologies Inc.",
    0x6139: "GKS",
    0x613A: "BINDER GmbH",
    0x613B: "Micropack",
    0x613C: "Tyco Fire & Security GmbH",
    0x613D: "Optronics Technology",
    0x613E: "FOCUS-ON V.O.F.",
    0x613F: "Xingshen Instrument",
    0x6140: "Tianjin Sure Instrument",
    0x6141: "Teplocom",
    0x6142: "NPP SENSOR",
    0x6143: "GASDNA CO., LTD",
    0x6144: "Henan HongTian",
    0x6145: "SINIER",
    0x6146: "NHR",
    0x6147: "HOFFER MEASURING",
    0x6148: "Heng Jun ZDH",
    0x6149: "BRSanyuan",
    0x614A: "VNER",
    0x614B: "MORC",
    0x614C: "OGMM",
    0x614D: "SolaHD",
    0x614E: "UWT GmbH",
    0x614F: "BONRAY",
    0x6150: "SkoFlo Industries Inc.",
    0x6151: "AtomHorizon Electric",
    0x6152: "Daehan Sensor Co., Ltd.",
    0x6153: "Rettar",
    0x6154: "Prosense",
    0x6155: "CNOOC SAFETY & TECHNOLOGY",
    0x6156: "Fieldbus Inc.",
    0x6157: "Relcom, Inc.",
    0x6158: "BASS INSTRUMENTS",
    0x6159: "Elgaz",
    0x615A: "Alutal",
    0x615B: "CodeWrights GmbH",
    0x615C: "Delta-Phase Electronics",
    0x615D: "RHEONICS",
    0x615E: "Zhejiang Jingliang",
    0x615F: "Mezolen",
    0x6160: "ENELSAN",
    0x6161: "KUNLUN FUJI",
    0x6162: "JUMO AUTOMATION DALIAN",
    0x6163: "Vaisala",
    0x6164: "HYGD",
    0x6165: "UBC",
    0x6166: "INCANA",
    0x6167: "Beijing Fipor Atal Meter",
    0x6169: "AGAT NPO LLC",
    0x616A: "KSB MIL Controls Limited",
    0x616B: "XINHUI",
    0x616C: "Micro Sensor",
    0x616D: "Luoqian",
    0x616E: "Zhuhai Microcreative Tech.",
    0x616F: "CI Systems",
    0x6170: "Dongrun Instrument",
    0x6171: "Shanghai Guanghua",
    0x6172: "WeMetro",
    0x6173: "SIC17",
    0x6174: "Kinetrol",
    0x6175: "Shanghai Jingpu",
    0x6176: "Fluenta AS",
    0x6177: "HEST",
    0x6178: "ExSaf-IT Ltd.",
    0x6179: "Anhui Chicheng",
    0x617A: "QOT Inc.",
    0x617C: "Beijing Precision Wave Instrument",
    0x617D: "JNHW",
    0x617E: "BEIJING FAR EAST INSTRUMENT",
    0x617F: "PREST",
    0x6180: "LONHOT",
    0x6181: "QINGDAO ADD VALUE Company",
    0x6182: "Korea Flowmeter",
    0x6183: "Aurumsense",
    0x6184: "ShouKeShiHua",
    0x6185: "Hengli",
    0x6186: "GDS Instruments",
    0x6187: "SageSafe Technologies",
    0x6188: "MEGA-TEK",
    0x6189: "Hengchun Electronics Co",
    0x618A: "Seko",
    0x618B: "RC Systems. Inc.",
    0x618C: "COSMICROC",
    0x618D: "SDIC Microelectronics",
    0x618E: "SUYI GROUP",
    0x618F: "HIKMICRO",
    0x6190: "Kaoten Scientific",
    0x6191: "Ambetronics",
    0x6192: "KEYENCE CORPORATION",
    0x6193: "Harbin East Alarm",
    0x6194: "TianKang",
    0x6195: "Tancy",
    0x6196: "GSDT",
    0x6197: "TORLEO",
    0x6198: "Q&T Instrument",
    0x6199: "PJSC TERA",
    0x619A: "BEIJING MASTER",
    0x619B: "DHE",
    0x619C: "Yigeqi Company",
    0x619D: "IK Trax",
    0x619F: "BLD",
    0x61A0: "Endless Sensor",
    0x61A1: "VTON",
    0x61A2: "Ruike Company",
    0x61A3: "Feejoy",
    0x61A4: "Teledyne Gas and Flame Detection",
    0x61A5: "Eddyfi (Sensor Networks)",
    0x61A6: "SUTT",
    0x61A7: "WINTERS INSTRUMENTS",
    0x61A8: "Taihang Dirksen",
    0x61A9: "Bhoomi",
    0x61AA: "CHINASIMBA",
    0x61AB: "Beijing ZhongDianYiChuan",
    0x61AC: "Advanced Actuators",
    0x61AD: "LANYI",
    0x61AE: "XI'AN SENSORS",
    0x61AF: "Nanjing KELISAIKE SAFETY",
    0x61B0: "Kaifeng Weili",
    0x61B1: "Beijing Huibo Xinrui Technology",
    0x61B2: "Zhenhua",
    0x61B3: "ACI",
    0x61B4: "Acoree Nanjing Measurement",
    0x61B5: "Yinghao",
    0x61B6: "Yuchuang",
    0x61B7: "HKC IDS Co., Ltd.",
    0x61B8: "Qingdao Aubon Instrument",
    0x61B9: "XINHAOSI",
    0x61BA: "ALLRED",
    0x61BB: "Shanghai Douyun",
    0x61BC: "RegSensor",
    0x61BD: "HIKVISION",
    0x61BE: "Gemcreate",
    0x61BF: "Jiaxing Songmao",
    0x61C0: "Tianjin Wanzhong",
    0x61C1: "BOKANG Electronics",
    0x61C2: "ARFONG",
    0x61C3: "BOOCCA",
    0x61C4: "XINGYUTENG",
    0x61C5: "FRD",
    0x61C6: "TaiZhiCeKong",
    0x61C7: "Sealand",
    0x61C8: "Baite Smart Equipment",
    0x61C9: "Daqing Meilong",
    0x61CA: "Intempco",
    0x61CB: "Supmea",
    0x61CC: "JiangsuHuaerwei",
    0x61CD: "Tianhuayuan",
    0x61CE: "H&B",
    0x61CF: "PANAM",
    0x61D0: "SCHIEBEL",
    0x61D1: "Legendsemi",
    0x61D2: "Dalian Metern",
    0x61D3: "Huining Electric",
    0x61D4: "XSCT",
    0x61D5: "Chongqing Aurumsense",
    0x61D6: "mPower Electronics",
    0x61D7: "Shanghai Kenzo",
    0x61D8: "Autocontrol PI",
    0x61D9: "Suzhou Aoxiang Automation",
    0x61DA: "Ac Ins",
    0x61DB: "FCT",
    0x61DC: "IOPE Instrumentos",
}


def get_vendor_name(manufacturer_id: int) -> str:
    """Look up manufacturer name by ID.

    Args:
        manufacturer_id: HART manufacturer identifier.

    Returns:
        Manufacturer name, or ``"Unknown (0xNN)"`` if not found.
    """
    return MANUFACTURERS.get(manufacturer_id, f"Unknown (0x{manufacturer_id:02X})")
