1"""
2A collection of integer to string mappings for decoding payload information.
3
4# (c) 2020-2024 TurnAround Factor, Inc.
5#
6# CUI DISTRIBUTION CONTROL
7# Controlled by: DLA J68 R&D SBIP
8# CUI Category: Small Business Research and Technology
9# Distribution/Dissemination Controls: PROTECTED BY SBIR DATA RIGHTS
10# POC: GOV SBIP Program Manager Denise Price, 571-767-0111
11# Distribution authorized to U.S. Government Agencies only, to protect information not owned by the
12# U.S. Government and protected by a contractor’s ‘limited rights’ statement, or received with the understanding that
13# it is not routinely transmitted outside the U.S. Government (determination made September 14, 2024). Other requests
14# for this document shall be referred to ACOR DLA Logistics Operations (J-68), 8725 John J. Kingman Rd., Suite 4317,
15# Fort Belvoir, VA 22060-6221
16#
17# SBIR DATA RIGHTS
18# Contract No.:SP4701-23-C-0083
19# Contractor Name: TurnAround Factor, Inc.
20# Contractor Address: 10365 Wood Park Ct. Suite 313 / Ashland, VA 23005
21# Expiration of SBIR Data Rights Period: September 24, 2029
22# The Government's rights to use, modify, reproduce, release, perform, display, or disclose technical data or computer
23# software marked with this legend are restricted during the period shown as provided in paragraph (b)(4) of the Rights
24# in Noncommercial Technical Data and Computer Software--Small Business Innovative Research (SBIR) Program clause
25# contained in the above identified contract. No restrictions apply after the expiration date shown above. Any
26# reproduction of technical data, computer software, or portions thereof marked with this legend must also reproduce
27# the markings.
28"""
29
30from __future__ import annotations
31
32import bisect
33from enum import IntEnum
34from math import ceil
35from typing import Callable
36from typing_extensions import TypeAlias
37
38Stringify: TypeAlias = Callable[[int], str] # Function that maps strings to integers
39
40
41def bytes_map(value: int) -> str:
42 """Format as hex."""
43 return f"0x{value:02X}"
44
45
46def ascii_map(value: int) -> str:
47 """Format as an ascii string."""
48 length = max(ceil(value.bit_length() / 8), 1)
49 return value.to_bytes(length=length, byteorder="big").decode("ASCII")
50
51
52def generate_map(mapping: dict[int, str] | str | list[str]):
53 """
54 Create a function mapping integers to strings with support for ranges.
55
56 dict = Ranged mapping, for example{0: x, 4: y} == {0 to 3: x, 4: y}
57 str = all ints map to this string
58 list = Indexed mapping starting from 0, for example [w, x, y] == {0: w, 1: x, 2: y}
59 """
60
61 def mapping_func(value: int) -> str: # pylint: disable=inconsistent-return-statements
62 if isinstance(mapping, dict):
63 return list(mapping.values())[bisect.bisect_right(list(mapping.keys()), value) - 1]
64 if isinstance(mapping, str):
65 return mapping
66 if isinstance(mapping, list):
67 return mapping[value] if 0 <= value < len(mapping) else ""
68
69 return mapping_func
70
71
72integer = generate_map("")
73bool_map = generate_map(["False", "True"])
74celsius = generate_map("Celsius")
75fahrenheit = generate_map("Fahrenheit")
76seconds = generate_map("Seconds")
77minutes = generate_map("Minutes")
78hours = generate_map("Hours")
79days = generate_map("Days")
80months = generate_map("Months")
81percent = generate_map("%")
82ah = generate_map("Ah")
83volts = generate_map("Volts")
84amps = generate_map("Amps")
85watts = generate_map("Watts")
86
87
88# J1939 Addresses
89class Address(IntEnum):
90 """Some common addresses."""
91
92 FILE_SERVER_PRINTER = 248
93 DIAGNOSTIC_TOOL_2 = 249
94 DIAGNOSTIC_TOOL_1 = 250
95 ON_BOARD_DATA_LOGGER = 251
96 EXPERIMENTAL = 252
97 OEM = 253
98 NULL = 254
99 GLOBAL = 255
100
101
102addresses = generate_map(
103 {
104 0: "Unknown",
105 248: "On-board file and/or print server",
106 249: "Diagnostic tool #2", # The address for the second off board diagnostic service tool
107 250: "Diagnostic tool #1", # The address for the first off board diagnostic service tool
108 251: "On-board data logger",
109 252: "Experimental",
110 253: "OEM",
111 254: "Null", # Only for use in J1939-81 to indicate the controller has not yet successfully claimed an address
112 255: "Global", # Indicates the J1939 message is being sent to all controllers
113 }
114)
115
116
117# Name
118industry_group = generate_map(
119 {
120 0: "Global, applies to all",
121 1: "On-Highway Equipment",
122 2: "Agricultural and Forestry Equipment",
123 3: "Construction Equipment",
124 4: "Marine",
125 5: "Industrial-Process Control-Stationary (Gen-Sets)",
126 6: "Reserved",
127 }
128)
129
130vehicle_system = generate_map(
131 {
132 0: "Unknown",
133 127: "Not Available",
134 128: "Unknown",
135 }
136)
137
138function_id = generate_map(
139 {
140 0: "Engine",
141 1: "Auxiliary Power Unit (APU)",
142 2: "Electric Propulsion Control",
143 3: "Transmission",
144 4: "Battery Pack Monitor",
145 5: "Shift Control/Console",
146 6: "Power TakeOff - (Main or Rear)",
147 7: "Axle - Steering",
148 8: "Axle - Drive",
149 9: "Brakes - System Controller",
150 10: "Brakes - Steer Axle",
151 11: "Brakes - Drive axle",
152 12: "Retarder - Engine",
153 13: "Retarder - Driveline",
154 14: "Cruise Control",
155 15: "Fuel System",
156 16: "Steering Controller",
157 17: "Suspension - Steer Axle",
158 18: "Suspension - Drive Axle",
159 19: "Instrument Cluster",
160 20: "Trip Recorder",
161 21: "Cab Climate Control",
162 22: "Aerodynamic Control",
163 23: "Vehicle Navigation",
164 24: "Vehicle Security",
165 25: "Network Interconnect ECU",
166 26: "Body Controller",
167 27: "Power TakeOff (Secondary or Front)",
168 28: "Off Vehicle Gateway",
169 29: "Virtual Terminal (in cab)",
170 30: "Management Computer",
171 31: "Propulsion Battery Charger",
172 32: "Headway Controller",
173 33: "System Monitor",
174 34: "Hydraulic Pump Controller",
175 35: "Suspension - System Controller",
176 36: "Pneumatic - System Controller",
177 37: "Cab Controller",
178 38: "Tire Pressure Control",
179 39: "Ignition Control Module",
180 40: "Seat Control",
181 41: "Lighting - Operator Controls",
182 42: "Water Pump Control",
183 43: "Transmission Display",
184 44: "Exhaust Emission Control",
185 45: "Vehicle Dynamic Stability Control",
186 46: "Oil Sensor Unit",
187 47: "Information System Controller",
188 48: "Ramp Control",
189 49: "Clutch/Converter Control",
190 50: "Auxiliary Heater",
191 51: "Forward-Looking Collision Warning System",
192 52: "Chassis Controller",
193 53: "Alternator/Charging System",
194 54: "Communications Unit, Cellular",
195 55: "Communications Unit, Satellite",
196 56: "Communications Unit, Radio",
197 57: "Steering Column Unit",
198 58: "Fan Drive Control",
199 59: "Starter",
200 60: "Cab Display",
201 61: "File Server / Printer",
202 62: "On-Board Diagnostic Unit",
203 63: "Engine Valve Controller",
204 64: "Endurance Braking",
205 65: "Gas Flow Measurement",
206 66: "I/O Controller",
207 67: "Electrical System Controller",
208 68: "Aftertreatment system gas measurement",
209 69: "Engine Emission Aftertreatment System",
210 70: "Auxiliary Regeneration Device",
211 71: "Transfer Case Control",
212 72: "Coolant Valve Controller",
213 73: "Rollover Detection Control",
214 74: "Lubrication System",
215 75: "Supplemental Fan",
216 76: "Temperature Sensor",
217 77: "Fuel Properties Sensor",
218 78: "Fire Suppression System",
219 79: "Power Systems Manager",
220 80: "Electric Powertrain",
221 81: "Hydraulic Powertrain",
222 82: "File Server",
223 83: "Printer",
224 84: "Start Aid Device",
225 85: "Engine Injection Control Module",
226 86: "Reserved",
227 }
228)
229
230manufacturer_id = generate_map(
231 {
232 0: "Reserved",
233 1: "Bendix Commercial Vehicle Systems LLC (formerly Allied Signal Inc.)",
234 2: "Allison Transmission, Inc.",
235 3: "Ametek, US Gauge Division",
236 4: "Ametek-Dixson",
237 5: "AMP Inc.",
238 6: "Berifors Electronics AB",
239 7: "Case Corp.",
240 8: "Caterpillar Inc.",
241 9: "Chrysler Corp.",
242 10: "Cummins Inc (formerly Cummins Engine Co)",
243 11: "Dearborn Group Inc.",
244 12: "Deere & Company, Precision Farming",
245 13: "Delco Electronics",
246 14: "Detroit Diesel Corporation",
247 15: "DICKEY-john Corporation",
248 16: "Eaton Corp",
249 17: "Eaton Corp, Corp Res & Dev",
250 18: "Eaton Corp, Transmission Div.",
251 19: "Eaton Corp. Trucking Info Services",
252 20: "Eaton Ltd",
253 21: "Echlin Inc., Midland Brake Inc.",
254 22: "Ford Motor Co., Electronic Concepts & Systems",
255 23: "Ford Motor Co., Heavy Truck",
256 24: "Ford Motor Co., Vehicle Controls",
257 25: "Daimler Trucks North America LLC (formerly Freightliner LLC)",
258 26: "General Motors Corp, Service Technology Grp",
259 27: "GMC",
260 28: "Grote Ind. Inc.",
261 29: "Hino Motors Ltd.",
262 30: "Isuzu Motors Ltd",
263 31: "J Pollak Corp",
264 32: "Jacobs Vehicle Systems",
265 33: "John Deere",
266 34: "Kelsey Hayes Co.",
267 35: "Kenworth Truck Co.",
268 36: "Lucas Ind.",
269 37: "Mack Trucks Inc.",
270 38: "Micro Processor Systems Inc.",
271 39: "Microfirm Inc.",
272 40: "Motorola AIEG Inc.",
273 41: "Motorola Inc.",
274 42: "International Truck and Engine Corporation - Engine Electronics "
275 "(formerly Navistar Intl Trans Co., Engine Electronics)",
276 43: "International Truck and Engine Corporation - Vehicle Electronics (formerly Navistar Intl Trans Corp.)",
277 44: "Nippondenso Co. Ltd.",
278 45: "PACCAR",
279 46: "Noregon Systems, Inc (formerly Parasoft Computing Solutions)",
280 47: "Phillips Semiconductor",
281 48: "Pollak Alphabet",
282 49: "RE America Inc.",
283 50: "Robert Bosch Corp",
284 51: "Robert Bosch GmbH",
285 52: "Meritor Automotive, Inc. (formerly Rockwell Automotive)",
286 53: "Continental Automotive Systems US, Inc. (formerly Rockwell Land Transportation)",
287 54: "Meritor Wabco",
288 55: "Ryder System Inc.",
289 56: "SAIC",
290 57: "Danfoss (formerly Sauer Sundstrand Co, then Sauer-Danfoss Co)",
291 58: "SPX Corporation, OTC Div",
292 59: "VES Inc.",
293 60: "Volvo Trucks North America Inc.",
294 61: "Volvo Truck Corp.",
295 62: "Wabco",
296 63: "ZF Industries Inc.",
297 64: "Unused (formerly SpectraPrecision Laserplane, then SpectraPhysics)",
298 65: "MAN Nutzfahrzeuge AG",
299 66: "John Deere Construction Equipment Division",
300 67: "John Deere Coffeyville Works (formerly Funk Manufacturing Company)",
301 68: "Scania",
302 69: "Trimble Navigation",
303 70: "Flex-coil Limited",
304 71: "Vansco Electronics Ltd.",
305 72: "Sisu Corporation",
306 73: "LeTourneau, Inc.",
307 74: "Eaton Axle-Brake Division",
308 75: "Deere & Co, Agricultural Division",
309 76: "unused (formerly Deere & Co, Construction Division)",
310 77: "Deere Power Systems Group",
311 78: "Frank W. Murphy Manufacturing, Inc",
312 79: "Daimler Benz AG - Engine Division (PBM)",
313 80: "Twin Disc, Inc.",
314 81: "Fire Research Corp.",
315 82: "Bobcat/Ingersoll-Rand (formerly Melroe/Ingersoll-Rand)",
316 83: "Bendix VORAD Technologies (formerly Eaton VORAD Technologies)",
317 84: "New Holland UK Limited",
318 85: "Kohler Co",
319 86: "C. E. Niehoff & Company",
320 87: "J.C. Bamford Excavators Ltd (JCB)",
321 88: "Hemisphere GPS Inc (formerly Satloc Precision GPS)",
322 89: "Kverneland Group, Electronics Division",
323 90: "Knorr-Bremse SfN GmbH",
324 91: "BSG Bodensee Steuergeraete GmbH",
325 92: "Ag-Chem Equipment Co., Inc.",
326 93: "Perkins Engines Company Ltd.",
327 94: "CNH Industrial N.V. (formerly CNH Global N.V.)",
328 95: "Pacific Insight Electronics Corp.",
329 96: "Mech@tronic IT GmbH",
330 97: "Ag Leader Technology, Inc.",
331 98: "Mueller-Elektronik GmbH & Co",
332 99: "International Transmissions Ltd (ITL)",
333 100: "VDO Technik AG",
334 101: "Sensoria",
335 102: "AGCO (formerly AGCO GmbH & Co.)",
336 103: "CLAAS E-Systems KGaA mbH & Co. KG (formerly CLAAS Agrosystems GmbH & Co. KG)",
337 104: "CLAAS KGaA mbH (formerly CLAAS Selbstfahrende Erntemaschinen GmbH)",
338 105: "Kiepe Elektrik GmbH & Co. KG",
339 106: "BAE Systems Controls, Inc.",
340 107: "Grimme Landmaschinen GmbH & Co. KG",
341 108: "WTK-Elecktronik GmbH",
342 109: "TeeJet Technologies Denmark (formerly LH Technologies ApS)",
343 110: "EPIQ Sensor-Nite",
344 111: "Maschinenfabrik Bernard Krone GmbH",
345 112: "MECALAC",
346 113: "Stress-Tek, Inc.",
347 114: "EControls, Inc.",
348 115: "NACCO Materials Handling Group, Inc.",
349 116: "BEELINE Technologies",
350 117: "HUSCO International",
351 118: "Intron GmbH",
352 119: "IntegriNautics ",
353 120: "RDS Technology Ltd",
354 121: "HED (Hydro Electronic Devices, Inc.)",
355 122: "FG Wilson (Engineering) Limited",
356 123: "Basler Electric",
357 124: "Hydac Electronic",
358 125: "Nevada Automotive Test Center",
359 126: "Driver Tech",
360 127: "Holland USA",
361 128: "Gerhard Duecker GmbH & Co. KG",
362 129: "OMNEX Control Systems Inc.",
363 130: "Nido - Universal Machines B.V.",
364 131: "ITT Industries",
365 132: "Mulag-Fahrzeugwerk",
366 133: "Bucher Schoerling GmbH",
367 134: "Iris Technology Ltd",
368 135: "Airmar Technology Corporation",
369 136: "Komatsu Ltd",
370 137: "Maretron",
371 138: "Georg Fritzmeier GmbH & Co. KG",
372 139: "Caterpillar Trimble Control Technologies (CTCT), LLC",
373 140: "Lowrance Electronics, Inc.",
374 141: "Thales Navigation Ltd.",
375 142: "TRW Automotive (Commercial Steering Systems)",
376 143: "W. Gmeiner GmbH & Co.",
377 144: "Mercury Marine",
378 145: "MurCal Controls",
379 146: "Maxima Technologies",
380 147: "Nautibus electronic GmbH",
381 148: "Blue Water Data, Inc.",
382 149: "Holset",
383 150: "Fleetguard",
384 151: "Raven Industries, Inc.",
385 152: "elobau GmbH & Co. KG",
386 153: "Woodward, Industrial Controls Division",
387 154: "Westerbeke Corporation",
388 155: "Vetronix Corporation",
389 156: "ITT Industries - Cannon",
390 157: "ISSPRO Inc.",
391 158: "Firestone Industrial Products Company",
392 159: "NTech Industries Inc",
393 160: "Nido",
394 161: "Offshore Systems (UK) Ltd",
395 162: "Axiomatic Technologies",
396 163: "BRP Inc.",
397 164: "MTU Friedrichshafen GmbH (formerly DaimlerChrysler Off-Highway)",
398 165: "CPAC Systems AB",
399 166: "John Deere Electronic Solutions (formerly Phoenix International)",
400 167: "JLG Industries Inc",
401 168: "Xantrex",
402 169: "Marlin Technologies Inc.",
403 170: "Computronics Corporation Ltd.",
404 171: "Topcon Electronics GmbH & Co. KG (formerly Wachendorff Elektronik GmbH & Co. KG)",
405 172: "Yanmar Co., Ltd. (formerly Yanmar Marine USA)",
406 173: "Ryeso, Inc.",
407 174: "AB Volvo Penta",
408 175: "Veris Technologies, Inc.",
409 176: "Moritz Aerospace",
410 177: "Diagnostic Systems Associates",
411 178: "Continental Automotive GmbH (formerly Siemens VDO Automotive AG)",
412 179: "TeeJet Technologies Springfield (formerly Midwest Technologies Illinois, LLC)",
413 180: "Smart Power Systems",
414 181: "Coretronics, Inc.",
415 182: "Vehicle Systems Engineering B.V.",
416 183: "KDS Controls, Inc",
417 184: "EIA Electronics",
418 185: "Beede Electrical Instrument Company",
419 186: "Altronic, Inc",
420 187: "Air-Weigh",
421 188: "EMP Corp",
422 189: "QUALCOMM",
423 190: "Hella KGaA Hueck & Co",
424 191: "XRS Corporation (formerly XATA Corporation)",
425 192: "Floscan",
426 193: "Jeppesen Marine",
427 194: "TriMark Corporation",
428 195: "General Engine Products",
429 196: "LEMKEN GmbH & Co KG",
430 197: "Mechron Power Systems",
431 198: "Mystic Valley Communications",
432 199: "ACTIA Group (formerly Actia Corp)",
433 200: "MGM Brakes",
434 201: "Disenos y Tecnologia S.A.",
435 202: "Curtis Instruments, Inc",
436 203: "MILtronik GmbH",
437 204: "The Morey Corporation",
438 205: "SmarTire Systems Inc",
439 206: "port GmbH",
440 207: "Otto Engineering",
441 208: "Drew Technologies, Inc",
442 209: "Bell Equip. Co. SA (PTY) LTD",
443 210: "Iteris, Inc.",
444 211: "DNA Group",
445 212: "Sure Power Industries, Inc",
446 213: "CNH Belgium N.V.",
447 214: "MC elettronica Srl",
448 215: "Aetna Engineering/Fireboy-Xintex",
449 216: "Paneltronics Inc.",
450 217: "RM Michaelides Software & Elektronik GmbH",
451 218: "Gits Manufacturing Company",
452 219: "Cat OEM Solutions",
453 220: "Beede Electrical Instrument Company, Inc",
454 221: "SiE",
455 222: "Generac Power Systems, Inc.",
456 223: "Vaueo Retarder Co., Ltd.",
457 224: "EMMI Network, S.L.",
458 225: "SKF",
459 226: "Monaco Coach Corporation",
460 227: "Lykketronic A/S",
461 228: "Unused (formerly ZF Marine Electronics)",
462 229: "Garmin International Inc.",
463 230: "Saucon Technologies",
464 231: "Topcon Positioning Systems, Inc.",
465 232: "TSD Integrated Controls",
466 233: "Yacht Monitoring Solutions Inc.",
467 234: "Mondial electronic GmbH",
468 235: "SailorMade Marine Telemetry - Tetra Technology Ltd.",
469 236: "NORAC Systems International Inc",
470 237: "Agtron Enterprises Inc",
471 238: "ZF Friedrichshafen AG",
472 239: "May & Scofield Ltd",
473 240: "Vanair Mfg",
474 241: "Schneider Automation SAS",
475 242: "Kokusandenki Co. Ltd",
476 243: "eRide, Inc.",
477 244: "Techno-Matic",
478 245: "Capstan Ag Systems, Inc.",
479 246: "Class 1, Inc",
480 247: "ePULSE",
481 248: "Cooper Standard Automotive Active Systems Group",
482 249: "Schaltbau GmbH",
483 250: "Kuhn Group",
484 251: "German Agricultural Society, Test Center (DLG)",
485 252: "Sensor-Technik Wiedemann GmbH",
486 253: "Mobile Control Systems",
487 254: "GE Sensing",
488 255: "MEAS France",
489 256: "Tyco Electronics AMP",
490 257: "Honda Motor Co., Ltd",
491 258: "ARAG",
492 259: "Jetter AG",
493 260: "Reichhardt GmbH Steuerungstechnik",
494 261: "Red Dot Corporation",
495 262: "HydraForce, Inc",
496 263: "IMMI",
497 264: "Autolync",
498 265: "MTS Sensor Technologie GmbH",
499 266: "International Thermal Research Ltd",
500 267: "Red Lion Controls, Inc",
501 268: "Accurate Technologies",
502 269: "Saft America Inc., Space & Defense Division",
503 270: "Tennant",
504 271: "Cole Hersee",
505 272: "Gross Mechanical Laboratories, Inc",
506 273: "Active Research Limited",
507 274: "LTW Technology Co., LTD",
508 275: "Navico Egersund AS",
509 276: "Aqua-Hot Heating Systems",
510 277: "LHP Telematics",
511 278: "Takata Electronics",
512 279: "Geometris LP",
513 280: "Leica Geosystems Pty Ltd",
514 281: "Precision Governors LLC",
515 282: "Medallion Instrumentation Systems",
516 283: "CWF Hamilton & Co Ltd",
517 284: "Mobile Tech Chile",
518 285: "Sea Recovery Corp",
519 286: "Coelmo srl",
520 287: "NTech Industries, Inc",
521 288: "Mitsubishi FUSO Truck & Bus Corp.",
522 289: "Watlow",
523 290: "Kuebler GmbH",
524 291: "Groeneveld Transport Efficiency BV",
525 292: "IKUSI - Angel Iglesias S.A.",
526 293: "Spyder Controls Corp.",
527 294: "Grayhill Inc.",
528 295: "BEP Marine",
529 296: "micro dynamics GmbH",
530 297: "Zonar Systems Inc",
531 298: "Holley Performance",
532 299: "Rauch",
533 300: "Systron Donner Automotive",
534 301: "Parker Hannifin (UK) Ltd FDE group",
535 302: "Nissin Kogyo Co., LTD",
536 303: "CTS Corporation",
537 304: "EmpirBus AB",
538 305: "NovAtel Inc",
539 306: "Sleipner Motor AB",
540 307: "MAS Technologies",
541 308: "Cyntrx",
542 309: "Krauss-Maffei Wegmann GmbH & Co. KG",
543 310: "TECNORD srl",
544 311: "Patrick Power Products",
545 312: "Lectronix, Inc.",
546 313: "Ilmor Engineering, Inc.",
547 314: "CSM GmbH",
548 315: "Icom Incorporated",
549 316: "ITT Flow Control",
550 317: "Navtronics Bvba",
551 318: "SAT Plan",
552 319: "Cadec Global",
553 320: "Miedema Landbouwwerktuigenfabriek B.V.",
554 321: "Ultra Electronics, Electrics",
555 322: "MICHENKA s.r.o.",
556 323: "Mobileye Vision Technologies Ltd.",
557 324: "Snap-on Diagnostics",
558 325: "ASM Automation Sensorik Messtechnik GmbH",
559 326: "Akron Brass Company",
560 327: "Sonceboz SA",
561 328: "Qwerty Electronik AB",
562 329: "Deif A/S",
563 330: "Kidde Aerospace and Defense",
564 331: "Horton, Inc.",
565 332: "HWH Corporation",
566 333: "Hadley Products Corporation",
567 334: "Takata-Petri AG",
568 335: "Evo Electric Ltd",
569 336: "APE s.r.o.",
570 337: "Carraro S.p.A.",
571 338: "GRAF-SYTECO",
572 339: "Competence Center ISOBUS e.V.",
573 340: "Continental AG",
574 341: "Boning GmbH & Co",
575 342: "THOMAS MAGNETE GmbH",
576 343: "Baumer Group",
577 344: "Parvus Corporation",
578 345: "Korean Maritime University",
579 346: "Control Solutions",
580 347: "Honeywell",
581 348: "Amazonen Werke H. Dreyer",
582 349: "Suonentieto",
583 350: "Noris Marine Systems GmbH & Co KG",
584 351: "Thrane & Thrane",
585 352: "SAME DEUTZ-FAHR GROUP S.p.A.",
586 353: "Hegemon Electronics, Inc.",
587 354: "Junkkari OY",
588 355: "Mastervolt International B.V.",
589 356: "Fischer Panda Generators, Inc",
590 357: "Hardi International A/S",
591 358: "Victron Energy B.V.",
592 359: "Ludwig Bergmann GmbH",
593 360: "HJS Emission Technology GmbH & Co KG (formerly HJS Fahrzeugtechnik GmbH & Co KG)",
594 361: "InMach",
595 362: "Poettinger Landtechnik GmbH (formerly Alois Poettinger Maschinenfabrik GmbH)",
596 363: "BEI Duncan",
597 364: "OEM Controls Inc.",
598 365: "Digi-Star, LLC",
599 366: "Viewnyx Corp.",
600 367: "Fliegl Agrartechnik",
601 368: "HANSENHOF_electronic",
602 369: "Power Torque Engineering Ltd",
603 370: "Rolls-Royce Marine AS",
604 371: "Heinzmann GmbH & Co. KG",
605 372: "Delphi",
606 373: "Electronic Design Inc.",
607 374: "Northern Lights, Inc.",
608 375: "Williams Controls Inc.",
609 376: "Quake Global",
610 377: "ifm electronic gmbh",
611 378: "Glendinning Marine Products",
612 379: "Yamabiko Corporation",
613 380: "Suntech International Ltd.",
614 381: "B & G",
615 382: "National Agriculture and Food Research Organization",
616 383: "MCL Industries",
617 384: "Camano Light",
618 385: "Johnson Outdoor Marine Electronics",
619 386: "JLG Automation BVBA",
620 387: "Orscheln Products, LLC",
621 388: "Innomatix, LLC",
622 389: "Benchmark Electronics, Minnesota Division",
623 390: "Partech Inc.",
624 391: "Electronic Design for Industry, Inc",
625 392: "Tianyuan Technology Co Ltd.",
626 393: "Harvest Tec, Inc",
627 394: "Capi 2 Nederland B.V.",
628 395: "GENTEC S.R.L.",
629 396: "Beyond Measure",
630 397: "Sanyo-kiki Co Ltd.",
631 398: "Hilite International",
632 399: "ISEKI & Co., Ltd.",
633 400: "Livorsi Marine",
634 401: "Torqeedo GmbH",
635 402: "Simma Software, Inc.",
636 403: "Trackwell ADS, Inc.",
637 404: "Com Nav Marine Ltd",
638 405: "Wema System AS",
639 406: "Vecima Networks Inc.",
640 407: "Comtech Mobile Datacom",
641 408: "Corvus Energy Ltd.",
642 409: "Transfluid S.r.L.",
643 410: "COBO S.p.A. Divisione 3B6",
644 411: "Hy-Drive Technologies Ltd.",
645 412: "WebTech Wireless Inc.",
646 413: "Datapross Nijbroek bv",
647 414: "Cattron Group International",
648 415: "Valid Manufacturing Ltd.",
649 416: "Kubota Corporation",
650 417: "KZValve",
651 418: "Intellistick Inc",
652 419: "Fusion Electronics Ltd",
653 420: "Vermeer Corporation, ACS Group",
654 421: "Vertex Standard Co, Ltd",
655 422: "True Heading AB",
656 423: "BSM Wireless, Inc.",
657 424: "Odyne LLC",
658 425: "Methode Electronics Inc, MDI",
659 429: "Rota Engineering Ltd.",
660 430: "Auteq Telematica S.A.",
661 431: "Tohatsu Corporation",
662 432: "S&A Systems, Inc.",
663 433: "Rowe Electronics",
664 434: "Stored Energy Systems",
665 435: "Zunhammer GmbH",
666 436: "Kinze Manufacturing",
667 437: "Digital Yacht Limited",
668 438: "Comar Systems Ltd",
669 439: "Hyundai Heavy Industries",
670 440: "Cummins Power Generation",
671 441: "PTG Reifendruckregelsysteme GmbH",
672 442: "Horsch Maschinen GmbH",
673 443: "SignalQuest, Inc.",
674 444: "ITT Power Solutions",
675 445: "KAT MECHATRONIC, Electronic Product Division",
676 446: "CertTech, L.L.C.",
677 447: "Great Plains Mfg.",
678 448: "Stanadyne Corporation, Electronics Systems",
679 449: "Polaris Industries Inc",
680 450: "Dycor Technologies Ltd.",
681 451: "Parker Hannifin Corp",
682 452: "WIKA Alexander Wiegand SE & Co. KG",
683 453: "Cooper Bussmann",
684 454: "NGK Spark Plug Co. Ltd",
685 455: "ADZ NAGANO GmbH",
686 456: "General Kinetics",
687 457: "RUSELPROM-ElectricDrive Ltd",
688 458: "Control Solutions, Inc.",
689 459: "Alltek Marine Electronics Corp",
690 460: "San Giorgio S.E.I.N.",
691 461: "HAWE Hydraulik SE",
692 462: "IHI Shibaura Machinery Corporation",
693 463: "PROBOTIQ",
694 464: "Leach International Corporation",
695 465: "Ashcroft Inc",
696 466: "Veethree Electronics and Marine LLC",
697 467: "Lely Industries N.V.",
698 468: "Tyco Fire Protection Products",
699 469: "RA Consulting GmbH",
700 470: "SI-TEX Marine Electronics",
701 471: "Sea Cross Marine AB",
702 472: "Tenneco Inc.",
703 473: "Boss Industries, Inc.",
704 474: "Persen Technologies Inc.",
705 475: "GME",
706 476: "Hummingbird Marine Electronics",
707 477: "OilQuick AB",
708 478: "OceanSat B.V.",
709 479: "Vapor Bus International",
710 480: "EnerDel, Inc.",
711 481: "Chetco Digital Instruments",
712 482: "Tricon Electronics",
713 483: "Valeo",
714 484: "Headsight Inc.",
715 485: "MATT automotive",
716 486: "Westport Innovations Inc.",
717 487: "DSE Test Solutions A/S",
718 488: "The Charles Machine Works, Inc.",
719 489: "Appareo Systems, LLC",
720 490: "QuikQ",
721 491: "Penny and Giles Ltd",
722 492: "Inergy Automotive Systems",
723 493: "Watcheye",
724 494: "Synerject",
725 495: "HOLMER Maschinenbau GmbH",
726 496: "W. Gessmann GmbH",
727 497: "SENTRON Sistemas Embarcados",
728 498: "Innovative Design Solutions, Inc.",
729 499: "LCJ Capteurs",
730 500: "Oxbo International Corporation",
731 501: "Agrotronix S.A.",
732 502: "Attwood Corporation",
733 503: "Naviop S.R.L.",
734 504: "Vesper Marine",
735 505: "Yetter Farm Equipment",
736 506: "IHI STAR Machinery Corporation",
737 507: "ISOBUS Test Center",
738 508: "Transtech Innovations",
739 509: "MOTORTECH GmbH",
740 510: "Marinesoft Co. Ltd",
741 511: "Sulky",
742 512: "Inpower LLC",
743 513: "FarmscanAg",
744 514: "DISTek Integration, Inc.",
745 515: "GINAF Trucks Nederland B.V.",
746 516: "AVAT Automation GmbH",
747 517: "Noland Engineering",
748 518: "Transas USA Inc.",
749 519: "Peeters Landbouwmachines b.v.",
750 520: "Trapeze",
751 521: "Clever Devices Ltd.",
752 522: "Nebraska Tractor Test Laboratory",
753 523: "Reggio Emilia Innovazione",
754 524: "Vomax Instrumentation Pty. Ltd.",
755 525: "Rust Sales INC",
756 526: "LOFA Industries, Inc",
757 527: "GKN Walterscheid GmbH",
758 528: "Hoganas AB, Electric Drive Systems",
759 529: "National Instruments Korea",
760 530: "NMEA",
761 531: "Genge & Thoma AG",
762 532: "Onwa Marine Electronics Co Ltd.",
763 533: "Doran Manufacturing, LLC",
764 534: "Webasto Thermo & Comfort SE",
765 535: "MOTORPAL, a.s.",
766 536: "SSI Technologies",
767 537: "Schrader Electronics Ltd.",
768 538: "Crop Ventures, Inc.",
769 539: "Mobileview",
770 540: "Dinex A/S",
771 541: "Total Fire Systems, Inc.",
772 542: "Dinamica Generale s.p.a.",
773 543: "BAUER Maschinen GmbH",
774 544: "Au Group Electronics",
775 545: "GS Hydraulics",
776 546: "Maruyama Mfg Co, Inc.",
777 547: "Thomson Linear LLC",
778 548: "TM4 Inc.",
779 549: "ROAD Deutschland GmbH",
780 550: "SUN-A Corporation",
781 551: "Wexler CSD Ltd.",
782 552: "Matsuyama Plow Mfg Co, Ltd",
783 553: "KIB Electronics",
784 554: "iris-GmbH infrared & intelligent sensors",
785 555: "Sasaki Corporation",
786 556: "Doosan Infracore Norway",
787 557: "Rockson Automation GmbH",
788 558: "Davis Instruments Corp.",
789 559: "Four Peaks Navigation",
790 560: "Iowa State University, Agricultural and Biosystems Engineering",
791 561: "b-plus GmbH",
792 562: "Bombardier Transportation GmbH",
793 563: "LOHR Sistemas Eletronicos LTDA",
794 564: "Auto Power Electronic",
795 565: "Micro-Trak Systems, Inc.",
796 566: "Geode Technology, Inc.",
797 567: "Lithiumstart LLC",
798 568: "Makersan Ltd. Co.",
799 569: "LORD MicroStrain Sensing Systems",
800 570: "frenzel + berg electronic GmbH & Co. KG",
801 571: "Marinecraft Co., Ltd.",
802 572: "Fasse Valves",
803 573: "Orolia Ltd",
804 574: "Vishay Precision Group",
805 575: "Lytx",
806 576: "Vectia",
807 577: "Denchi Power Ltd (formerly ABSL Power Solutions Limited)",
808 578: "advanSea",
809 579: "KVH Industries, Inc.",
810 580: "San Jose Technology, Inc.",
811 581: "Väderstad - Verken AB",
812 582: "Innovative Software Engineering",
813 583: "Yachtcontrol",
814 584: "CarMedialab GmbH",
815 585: "Industrial Electronic Controls",
816 586: "Suzuki Motor Corp",
817 587: "JCA Electronics",
818 588: "Vignal Systems",
819 589: "MICO, Inc.",
820 590: "ARGO-HYTOS GMBH",
821 591: "United States Coast Guard",
822 592: "tecsis GmbH",
823 593: "Sensata Technologies",
824 594: "Kongsberg Automotive",
825 595: "CustomWare",
826 596: "Brunelco Electronic Innovators B.V.",
827 597: "Hydac Filter Systems GmbH",
828 598: "ABB Turbo Systems Ltd",
829 599: "Spudnik Equipment Co, LLC",
830 600: "Aquatic AV",
831 601: "Navitas Systems",
832 602: "Nomad Digital Ltd.",
833 603: "Kereval",
834 604: "Indexator Rototilt Systems AB",
835 605: "Aventics GmbH",
836 606: "Intellian Technologies",
837 607: "Knappco/Civacon",
838 608: "Gale Banks Engineering",
839 609: "Walvoil S.p.A.",
840 610: "Trail Tech",
841 611: "Esterline",
842 612: "Samwon IT",
843 613: "HKS Co., Ltd.",
844 614: "ARLT Technologies GmbH",
845 615: "Networkfleet, Verizon Telematics",
846 616: "SMART-TEC s.r.o.",
847 617: "Zero Emission Vehicles",
848 618: "Evrard SA",
849 619: "Right Weigh Load Scales",
850 620: "Sevcon Ltd.",
851 621: "Hagie Manufacturing Company",
852 622: "Floyd Bell Inc",
853 623: "Xirgo Technologies",
854 624: "Blackbox Machine Control Pty Ltd",
855 625: "Global MRV Inc.",
856 626: "AVL DiTEST GmbH",
857 627: "Radio Ocean",
858 628: "Falck Schmidt Defence Systems",
859 629: "Agri Info Design, Ltd.",
860 630: "SmartDrive Systems Inc.",
861 631: "Reltima",
862 632: "Pepperl+Fuchs GmbH",
863 633: "TORC Robotics",
864 634: "Rocky Research",
865 635: "Argo Tractors S.p.A.",
866 636: "Divelbiss Corporation",
867 637: "Bavaria Yachtbau GmbH",
868 638: "KVH Industries, Inc.",
869 639: "Startec s.r.l.",
870 640: "Power Solutions International",
871 641: "Diverse Yacht Services",
872 642: "Moog / Aspen Motion Technologies",
873 643: "Bogballe A/S",
874 644: "KUS USA",
875 645: "esd electronic system design gmbh",
876 646: "Veenhuis Machines B.V.",
877 647: "Siloking",
878 648: "OJSC Ekran",
879 649: "Control-Q B.V.",
880 650: "Seiko Epson Corp.",
881 651: "Takakita Co, Ltd.",
882 652: "MicroControl GmbH & Co. KG",
883 653: "AEV, spol. s r. o.",
884 654: "Kohler Power Systems, Detroit Engine Development Center (DEDC)",
885 655: "Genge & Thoma AG",
886 656: "PRO SOLUS do Brasil",
887 657: "Terzo Power Systems",
888 658: "Shenzhen Jiuzhou Himunication Technology Co., Ltd",
889 659: "Data Panel Corp.",
890 660: "Auto-Gaz Centrum",
891 661: "SPAL Automotive S.r.l.",
892 662: "Kissling Elektrotechnik GmbH",
893 663: "Delta Systems, Inc",
894 664: "Level Developments Ltd",
895 665: "Gebr. Bode GmbH & Co. KG",
896 666: "Schaeffler Technologies AG & Co., KG",
897 667: "Bartec",
898 668: "MacDon Industries Ltd.",
899 669: "Quantum Fuel Systems Technologies Worldwide, Inc",
900 670: "STEMCO LP",
901 671: "Innovative Controls Inc.",
902 672: "OPTIMA Concept",
903 673: "Caruelle Nicolas",
904 674: "Yara International ASA",
905 675: "Kawasaki Motors Corp., USA",
906 676: "Danfoss IXA A/S",
907 677: "DSA Daten- und Systemtechnik GmbH",
908 678: "KeepTruckin, Inc.",
909 679: "Cimco Marine AB",
910 680: "AMVAC Chemical Corporation",
911 681: "BEDIA Motorentechnik GmbH & Co. KG",
912 682: "Eckelmann AG",
913 683: "Fosen Elektro",
914 684: "KEB",
915 685: "ANEDO Ltd.",
916 686: "Taigene Electric Machinery Corp.",
917 687: "Flight Systems, Inc.",
918 688: "Rockford Corp",
919 689: "Aarcomm Systems Inc",
920 690: "LINAK A/S",
921 691: "Digitroll Agricultural Electronics",
922 692: "Tanhay Corporation",
923 693: "Agility Fuel Solutions (formerly Agility Fuel Systems)",
924 694: "GasTOPS Ltd.",
925 695: "Weldon Technologies",
926 696: "DRS Network & Imaging Systems, LLC (DRS Technologies)",
927 697: "Ålö AB",
928 698: "Scorpion Technologies Ltd.",
929 699: "Harman International Industries",
930 700: "K-Tec Earthmovers Inc.",
931 701: "BigRoad Inc.",
932 702: "Weichai Power Co., Ltd.",
933 703: "Hydro Tab Marine Engineering",
934 704: "JL Audio, Inc.",
935 705: "SVAB Hydraulik AB",
936 706: "Shanghai Diesel Engine Corporation Limited",
937 707: "Rochester Gauges Inc",
938 708: "Lars Thrane A/S",
939 709: "Marquardt GmbH",
940 710: "Greentronics Ltd.",
941 711: "DAS Co., LTD",
942 712: "LOR Manufacturing Company Inc.",
943 713: "US Hybrid Corporation",
944 714: "Kobashi Kogyo Co., Ltd.",
945 715: "Autonnic Research Ltd",
946 716: "Eaton Control & Power Conversion Division (CPCD)",
947 717: "Yacht Devices Ltd",
948 718: "Micronet Inc",
949 719: "Cojali S. L.",
950 720: "WITZ Corporation",
951 721: "Hypro",
952 722: "Contelec AG",
953 723: "Jabil Inc.",
954 724: "Electronic Applications, Inc.",
955 725: "Hitachi Construction Machinery Co., Ltd.",
956 726: "MIDORI PRECISIONS",
957 727: "Dhoot Transmission Pvt Ltd.",
958 728: "Streumaster / Panien",
959 729: "Liebherr",
960 730: "BERTHOUD AGRICOLE",
961 731: "Modine Manufacturing Company",
962 732: "Gefran S.p.A.",
963 733: "Intendia S.L.",
964 734: "REAPsystems",
965 735: "AEM Performance Electronics",
966 736: "Terex Aerial Work Platforms - Genie",
967 737: "Balluff GmbH",
968 738: "Blue Ink Technologies",
969 739: "LXNAV d.o.o.",
970 740: "e-Traction",
971 741: "Carling Technologies",
972 742: "EROAD",
973 743: "Daemyung Elevator Co., Ltd.",
974 744: "Woosung Engineering Co., Ltd.",
975 745: "Cidra Corporate Services Inc.",
976 746: "SureFire Ag Systems, Inc.",
977 747: "Agratronix",
978 748: "ISOTTA",
979 749: "Chart Inc.",
980 750: "Joskin SA",
981 751: "Pacific Track",
982 752: "Deep Sea Electronics Plc",
983 753: "AIROD Technologies",
984 754: "Parker Hannifin Corp., Automation Group",
985 755: "Firefly Integrations",
986 756: "Maschio Gaspardo S.P.A.",
987 757: "IMPCO Technologies",
988 758: "Banner Engineering Corp.",
989 759: "Hydro-Gear",
990 760: "Bernecker + Rainer Industrie Elektronik GmbH",
991 761: "MITA OLEODINAMICA S.p.A.",
992 762: "ROJ s.r.l.",
993 763: "AT-Systems BVBA",
994 764: "Bednar FMT s.r.o.",
995 765: "GIGAVAC",
996 766: "Epec Oy",
997 767: "Alliance Wireless Technologies Inc.",
998 768: "Flores Automation, LLC",
999 769: "Trombetta",
1000 770: "MONOSEM",
1001 771: "Shaw Development, LLC",
1002 772: "Blink Marine",
1003 773: "Clarion Corporation of America",
1004 774: "Taisho Corporation",
1005 775: "ZIEHL-ABEGG Automotive GmbH",
1006 776: "HMI Systems LLC",
1007 777: "Ocean Signal Ltd",
1008 778: "Seakeeper Inc.",
1009 779: "RLC Electronic Systems",
1010 780: "AVID Technology Ltd",
1011 781: "Poly-Planar LLC",
1012 782: "AVR bvba",
1013 783: "Loup Electronics Inc.",
1014 784: "CM Automotive Systems, Inc.",
1015 785: "Fischer Panda GmbH",
1016 786: "Johnson Matthey Battery Systems",
1017 787: "Abertax Technologies Limited",
1018 788: "MoTeC Pty Ltd",
1019 789: "GRADALL",
1020 790: "VACALL",
1021 791: "AUTEC",
1022 792: "Kostal Mexicana",
1023 793: "James Fisher Prolec",
1024 794: "Shihlin Electric & Engineering Corporation",
1025 795: "Broyda Enterprises Pty Ltd",
1026 796: "Canadian Automotive Industries Ltd",
1027 797: "Tides Marine",
1028 798: "Lumishore Ltd",
1029 799: "Stillwater Designs and Audio, Inc. - KICKER",
1030 800: "Delta-Q Technologies",
1031 801: "LOR Manufacturing Company Inc.",
1032 802: "SPBI (Bj Technologie)",
1033 803: "Gill Sensors & Controls Limited",
1034 804: "ASA Electronics",
1035 805: "Gundersen & Løken AS",
1036 806: "Charge Automotive Ltd",
1037 807: "Schneider-Electric",
1038 808: "RIMEX Supply Ltd.",
1039 809: "HMS Industrial Networks AB",
1040 810: "Dutch Power Company",
1041 811: "Blue Water Desalination",
1042 812: "Torch Technologies",
1043 813: "Thales Suisse SA",
1044 814: "Soltec Soluzioni Tecnologiche Srl",
1045 815: "FLIR Systems, Inc.",
1046 816: "UniStrong",
1047 817: "TE Connectivity Sensor Solutions",
1048 818: "HGNSS",
1049 819: "Preco Electronics",
1050 820: "DIaLOGIKa Gesellschaft fuer angewandte Informatik mbH",
1051 821: "Thorsen Teknik A/S",
1052 822: "Bren-Tronics, Inc.",
1053 823: "ACEINNA, Inc (formerly MEMSIC, Inc)",
1054 824: "Undheim Systems AS",
1055 825: "BPW Hungária",
1056 826: "Lewmar Marine Inc",
1057 827: "INmatix Technology Group Ltd",
1058 828: "AgriBrink Inc.",
1059 829: "Drov Technologies, Inc.",
1060 830: "Ultra Motion LLC",
1061 831: "DOK-ING Ltd.",
1062 832: "Heizomat Gerätebau-Energiesysteme GmbH",
1063 833: "Electrum Automation AB",
1064 834: "Pioneer Microsystems, Inc.",
1065 835: "PetTrack Ltd.",
1066 836: "Signature4",
1067 837: "Famic Technologies Inc.",
1068 838: "Teamsurv Ltd",
1069 839: "Indexator Rotator Systems AB",
1070 840: "E.S.T.E. srl",
1071 841: "Agra-GPS",
1072 842: "DigiDevice Srl",
1073 843: "Hendrickson Truck Commercial Vehicle Systems",
1074 844: "FELL AS",
1075 845: "GMB Güstrower Maschinenbau GmbH",
1076 846: "L3 Magnet-Motor",
1077 847: "Oceanvolt",
1078 848: "ningupex",
1079 849: "MTS Maschinentechnik Schrode AG",
1080 850: "Geoprospectors GmbH",
1081 851: "Novotechnik Messwertaufnehmer OHG",
1082 852: "Velvac Inc",
1083 853: "Teledyne RESON B.V.",
1084 854: "GEMAC Chemnitz GmbH",
1085 855: "Toshiba Infrastructure Systems & Solutions Corporation",
1086 856: "FarmFacts GmbH",
1087 857: "Zoomlion Heavy Industry NA, Inc",
1088 858: "Littelfuse",
1089 859: "Valor",
1090 860: "Michelin",
1091 861: "Adel System S.r.l.",
1092 862: "Prospec Electronics",
1093 863: "SMAG",
1094 864: "Streamline Transportation Technologies Inc.",
1095 865: "MyEasyFarm",
1096 866: "Netradyne, Inc.",
1097 867: "Skeleton Technologies",
1098 868: "Data Panel Corp",
1099 869: "Intercomp",
1100 870: "Textron Fleet Management",
1101 871: "Superior Tech Inc",
1102 872: "Kählig Antriebstechnik GmbH",
1103 873: "Garnet Instruments Ltd.",
1104 874: "MTA S.p.A.",
1105 875: "Salvarani S.r.l.",
1106 876: "SUCO Robert Scheuffele GmbH & Co. KG",
1107 877: "SICK ATech GmbH",
1108 878: "FOTON",
1109 879: "PG Trionic, Inc.",
1110 880: "Revision Military",
1111 881: "Sovema",
1112 882: "BHTronik GmbH & Co. KG",
1113 883: "Swift Navigation, Inc.",
1114 884: "Sure Grip Controls Inc.",
1115 885: "SICK Stegmann GmbH",
1116 886: "Hitachi Zosen Corporation",
1117 887: "Hyperdrive Innovation Limited",
1118 888: "Carma Systems Inc",
1119 889: "SANY America Inc",
1120 890: "L3 Technologies, Inc.",
1121 891: "CarrierWeb",
1122 892: "Mectronx Corp",
1123 893: "KlinkTechnics Ltd.",
1124 894: "Rhodan Marine Systems of Florida LLC",
1125 895: "Peloton Technology",
1126 896: "NextFour Solutions Ltd",
1127 897: "Dot Technology Corp.",
1128 898: "Josef Kotte Landtechnik GmbH & Co. KG",
1129 899: "Lippert Components, Inc",
1130 900: "OSB AG",
1131 901: "Zivan Srl",
1132 902: "Bucher Hydraulics",
1133 903: "InMotion",
1134 904: "Equipment Safety Systems Pty. Ltd. (EQSS)",
1135 905: "ASA Electronics",
1136 906: "MOBA AG",
1137 907: "strautmann",
1138 908: "Chonbuk National University Department of Electronics",
1139 909: "Marines Co., Ltd.",
1140 910: "Hermann Paus Maschinenfabrik GmbH",
1141 911: "Nautic-On",
1142 912: "Steyr Motors GmbH",
1143 913: "Toyota Motor Corporation",
1144 914: "ZETOR TRACTORS a.s.",
1145 915: "Dosificacion y sistemas electronicos S.L. (DSE)",
1146 916: "Turck Inc.",
1147 917: "Sentinel d.o.o.",
1148 918: "AMW Machine Control, Inc",
1149 919: "Furrion LLC",
1150 920: "MTD Consumer Group Inc.",
1151 921: "ROPA Fahrzeug- und Maschinenbau GmbH",
1152 922: "Terberg Benschop B.V.",
1153 923: "ELTEK S.p.A.",
1154 924: "PAS Peschak Autonome Systeme GmbH",
1155 925: "GW Lisk Company",
1156 926: "Buhler Industries Inc.",
1157 927: "Saicon",
1158 928: "EAO Automotive GmbH & Co. KG",
1159 929: "Jl Marine Systems, Inc.",
1160 930: "Ecotronix Corp.",
1161 931: "Enertec Marine Ltd",
1162 932: "Discover Battery",
1163 933: "Delta Mobile Systems, Inc.",
1164 934: "Farmobile, Inc.",
1165 935: "Meels GmbH & Co. KG",
1166 936: "Hi-tech Millennium",
1167 937: "Precision Circuits Inc",
1168 938: "LEVEL Systems",
1169 939: "Warn Industries, Inc.",
1170 940: "Dometal Oy",
1171 941: "Navya",
1172 942: "Vogelsang GmbH & Co. KG",
1173 943: "FISCHER AG Präzisionspindeln",
1174 944: "ZONTISA Marine SL",
1175 945: "Equalizer AG",
1176 946: "Hydac Tecnologia Ltda",
1177 947: "Gerd Bär GmbH",
1178 948: "Donix",
1179 949: "Škoda Electric",
1180 950: "Reserved",
1181 1850: "Seastar Solutions (formerly Teleflex)",
1182 1851: "RayMarine",
1183 1852: "Navionics",
1184 1853: "Japan Radio Co",
1185 1854: "Northstar Technologies",
1186 1855: "Furuno USA",
1187 1856: "Trimble",
1188 1857: "Simrad",
1189 1858: "Litton",
1190 1859: "Kvasar AB",
1191 1860: "MMP",
1192 1861: "Vector North America (formerly Vector Cantech)",
1193 1862: "Sanshin",
1194 1863: "Thomas G. Faria Co.",
1195 1864: "Reserved",
1196 }
1197)
1198
1199# DM1 / DM2
1200lamp = generate_map(["Lamp Off", "Lamp On"])
1201flash = generate_map(["Slow Flash (1Hz)", "Fast Flash (2Hz+)", "Reserved", "Unavailable / No Flash"])
1202
1203# DM15
1204dm15_status = generate_map(
1205 {
1206 0: "Proceed",
1207 1: "Busy",
1208 2: "Reserved",
1209 4: "Operation Completed",
1210 5: "Operation Failed",
1211 6: "Reserved",
1212 }
1213)
1214dm15_seed = generate_map(
1215 {
1216 0: "Seed Completed – begin sending key",
1217 1: "Use Long Seed or Key from Data Security Message",
1218 2: "Seed Values",
1219 0xFFFF: "No Further Key required of Tool",
1220 }
1221)
1222
1223# PropB_D2
1224battery_mode = generate_map(
1225 ["Initialize", "Operational", "Dormant", "Protected", "Maintenance", "Manufacturer", "Error", "N/A"]
1226)
1227fet_array_control_states = generate_map(
1228 ["Low Power OFF", "No Charge", "No Charge No Discharge", "All On", "Maintenance", "Reserved", "Error", "N/A"]
1229)
1230soc_mode = generate_map(["Init", "No Current", "Coulomb Counting", "Unknown", "Reserved", "Reserved", "Error", "N/A"])
1231fast_overload_detection = generate_map(["No Overload Detected", "Overload Detected", "Error", "N/A"])
1232overload_latch_status = generate_map(["Unlatched", "Latched", "Error", "N/A"])
1233charge_overload_detection = generate_map(["No Charge Overload", "Charge Overload", "Error", "N/A"])
1234overload_latch_clear = generate_map(["No Clear Attempted", "Clear Latch Attempted", "Error", "N/A"])
1235heater_control = generate_map(["Off", "On", "Error", "N/A"])
1236charge_fet = generate_map(["Off", "On", "Error", "N/A"])
1237discharge_fet = generate_map(["Off", "On", "Error", "N/A"])
1238too_cold_to_charge = generate_map(["Charging Temp Reached", "Too Cold for Charge", "Error", "N/A"])
1239charge_volts = generate_map(["No Charge Voltage", "Charge Voltage", "Error", "N/A"])
1240overcharge_protect_latch = generate_map(["Not Latched", "Latched", "Error", "N/A"])
1241ideal_diode = generate_map(["Bypass", "On", "Error", "N/A"])
1242fet_power = generate_map(["FET Power Off", "FET Power On", "Error", "N/A"])
1243heat_reasons = generate_map(
1244 {
1245 0: "Init",
1246 1: "FETs Opening",
1247 2: "Master Power Off",
1248 3: "Manufacturer Heating",
1249 4: "Not in Operational Mode",
1250 5: "Heating Disabled",
1251 6: "Normal Heating",
1252 7: "Too Hot",
1253 8: "Reserved",
1254 14: "Error",
1255 15: "N/A",
1256 }
1257)
1258long_term_fault_log = generate_map(
1259 {
1260 0: "Logging Normally",
1261 1: "Not Initialized",
1262 2: "No Media Detected",
1263 3: "Unable to Initialize Media",
1264 4: "Media Write Protected",
1265 5: "Unable to Initialize Filesystem",
1266 6: "No Filesystem Detected",
1267 7: "Unable to Mount Filesystem",
1268 8: "Error Opening File",
1269 9: "Error Creating File",
1270 10: "Reserved",
1271 14: "Error",
1272 15: "N/A",
1273 }
1274)
1275
1276# PropB_D6
1277current_range = generate_map(["Low", "High", "Error", "N/A"])
1278
1279# PropB_D8
1280balancing_status = generate_map(["Off", "On (Discharging)", "Error", "N/A"])
1281
1282# PropB_DE
1283bit_result = generate_map(["Pass", "Fail", "Error", "Not Yet Run / Not Available"])
1284
1285# PropB_E4
1286bit_id = generate_map(
1287 [
1288 "Reserved",
1289 "Overcharge – Severe",
1290 "Battery Voltage Calibration",
1291 "Current Calibration",
1292 "Pack Voltage Calibration",
1293 "Cell Voltage Sensor",
1294 "Balancing Subsystem Failure",
1295 "Memory Failure",
1296 "Other Subsystem Failure",
1297 "Battery Voltage Grounded",
1298 "Contactor Subsystem Failure",
1299 "Charger Subsystem Failure",
1300 "SOC below Reserve Limit",
1301 "Battery Voltage High – Severe",
1302 "Battery Voltage Low – Severe",
1303 "Battery Voltage High – Moderate",
1304 "Battery Voltage Low – Moderate",
1305 "Charge Current – Severe",
1306 "Discharge Current – Severe",
1307 "Charge Current – Moderate",
1308 "Discharge Current – Moderate",
1309 "Battery Temperature High – Severe",
1310 "Battery Temperature Low – Severe",
1311 "Battery Temperature High – Moderate",
1312 "Battery Temperature Low – Moderate",
1313 "Over-discharge – Severe",
1314 "Overcharge – Moderate",
1315 "Over-discharge – Moderate",
1316 "Internal Pack Voltage High – Severe",
1317 "Internal Pack Voltage Low – Severe",
1318 "Internal Pack Voltage High – Moderate",
1319 "Internal Pack Voltage Low – Moderate",
1320 "Cell Voltage High – Severe",
1321 "Cell Voltage Low – Severe",
1322 "Cell Voltage High – Moderate",
1323 "Cell Voltage Low – Moderate",
1324 "Battery Voltage Sensor",
1325 "Current Sensor",
1326 "Battery Temperature Sensor",
1327 "Battery Temperature Shorted High",
1328 "Battery Temperature Shorted Low",
1329 "SOC Data Out of Range",
1330 "Internal Pack Voltage Sensor",
1331 "Cell Voltage Communication Loss",
1332 "Heater Subsystem Failure",
1333 "Heater Stuck Off",
1334 "Heater Stuck On",
1335 "Contactor Stuck Open",
1336 "Contactor Stuck Closed",
1337 "Charge Path Open",
1338 "Charge Path Closed",
1339 "Balancing Failure Exists",
1340 "On-Board Voltage High – Minor",
1341 "On-Board Voltage Low – Minor",
1342 "Long-Term Log Not Storing Data",
1343 "Discharge Current – Minor",
1344 "Cell Voltage Low – Minor",
1345 ]
1346)
1347
1348# PropB_07
1349protected_state_warning = generate_map(
1350 [
1351 "Battery is in the Protected State",
1352 "Warning 1. Battery could transition to the Protected state within 1-2 seconds",
1353 "Warning 2. Battery could transition to the Protected state within 3-10 seconds",
1354 "Warning 3. Battery could transition to the Protected state within 11-30 seconds",
1355 "No warnings. Normal operation.",
1356 "Reserved",
1357 "Error",
1358 "N/A",
1359 ]
1360)
1361
1362# PropB_E9
1363table_id = generate_map(
1364 {
1365 0: "State of Health Calendar Data",
1366 1: "State of Health Depth-ofDischarge Cycle Data",
1367 2: "Spare",
1368 251: "Reserved",
1369 254: "Error",
1370 255: "N/A",
1371 }
1372)
1373table_type = generate_map(
1374 {
1375 0: "2 16-bit Unsigned Ints",
1376 1: "32-bit Unsigned Int",
1377 2: "0.1%",
1378 3: "1°C",
1379 4: "0.1 Hours",
1380 5: "0.01%",
1381 6: "Spare",
1382 251: "Reserved",
1383 254: "Error",
1384 255: "N/A",
1385 }
1386)
1387
1388# Heartbeat
1389primary_can_interface = generate_map(["CAN B Primary Interface", "CAN A Primary Interface", "Error", "N/A"])
1390heartbeat_can_interface = generate_map(
1391 ["Primary and Secondary CAN Interface", "Primary CAN Interface Only", "Error", "N/A"]
1392)
1393can_status = generate_map(["CAN is not operational", "CAN is operational", "Error", "N/A"])
1394battery_status = generate_map(["Battery has normal function", "Battery has fault", "Error", "N/A"])
1395
1396failed_exit_attempts_count = generate_map(
1397 {
1398 0: "Count of the number of failed attempts",
1399 0xFB: "Count exceeded maximum",
1400 0xFC: "Reserved",
1401 0xFE: "Error",
1402 0xFF: "N/A",
1403 }
1404)
1405
1406# PropB_04
1407contact_state = generate_map(["Contactor(s) is open", "Contactor(s) is closed", "Error", "N/A"])
1408charge_capability_state = generate_map(
1409 ["Battery is unable to accept charge", "Battery is able to accept charge", "Error", "N/A"]
1410)
1411
1412protected_state_timeout = generate_map(
1413 {
1414 0: "Time in seconds before the attempt to exit the Protected State",
1415 0xFB00: "Battery requires “Reset Protection” command to exit Protected State",
1416 0xFB01: "No timeout for fault ",
1417 0xFDFF: "Reserved",
1418 0xFEFF: "Error",
1419 0xFFFF: "N/A",
1420 }
1421)
1422
1423load_indicator = generate_map(
1424 [
1425 "Provide or adjust charging potential on battery to exit Protected State.",
1426 "Remove load or short circuit from battery to exit Protected State.",
1427 "No load indicator for fault.",
1428 "N/A",
1429 ]
1430)
1431
1432# PropB_08
1433soc_reserve_limit = generate_map(
1434 {
1435 0x00: "% SOC limit",
1436 0xC9: "Reserved",
1437 0xFF: "N/A",
1438 }
1439)
1440
1441application_overcurrent_limit = generate_map(
1442 {
1443 0x00: "Reserved",
1444 0x05: "Amperes",
1445 0xDD: "Reserved",
1446 0xFB: "Disable System Overcurrent Limit",
1447 0xFC: "Reserved",
1448 0xFF: "N/A",
1449 }
1450)
1451
1452application_overcurrent_period = generate_map(
1453 {
1454 0x00: "Reserved",
1455 0x01: "Seconds",
1456 0xFB: "Reserved",
1457 0xFF: "N/A",
1458 }
1459)
1460
1461# PropB_DE
1462reset_pin_state = generate_map(["Reset pin floating (off)", "Reset pin shorted to COM (on)", "Reserved", "N/A"])
1463effective_reset_time = generate_map(
1464 {
1465 0: "Seconds Reset pin has been shorted to COM while physical "
1466 "Master Power Switch is On and Dormant pins are Off",
1467 61: "Reset pin has been shorted to com for more than 60 seconds.",
1468 62: "Reserved",
1469 63: "N/A",
1470 }
1471)
1472
1473# acknowledgement
1474acknowledgement = generate_map(
1475 [
1476 "Positive Acknowledgment",
1477 "Negative Acknowledgment",
1478 "PGN supported but security denied access",
1479 "PGN supported but ECU is busy and cannot respond now. Re-request the data at a later time.",
1480 ]
1481)
1482
1483# PropB_06
1484on_off_state = generate_map(["Off", "On", "Error", "N/A"])
1485maintenance_state = generate_map(
1486 ["Battery is not in the Maintenance State", "Battery is in the Maintenance State", "Error", "N/A"]
1487)
1488contactor_control_state = generate_map(["Not automatic (state forced by command)", "Automatic", "Error", "N/A"])
1489standby_state = generate_map(["Disabled", "Enabled", "Suspended by the Standby Suspend Period", "N/A"])
1490baud_rate_overide_state = generate_map(
1491 [
1492 "Has not been overwritten",
1493 "Has been overwritten",
1494 "Battery initialization is required to implement the baud rate change",
1495 "N/A",
1496 ]
1497)
1498position_identity_overwrite_state = generate_map(
1499 [
1500 "Has not been overwritten",
1501 "Has been overwritten",
1502 "Battery initialization is required to implement the position identity change",
1503 "N/A",
1504 ]
1505)
1506
1507# TP.CM
1508tpcm_control = generate_map(
1509 {
1510 0: "Reserved",
1511 16: "Destination Specific Request to Send (RTS)",
1512 17: "Destination Specific Clear to Send (CTS)",
1513 18: "Reserved",
1514 19: "End of Message Acknowledge",
1515 20: "Reserved",
1516 32: "Broadcast Announce Message",
1517 33: "Reserved",
1518 255: "Connection Abort",
1519 }
1520)
1521cts_packets = generate_map(
1522 {
1523 0: "",
1524 255: "No limit exists for the originator",
1525 }
1526)
1527sender_role = generate_map(
1528 ["Originating Controller Application", "Responding Controller Application", "Reserved", "Not specified"]
1529)
1530abortion_reason = generate_map(
1531 {
1532 0: "Reserved for SAE assignment",
1533 1: "Already in one or more connection managed sessions and cannot support another",
1534 2: "System resources were needed for another task, so this connection managed session was terminated",
1535 3: "A timeout occurred, and this is the connection abort to close the session",
1536 4: "CTS messages received when data transfer is in progress",
1537 5: "Maximum retransmit request limit reached",
1538 6: "Unexpected data transfer packet",
1539 7: "Bad sequence number (software cannot recover)",
1540 8: "Duplicate sequence number (software cannot recover)",
1541 9: "Total Message Size is greater than 1785 bytes",
1542 10: "Reserved for SAE assignment",
1543 250: "If a Connection Abort reason is identified that is not listed in the table use code 250",
1544 251: "Per SAE J1939-71 definitions",
1545 }
1546)
1547
1548# NM
1549name_error_code = generate_map(
1550 {
1551 0: "Security not satisfied. Different SA for Adopt Pending than Set Pending",
1552 1: "Item(s) not allowed to change. Qualifier flags of disallowed items are set to one",
1553 2: "Item conflict. Cannot perform Function assigned, cannot perform as Arbitrary Address capable, etc. "
1554 "Qualifier flags of disallowed items are set to one",
1555 3: "Checksum does not match",
1556 4: "Pending NAME not set",
1557 5: "Other",
1558 6: "Reserved",
1559 255: "Not Available",
1560 }
1561)
1562valid_flag = generate_map(["Valid", "Invalid"])
1563nm_control_mode = generate_map(
1564 {
1565 0: "Set Pending NAME",
1566 1: "Pending NAME Response",
1567 2: "Current NAME Response",
1568 3: "Set Pending NAME ACK",
1569 4: "Set Pending NAME NAK",
1570 5: "Request Pending NAME",
1571 6: "Request Current NAME",
1572 7: "Adopt Pend NAME",
1573 8: "Request Address Claim",
1574 9: "N/A",
1575 }
1576)
1577
1578# DM13
1579stop_start_cmd = generate_map(
1580 ["Stop broadcast", "Start broadcast", "Reserved", "Don’t care/take no action (leave as is)"]
1581)
1582
1583# DM14
1584pointer_type = generate_map(["Direct memory addressing", "Directed spatial addressing"])
1585pointer_extension = generate_map(
1586 {
1587 0: "SPN Space",
1588 1: "Reserved",
1589 128: "Proprietary",
1590 }
1591)
1592security_key = generate_map(
1593 {
1594 0: "Use long seed or key from data security message",
1595 1: "Key values",
1596 0xFFFF: "No key available ",
1597 }
1598)
1599memory_command = generate_map(
1600 {
1601 0: "Erase",
1602 1: "Read",
1603 2: "Write",
1604 3: "Status",
1605 4: "Operation Completed",
1606 5: "Operation Failed",
1607 6: "Boot Load",
1608 7: "EDCP Generation",
1609 }
1610)
1611# DM17
1612packet_length = generate_map({0: "Reserved", 1: "Single-packet", 8: "Reserved", 255: "Multi-packet"})
1613
1614# DM18
1615security_type = generate_map(
1616 {
1617 0: "Data is long seed",
1618 1: "Data is long key",
1619 2: "Data is session key",
1620 3: "Data is certificate",
1621 4: "Reserved",
1622 }
1623)