hitl_tester.modules.cyber_6t.j1939da

Contains known SPN and PGN, as per MIL-PRF-32565 and J1939DA.

(c) 2020-2024 TurnAround Factor, Inc.

#

CUI DISTRIBUTION CONTROL

Controlled by: DLA J68 R&D SBIP

CUI Category: Small Business Research and Technology

Distribution/Dissemination Controls: PROTECTED BY SBIR DATA RIGHTS

POC: GOV SBIP Program Manager Denise Price, 571-767-0111

Distribution authorized to U.S. Government Agencies only, to protect information not owned by the

U.S. Government and protected by a contractor’s ‘limited rights’ statement, or received with the understanding that

it is not routinely transmitted outside the U.S. Government (determination made September 14, 2024). Other requests

for this document shall be referred to ACOR DLA Logistics Operations (J-68), 8725 John J. Kingman Rd., Suite 4317,

Fort Belvoir, VA 22060-6221

#

SBIR DATA RIGHTS

Contract No.:SP4701-23-C-0083

Contractor Name: TurnAround Factor, Inc.

Contractor Address: 10365 Wood Park Ct. Suite 313 / Ashland, VA 23005

Expiration of SBIR Data Rights Period: September 24, 2029

The Government's rights to use, modify, reproduce, release, perform, display, or disclose technical data or computer

software marked with this legend are restricted during the period shown as provided in paragraph (b)(4) of the Rights

in Noncommercial Technical Data and Computer Software--Small Business Innovative Research (SBIR) Program clause

contained in the above identified contract. No restrictions apply after the expiration date shown above. Any

reproduction of technical data, computer software, or portions thereof marked with this legend must also reproduce

the markings.

  1"""
  2Contains known SPN and PGN, as per MIL-PRF-32565 and J1939DA.
  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
 32from dataclasses import dataclass, field
 33from typing import ClassVar
 34
 35from hitl_tester.modules.cyber_6t import spn_types
 36
 37
 38@dataclass(eq=False)
 39class SPN:
 40    """The Suspect Parameter, which describes how to interpret a subset of data in a CAN Frame."""
 41
 42    manager: ClassVar[PGNType | None] = None
 43
 44    name: str = ""
 45    length: int = 0  # bits
 46    data_type: spn_types.Stringify = spn_types.integer
 47    resolution: float = 1
 48    offset: float = 0
 49    deliminator = 0x2A
 50    recurring: bool = False  # TODO(JA): implement recurring data
 51    description: str = ""
 52
 53    def __post_init__(self):
 54        if SPN.manager:  # Append to parent if possible
 55            SPN.manager.data_field.append(self)
 56
 57    def __str__(self):
 58        return "\n".join(f"{attr.replace('_', ' ').title()}: {val}" for attr, val in self.__dict__.items())
 59
 60    def decode(self, value: float) -> float:
 61        """Adjust a value base on resolution and offset."""
 62        return value * self.resolution + self.offset
 63
 64    def encode(self, value: float) -> int:
 65        """Adjust a value base on resolution and offset."""
 66        return int((value - self.offset) / self.resolution)
 67
 68
 69@dataclass
 70class PGNType:
 71    """
 72    The parameter group number (PGN) acts as a key into a table of payload definitions. The table SPNs & PGNs
 73    in J1939DA maps the standardised PGNs to their payload definitions.
 74    """
 75
 76    instances: ClassVar[dict[int | None, dict[int | str, PGNType]]] = {}  # Map ID to instance
 77
 78    id: int
 79    short_name: str = ""
 80    name: str = ""
 81    default_priority: int = 6
 82    wrapped_data: int | None = None
 83    data_field: list[SPN] = field(default_factory=list)
 84    valid: bool = True
 85
 86    def __post_init__(self):
 87        """Save reference in class dict."""
 88        # FIXME(JA): name to id map and vice versa
 89        if self.valid:
 90            PGNType.instances[self.wrapped_data] = PGNType.instances.get(self.wrapped_data, {})
 91            PGNType.instances[self.wrapped_data][self.id] = self
 92            PGNType.instances[self.wrapped_data][self.short_name] = self
 93            PGNType.instances[self.wrapped_data][self.name] = self
 94
 95    @property
 96    def data_page(self) -> int:
 97        """True if using data pages, else False."""
 98        return self.id >> 16
 99
100    def __str__(self):
101        lines = []
102        for attribute, value in self.__dict__.items():
103            attribute = attribute.replace("_", " ").title()
104            if attribute == "Id":
105                value = f"{value} (0x{value:06X})"
106            if attribute.lower() not in ("data field", "valid", "wrapped data"):
107                lines.append(f"{attribute.title()}: {value}")
108        return "\n".join(lines)
109
110    def __enter__(self):
111        """Set PGN as parent"""
112        SPN.manager = self
113        return self
114
115    def __exit__(self, exception_type, exception_value, traceback):
116        """Remove PGN as parent."""
117        SPN.manager = None
118
119
120class PGNFinder:  # TODO(JA): replace with metaclass
121    """Find a pgn by id or name."""
122
123    def __getitem__(self, query: int | str | tuple[int | str, list[float]]) -> PGNType:
124        pgn_id, data_list = query if isinstance(query, tuple) else (query, None)  # Unpack tuple
125        wrapped_data_id: int | None = next(map(int, data_list or []), None)  # Grab first item if exists and int
126        if pgn_id not in PGNType.instances.get(wrapped_data_id, {}):  # Only use the wrapped id for wrapped PGNs
127            wrapped_data_id = None
128
129        bad_id = pgn_id if isinstance(pgn_id, int) else -1
130        bad_name = pgn_id if isinstance(pgn_id, str) else "Unknown"
131        return PGNType.instances.get(wrapped_data_id, {}).get(
132            pgn_id,
133            PGNType(
134                bad_id,
135                bad_name,
136                bad_name,
137                data_field=[SPN("Unknown data", 8 * 8, spn_types.bytes_map)],
138                valid=False,
139            ),
140        )
141
142
143PGN = PGNFinder()
144
145# SAE J1939 Transmit Messages Group
146with PGNType(0xE800, "ACKM", "Acknowledgement"):
147    SPN("Control Byte", 2, spn_types.acknowledgement)
148    SPN("Reserved", 6)
149    SPN("Group Function Value", 8)
150    SPN("Reserved", 8)
151    SPN("Reserved", 8)
152    SPN("Requestor Source Address", 8)
153    SPN("Parameter Group Number (of message acknowledged)", 3 * 8, spn_types.bytes_map)
154
155with PGNType(0xEE00, "AC", "Address Claimed"):
156    SPN("Identity Number", 21, spn_types.bytes_map)
157    SPN("Manufacturer Code", 11, spn_types.manufacturer_id)
158    SPN("ECU Instance", 3, spn_types.integer, 1, 1)
159    SPN("Function Instance", 5, spn_types.integer, 1, 1)
160    SPN("Function", 8, spn_types.function_id)
161    SPN("Reserved", 1)
162    SPN("Vehicle System", 7, spn_types.vehicle_system)
163    SPN("Vehicle System Instance", 4, spn_types.integer, 1, 1)
164    SPN("Industry Group", 3, spn_types.industry_group)
165    SPN("Arbitrary Address Capable", 1, spn_types.bool_map)
166
167with PGNType(0xFDC5, "ECUID", "ECU Identification Information"):
168    SPN("Part Number", 0, spn_types.ascii_map)
169    SPN("Serial Number", 0, spn_types.ascii_map)
170    SPN("Location/Name", 0, spn_types.ascii_map)
171    SPN("Reserved", 0, spn_types.ascii_map)
172    SPN("Manufacturer", 0, spn_types.ascii_map)
173    SPN("Classification", 0, spn_types.ascii_map)
174
175with PGNType(0xFEDA, "SOFT", "Software Identification"):
176    SPN("Number of Software Identification Fields", 0)
177    SPN("Software Identification for Battery’s Primary ECU", 0, spn_types.ascii_map)
178
179with PGNType(0xFEE6, "TD", "Time/Date"):
180    SPN("Second", 8, spn_types.seconds, 0.25)
181    SPN("Minute", 8, spn_types.minutes)
182    SPN("Hour", 8, spn_types.hours)
183    SPN("Month", 8, spn_types.months)
184    SPN("Day", 8, spn_types.days, 0.25)
185    SPN("Year", 8, spn_types.days)
186    SPN("Reserved", 16)
187
188with PGNType(0xFE50, "BT1", "Battery Temperature"):
189    SPN("Battery 1 Temperature", 8, spn_types.celsius, 1, -40)
190    SPN("Battery 2 Temperature", 8, spn_types.celsius, 1, -40)
191    SPN("Battery 3 Temperature", 8, spn_types.celsius, 1, -40)
192    SPN("Battery 4 Temperature", 8, spn_types.celsius, 1, -40)
193
194with PGNType(0xFCB6, "VEP5", "Vehicle Electrical Power #5"):
195    SPN("SLI Battery Pack State of Charge", 16, spn_types.percent, 0.0025)
196    SPN("SLI Battery Pack Capacity", 16, spn_types.ah)
197    SPN("SLI Battery Pack Health", 8, spn_types.percent, 1, 0.5)
198    SPN("SLI Cranking Predicted Minimum Battery Voltage", 8, spn_types.volts, 0.2)
199    SPN("Reserved", 16)
200
201with PGNType(0xFECA, "DM1", "Active Diagnostic Trouble Codes"):
202    SPN("Protect Lamp", 2, spn_types.lamp)
203    SPN("Amber Warning Lamp", 2, spn_types.lamp)
204    SPN("Red Stop Lamp", 2, spn_types.lamp)
205    SPN("Malfunction Indicator Lamp", 2, spn_types.lamp)
206    SPN("Flash Protect Lamp", 2, spn_types.flash)
207    SPN("Flash Amber Warning Lamp", 2, spn_types.flash)
208    SPN("Flash Red Stop Lamp", 2, spn_types.flash)
209    SPN("Flash Malfunction Indicator Lamp", 2, spn_types.flash)
210
211    SPN("DTC1.Suspect_Parameter_Number", 19, recurring=True)  # TODO(JA): interpret DTCs
212    SPN("DTC1.Failure_Mode_Identifier", 5)
213    SPN("DTC1.Occurrence_Count", 7)
214    SPN("DTC1.SPN_Conversion_Method", 1)
215
216with PGNType(0xFECB, "DM2", "Previously Active Diagnostic Trouble Codes"):
217    SPN("Protect Lamp", 2, spn_types.lamp)
218    SPN("Amber Warning Lamp", 2, spn_types.lamp)
219    SPN("Red Stop Lamp", 2, spn_types.lamp)
220    SPN("Malfunction Indicator Lamp", 2, spn_types.lamp)
221    SPN("Flash Protect Lamp", 2, spn_types.flash)
222    SPN("Flash Amber Warning Lamp", 2, spn_types.flash)
223    SPN("Flash Red Stop Lamp", 2, spn_types.flash)
224    SPN("Flash Malfunction Indicator Lamp", 2, spn_types.flash)
225
226    SPN("DTC1.Suspect_Parameter_Number", 19, recurring=True)  # TODO(JA): interpret DTCs
227    SPN("DTC1.Failure_Mode_Identifier", 5)
228    SPN("DTC1.Occurrence_Count", 7)
229    SPN("DTC1.SPN_Conversion_Method", 1)
230
231with PGNType(0xD800, "DM15", "Memory Access Response"):
232    SPN("Length/Number Allowed (lower)", 8)
233    SPN("Reserved", 1)
234    SPN("Status", 3, spn_types.dm15_status)
235    SPN("Reserved", 1)
236    SPN("Length/Number Allowed (upper)", 3)
237    SPN("Error Indicator / EDC Parameter ", 3 * 8)  # TODO(JA): J1939-73
238    SPN("EDCP Extension", 8)  # TODO(JA): J1939-73
239    SPN("Seed", 16, spn_types.dm15_seed)
240
241
242# Saft Proprietary Transmit Messages Group
243# FIXME(JA): Different battery models may use the same address. Would have to base decoding on manufacturer.
244with PGNType(0xFFD2, "PropB_D2", "Battery ECU Status", 5):
245    SPN("Battery Mode", 3, spn_types.battery_mode)
246    SPN("FET Array State", 3, spn_types.fet_array_control_states)
247    SPN("Reserved", 2)
248    SPN("SOC Mode", 3, spn_types.soc_mode)
249    SPN("Reserved", 3)
250    SPN("Fast Overload Detection", 2, spn_types.fast_overload_detection)
251    SPN("Overload Latch Status", 2, spn_types.overload_latch_status)
252    SPN("Charge Overload Detection", 2, spn_types.charge_overload_detection)
253    SPN("Overload Latch Clear Status", 2, spn_types.overload_latch_clear)
254    SPN("Heater Control", 2, spn_types.heater_control)
255    SPN("Charge FET State", 2, spn_types.charge_fet)
256    SPN("Discharge FET State", 2, spn_types.discharge_fet)
257    SPN("Too Cold to Charge", 2, spn_types.too_cold_to_charge)
258    SPN("Charge Voltage Present", 2, spn_types.charge_volts)
259    SPN("Overcharge Protect Latch Status", 2, spn_types.overcharge_protect_latch)
260    SPN("Ideal Diode State", 2, spn_types.ideal_diode)
261    SPN("FET Power State", 2, spn_types.fet_power)
262    SPN("Reserved", 2)
263    SPN("Heat Reason", 4, spn_types.heat_reasons)
264    SPN("Long-Term Fault Log Status", 4, spn_types.long_term_fault_log)
265    SPN("Software Part Number", 16, spn_types.bytes_map)
266
267with PGNType(0xFFD4, "PropB_D4", "Battery Cell Status 1"):
268    SPN("Cell Voltage 1", 16, spn_types.volts, 0.0001)
269    SPN("Cell Voltage 2", 16, spn_types.volts, 0.0001)
270    SPN("Cell Voltage 3", 16, spn_types.volts, 0.0001)
271    SPN("Cell Voltage 4", 16, spn_types.volts, 0.0001)
272
273with PGNType(0xFFD5, "PropB_D5", "Battery Cell Status 2"):
274    SPN("Cell Voltage 5", 16, spn_types.volts, 0.0001)
275    SPN("Cell Voltage 6", 16, spn_types.volts, 0.0001)
276    SPN("Cell Voltage 7", 16, spn_types.volts, 0.0001)
277    SPN("Cell Voltage 8", 16, spn_types.volts, 0.0001)
278
279with PGNType(0xFFD6, "PropB_D6", "Battery Performance", 5):
280    SPN("Battery Current", 3 * 8, spn_types.amps, 0.01, -82_000)
281    SPN("Battery Current Range", 2, spn_types.current_range)
282    SPN("Internal State of Health", 14, spn_types.percent, 0.025)
283    SPN("Reserved", 3 * 8)
284
285with PGNType(0xFFD7, "PropB_D7", "Battery Temperatures"):
286    SPN("MCU Temperature", 8, spn_types.celsius, 1, -40)
287    SPN("Electronics Temperature 1", 8, spn_types.celsius, 1, -50)
288    SPN("Electronics Temperature 2", 8, spn_types.celsius, 1, -50)
289    SPN("Cell Temperature 1", 8, spn_types.celsius, 1, -50)
290    SPN("Cell Temperature 2", 8, spn_types.celsius, 1, -50)
291    SPN("Electronics Temperature 3", 8, spn_types.celsius, 1, -50)
292    SPN("Reserved", 16)
293
294with PGNType(0xFFD8, "PropB_D8", "Battery Balancing Circuit Info"):
295    SPN("Cell 1 Balancing Status", 2, spn_types.balancing_status)
296    SPN("Cell 2 Balancing Status", 2, spn_types.balancing_status)
297    SPN("Cell 3 Balancing Status", 2, spn_types.balancing_status)
298    SPN("Cell 4 Balancing Status", 2, spn_types.balancing_status)
299    SPN("Cell 5 Balancing Status", 2, spn_types.balancing_status)
300    SPN("Cell 6 Balancing Status", 2, spn_types.balancing_status)
301    SPN("Cell 7 Balancing Status", 2, spn_types.balancing_status)
302    SPN("Cell 8 Balancing Status", 2, spn_types.balancing_status)
303    SPN("Cell Voltage Difference", 16, spn_types.volts, 0.0001)
304    SPN("Cell Voltage Sum", 20, spn_types.volts, 0.0001)
305    SPN("Reserved", 12)
306
307with PGNType(0xFFDC, "PropB_DC", "Battery Cell Upper SOC"):
308    SPN("Upper SOC Cell 1", 8, spn_types.percent, 0.5, -10)
309    SPN("Upper SOC Cell 2", 8, spn_types.percent, 0.5, -10)
310    SPN("Upper SOC Cell 3", 8, spn_types.percent, 0.5, -10)
311    SPN("Upper SOC Cell 4", 8, spn_types.percent, 0.5, -10)
312    SPN("Upper SOC Cell 5", 8, spn_types.percent, 0.5, -10)
313    SPN("Upper SOC Cell 6", 8, spn_types.percent, 0.5, -10)
314    SPN("Upper SOC Cell 7", 8, spn_types.percent, 0.5, -10)
315    SPN("Upper SOC Cell 8", 8, spn_types.percent, 0.5, -10)
316
317with PGNType(0xFFDD, "PropB_DD", "Battery Cell Lower SOC"):
318    SPN("Lower SOC Cell 1", 8, spn_types.percent, 0.5, -10)
319    SPN("Lower SOC Cell 2", 8, spn_types.percent, 0.5, -10)
320    SPN("Lower SOC Cell 3", 8, spn_types.percent, 0.5, -10)
321    SPN("Lower SOC Cell 4", 8, spn_types.percent, 0.5, -10)
322    SPN("Lower SOC Cell 5", 8, spn_types.percent, 0.5, -10)
323    SPN("Lower SOC Cell 6", 8, spn_types.percent, 0.5, -10)
324    SPN("Lower SOC Cell 7", 8, spn_types.percent, 0.5, -10)
325    SPN("Lower SOC Cell 8", 8, spn_types.percent, 0.5, -10)
326
327with PGNType(0xFFDE, "PropB_DE", "Battery Function Status"):
328    SPN("Reserved", 8)
329    SPN("Heater Set Point", 8, spn_types.celsius, 1, -50)
330    SPN("Storage Delay Time Limit", 16, spn_types.seconds)
331    SPN("Last Storage Duration (Minutes)", 6, spn_types.minutes)
332    SPN("Last Storage Duration (Hours)", 5, spn_types.hours)
333    SPN("Last Storage Duration (Days)", 5, spn_types.days)
334    SPN("Last Storage Duration (Months)", 8, spn_types.months)
335    SPN("Reset Pin State", 2, spn_types.reset_pin_state)
336    SPN("Effective Reset Time", 6, spn_types.effective_reset_time)
337
338with PGNType(0xFFE0, "PropB_E0", "BIT Results 1", 5):
339    SPN("Overcharge – Severe", 2, spn_types.bit_result)
340    SPN("Battery Voltage Calibration", 2, spn_types.bit_result)
341    SPN("Current Calibration", 2, spn_types.bit_result)
342    SPN("Pack Voltage Calibration", 2, spn_types.bit_result)
343    SPN("Cell Voltage Sensor", 2, spn_types.bit_result)
344    SPN("Balancing Subsystem Failure", 2, spn_types.bit_result)
345    SPN("Memory Failure", 2, spn_types.bit_result)
346    SPN("Other Subsystem Failure", 2, spn_types.bit_result)
347    SPN("Battery Voltage Grounded", 2, spn_types.bit_result)
348    SPN("Contactor Subsystem Failure", 2, spn_types.bit_result)
349    SPN("Charger Subsystem Failure", 2, spn_types.bit_result)
350    SPN("Reserved", 2, spn_types.bit_result)
351    SPN("Reserved", 2, spn_types.bit_result)
352    SPN("Reserved", 2, spn_types.bit_result)
353    SPN("Reserved", 2, spn_types.bit_result)
354    SPN("Reserved", 2, spn_types.bit_result)
355    SPN("SOC below Reserve Limit", 2, spn_types.bit_result)
356    SPN("Battery Voltage High – Severe", 2, spn_types.bit_result)
357    SPN("Battery Voltage Low – Severe", 2, spn_types.bit_result)
358    SPN("Battery Voltage High – Moderate", 2, spn_types.bit_result)
359    SPN("Battery Voltage Low – Moderate", 2, spn_types.bit_result)
360    SPN("Charge Current – Severe", 2, spn_types.bit_result)
361    SPN("Discharge Current – Severe", 2, spn_types.bit_result)
362    SPN("Charge Current – Moderate", 2, spn_types.bit_result)
363    SPN("Discharge Current – Moderate", 2, spn_types.bit_result)
364    SPN("Battery Temperature High – Severe", 2, spn_types.bit_result)
365    SPN("Battery Temperature Low – Severe", 2, spn_types.bit_result)
366    SPN("Battery Temperature High – Moderate", 2, spn_types.bit_result)
367    SPN("Battery Temperature Low – Moderate", 2, spn_types.bit_result)
368    SPN("Over-discharge – Severe", 2, spn_types.bit_result)
369    SPN("Overcharge – Moderate", 2, spn_types.bit_result)
370    SPN("Over-discharge – Moderate", 2, spn_types.bit_result)
371with PGNType(0xFFE1, "PropB_E1", "BIT Results 2", 5):
372    SPN("Internal Pack Voltage High – Severe", 2, spn_types.bit_result)
373    SPN("Internal Pack Voltage Low – Severe", 2, spn_types.bit_result)
374    SPN("Internal Pack Voltage High – Moderate", 2, spn_types.bit_result)
375    SPN("Internal Pack Voltage Low – Moderate", 2, spn_types.bit_result)
376    SPN("Cell Voltage High – Severe", 2, spn_types.bit_result)
377    SPN("Cell Voltage Low – Severe", 2, spn_types.bit_result)
378    SPN("Cell Voltage High – Moderate", 2, spn_types.bit_result)
379    SPN("Cell Voltage Low – Moderate", 2, spn_types.bit_result)
380    SPN("Battery Voltage Sensor", 2, spn_types.bit_result)
381    SPN("Current Sensor", 2, spn_types.bit_result)
382    SPN("Battery Temperature Sensor", 2, spn_types.bit_result)
383    SPN("Battery Temperature Shorted High", 2, spn_types.bit_result)
384    SPN("Battery Temperature Shorted Low", 2, spn_types.bit_result)
385    SPN("SOC Data Out of Range", 2, spn_types.bit_result)
386    SPN("Internal Pack Voltage Sensor", 2, spn_types.bit_result)
387    SPN("Cell Voltage Communication Loss", 2, spn_types.bit_result)
388    SPN("Heater Subsystem Failure", 2, spn_types.bit_result)
389    SPN("Heater Stuck Off", 2, spn_types.bit_result)
390    SPN("Heater Stuck On", 2, spn_types.bit_result)
391    SPN("Contactor Stuck Open", 2, spn_types.bit_result)
392    SPN("Contactor Stuck Closed", 2, spn_types.bit_result)
393    SPN("Charge Path Open", 2, spn_types.bit_result)
394    SPN("Charge Path Closed", 2, spn_types.bit_result)
395    SPN("Balancing Failure Exists", 2, spn_types.bit_result)
396    SPN("On-Board Voltage High – Minor", 2, spn_types.bit_result)
397    SPN("On-Board Voltage Low – Minor", 2, spn_types.bit_result)
398    SPN("Long-Term Log Not Storing Data", 2, spn_types.bit_result)
399    SPN("Discharge Current – Minor", 2, spn_types.bit_result)
400    SPN("Cell Voltage Low – Minor", 2, spn_types.bit_result)
401    SPN("Reserved", 2, spn_types.bit_result)
402    SPN("Reserved", 2, spn_types.bit_result)
403    SPN("Reserved", 2, spn_types.bit_result)
404with PGNType(0xFFE4, "PropB_E4", "BIT Log"):
405    SPN("Bit #", 8, spn_types.bit_id)
406    SPN("# Times Failure has Occurred", 2 * 8)
407    SPN("Last Value to Cause Failure", 4 * 8)  # TODO(JA): decode using FMI, BIT#, and value
408    SPN("Reserved", 8)
409with PGNType(0xFFE9, "PropB_E9", "Table Data"):
410    SPN("Table ID", 8)
411    SPN("Data Type/Resolution", 8, spn_types.table_type)
412    SPN("Row Number", 8)
413    SPN("Column Number", 8)
414    SPN("Data", 4 * 8)
415
416# FIXME(JA): Decoding depends on priority. Support different data sizes (0 or 8)
417with PGNType(0x1EF00, "PropA2-0", "Long-Term Log Packet Retry Request (Start/Stop Extension)", 0):
418    SPN("Log File Size", 4 * 8)
419    SPN("Log File Start Position", 4 * 8)
420with PGNType(0x1EF00, "PropA2-1-6", "Long-Term Log Packet Retry Request (Data Packet)", 1):
421    SPN("Log Byte", 8, spn_types.bytes_map)
422    SPN("Log Byte", 8, spn_types.bytes_map)
423    SPN("Log Byte", 8, spn_types.bytes_map)
424    SPN("Log Byte", 8, spn_types.bytes_map)
425    SPN("Log Byte", 8, spn_types.bytes_map)
426    SPN("Log Byte", 8, spn_types.bytes_map)
427    SPN("Log Byte", 8, spn_types.bytes_map)
428    SPN("Log Byte", 8, spn_types.bytes_map)
429with PGNType(0x1EF00, "PropA2-7", "Long-Term Log Packet Retry Request (Retry Extension)", 7):
430    SPN("Log Character", 8, spn_types.bytes_map)
431    SPN("Log Character", 8, spn_types.bytes_map)
432    SPN("Log Character", 8, spn_types.bytes_map)
433    SPN("Log Character", 8, spn_types.bytes_map)
434    SPN("Log Character", 8, spn_types.bytes_map)
435    SPN("Log Character", 8, spn_types.bytes_map)
436    SPN("Log Character", 8, spn_types.bytes_map)
437    SPN("Log Character", 8, spn_types.bytes_map)
438
439
440# Bren-Tronics Proprietary Messages Group
441with PGNType(0xFF40, "PropB_40", "Undocumented command 1"):
442    SPN("Undocumented data", 8 * 8, spn_types.bytes_map)
443with PGNType(0xFF41, "PropB_41", "Undocumented command 2"):
444    SPN("Undocumented data", 8 * 8, spn_types.bytes_map)
445with PGNType(0xFF42, "PropB_42", "Undocumented command 3"):
446    SPN("Undocumented data", 8 * 8, spn_types.bytes_map)
447with PGNType(0xFFC0, "PropB_C0", "Undocumented command 4"):
448    SPN("Undocumented data", 8 * 8, spn_types.bytes_map)
449with PGNType(0xFFC1, "PropB_C1", "Undocumented command 5"):
450    SPN("Undocumented data", 8 * 8, spn_types.bytes_map)
451
452
453# MIL-PRF-32565 Proprietary Transmit Messages Group
454with PGNType(0xFF00, "PropB_00", "Heartbeat", 3):
455    SPN("Reserved", 8)
456    SPN("Primary CAN Interface", 2, spn_types.primary_can_interface)
457    SPN("Heartbeat CAN Interface", 2, spn_types.heartbeat_can_interface)
458    SPN("Reserved", 4)
459    SPN("Battery Status", 2, spn_types.battery_status)
460    SPN("CAN A Status", 2, spn_types.can_status)
461    SPN("CAN B Status", 2, spn_types.can_status)
462    SPN("Reserved", 42)
463
464with PGNType(0xFF01, "PropB_01", "Battery Measurements 1", 5):
465    SPN("Internal Pack Voltage", 16, spn_types.volts, 0.05)
466    SPN("Battery Internal Temperature (C)", 8, spn_types.celsius, 1, -55)
467    SPN("Battery Internal Temperature (F)", 9, spn_types.fahrenheit, 1, -67)
468    SPN("Reserved", 31)
469
470with PGNType(0xFF02, "PropB_02", "Battery Calculations 1", 5):
471    SPN("Reserved", 8)
472    SPN("Battery State of Charge", 8, spn_types.percent, 0.5)
473    SPN("Battery State of Health", 8, spn_types.percent, 0.5)
474    SPN("Battery Capacity Estimation", 8, spn_types.ah)
475    SPN("Time Remaining", 10, spn_types.hours, 0.1)
476    SPN("Reserved", 22)
477
478with PGNType(0xFF03, "PropB_03", "Battery Regulation Information 1", 5):
479    SPN("Battery Voltage", 16, spn_types.volts, 0.05)
480    SPN("Open Circuit Voltage", 16, spn_types.volts, 0.05)
481    SPN("Battery Current", 16, spn_types.amps, 0.05, -1600)
482    SPN("Maximum Charge Current", 16, spn_types.amps, 0.05)
483
484with PGNType(0xFF04, "PropB_04", "Battery Regulation Information 2", 5):
485    SPN("Contactor(s) State", 2, spn_types.contact_state)
486    SPN("Charge Capability State", 2, spn_types.charge_capability_state)
487    SPN("Reserved", 4)
488    SPN("Bus Voltage Request", 16, spn_types.volts, 0.05)
489    SPN("Transportability SOC", 8, spn_types.percent, 0.5)
490    SPN("Reserved", 4 * 8)
491
492with PGNType(0xFF05, "PropB_05", "Battery Power Capability Prediction 1", 5):
493    SPN("Reserved", 8)
494    SPN("Power Prediction (10s)", 16, spn_types.watts)
495    SPN("Power Prediction (30s)", 16, spn_types.watts)
496    SPN("Reserved", 3 * 8)
497
498with PGNType(0xFF06, "PropB_06", "Configuration State Message 1", 6):
499    SPN("Dormant 1 State", 2, spn_types.on_off_state)
500    SPN("Dormant 2 State", 2, spn_types.on_off_state)
501    SPN("Master Power Switch State", 2, spn_types.on_off_state)
502    SPN("Configuration Pin 1 State", 2, spn_types.on_off_state)
503    SPN("Configuration Pin 2 State", 2, spn_types.on_off_state)
504    SPN("Configuration Pin 3 State", 2, spn_types.on_off_state)
505    SPN("Configuration Pin 4 State", 2, spn_types.on_off_state)
506    SPN("Configuration Pin 5 State", 2, spn_types.on_off_state)
507    SPN("Configuration Pin 6 State", 2, spn_types.on_off_state)
508    SPN("Virtual Master Power Switch State", 2, spn_types.on_off_state)
509    SPN("Reserved", 4)
510    SPN("Battery Battle-override State", 2, spn_types.on_off_state)
511    SPN("Maintenance State", 2, spn_types.maintenance_state)
512    SPN("Automated Heater Function State", 2, spn_types.on_off_state)
513    SPN("Battery Heater(s) State", 2, spn_types.on_off_state)
514    SPN("Contactor(s) Control State", 2, spn_types.contactor_control_state)
515    SPN("Standby State", 2, spn_types.standby_state)
516    SPN("Reserved", 4)
517    SPN("Baud Rate Overwrite State", 2, spn_types.baud_rate_overide_state)
518    SPN("Position Identity Overwrite State", 2, spn_types.position_identity_overwrite_state)
519    SPN("Configure VPMS Function State", 2, spn_types.on_off_state)
520    SPN("Pulse Power Control State", 2, spn_types.on_off_state)
521    SPN("Reserved", 16)
522
523with PGNType(0xFF07, "PropB_07", "Protected State Message 1", 3):
524    SPN("Protected State Warning", 3, spn_types.protected_state_warning)
525    SPN("Reserved", 5)
526    SPN("Failed Exit Attempts Count", 8, spn_types.failed_exit_attempts_count)
527    SPN("Protected State Timeout", 16, spn_types.protected_state_timeout)
528    SPN("Load Indicator", 2, spn_types.load_indicator)
529
530with PGNType(0xFF08, "PropB_08", "Application Management States 1", 6):
531    SPN("Reserved", 8)
532    SPN("SOC Reserve Limit", 8, spn_types.soc_reserve_limit)
533    SPN("Application Overcurrent Limit 1", 8, spn_types.application_overcurrent_limit)
534    SPN("Application Overcurrent Period 1", 8, spn_types.application_overcurrent_period)
535    SPN("Application Overcurrent Limit 2", 8, spn_types.application_overcurrent_limit)
536    SPN("Application Overcurrent Period 2", 8, spn_types.application_overcurrent_period)
537    SPN("Reserved", 16)
538
539
540# Receive Messages Group
541with PGNType(0xEB00, "TP.DT", "Transport Protocol – Data Transfer", 7):
542    SPN("Sequence number", 8)
543    SPN("Data", 7 * 8, spn_types.bytes_map)
544
545with PGNType(0xEC00, "TP.CM", "Transport Protocol – Connection Management", 7, wrapped_data=16):
546    SPN("Control", 8, spn_types.tpcm_control)
547    SPN("Message Size", 16)
548    SPN("Packet Count", 8)
549    SPN("Maximum packets per CTS", 8, spn_types.cts_packets)
550    SPN("PGN", 3 * 8, data_type=lambda pgn: PGN[pgn].name)
551with PGNType(0xEC00, "TP.CM", "Transport Protocol – Connection Management", 7, wrapped_data=17):
552    SPN("Control", 8, spn_types.tpcm_control)
553    SPN("Packets that can be sent", 8)
554    SPN("Next packet#", 8)
555    SPN("Reserved", 16)
556    SPN("PGN", 3 * 8, data_type=lambda pgn: PGN[pgn].name)
557with PGNType(0xEC00, "TP.CM", "Transport Protocol – Connection Management", 7, wrapped_data=19):
558    SPN("Control", 8, spn_types.tpcm_control)
559    SPN("Message Size", 16)
560    SPN("Packet Count", 8)
561    SPN("Reserved", 8)
562    SPN("PGN", 3 * 8, data_type=lambda pgn: PGN[pgn].name)
563with PGNType(0xEC00, "TP.CM", "Transport Protocol – Connection Management", 7, wrapped_data=255):
564    SPN("Control", 8, spn_types.tpcm_control)
565    SPN("Connection Abort reason", 8, spn_types.abortion_reason)
566    SPN("Role of Sender", 2, spn_types.sender_role)
567    SPN("Reserved", 22)
568    SPN("PGN", 3 * 8, data_type=lambda pgn: PGN[pgn].name)
569with PGNType(0xEC00, "TP.CM", "Transport Protocol – Connection Management", 7, wrapped_data=32):
570    SPN("Control", 8, spn_types.tpcm_control)
571    SPN("Message Size", 16)
572    SPN("Packet Count", 8)
573    SPN("Reserved", 8)
574    SPN("PGN", 3 * 8, data_type=lambda pgn: PGN[pgn].name)
575
576with PGNType(0x9300, "NM", "NAME Management Message"):
577    SPN("NAME Checksum/Error Code", 8, spn_types.name_error_code)
578    SPN("Manufacturer Code qualifier flag", 1, spn_types.valid_flag)
579    SPN("ECU Instance qualifier flag", 1, spn_types.valid_flag)
580    SPN("Function Instance qualifier flag", 1, spn_types.valid_flag)
581    SPN("Function qualifier flag", 1, spn_types.valid_flag)
582    SPN("Vehicle System qualifier flag", 1, spn_types.valid_flag)
583    SPN("Vehicle System Instance qualifier flag", 1, spn_types.valid_flag)
584    SPN("Industry Group qualifier flag", 1, spn_types.valid_flag)
585    SPN("Arbitrary Address Capable qualifier flag", 1, spn_types.valid_flag)
586    SPN("NM Control Mode indicator", 4, spn_types.nm_control_mode)
587    SPN("Reserved", 1)
588    SPN("Commanded Manufacturer Code", 11)
589    SPN("Commanded ECU Instance", 3)
590    SPN("Commanded Function Instance", 5)
591    SPN("Commanded Function", 8)
592    SPN("Reserved", 1)
593    SPN("Commanded Vehicle System", 7)
594    SPN("Commanded Vehicle System Instance", 4)
595    SPN("Commanded Industry Group", 3)
596    SPN("Commanded Arbitrary Address Capable", 1)
597
598with PGNType(0xEA00, "RQST", "Request", 3):
599    SPN("PGN", 3 * 8, data_type=lambda pgn: PGN[pgn].name)
600
601with PGNType(0xFED8, "CA", "Commanded Address"):
602    SPN("Identity Number", 21, spn_types.bytes_map)
603    SPN("Manufacturer Code", 11, spn_types.manufacturer_id)
604    SPN("ECU Instance", 3, spn_types.integer, 1, 1)
605    SPN("Function Instance", 5, spn_types.integer, 1, 1)
606    SPN("Function", 8, spn_types.function_id)
607    SPN("Reserved", 1)
608    SPN("Vehicle System", 7, spn_types.vehicle_system)
609    SPN("Vehicle System Instance", 4, spn_types.integer, 1, 1)
610    SPN("Industry Group", 3, spn_types.industry_group)
611    SPN("Arbitrary Address Capable", 1, spn_types.bool_map)
612    SPN("New source address", 8, spn_types.addresses)
613
614with PGNType(0xDF00, "DM13", "Stop Start Broadcast"):
615    SPN("Current data link", 2, spn_types.stop_start_cmd)
616    SPN("SAE J1587 network", 2, spn_types.stop_start_cmd)
617    SPN("SAE J1922 network", 2, spn_types.stop_start_cmd)
618    SPN("SAE J1939 network #1, primary vehicle network ", 2, spn_types.stop_start_cmd)
619    SPN("SAE J1939 network #2", 2, spn_types.stop_start_cmd)
620    SPN("ISO 9141 network", 2, spn_types.stop_start_cmd)
621    SPN("SAE J1850 networ", 2, spn_types.stop_start_cmd)
622    SPN("Other, manufacturer-specified port", 2, spn_types.stop_start_cmd)
623    SPN("SAE J1939 network #3", 2, spn_types.stop_start_cmd)
624    SPN("Proprietary network #1", 2, spn_types.stop_start_cmd)
625    SPN("Proprietary network #2", 2, spn_types.stop_start_cmd)
626    SPN("SAE J1939 network #4", 2, spn_types.stop_start_cmd)
627    SPN("Hold signal", 4, spn_types.stop_start_cmd)
628    SPN("Suspend signal", 4, spn_types.stop_start_cmd)
629    SPN("Suspend duration", 16, spn_types.stop_start_cmd)
630    SPN("SAE J1939 network #5", 2, spn_types.stop_start_cmd)
631    SPN("SAE J1939 network #6", 2, spn_types.stop_start_cmd)
632    SPN("SAE J1939 network #7", 2, spn_types.stop_start_cmd)
633    SPN("SAE J1939 network #8", 2, spn_types.stop_start_cmd)
634    SPN("Reserved", 2)
635    SPN("SAE J1939 network #9", 2, spn_types.stop_start_cmd)
636    SPN("SAE J1939 network #10", 2, spn_types.stop_start_cmd)
637    SPN("SAE J1939 network #11", 2, spn_types.stop_start_cmd)
638
639with PGNType(0xD900, "DM14", "Memory Access Request"):
640    SPN("Length/number requested (lower)", 8)
641    SPN("Reserved", 1)
642    SPN("Command", 3, spn_types.memory_command)
643    SPN("Pointer type", 1, spn_types.pointer_type)
644    SPN("Length/number requested (upper)", 3)
645    SPN("Pointer", 3 * 8, spn_types.bytes_map)
646    SPN("Pointer extension", 8, spn_types.pointer_extension)
647    SPN("Key/User_Level", 2 * 8, spn_types.security_key)
648
649with PGNType(0xD700, "DM16", "Binary Data Transfer ", 6):  # priority should be seven when transport protocol is used
650    SPN("Data length", 8, spn_types.packet_length)
651    SPN("Raw binary data", 7 * 8)  # n bytes FIXME(JA): handle transport protocol
652
653with PGNType(0xD600, "DM17", "Boot Load Data", 6):
654    SPN("Boot load data", 8 * 8)
655
656with PGNType(0xD400, "DM18", "Data Security", 6):  # priority should be seven when transport protocol is used
657    # Possibly not supported on SAFT
658    SPN("Security entity length (lower)", 8)
659    SPN("Security entity type", 4, spn_types.security_type)
660    SPN("Security entity length (upper)", 4)
661    SPN("Data security parameter")  # n bytes FIXME(JA): handle transport protocol
662
663with PGNType(0xEF00, "PropA", "Battery Configuration Command", wrapped_data=0):
664    SPN("Control", 8)
665    SPN("Battery Battle Override", 2)
666    SPN("Automatic Heater Function", 2)
667    SPN("Command Contactor(s)", 2)
668    SPN("Primary CAN Interface", 2)
669    SPN("Reset", 2)
670    SPN("Maintenance State", 2)
671    SPN("Virtual Master Power Switch Command", 2)
672    SPN("Pulse Power Control", 2)
673    SPN("Reserved", 5 * 8)
674with PGNType(0xEF00, "PropA", "Battery Configuration Command", wrapped_data=1):
675    SPN("Control", 8)
676    SPN("Restore Defaults", 2)
677    SPN("Heartbeat CAN Interface", 2)
678    SPN("Reserved", 4)
679    SPN("Overwrite Baud Rate", 2)
680    SPN("Overwrite Position ID", 4)
681    SPN("Configure VMPS Function", 2)
682    SPN("Configure PGN", 3 * 8)
683    SPN("PGN Tx Rate", 5)
684    SPN("Reserved", 11)
685with PGNType(0xEF00, "PropA", "Battery Configuration Command", wrapped_data=2):
686    SPN("Control", 8)
687    SPN("Standby", 2)
688    SPN("Reserved", 6)
689    SPN("Standby Suspend Period", 8, spn_types.minutes)
690    SPN("Transportability Command", 8, spn_types.percent, 0.5)
691    SPN("Reserved", 4 * 8)
692with PGNType(0xEF00, "PropA", "Battery Configuration Command", wrapped_data=3):
693    SPN("Control", 8)
694    SPN("SOC Reserve Limit", 8)
695    SPN("Application Overcurrent Limit 1", 8)
696    SPN("Application Overcurrent Period 1", 8)
697    SPN("Application Overcurrent Limit 2", 8)
698    SPN("Application Overcurrent Period 2", 8)
699    SPN("Reserved", 2 * 8)
700# TODO(JA): implement other command extensions (41-4A)
701
702PGNType(0xFECC, "DM3", "Diagnostic Data Clear")
@dataclass(eq=False)
class SPN:
39@dataclass(eq=False)
40class SPN:
41    """The Suspect Parameter, which describes how to interpret a subset of data in a CAN Frame."""
42
43    manager: ClassVar[PGNType | None] = None
44
45    name: str = ""
46    length: int = 0  # bits
47    data_type: spn_types.Stringify = spn_types.integer
48    resolution: float = 1
49    offset: float = 0
50    deliminator = 0x2A
51    recurring: bool = False  # TODO(JA): implement recurring data
52    description: str = ""
53
54    def __post_init__(self):
55        if SPN.manager:  # Append to parent if possible
56            SPN.manager.data_field.append(self)
57
58    def __str__(self):
59        return "\n".join(f"{attr.replace('_', ' ').title()}: {val}" for attr, val in self.__dict__.items())
60
61    def decode(self, value: float) -> float:
62        """Adjust a value base on resolution and offset."""
63        return value * self.resolution + self.offset
64
65    def encode(self, value: float) -> int:
66        """Adjust a value base on resolution and offset."""
67        return int((value - self.offset) / self.resolution)

The Suspect Parameter, which describes how to interpret a subset of data in a CAN Frame.

SPN( name: str = '', length: int = 0, data_type: Callable[[int], str] = <function generate_map.<locals>.mapping_func>, resolution: float = 1, offset: float = 0, recurring: bool = False, description: str = '')
manager: ClassVar[PGNType | None] = None
name: str = ''
length: int = 0
def data_type(value: int) -> str:
62    def mapping_func(value: int) -> str:  # pylint: disable=inconsistent-return-statements
63        if isinstance(mapping, dict):
64            return list(mapping.values())[bisect.bisect_right(list(mapping.keys()), value) - 1]
65        if isinstance(mapping, str):
66            return mapping
67        if isinstance(mapping, list):
68            return mapping[value] if 0 <= value < len(mapping) else ""
resolution: float = 1
offset: float = 0
deliminator = 42
recurring: bool = False
description: str = ''
def decode(self, value: float) -> float:
61    def decode(self, value: float) -> float:
62        """Adjust a value base on resolution and offset."""
63        return value * self.resolution + self.offset

Adjust a value base on resolution and offset.

def encode(self, value: float) -> int:
65    def encode(self, value: float) -> int:
66        """Adjust a value base on resolution and offset."""
67        return int((value - self.offset) / self.resolution)

Adjust a value base on resolution and offset.

@dataclass
class PGNType:
 70@dataclass
 71class PGNType:
 72    """
 73    The parameter group number (PGN) acts as a key into a table of payload definitions. The table SPNs & PGNs
 74    in J1939DA maps the standardised PGNs to their payload definitions.
 75    """
 76
 77    instances: ClassVar[dict[int | None, dict[int | str, PGNType]]] = {}  # Map ID to instance
 78
 79    id: int
 80    short_name: str = ""
 81    name: str = ""
 82    default_priority: int = 6
 83    wrapped_data: int | None = None
 84    data_field: list[SPN] = field(default_factory=list)
 85    valid: bool = True
 86
 87    def __post_init__(self):
 88        """Save reference in class dict."""
 89        # FIXME(JA): name to id map and vice versa
 90        if self.valid:
 91            PGNType.instances[self.wrapped_data] = PGNType.instances.get(self.wrapped_data, {})
 92            PGNType.instances[self.wrapped_data][self.id] = self
 93            PGNType.instances[self.wrapped_data][self.short_name] = self
 94            PGNType.instances[self.wrapped_data][self.name] = self
 95
 96    @property
 97    def data_page(self) -> int:
 98        """True if using data pages, else False."""
 99        return self.id >> 16
100
101    def __str__(self):
102        lines = []
103        for attribute, value in self.__dict__.items():
104            attribute = attribute.replace("_", " ").title()
105            if attribute == "Id":
106                value = f"{value} (0x{value:06X})"
107            if attribute.lower() not in ("data field", "valid", "wrapped data"):
108                lines.append(f"{attribute.title()}: {value}")
109        return "\n".join(lines)
110
111    def __enter__(self):
112        """Set PGN as parent"""
113        SPN.manager = self
114        return self
115
116    def __exit__(self, exception_type, exception_value, traceback):
117        """Remove PGN as parent."""
118        SPN.manager = None

The parameter group number (PGN) acts as a key into a table of payload definitions. The table SPNs & PGNs in J1939DA maps the standardised PGNs to their payload definitions.

PGNType( id: int, short_name: str = '', name: str = '', default_priority: int = 6, wrapped_data: int | None = None, data_field: list[SPN] = <factory>, valid: bool = True)
instances: ClassVar[dict[int | None, dict[int | str, PGNType]]] = {None: {59392: PGNType(id=59392, short_name='ACKM', name='Acknowledgement', default_priority=6, wrapped_data=None, data_field=[SPN(name='Control Byte', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=6, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Group Function Value', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Requestor Source Address', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Parameter Group Number (of message acknowledged)', length=24, data_type=<function bytes_map>, resolution=1, offset=0, recurring=False, description='')], valid=True), 'ACKM': PGNType(id=59392, short_name='ACKM', name='Acknowledgement', default_priority=6, wrapped_data=None, data_field=[SPN(name='Control Byte', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=6, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Group Function Value', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Requestor Source Address', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Parameter Group Number (of message acknowledged)', length=24, data_type=<function bytes_map>, resolution=1, offset=0, recurring=False, description='')], valid=True), 'Acknowledgement': PGNType(id=59392, short_name='ACKM', name='Acknowledgement', default_priority=6, wrapped_data=None, data_field=[SPN(name='Control Byte', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=6, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Group Function Value', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Requestor Source Address', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Parameter Group Number (of message acknowledged)', length=24, data_type=<function bytes_map>, resolution=1, offset=0, recurring=False, description='')], valid=True), 60928: PGNType(id=60928, short_name='AC', name='Address Claimed', default_priority=6, wrapped_data=None, data_field=[SPN(name='Identity Number', length=21, data_type=<function bytes_map>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Manufacturer Code', length=11, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='ECU Instance', length=3, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=1, recurring=False, description=''), SPN(name='Function Instance', length=5, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=1, recurring=False, description=''), SPN(name='Function', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=1, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Vehicle System', length=7, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Vehicle System Instance', length=4, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=1, recurring=False, description=''), SPN(name='Industry Group', length=3, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Arbitrary Address Capable', length=1, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description='')], valid=True), 'AC': PGNType(id=60928, short_name='AC', name='Address Claimed', default_priority=6, wrapped_data=None, data_field=[SPN(name='Identity Number', length=21, data_type=<function bytes_map>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Manufacturer Code', length=11, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='ECU Instance', length=3, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=1, recurring=False, description=''), SPN(name='Function Instance', length=5, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=1, recurring=False, description=''), SPN(name='Function', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=1, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Vehicle System', length=7, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Vehicle System Instance', length=4, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=1, recurring=False, description=''), SPN(name='Industry Group', length=3, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Arbitrary Address Capable', length=1, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description='')], valid=True), 'Address Claimed': PGNType(id=60928, short_name='AC', name='Address Claimed', default_priority=6, wrapped_data=None, data_field=[SPN(name='Identity Number', length=21, data_type=<function bytes_map>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Manufacturer Code', length=11, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='ECU Instance', length=3, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=1, recurring=False, description=''), SPN(name='Function Instance', length=5, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=1, recurring=False, description=''), SPN(name='Function', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=1, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Vehicle System', length=7, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Vehicle System Instance', length=4, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=1, recurring=False, description=''), SPN(name='Industry Group', length=3, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Arbitrary Address Capable', length=1, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description='')], valid=True), 64965: PGNType(id=64965, short_name='ECUID', name='ECU Identification Information', default_priority=6, wrapped_data=None, data_field=[SPN(name='Part Number', length=0, data_type=<function ascii_map>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Serial Number', length=0, data_type=<function ascii_map>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Location/Name', length=0, data_type=<function ascii_map>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=0, data_type=<function ascii_map>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Manufacturer', length=0, data_type=<function ascii_map>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Classification', length=0, data_type=<function ascii_map>, resolution=1, offset=0, recurring=False, description='')], valid=True), 'ECUID': PGNType(id=64965, short_name='ECUID', name='ECU Identification Information', default_priority=6, wrapped_data=None, data_field=[SPN(name='Part Number', length=0, data_type=<function ascii_map>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Serial Number', length=0, data_type=<function ascii_map>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Location/Name', length=0, data_type=<function ascii_map>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=0, data_type=<function ascii_map>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Manufacturer', length=0, data_type=<function ascii_map>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Classification', length=0, data_type=<function ascii_map>, resolution=1, offset=0, recurring=False, description='')], valid=True), 'ECU Identification Information': PGNType(id=64965, short_name='ECUID', name='ECU Identification Information', default_priority=6, wrapped_data=None, data_field=[SPN(name='Part Number', length=0, data_type=<function ascii_map>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Serial Number', length=0, data_type=<function ascii_map>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Location/Name', length=0, data_type=<function ascii_map>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=0, data_type=<function ascii_map>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Manufacturer', length=0, data_type=<function ascii_map>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Classification', length=0, data_type=<function ascii_map>, resolution=1, offset=0, recurring=False, description='')], valid=True), 65242: PGNType(id=65242, short_name='SOFT', name='Software Identification', default_priority=6, wrapped_data=None, data_field=[SPN(name='Number of Software Identification Fields', length=0, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Software Identification for Battery’s Primary ECU', length=0, data_type=<function ascii_map>, resolution=1, offset=0, recurring=False, description='')], valid=True), 'SOFT': PGNType(id=65242, short_name='SOFT', name='Software Identification', default_priority=6, wrapped_data=None, data_field=[SPN(name='Number of Software Identification Fields', length=0, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Software Identification for Battery’s Primary ECU', length=0, data_type=<function ascii_map>, resolution=1, offset=0, recurring=False, description='')], valid=True), 'Software Identification': PGNType(id=65242, short_name='SOFT', name='Software Identification', default_priority=6, wrapped_data=None, data_field=[SPN(name='Number of Software Identification Fields', length=0, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Software Identification for Battery’s Primary ECU', length=0, data_type=<function ascii_map>, resolution=1, offset=0, recurring=False, description='')], valid=True), 65254: PGNType(id=65254, short_name='TD', name='Time/Date', default_priority=6, wrapped_data=None, data_field=[SPN(name='Second', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.25, offset=0, recurring=False, description=''), SPN(name='Minute', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Hour', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Month', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Day', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.25, offset=0, recurring=False, description=''), SPN(name='Year', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=16, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description='')], valid=True), 'TD': PGNType(id=65254, short_name='TD', name='Time/Date', default_priority=6, wrapped_data=None, data_field=[SPN(name='Second', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.25, offset=0, recurring=False, description=''), SPN(name='Minute', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Hour', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Month', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Day', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.25, offset=0, recurring=False, description=''), SPN(name='Year', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=16, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description='')], valid=True), 'Time/Date': PGNType(id=65254, short_name='TD', name='Time/Date', default_priority=6, wrapped_data=None, data_field=[SPN(name='Second', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.25, offset=0, recurring=False, description=''), SPN(name='Minute', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Hour', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Month', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Day', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.25, offset=0, recurring=False, description=''), SPN(name='Year', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=16, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description='')], valid=True), 65104: PGNType(id=65104, short_name='BT1', name='Battery Temperature', default_priority=6, wrapped_data=None, data_field=[SPN(name='Battery 1 Temperature', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=-40, recurring=False, description=''), SPN(name='Battery 2 Temperature', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=-40, recurring=False, description=''), SPN(name='Battery 3 Temperature', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=-40, recurring=False, description=''), SPN(name='Battery 4 Temperature', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=-40, recurring=False, description='')], valid=True), 'BT1': PGNType(id=65104, short_name='BT1', name='Battery Temperature', default_priority=6, wrapped_data=None, data_field=[SPN(name='Battery 1 Temperature', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=-40, recurring=False, description=''), SPN(name='Battery 2 Temperature', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=-40, recurring=False, description=''), SPN(name='Battery 3 Temperature', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=-40, recurring=False, description=''), SPN(name='Battery 4 Temperature', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=-40, recurring=False, description='')], valid=True), 'Battery Temperature': PGNType(id=65104, short_name='BT1', name='Battery Temperature', default_priority=6, wrapped_data=None, data_field=[SPN(name='Battery 1 Temperature', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=-40, recurring=False, description=''), SPN(name='Battery 2 Temperature', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=-40, recurring=False, description=''), SPN(name='Battery 3 Temperature', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=-40, recurring=False, description=''), SPN(name='Battery 4 Temperature', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=-40, recurring=False, description='')], valid=True), 64694: PGNType(id=64694, short_name='VEP5', name='Vehicle Electrical Power #5', default_priority=6, wrapped_data=None, data_field=[SPN(name='SLI Battery Pack State of Charge', length=16, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.0025, offset=0, recurring=False, description=''), SPN(name='SLI Battery Pack Capacity', length=16, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='SLI Battery Pack Health', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0.5, recurring=False, description=''), SPN(name='SLI Cranking Predicted Minimum Battery Voltage', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.2, offset=0, recurring=False, description=''), SPN(name='Reserved', length=16, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description='')], valid=True), 'VEP5': PGNType(id=64694, short_name='VEP5', name='Vehicle Electrical Power #5', default_priority=6, wrapped_data=None, data_field=[SPN(name='SLI Battery Pack State of Charge', length=16, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.0025, offset=0, recurring=False, description=''), SPN(name='SLI Battery Pack Capacity', length=16, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='SLI Battery Pack Health', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0.5, recurring=False, description=''), SPN(name='SLI Cranking Predicted Minimum Battery Voltage', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.2, offset=0, recurring=False, description=''), SPN(name='Reserved', length=16, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description='')], valid=True), 'Vehicle Electrical Power #5': PGNType(id=64694, short_name='VEP5', name='Vehicle Electrical Power #5', default_priority=6, wrapped_data=None, data_field=[SPN(name='SLI Battery Pack State of Charge', length=16, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.0025, offset=0, recurring=False, description=''), SPN(name='SLI Battery Pack Capacity', length=16, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='SLI Battery Pack Health', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0.5, recurring=False, description=''), SPN(name='SLI Cranking Predicted Minimum Battery Voltage', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.2, offset=0, recurring=False, description=''), SPN(name='Reserved', length=16, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description='')], valid=True), 65226: PGNType(id=65226, short_name='DM1', name='Active Diagnostic Trouble Codes', default_priority=6, wrapped_data=None, data_field=[SPN(name='Protect Lamp', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Amber Warning Lamp', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Red Stop Lamp', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Malfunction Indicator Lamp', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Flash Protect Lamp', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Flash Amber Warning Lamp', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Flash Red Stop Lamp', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Flash Malfunction Indicator Lamp', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='DTC1.Suspect_Parameter_Number', length=19, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=True, description=''), SPN(name='DTC1.Failure_Mode_Identifier', length=5, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='DTC1.Occurrence_Count', length=7, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='DTC1.SPN_Conversion_Method', length=1, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description='')], valid=True), 'DM1': PGNType(id=65226, short_name='DM1', name='Active Diagnostic Trouble Codes', default_priority=6, wrapped_data=None, data_field=[SPN(name='Protect Lamp', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Amber Warning Lamp', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Red Stop Lamp', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Malfunction Indicator Lamp', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Flash Protect Lamp', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Flash Amber Warning Lamp', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Flash Red Stop Lamp', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Flash Malfunction Indicator Lamp', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='DTC1.Suspect_Parameter_Number', length=19, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=True, description=''), SPN(name='DTC1.Failure_Mode_Identifier', length=5, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='DTC1.Occurrence_Count', length=7, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='DTC1.SPN_Conversion_Method', length=1, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description='')], valid=True), 'Active Diagnostic Trouble Codes': PGNType(id=65226, short_name='DM1', name='Active Diagnostic Trouble Codes', default_priority=6, wrapped_data=None, data_field=[SPN(name='Protect Lamp', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Amber Warning Lamp', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Red Stop Lamp', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Malfunction Indicator Lamp', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Flash Protect Lamp', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Flash Amber Warning Lamp', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Flash Red Stop Lamp', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Flash Malfunction Indicator Lamp', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='DTC1.Suspect_Parameter_Number', length=19, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=True, description=''), SPN(name='DTC1.Failure_Mode_Identifier', length=5, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='DTC1.Occurrence_Count', length=7, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='DTC1.SPN_Conversion_Method', length=1, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description='')], valid=True), 65227: PGNType(id=65227, short_name='DM2', name='Previously Active Diagnostic Trouble Codes', default_priority=6, wrapped_data=None, data_field=[SPN(name='Protect Lamp', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Amber Warning Lamp', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Red Stop Lamp', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Malfunction Indicator Lamp', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Flash Protect Lamp', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Flash Amber Warning Lamp', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Flash Red Stop Lamp', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Flash Malfunction Indicator Lamp', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='DTC1.Suspect_Parameter_Number', length=19, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=True, description=''), SPN(name='DTC1.Failure_Mode_Identifier', length=5, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='DTC1.Occurrence_Count', length=7, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='DTC1.SPN_Conversion_Method', length=1, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description='')], valid=True), 'DM2': PGNType(id=65227, short_name='DM2', name='Previously Active Diagnostic Trouble Codes', default_priority=6, wrapped_data=None, data_field=[SPN(name='Protect Lamp', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Amber Warning Lamp', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Red Stop Lamp', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Malfunction Indicator Lamp', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Flash Protect Lamp', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Flash Amber Warning Lamp', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Flash Red Stop Lamp', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Flash Malfunction Indicator Lamp', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='DTC1.Suspect_Parameter_Number', length=19, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=True, description=''), SPN(name='DTC1.Failure_Mode_Identifier', length=5, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='DTC1.Occurrence_Count', length=7, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='DTC1.SPN_Conversion_Method', length=1, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description='')], valid=True), 'Previously Active Diagnostic Trouble Codes': PGNType(id=65227, short_name='DM2', name='Previously Active Diagnostic Trouble Codes', default_priority=6, wrapped_data=None, data_field=[SPN(name='Protect Lamp', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Amber Warning Lamp', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Red Stop Lamp', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Malfunction Indicator Lamp', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Flash Protect Lamp', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Flash Amber Warning Lamp', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Flash Red Stop Lamp', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Flash Malfunction Indicator Lamp', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='DTC1.Suspect_Parameter_Number', length=19, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=True, description=''), SPN(name='DTC1.Failure_Mode_Identifier', length=5, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='DTC1.Occurrence_Count', length=7, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='DTC1.SPN_Conversion_Method', length=1, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description='')], valid=True), 55296: PGNType(id=55296, short_name='DM15', name='Memory Access Response', default_priority=6, wrapped_data=None, data_field=[SPN(name='Length/Number Allowed (lower)', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=1, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Status', length=3, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=1, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Length/Number Allowed (upper)', length=3, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Error Indicator / EDC Parameter ', length=24, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='EDCP Extension', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Seed', length=16, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description='')], valid=True), 'DM15': PGNType(id=55296, short_name='DM15', name='Memory Access Response', default_priority=6, wrapped_data=None, data_field=[SPN(name='Length/Number Allowed (lower)', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=1, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Status', length=3, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=1, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Length/Number Allowed (upper)', length=3, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Error Indicator / EDC Parameter ', length=24, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='EDCP Extension', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Seed', length=16, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description='')], valid=True), 'Memory Access Response': PGNType(id=55296, short_name='DM15', name='Memory Access Response', default_priority=6, wrapped_data=None, data_field=[SPN(name='Length/Number Allowed (lower)', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=1, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Status', length=3, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=1, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Length/Number Allowed (upper)', length=3, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Error Indicator / EDC Parameter ', length=24, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='EDCP Extension', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Seed', length=16, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description='')], valid=True), 65490: PGNType(id=65490, short_name='PropB_D2', name='Battery ECU Status', default_priority=5, wrapped_data=None, data_field=[SPN(name='Battery Mode', length=3, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='FET Array State', length=3, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='SOC Mode', length=3, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=3, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Fast Overload Detection', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Overload Latch Status', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Charge Overload Detection', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Overload Latch Clear Status', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Heater Control', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Charge FET State', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Discharge FET State', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Too Cold to Charge', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Charge Voltage Present', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Overcharge Protect Latch Status', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Ideal Diode State', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='FET Power State', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Heat Reason', length=4, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Long-Term Fault Log Status', length=4, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Software Part Number', length=16, data_type=<function bytes_map>, resolution=1, offset=0, recurring=False, description='')], valid=True), 'PropB_D2': PGNType(id=65490, short_name='PropB_D2', name='Battery ECU Status', default_priority=5, wrapped_data=None, data_field=[SPN(name='Battery Mode', length=3, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='FET Array State', length=3, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='SOC Mode', length=3, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=3, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Fast Overload Detection', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Overload Latch Status', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Charge Overload Detection', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Overload Latch Clear Status', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Heater Control', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Charge FET State', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Discharge FET State', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Too Cold to Charge', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Charge Voltage Present', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Overcharge Protect Latch Status', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Ideal Diode State', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='FET Power State', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Heat Reason', length=4, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Long-Term Fault Log Status', length=4, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Software Part Number', length=16, data_type=<function bytes_map>, resolution=1, offset=0, recurring=False, description='')], valid=True), 'Battery ECU Status': PGNType(id=65490, short_name='PropB_D2', name='Battery ECU Status', default_priority=5, wrapped_data=None, data_field=[SPN(name='Battery Mode', length=3, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='FET Array State', length=3, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='SOC Mode', length=3, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=3, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Fast Overload Detection', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Overload Latch Status', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Charge Overload Detection', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Overload Latch Clear Status', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Heater Control', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Charge FET State', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Discharge FET State', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Too Cold to Charge', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Charge Voltage Present', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Overcharge Protect Latch Status', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Ideal Diode State', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='FET Power State', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Heat Reason', length=4, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Long-Term Fault Log Status', length=4, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Software Part Number', length=16, data_type=<function bytes_map>, resolution=1, offset=0, recurring=False, description='')], valid=True), 65492: PGNType(id=65492, short_name='PropB_D4', name='Battery Cell Status 1', default_priority=6, wrapped_data=None, data_field=[SPN(name='Cell Voltage 1', length=16, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.0001, offset=0, recurring=False, description=''), SPN(name='Cell Voltage 2', length=16, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.0001, offset=0, recurring=False, description=''), SPN(name='Cell Voltage 3', length=16, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.0001, offset=0, recurring=False, description=''), SPN(name='Cell Voltage 4', length=16, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.0001, offset=0, recurring=False, description='')], valid=True), 'PropB_D4': PGNType(id=65492, short_name='PropB_D4', name='Battery Cell Status 1', default_priority=6, wrapped_data=None, data_field=[SPN(name='Cell Voltage 1', length=16, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.0001, offset=0, recurring=False, description=''), SPN(name='Cell Voltage 2', length=16, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.0001, offset=0, recurring=False, description=''), SPN(name='Cell Voltage 3', length=16, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.0001, offset=0, recurring=False, description=''), SPN(name='Cell Voltage 4', length=16, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.0001, offset=0, recurring=False, description='')], valid=True), 'Battery Cell Status 1': PGNType(id=65492, short_name='PropB_D4', name='Battery Cell Status 1', default_priority=6, wrapped_data=None, data_field=[SPN(name='Cell Voltage 1', length=16, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.0001, offset=0, recurring=False, description=''), SPN(name='Cell Voltage 2', length=16, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.0001, offset=0, recurring=False, description=''), SPN(name='Cell Voltage 3', length=16, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.0001, offset=0, recurring=False, description=''), SPN(name='Cell Voltage 4', length=16, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.0001, offset=0, recurring=False, description='')], valid=True), 65493: PGNType(id=65493, short_name='PropB_D5', name='Battery Cell Status 2', default_priority=6, wrapped_data=None, data_field=[SPN(name='Cell Voltage 5', length=16, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.0001, offset=0, recurring=False, description=''), SPN(name='Cell Voltage 6', length=16, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.0001, offset=0, recurring=False, description=''), SPN(name='Cell Voltage 7', length=16, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.0001, offset=0, recurring=False, description=''), SPN(name='Cell Voltage 8', length=16, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.0001, offset=0, recurring=False, description='')], valid=True), 'PropB_D5': PGNType(id=65493, short_name='PropB_D5', name='Battery Cell Status 2', default_priority=6, wrapped_data=None, data_field=[SPN(name='Cell Voltage 5', length=16, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.0001, offset=0, recurring=False, description=''), SPN(name='Cell Voltage 6', length=16, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.0001, offset=0, recurring=False, description=''), SPN(name='Cell Voltage 7', length=16, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.0001, offset=0, recurring=False, description=''), SPN(name='Cell Voltage 8', length=16, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.0001, offset=0, recurring=False, description='')], valid=True), 'Battery Cell Status 2': PGNType(id=65493, short_name='PropB_D5', name='Battery Cell Status 2', default_priority=6, wrapped_data=None, data_field=[SPN(name='Cell Voltage 5', length=16, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.0001, offset=0, recurring=False, description=''), SPN(name='Cell Voltage 6', length=16, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.0001, offset=0, recurring=False, description=''), SPN(name='Cell Voltage 7', length=16, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.0001, offset=0, recurring=False, description=''), SPN(name='Cell Voltage 8', length=16, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.0001, offset=0, recurring=False, description='')], valid=True), 65494: PGNType(id=65494, short_name='PropB_D6', name='Battery Performance', default_priority=5, wrapped_data=None, data_field=[SPN(name='Battery Current', length=24, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.01, offset=-82000, recurring=False, description=''), SPN(name='Battery Current Range', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Internal State of Health', length=14, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.025, offset=0, recurring=False, description=''), SPN(name='Reserved', length=24, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description='')], valid=True), 'PropB_D6': PGNType(id=65494, short_name='PropB_D6', name='Battery Performance', default_priority=5, wrapped_data=None, data_field=[SPN(name='Battery Current', length=24, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.01, offset=-82000, recurring=False, description=''), SPN(name='Battery Current Range', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Internal State of Health', length=14, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.025, offset=0, recurring=False, description=''), SPN(name='Reserved', length=24, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description='')], valid=True), 'Battery Performance': PGNType(id=65494, short_name='PropB_D6', name='Battery Performance', default_priority=5, wrapped_data=None, data_field=[SPN(name='Battery Current', length=24, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.01, offset=-82000, recurring=False, description=''), SPN(name='Battery Current Range', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Internal State of Health', length=14, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.025, offset=0, recurring=False, description=''), SPN(name='Reserved', length=24, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description='')], valid=True), 65495: PGNType(id=65495, short_name='PropB_D7', name='Battery Temperatures', default_priority=6, wrapped_data=None, data_field=[SPN(name='MCU Temperature', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=-40, recurring=False, description=''), SPN(name='Electronics Temperature 1', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=-50, recurring=False, description=''), SPN(name='Electronics Temperature 2', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=-50, recurring=False, description=''), SPN(name='Cell Temperature 1', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=-50, recurring=False, description=''), SPN(name='Cell Temperature 2', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=-50, recurring=False, description=''), SPN(name='Electronics Temperature 3', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=-50, recurring=False, description=''), SPN(name='Reserved', length=16, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description='')], valid=True), 'PropB_D7': PGNType(id=65495, short_name='PropB_D7', name='Battery Temperatures', default_priority=6, wrapped_data=None, data_field=[SPN(name='MCU Temperature', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=-40, recurring=False, description=''), SPN(name='Electronics Temperature 1', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=-50, recurring=False, description=''), SPN(name='Electronics Temperature 2', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=-50, recurring=False, description=''), SPN(name='Cell Temperature 1', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=-50, recurring=False, description=''), SPN(name='Cell Temperature 2', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=-50, recurring=False, description=''), SPN(name='Electronics Temperature 3', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=-50, recurring=False, description=''), SPN(name='Reserved', length=16, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description='')], valid=True), 'Battery Temperatures': PGNType(id=65495, short_name='PropB_D7', name='Battery Temperatures', default_priority=6, wrapped_data=None, data_field=[SPN(name='MCU Temperature', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=-40, recurring=False, description=''), SPN(name='Electronics Temperature 1', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=-50, recurring=False, description=''), SPN(name='Electronics Temperature 2', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=-50, recurring=False, description=''), SPN(name='Cell Temperature 1', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=-50, recurring=False, description=''), SPN(name='Cell Temperature 2', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=-50, recurring=False, description=''), SPN(name='Electronics Temperature 3', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=-50, recurring=False, description=''), SPN(name='Reserved', length=16, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description='')], valid=True), 65496: PGNType(id=65496, short_name='PropB_D8', name='Battery Balancing Circuit Info', default_priority=6, wrapped_data=None, data_field=[SPN(name='Cell 1 Balancing Status', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Cell 2 Balancing Status', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Cell 3 Balancing Status', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Cell 4 Balancing Status', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Cell 5 Balancing Status', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Cell 6 Balancing Status', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Cell 7 Balancing Status', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Cell 8 Balancing Status', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Cell Voltage Difference', length=16, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.0001, offset=0, recurring=False, description=''), SPN(name='Cell Voltage Sum', length=20, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.0001, offset=0, recurring=False, description=''), SPN(name='Reserved', length=12, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description='')], valid=True), 'PropB_D8': PGNType(id=65496, short_name='PropB_D8', name='Battery Balancing Circuit Info', default_priority=6, wrapped_data=None, data_field=[SPN(name='Cell 1 Balancing Status', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Cell 2 Balancing Status', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Cell 3 Balancing Status', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Cell 4 Balancing Status', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Cell 5 Balancing Status', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Cell 6 Balancing Status', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Cell 7 Balancing Status', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Cell 8 Balancing Status', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Cell Voltage Difference', length=16, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.0001, offset=0, recurring=False, description=''), SPN(name='Cell Voltage Sum', length=20, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.0001, offset=0, recurring=False, description=''), SPN(name='Reserved', length=12, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description='')], valid=True), 'Battery Balancing Circuit Info': PGNType(id=65496, short_name='PropB_D8', name='Battery Balancing Circuit Info', default_priority=6, wrapped_data=None, data_field=[SPN(name='Cell 1 Balancing Status', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Cell 2 Balancing Status', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Cell 3 Balancing Status', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Cell 4 Balancing Status', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Cell 5 Balancing Status', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Cell 6 Balancing Status', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Cell 7 Balancing Status', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Cell 8 Balancing Status', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Cell Voltage Difference', length=16, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.0001, offset=0, recurring=False, description=''), SPN(name='Cell Voltage Sum', length=20, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.0001, offset=0, recurring=False, description=''), SPN(name='Reserved', length=12, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description='')], valid=True), 65500: PGNType(id=65500, short_name='PropB_DC', name='Battery Cell Upper SOC', default_priority=6, wrapped_data=None, data_field=[SPN(name='Upper SOC Cell 1', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.5, offset=-10, recurring=False, description=''), SPN(name='Upper SOC Cell 2', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.5, offset=-10, recurring=False, description=''), SPN(name='Upper SOC Cell 3', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.5, offset=-10, recurring=False, description=''), SPN(name='Upper SOC Cell 4', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.5, offset=-10, recurring=False, description=''), SPN(name='Upper SOC Cell 5', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.5, offset=-10, recurring=False, description=''), SPN(name='Upper SOC Cell 6', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.5, offset=-10, recurring=False, description=''), SPN(name='Upper SOC Cell 7', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.5, offset=-10, recurring=False, description=''), SPN(name='Upper SOC Cell 8', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.5, offset=-10, recurring=False, description='')], valid=True), 'PropB_DC': PGNType(id=65500, short_name='PropB_DC', name='Battery Cell Upper SOC', default_priority=6, wrapped_data=None, data_field=[SPN(name='Upper SOC Cell 1', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.5, offset=-10, recurring=False, description=''), SPN(name='Upper SOC Cell 2', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.5, offset=-10, recurring=False, description=''), SPN(name='Upper SOC Cell 3', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.5, offset=-10, recurring=False, description=''), SPN(name='Upper SOC Cell 4', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.5, offset=-10, recurring=False, description=''), SPN(name='Upper SOC Cell 5', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.5, offset=-10, recurring=False, description=''), SPN(name='Upper SOC Cell 6', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.5, offset=-10, recurring=False, description=''), SPN(name='Upper SOC Cell 7', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.5, offset=-10, recurring=False, description=''), SPN(name='Upper SOC Cell 8', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.5, offset=-10, recurring=False, description='')], valid=True), 'Battery Cell Upper SOC': PGNType(id=65500, short_name='PropB_DC', name='Battery Cell Upper SOC', default_priority=6, wrapped_data=None, data_field=[SPN(name='Upper SOC Cell 1', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.5, offset=-10, recurring=False, description=''), SPN(name='Upper SOC Cell 2', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.5, offset=-10, recurring=False, description=''), SPN(name='Upper SOC Cell 3', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.5, offset=-10, recurring=False, description=''), SPN(name='Upper SOC Cell 4', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.5, offset=-10, recurring=False, description=''), SPN(name='Upper SOC Cell 5', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.5, offset=-10, recurring=False, description=''), SPN(name='Upper SOC Cell 6', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.5, offset=-10, recurring=False, description=''), SPN(name='Upper SOC Cell 7', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.5, offset=-10, recurring=False, description=''), SPN(name='Upper SOC Cell 8', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.5, offset=-10, recurring=False, description='')], valid=True), 65501: PGNType(id=65501, short_name='PropB_DD', name='Battery Cell Lower SOC', default_priority=6, wrapped_data=None, data_field=[SPN(name='Lower SOC Cell 1', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.5, offset=-10, recurring=False, description=''), SPN(name='Lower SOC Cell 2', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.5, offset=-10, recurring=False, description=''), SPN(name='Lower SOC Cell 3', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.5, offset=-10, recurring=False, description=''), SPN(name='Lower SOC Cell 4', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.5, offset=-10, recurring=False, description=''), SPN(name='Lower SOC Cell 5', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.5, offset=-10, recurring=False, description=''), SPN(name='Lower SOC Cell 6', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.5, offset=-10, recurring=False, description=''), SPN(name='Lower SOC Cell 7', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.5, offset=-10, recurring=False, description=''), SPN(name='Lower SOC Cell 8', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.5, offset=-10, recurring=False, description='')], valid=True), 'PropB_DD': PGNType(id=65501, short_name='PropB_DD', name='Battery Cell Lower SOC', default_priority=6, wrapped_data=None, data_field=[SPN(name='Lower SOC Cell 1', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.5, offset=-10, recurring=False, description=''), SPN(name='Lower SOC Cell 2', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.5, offset=-10, recurring=False, description=''), SPN(name='Lower SOC Cell 3', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.5, offset=-10, recurring=False, description=''), SPN(name='Lower SOC Cell 4', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.5, offset=-10, recurring=False, description=''), SPN(name='Lower SOC Cell 5', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.5, offset=-10, recurring=False, description=''), SPN(name='Lower SOC Cell 6', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.5, offset=-10, recurring=False, description=''), SPN(name='Lower SOC Cell 7', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.5, offset=-10, recurring=False, description=''), SPN(name='Lower SOC Cell 8', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.5, offset=-10, recurring=False, description='')], valid=True), 'Battery Cell Lower SOC': PGNType(id=65501, short_name='PropB_DD', name='Battery Cell Lower SOC', default_priority=6, wrapped_data=None, data_field=[SPN(name='Lower SOC Cell 1', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.5, offset=-10, recurring=False, description=''), SPN(name='Lower SOC Cell 2', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.5, offset=-10, recurring=False, description=''), SPN(name='Lower SOC Cell 3', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.5, offset=-10, recurring=False, description=''), SPN(name='Lower SOC Cell 4', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.5, offset=-10, recurring=False, description=''), SPN(name='Lower SOC Cell 5', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.5, offset=-10, recurring=False, description=''), SPN(name='Lower SOC Cell 6', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.5, offset=-10, recurring=False, description=''), SPN(name='Lower SOC Cell 7', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.5, offset=-10, recurring=False, description=''), SPN(name='Lower SOC Cell 8', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.5, offset=-10, recurring=False, description='')], valid=True), 65502: PGNType(id=65502, short_name='PropB_DE', name='Battery Function Status', default_priority=6, wrapped_data=None, data_field=[SPN(name='Reserved', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Heater Set Point', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=-50, recurring=False, description=''), SPN(name='Storage Delay Time Limit', length=16, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Last Storage Duration (Minutes)', length=6, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Last Storage Duration (Hours)', length=5, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Last Storage Duration (Days)', length=5, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Last Storage Duration (Months)', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reset Pin State', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Effective Reset Time', length=6, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description='')], valid=True), 'PropB_DE': PGNType(id=65502, short_name='PropB_DE', name='Battery Function Status', default_priority=6, wrapped_data=None, data_field=[SPN(name='Reserved', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Heater Set Point', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=-50, recurring=False, description=''), SPN(name='Storage Delay Time Limit', length=16, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Last Storage Duration (Minutes)', length=6, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Last Storage Duration (Hours)', length=5, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Last Storage Duration (Days)', length=5, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Last Storage Duration (Months)', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reset Pin State', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Effective Reset Time', length=6, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description='')], valid=True), 'Battery Function Status': PGNType(id=65502, short_name='PropB_DE', name='Battery Function Status', default_priority=6, wrapped_data=None, data_field=[SPN(name='Reserved', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Heater Set Point', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=-50, recurring=False, description=''), SPN(name='Storage Delay Time Limit', length=16, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Last Storage Duration (Minutes)', length=6, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Last Storage Duration (Hours)', length=5, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Last Storage Duration (Days)', length=5, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Last Storage Duration (Months)', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reset Pin State', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Effective Reset Time', length=6, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description='')], valid=True), 65504: PGNType(id=65504, short_name='PropB_E0', name='BIT Results 1', default_priority=5, wrapped_data=None, data_field=[SPN(name='Overcharge – Severe', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Battery Voltage Calibration', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Current Calibration', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Pack Voltage Calibration', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Cell Voltage Sensor', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Balancing Subsystem Failure', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Memory Failure', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Other Subsystem Failure', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Battery Voltage Grounded', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Contactor Subsystem Failure', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Charger Subsystem Failure', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='SOC below Reserve Limit', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Battery Voltage High – Severe', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Battery Voltage Low – Severe', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Battery Voltage High – Moderate', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Battery Voltage Low – Moderate', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Charge Current – Severe', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Discharge Current – Severe', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Charge Current – Moderate', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Discharge Current – Moderate', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Battery Temperature High – Severe', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Battery Temperature Low – Severe', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Battery Temperature High – Moderate', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Battery Temperature Low – Moderate', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Over-discharge – Severe', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Overcharge – Moderate', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Over-discharge – Moderate', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description='')], valid=True), 'PropB_E0': PGNType(id=65504, short_name='PropB_E0', name='BIT Results 1', default_priority=5, wrapped_data=None, data_field=[SPN(name='Overcharge – Severe', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Battery Voltage Calibration', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Current Calibration', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Pack Voltage Calibration', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Cell Voltage Sensor', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Balancing Subsystem Failure', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Memory Failure', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Other Subsystem Failure', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Battery Voltage Grounded', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Contactor Subsystem Failure', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Charger Subsystem Failure', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='SOC below Reserve Limit', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Battery Voltage High – Severe', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Battery Voltage Low – Severe', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Battery Voltage High – Moderate', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Battery Voltage Low – Moderate', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Charge Current – Severe', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Discharge Current – Severe', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Charge Current – Moderate', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Discharge Current – Moderate', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Battery Temperature High – Severe', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Battery Temperature Low – Severe', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Battery Temperature High – Moderate', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Battery Temperature Low – Moderate', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Over-discharge – Severe', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Overcharge – Moderate', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Over-discharge – Moderate', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description='')], valid=True), 'BIT Results 1': PGNType(id=65504, short_name='PropB_E0', name='BIT Results 1', default_priority=5, wrapped_data=None, data_field=[SPN(name='Overcharge – Severe', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Battery Voltage Calibration', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Current Calibration', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Pack Voltage Calibration', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Cell Voltage Sensor', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Balancing Subsystem Failure', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Memory Failure', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Other Subsystem Failure', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Battery Voltage Grounded', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Contactor Subsystem Failure', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Charger Subsystem Failure', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='SOC below Reserve Limit', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Battery Voltage High – Severe', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Battery Voltage Low – Severe', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Battery Voltage High – Moderate', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Battery Voltage Low – Moderate', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Charge Current – Severe', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Discharge Current – Severe', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Charge Current – Moderate', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Discharge Current – Moderate', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Battery Temperature High – Severe', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Battery Temperature Low – Severe', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Battery Temperature High – Moderate', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Battery Temperature Low – Moderate', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Over-discharge – Severe', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Overcharge – Moderate', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Over-discharge – Moderate', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description='')], valid=True), 65505: PGNType(id=65505, short_name='PropB_E1', name='BIT Results 2', default_priority=5, wrapped_data=None, data_field=[SPN(name='Internal Pack Voltage High – Severe', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Internal Pack Voltage Low – Severe', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Internal Pack Voltage High – Moderate', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Internal Pack Voltage Low – Moderate', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Cell Voltage High – Severe', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Cell Voltage Low – Severe', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Cell Voltage High – Moderate', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Cell Voltage Low – Moderate', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Battery Voltage Sensor', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Current Sensor', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Battery Temperature Sensor', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Battery Temperature Shorted High', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Battery Temperature Shorted Low', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='SOC Data Out of Range', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Internal Pack Voltage Sensor', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Cell Voltage Communication Loss', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Heater Subsystem Failure', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Heater Stuck Off', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Heater Stuck On', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Contactor Stuck Open', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Contactor Stuck Closed', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Charge Path Open', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Charge Path Closed', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Balancing Failure Exists', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='On-Board Voltage High – Minor', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='On-Board Voltage Low – Minor', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Long-Term Log Not Storing Data', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Discharge Current – Minor', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Cell Voltage Low – Minor', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description='')], valid=True), 'PropB_E1': PGNType(id=65505, short_name='PropB_E1', name='BIT Results 2', default_priority=5, wrapped_data=None, data_field=[SPN(name='Internal Pack Voltage High – Severe', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Internal Pack Voltage Low – Severe', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Internal Pack Voltage High – Moderate', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Internal Pack Voltage Low – Moderate', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Cell Voltage High – Severe', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Cell Voltage Low – Severe', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Cell Voltage High – Moderate', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Cell Voltage Low – Moderate', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Battery Voltage Sensor', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Current Sensor', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Battery Temperature Sensor', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Battery Temperature Shorted High', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Battery Temperature Shorted Low', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='SOC Data Out of Range', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Internal Pack Voltage Sensor', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Cell Voltage Communication Loss', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Heater Subsystem Failure', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Heater Stuck Off', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Heater Stuck On', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Contactor Stuck Open', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Contactor Stuck Closed', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Charge Path Open', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Charge Path Closed', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Balancing Failure Exists', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='On-Board Voltage High – Minor', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='On-Board Voltage Low – Minor', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Long-Term Log Not Storing Data', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Discharge Current – Minor', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Cell Voltage Low – Minor', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description='')], valid=True), 'BIT Results 2': PGNType(id=65505, short_name='PropB_E1', name='BIT Results 2', default_priority=5, wrapped_data=None, data_field=[SPN(name='Internal Pack Voltage High – Severe', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Internal Pack Voltage Low – Severe', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Internal Pack Voltage High – Moderate', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Internal Pack Voltage Low – Moderate', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Cell Voltage High – Severe', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Cell Voltage Low – Severe', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Cell Voltage High – Moderate', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Cell Voltage Low – Moderate', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Battery Voltage Sensor', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Current Sensor', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Battery Temperature Sensor', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Battery Temperature Shorted High', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Battery Temperature Shorted Low', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='SOC Data Out of Range', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Internal Pack Voltage Sensor', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Cell Voltage Communication Loss', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Heater Subsystem Failure', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Heater Stuck Off', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Heater Stuck On', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Contactor Stuck Open', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Contactor Stuck Closed', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Charge Path Open', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Charge Path Closed', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Balancing Failure Exists', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='On-Board Voltage High – Minor', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='On-Board Voltage Low – Minor', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Long-Term Log Not Storing Data', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Discharge Current – Minor', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Cell Voltage Low – Minor', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description='')], valid=True), 65508: PGNType(id=65508, short_name='PropB_E4', name='BIT Log', default_priority=6, wrapped_data=None, data_field=[SPN(name='Bit #', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='# Times Failure has Occurred', length=16, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Last Value to Cause Failure', length=32, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description='')], valid=True), 'PropB_E4': PGNType(id=65508, short_name='PropB_E4', name='BIT Log', default_priority=6, wrapped_data=None, data_field=[SPN(name='Bit #', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='# Times Failure has Occurred', length=16, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Last Value to Cause Failure', length=32, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description='')], valid=True), 'BIT Log': PGNType(id=65508, short_name='PropB_E4', name='BIT Log', default_priority=6, wrapped_data=None, data_field=[SPN(name='Bit #', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='# Times Failure has Occurred', length=16, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Last Value to Cause Failure', length=32, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description='')], valid=True), 65513: PGNType(id=65513, short_name='PropB_E9', name='Table Data', default_priority=6, wrapped_data=None, data_field=[SPN(name='Table ID', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Data Type/Resolution', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Row Number', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Column Number', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Data', length=32, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description='')], valid=True), 'PropB_E9': PGNType(id=65513, short_name='PropB_E9', name='Table Data', default_priority=6, wrapped_data=None, data_field=[SPN(name='Table ID', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Data Type/Resolution', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Row Number', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Column Number', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Data', length=32, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description='')], valid=True), 'Table Data': PGNType(id=65513, short_name='PropB_E9', name='Table Data', default_priority=6, wrapped_data=None, data_field=[SPN(name='Table ID', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Data Type/Resolution', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Row Number', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Column Number', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Data', length=32, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description='')], valid=True), 126720: PGNType(id=126720, short_name='PropA2-7', name='Long-Term Log Packet Retry Request (Retry Extension)', default_priority=7, wrapped_data=None, data_field=[SPN(name='Log Character', length=8, data_type=<function bytes_map>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Log Character', length=8, data_type=<function bytes_map>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Log Character', length=8, data_type=<function bytes_map>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Log Character', length=8, data_type=<function bytes_map>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Log Character', length=8, data_type=<function bytes_map>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Log Character', length=8, data_type=<function bytes_map>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Log Character', length=8, data_type=<function bytes_map>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Log Character', length=8, data_type=<function bytes_map>, resolution=1, offset=0, recurring=False, description='')], valid=True), 'PropA2-0': PGNType(id=126720, short_name='PropA2-0', name='Long-Term Log Packet Retry Request (Start/Stop Extension)', default_priority=0, wrapped_data=None, data_field=[SPN(name='Log File Size', length=32, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Log File Start Position', length=32, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description='')], valid=True), 'Long-Term Log Packet Retry Request (Start/Stop Extension)': PGNType(id=126720, short_name='PropA2-0', name='Long-Term Log Packet Retry Request (Start/Stop Extension)', default_priority=0, wrapped_data=None, data_field=[SPN(name='Log File Size', length=32, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Log File Start Position', length=32, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description='')], valid=True), 'PropA2-1-6': PGNType(id=126720, short_name='PropA2-1-6', name='Long-Term Log Packet Retry Request (Data Packet)', default_priority=1, wrapped_data=None, data_field=[SPN(name='Log Byte', length=8, data_type=<function bytes_map>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Log Byte', length=8, data_type=<function bytes_map>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Log Byte', length=8, data_type=<function bytes_map>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Log Byte', length=8, data_type=<function bytes_map>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Log Byte', length=8, data_type=<function bytes_map>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Log Byte', length=8, data_type=<function bytes_map>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Log Byte', length=8, data_type=<function bytes_map>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Log Byte', length=8, data_type=<function bytes_map>, resolution=1, offset=0, recurring=False, description='')], valid=True), 'Long-Term Log Packet Retry Request (Data Packet)': PGNType(id=126720, short_name='PropA2-1-6', name='Long-Term Log Packet Retry Request (Data Packet)', default_priority=1, wrapped_data=None, data_field=[SPN(name='Log Byte', length=8, data_type=<function bytes_map>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Log Byte', length=8, data_type=<function bytes_map>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Log Byte', length=8, data_type=<function bytes_map>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Log Byte', length=8, data_type=<function bytes_map>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Log Byte', length=8, data_type=<function bytes_map>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Log Byte', length=8, data_type=<function bytes_map>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Log Byte', length=8, data_type=<function bytes_map>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Log Byte', length=8, data_type=<function bytes_map>, resolution=1, offset=0, recurring=False, description='')], valid=True), 'PropA2-7': PGNType(id=126720, short_name='PropA2-7', name='Long-Term Log Packet Retry Request (Retry Extension)', default_priority=7, wrapped_data=None, data_field=[SPN(name='Log Character', length=8, data_type=<function bytes_map>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Log Character', length=8, data_type=<function bytes_map>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Log Character', length=8, data_type=<function bytes_map>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Log Character', length=8, data_type=<function bytes_map>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Log Character', length=8, data_type=<function bytes_map>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Log Character', length=8, data_type=<function bytes_map>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Log Character', length=8, data_type=<function bytes_map>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Log Character', length=8, data_type=<function bytes_map>, resolution=1, offset=0, recurring=False, description='')], valid=True), 'Long-Term Log Packet Retry Request (Retry Extension)': PGNType(id=126720, short_name='PropA2-7', name='Long-Term Log Packet Retry Request (Retry Extension)', default_priority=7, wrapped_data=None, data_field=[SPN(name='Log Character', length=8, data_type=<function bytes_map>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Log Character', length=8, data_type=<function bytes_map>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Log Character', length=8, data_type=<function bytes_map>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Log Character', length=8, data_type=<function bytes_map>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Log Character', length=8, data_type=<function bytes_map>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Log Character', length=8, data_type=<function bytes_map>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Log Character', length=8, data_type=<function bytes_map>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Log Character', length=8, data_type=<function bytes_map>, resolution=1, offset=0, recurring=False, description='')], valid=True), 65344: PGNType(id=65344, short_name='PropB_40', name='Undocumented command 1', default_priority=6, wrapped_data=None, data_field=[SPN(name='Undocumented data', length=64, data_type=<function bytes_map>, resolution=1, offset=0, recurring=False, description='')], valid=True), 'PropB_40': PGNType(id=65344, short_name='PropB_40', name='Undocumented command 1', default_priority=6, wrapped_data=None, data_field=[SPN(name='Undocumented data', length=64, data_type=<function bytes_map>, resolution=1, offset=0, recurring=False, description='')], valid=True), 'Undocumented command 1': PGNType(id=65344, short_name='PropB_40', name='Undocumented command 1', default_priority=6, wrapped_data=None, data_field=[SPN(name='Undocumented data', length=64, data_type=<function bytes_map>, resolution=1, offset=0, recurring=False, description='')], valid=True), 65345: PGNType(id=65345, short_name='PropB_41', name='Undocumented command 2', default_priority=6, wrapped_data=None, data_field=[SPN(name='Undocumented data', length=64, data_type=<function bytes_map>, resolution=1, offset=0, recurring=False, description='')], valid=True), 'PropB_41': PGNType(id=65345, short_name='PropB_41', name='Undocumented command 2', default_priority=6, wrapped_data=None, data_field=[SPN(name='Undocumented data', length=64, data_type=<function bytes_map>, resolution=1, offset=0, recurring=False, description='')], valid=True), 'Undocumented command 2': PGNType(id=65345, short_name='PropB_41', name='Undocumented command 2', default_priority=6, wrapped_data=None, data_field=[SPN(name='Undocumented data', length=64, data_type=<function bytes_map>, resolution=1, offset=0, recurring=False, description='')], valid=True), 65346: PGNType(id=65346, short_name='PropB_42', name='Undocumented command 3', default_priority=6, wrapped_data=None, data_field=[SPN(name='Undocumented data', length=64, data_type=<function bytes_map>, resolution=1, offset=0, recurring=False, description='')], valid=True), 'PropB_42': PGNType(id=65346, short_name='PropB_42', name='Undocumented command 3', default_priority=6, wrapped_data=None, data_field=[SPN(name='Undocumented data', length=64, data_type=<function bytes_map>, resolution=1, offset=0, recurring=False, description='')], valid=True), 'Undocumented command 3': PGNType(id=65346, short_name='PropB_42', name='Undocumented command 3', default_priority=6, wrapped_data=None, data_field=[SPN(name='Undocumented data', length=64, data_type=<function bytes_map>, resolution=1, offset=0, recurring=False, description='')], valid=True), 65472: PGNType(id=65472, short_name='PropB_C0', name='Undocumented command 4', default_priority=6, wrapped_data=None, data_field=[SPN(name='Undocumented data', length=64, data_type=<function bytes_map>, resolution=1, offset=0, recurring=False, description='')], valid=True), 'PropB_C0': PGNType(id=65472, short_name='PropB_C0', name='Undocumented command 4', default_priority=6, wrapped_data=None, data_field=[SPN(name='Undocumented data', length=64, data_type=<function bytes_map>, resolution=1, offset=0, recurring=False, description='')], valid=True), 'Undocumented command 4': PGNType(id=65472, short_name='PropB_C0', name='Undocumented command 4', default_priority=6, wrapped_data=None, data_field=[SPN(name='Undocumented data', length=64, data_type=<function bytes_map>, resolution=1, offset=0, recurring=False, description='')], valid=True), 65473: PGNType(id=65473, short_name='PropB_C1', name='Undocumented command 5', default_priority=6, wrapped_data=None, data_field=[SPN(name='Undocumented data', length=64, data_type=<function bytes_map>, resolution=1, offset=0, recurring=False, description='')], valid=True), 'PropB_C1': PGNType(id=65473, short_name='PropB_C1', name='Undocumented command 5', default_priority=6, wrapped_data=None, data_field=[SPN(name='Undocumented data', length=64, data_type=<function bytes_map>, resolution=1, offset=0, recurring=False, description='')], valid=True), 'Undocumented command 5': PGNType(id=65473, short_name='PropB_C1', name='Undocumented command 5', default_priority=6, wrapped_data=None, data_field=[SPN(name='Undocumented data', length=64, data_type=<function bytes_map>, resolution=1, offset=0, recurring=False, description='')], valid=True), 65280: PGNType(id=65280, short_name='PropB_00', name='Heartbeat', default_priority=3, wrapped_data=None, data_field=[SPN(name='Reserved', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Primary CAN Interface', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Heartbeat CAN Interface', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=4, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Battery Status', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='CAN A Status', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='CAN B Status', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=42, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description='')], valid=True), 'PropB_00': PGNType(id=65280, short_name='PropB_00', name='Heartbeat', default_priority=3, wrapped_data=None, data_field=[SPN(name='Reserved', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Primary CAN Interface', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Heartbeat CAN Interface', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=4, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Battery Status', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='CAN A Status', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='CAN B Status', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=42, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description='')], valid=True), 'Heartbeat': PGNType(id=65280, short_name='PropB_00', name='Heartbeat', default_priority=3, wrapped_data=None, data_field=[SPN(name='Reserved', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Primary CAN Interface', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Heartbeat CAN Interface', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=4, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Battery Status', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='CAN A Status', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='CAN B Status', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=42, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description='')], valid=True), 65281: PGNType(id=65281, short_name='PropB_01', name='Battery Measurements 1', default_priority=5, wrapped_data=None, data_field=[SPN(name='Internal Pack Voltage', length=16, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.05, offset=0, recurring=False, description=''), SPN(name='Battery Internal Temperature (C)', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=-55, recurring=False, description=''), SPN(name='Battery Internal Temperature (F)', length=9, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=-67, recurring=False, description=''), SPN(name='Reserved', length=31, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description='')], valid=True), 'PropB_01': PGNType(id=65281, short_name='PropB_01', name='Battery Measurements 1', default_priority=5, wrapped_data=None, data_field=[SPN(name='Internal Pack Voltage', length=16, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.05, offset=0, recurring=False, description=''), SPN(name='Battery Internal Temperature (C)', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=-55, recurring=False, description=''), SPN(name='Battery Internal Temperature (F)', length=9, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=-67, recurring=False, description=''), SPN(name='Reserved', length=31, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description='')], valid=True), 'Battery Measurements 1': PGNType(id=65281, short_name='PropB_01', name='Battery Measurements 1', default_priority=5, wrapped_data=None, data_field=[SPN(name='Internal Pack Voltage', length=16, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.05, offset=0, recurring=False, description=''), SPN(name='Battery Internal Temperature (C)', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=-55, recurring=False, description=''), SPN(name='Battery Internal Temperature (F)', length=9, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=-67, recurring=False, description=''), SPN(name='Reserved', length=31, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description='')], valid=True), 65282: PGNType(id=65282, short_name='PropB_02', name='Battery Calculations 1', default_priority=5, wrapped_data=None, data_field=[SPN(name='Reserved', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Battery State of Charge', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.5, offset=0, recurring=False, description=''), SPN(name='Battery State of Health', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.5, offset=0, recurring=False, description=''), SPN(name='Battery Capacity Estimation', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Time Remaining', length=10, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=22, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description='')], valid=True), 'PropB_02': PGNType(id=65282, short_name='PropB_02', name='Battery Calculations 1', default_priority=5, wrapped_data=None, data_field=[SPN(name='Reserved', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Battery State of Charge', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.5, offset=0, recurring=False, description=''), SPN(name='Battery State of Health', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.5, offset=0, recurring=False, description=''), SPN(name='Battery Capacity Estimation', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Time Remaining', length=10, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=22, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description='')], valid=True), 'Battery Calculations 1': PGNType(id=65282, short_name='PropB_02', name='Battery Calculations 1', default_priority=5, wrapped_data=None, data_field=[SPN(name='Reserved', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Battery State of Charge', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.5, offset=0, recurring=False, description=''), SPN(name='Battery State of Health', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.5, offset=0, recurring=False, description=''), SPN(name='Battery Capacity Estimation', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Time Remaining', length=10, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=22, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description='')], valid=True), 65283: PGNType(id=65283, short_name='PropB_03', name='Battery Regulation Information 1', default_priority=5, wrapped_data=None, data_field=[SPN(name='Battery Voltage', length=16, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.05, offset=0, recurring=False, description=''), SPN(name='Open Circuit Voltage', length=16, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.05, offset=0, recurring=False, description=''), SPN(name='Battery Current', length=16, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.05, offset=-1600, recurring=False, description=''), SPN(name='Maximum Charge Current', length=16, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.05, offset=0, recurring=False, description='')], valid=True), 'PropB_03': PGNType(id=65283, short_name='PropB_03', name='Battery Regulation Information 1', default_priority=5, wrapped_data=None, data_field=[SPN(name='Battery Voltage', length=16, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.05, offset=0, recurring=False, description=''), SPN(name='Open Circuit Voltage', length=16, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.05, offset=0, recurring=False, description=''), SPN(name='Battery Current', length=16, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.05, offset=-1600, recurring=False, description=''), SPN(name='Maximum Charge Current', length=16, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.05, offset=0, recurring=False, description='')], valid=True), 'Battery Regulation Information 1': PGNType(id=65283, short_name='PropB_03', name='Battery Regulation Information 1', default_priority=5, wrapped_data=None, data_field=[SPN(name='Battery Voltage', length=16, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.05, offset=0, recurring=False, description=''), SPN(name='Open Circuit Voltage', length=16, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.05, offset=0, recurring=False, description=''), SPN(name='Battery Current', length=16, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.05, offset=-1600, recurring=False, description=''), SPN(name='Maximum Charge Current', length=16, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.05, offset=0, recurring=False, description='')], valid=True), 65284: PGNType(id=65284, short_name='PropB_04', name='Battery Regulation Information 2', default_priority=5, wrapped_data=None, data_field=[SPN(name='Contactor(s) State', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Charge Capability State', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=4, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Bus Voltage Request', length=16, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.05, offset=0, recurring=False, description=''), SPN(name='Transportability SOC', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.5, offset=0, recurring=False, description=''), SPN(name='Reserved', length=32, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description='')], valid=True), 'PropB_04': PGNType(id=65284, short_name='PropB_04', name='Battery Regulation Information 2', default_priority=5, wrapped_data=None, data_field=[SPN(name='Contactor(s) State', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Charge Capability State', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=4, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Bus Voltage Request', length=16, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.05, offset=0, recurring=False, description=''), SPN(name='Transportability SOC', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.5, offset=0, recurring=False, description=''), SPN(name='Reserved', length=32, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description='')], valid=True), 'Battery Regulation Information 2': PGNType(id=65284, short_name='PropB_04', name='Battery Regulation Information 2', default_priority=5, wrapped_data=None, data_field=[SPN(name='Contactor(s) State', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Charge Capability State', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=4, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Bus Voltage Request', length=16, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.05, offset=0, recurring=False, description=''), SPN(name='Transportability SOC', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.5, offset=0, recurring=False, description=''), SPN(name='Reserved', length=32, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description='')], valid=True), 65285: PGNType(id=65285, short_name='PropB_05', name='Battery Power Capability Prediction 1', default_priority=5, wrapped_data=None, data_field=[SPN(name='Reserved', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Power Prediction (10s)', length=16, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Power Prediction (30s)', length=16, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=24, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description='')], valid=True), 'PropB_05': PGNType(id=65285, short_name='PropB_05', name='Battery Power Capability Prediction 1', default_priority=5, wrapped_data=None, data_field=[SPN(name='Reserved', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Power Prediction (10s)', length=16, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Power Prediction (30s)', length=16, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=24, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description='')], valid=True), 'Battery Power Capability Prediction 1': PGNType(id=65285, short_name='PropB_05', name='Battery Power Capability Prediction 1', default_priority=5, wrapped_data=None, data_field=[SPN(name='Reserved', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Power Prediction (10s)', length=16, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Power Prediction (30s)', length=16, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=24, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description='')], valid=True), 65286: PGNType(id=65286, short_name='PropB_06', name='Configuration State Message 1', default_priority=6, wrapped_data=None, data_field=[SPN(name='Dormant 1 State', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Dormant 2 State', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Master Power Switch State', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Configuration Pin 1 State', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Configuration Pin 2 State', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Configuration Pin 3 State', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Configuration Pin 4 State', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Configuration Pin 5 State', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Configuration Pin 6 State', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Virtual Master Power Switch State', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=4, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Battery Battle-override State', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Maintenance State', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Automated Heater Function State', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Battery Heater(s) State', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Contactor(s) Control State', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Standby State', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=4, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Baud Rate Overwrite State', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Position Identity Overwrite State', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Configure VPMS Function State', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Pulse Power Control State', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=16, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description='')], valid=True), 'PropB_06': PGNType(id=65286, short_name='PropB_06', name='Configuration State Message 1', default_priority=6, wrapped_data=None, data_field=[SPN(name='Dormant 1 State', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Dormant 2 State', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Master Power Switch State', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Configuration Pin 1 State', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Configuration Pin 2 State', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Configuration Pin 3 State', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Configuration Pin 4 State', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Configuration Pin 5 State', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Configuration Pin 6 State', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Virtual Master Power Switch State', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=4, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Battery Battle-override State', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Maintenance State', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Automated Heater Function State', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Battery Heater(s) State', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Contactor(s) Control State', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Standby State', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=4, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Baud Rate Overwrite State', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Position Identity Overwrite State', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Configure VPMS Function State', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Pulse Power Control State', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=16, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description='')], valid=True), 'Configuration State Message 1': PGNType(id=65286, short_name='PropB_06', name='Configuration State Message 1', default_priority=6, wrapped_data=None, data_field=[SPN(name='Dormant 1 State', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Dormant 2 State', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Master Power Switch State', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Configuration Pin 1 State', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Configuration Pin 2 State', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Configuration Pin 3 State', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Configuration Pin 4 State', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Configuration Pin 5 State', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Configuration Pin 6 State', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Virtual Master Power Switch State', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=4, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Battery Battle-override State', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Maintenance State', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Automated Heater Function State', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Battery Heater(s) State', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Contactor(s) Control State', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Standby State', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=4, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Baud Rate Overwrite State', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Position Identity Overwrite State', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Configure VPMS Function State', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Pulse Power Control State', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=16, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description='')], valid=True), 65287: PGNType(id=65287, short_name='PropB_07', name='Protected State Message 1', default_priority=3, wrapped_data=None, data_field=[SPN(name='Protected State Warning', length=3, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=5, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Failed Exit Attempts Count', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Protected State Timeout', length=16, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Load Indicator', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description='')], valid=True), 'PropB_07': PGNType(id=65287, short_name='PropB_07', name='Protected State Message 1', default_priority=3, wrapped_data=None, data_field=[SPN(name='Protected State Warning', length=3, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=5, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Failed Exit Attempts Count', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Protected State Timeout', length=16, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Load Indicator', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description='')], valid=True), 'Protected State Message 1': PGNType(id=65287, short_name='PropB_07', name='Protected State Message 1', default_priority=3, wrapped_data=None, data_field=[SPN(name='Protected State Warning', length=3, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=5, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Failed Exit Attempts Count', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Protected State Timeout', length=16, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Load Indicator', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description='')], valid=True), 65288: PGNType(id=65288, short_name='PropB_08', name='Application Management States 1', default_priority=6, wrapped_data=None, data_field=[SPN(name='Reserved', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='SOC Reserve Limit', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Application Overcurrent Limit 1', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Application Overcurrent Period 1', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Application Overcurrent Limit 2', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Application Overcurrent Period 2', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=16, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description='')], valid=True), 'PropB_08': PGNType(id=65288, short_name='PropB_08', name='Application Management States 1', default_priority=6, wrapped_data=None, data_field=[SPN(name='Reserved', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='SOC Reserve Limit', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Application Overcurrent Limit 1', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Application Overcurrent Period 1', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Application Overcurrent Limit 2', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Application Overcurrent Period 2', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=16, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description='')], valid=True), 'Application Management States 1': PGNType(id=65288, short_name='PropB_08', name='Application Management States 1', default_priority=6, wrapped_data=None, data_field=[SPN(name='Reserved', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='SOC Reserve Limit', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Application Overcurrent Limit 1', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Application Overcurrent Period 1', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Application Overcurrent Limit 2', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Application Overcurrent Period 2', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=16, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description='')], valid=True), 60160: PGNType(id=60160, short_name='TP.DT', name='Transport Protocol – Data Transfer', default_priority=7, wrapped_data=None, data_field=[SPN(name='Sequence number', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Data', length=56, data_type=<function bytes_map>, resolution=1, offset=0, recurring=False, description='')], valid=True), 'TP.DT': PGNType(id=60160, short_name='TP.DT', name='Transport Protocol – Data Transfer', default_priority=7, wrapped_data=None, data_field=[SPN(name='Sequence number', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Data', length=56, data_type=<function bytes_map>, resolution=1, offset=0, recurring=False, description='')], valid=True), 'Transport Protocol – Data Transfer': PGNType(id=60160, short_name='TP.DT', name='Transport Protocol – Data Transfer', default_priority=7, wrapped_data=None, data_field=[SPN(name='Sequence number', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Data', length=56, data_type=<function bytes_map>, resolution=1, offset=0, recurring=False, description='')], valid=True), 37632: PGNType(id=37632, short_name='NM', name='NAME Management Message', default_priority=6, wrapped_data=None, data_field=[SPN(name='NAME Checksum/Error Code', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Manufacturer Code qualifier flag', length=1, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='ECU Instance qualifier flag', length=1, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Function Instance qualifier flag', length=1, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Function qualifier flag', length=1, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Vehicle System qualifier flag', length=1, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Vehicle System Instance qualifier flag', length=1, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Industry Group qualifier flag', length=1, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Arbitrary Address Capable qualifier flag', length=1, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='NM Control Mode indicator', length=4, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=1, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Commanded Manufacturer Code', length=11, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Commanded ECU Instance', length=3, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Commanded Function Instance', length=5, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Commanded Function', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=1, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Commanded Vehicle System', length=7, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Commanded Vehicle System Instance', length=4, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Commanded Industry Group', length=3, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Commanded Arbitrary Address Capable', length=1, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description='')], valid=True), 'NM': PGNType(id=37632, short_name='NM', name='NAME Management Message', default_priority=6, wrapped_data=None, data_field=[SPN(name='NAME Checksum/Error Code', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Manufacturer Code qualifier flag', length=1, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='ECU Instance qualifier flag', length=1, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Function Instance qualifier flag', length=1, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Function qualifier flag', length=1, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Vehicle System qualifier flag', length=1, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Vehicle System Instance qualifier flag', length=1, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Industry Group qualifier flag', length=1, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Arbitrary Address Capable qualifier flag', length=1, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='NM Control Mode indicator', length=4, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=1, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Commanded Manufacturer Code', length=11, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Commanded ECU Instance', length=3, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Commanded Function Instance', length=5, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Commanded Function', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=1, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Commanded Vehicle System', length=7, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Commanded Vehicle System Instance', length=4, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Commanded Industry Group', length=3, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Commanded Arbitrary Address Capable', length=1, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description='')], valid=True), 'NAME Management Message': PGNType(id=37632, short_name='NM', name='NAME Management Message', default_priority=6, wrapped_data=None, data_field=[SPN(name='NAME Checksum/Error Code', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Manufacturer Code qualifier flag', length=1, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='ECU Instance qualifier flag', length=1, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Function Instance qualifier flag', length=1, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Function qualifier flag', length=1, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Vehicle System qualifier flag', length=1, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Vehicle System Instance qualifier flag', length=1, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Industry Group qualifier flag', length=1, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Arbitrary Address Capable qualifier flag', length=1, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='NM Control Mode indicator', length=4, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=1, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Commanded Manufacturer Code', length=11, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Commanded ECU Instance', length=3, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Commanded Function Instance', length=5, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Commanded Function', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=1, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Commanded Vehicle System', length=7, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Commanded Vehicle System Instance', length=4, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Commanded Industry Group', length=3, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Commanded Arbitrary Address Capable', length=1, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description='')], valid=True), 59904: PGNType(id=59904, short_name='RQST', name='Request', default_priority=3, wrapped_data=None, data_field=[SPN(name='PGN', length=24, data_type=<function <lambda>>, resolution=1, offset=0, recurring=False, description='')], valid=True), 'RQST': PGNType(id=59904, short_name='RQST', name='Request', default_priority=3, wrapped_data=None, data_field=[SPN(name='PGN', length=24, data_type=<function <lambda>>, resolution=1, offset=0, recurring=False, description='')], valid=True), 'Request': PGNType(id=59904, short_name='RQST', name='Request', default_priority=3, wrapped_data=None, data_field=[SPN(name='PGN', length=24, data_type=<function <lambda>>, resolution=1, offset=0, recurring=False, description='')], valid=True), 65240: PGNType(id=65240, short_name='CA', name='Commanded Address', default_priority=6, wrapped_data=None, data_field=[SPN(name='Identity Number', length=21, data_type=<function bytes_map>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Manufacturer Code', length=11, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='ECU Instance', length=3, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=1, recurring=False, description=''), SPN(name='Function Instance', length=5, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=1, recurring=False, description=''), SPN(name='Function', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=1, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Vehicle System', length=7, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Vehicle System Instance', length=4, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=1, recurring=False, description=''), SPN(name='Industry Group', length=3, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Arbitrary Address Capable', length=1, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='New source address', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description='')], valid=True), 'CA': PGNType(id=65240, short_name='CA', name='Commanded Address', default_priority=6, wrapped_data=None, data_field=[SPN(name='Identity Number', length=21, data_type=<function bytes_map>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Manufacturer Code', length=11, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='ECU Instance', length=3, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=1, recurring=False, description=''), SPN(name='Function Instance', length=5, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=1, recurring=False, description=''), SPN(name='Function', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=1, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Vehicle System', length=7, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Vehicle System Instance', length=4, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=1, recurring=False, description=''), SPN(name='Industry Group', length=3, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Arbitrary Address Capable', length=1, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='New source address', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description='')], valid=True), 'Commanded Address': PGNType(id=65240, short_name='CA', name='Commanded Address', default_priority=6, wrapped_data=None, data_field=[SPN(name='Identity Number', length=21, data_type=<function bytes_map>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Manufacturer Code', length=11, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='ECU Instance', length=3, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=1, recurring=False, description=''), SPN(name='Function Instance', length=5, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=1, recurring=False, description=''), SPN(name='Function', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=1, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Vehicle System', length=7, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Vehicle System Instance', length=4, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=1, recurring=False, description=''), SPN(name='Industry Group', length=3, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Arbitrary Address Capable', length=1, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='New source address', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description='')], valid=True), 57088: PGNType(id=57088, short_name='DM13', name='Stop Start Broadcast', default_priority=6, wrapped_data=None, data_field=[SPN(name='Current data link', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='SAE J1587 network', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='SAE J1922 network', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='SAE J1939 network #1, primary vehicle network ', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='SAE J1939 network #2', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='ISO 9141 network', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='SAE J1850 networ', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Other, manufacturer-specified port', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='SAE J1939 network #3', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Proprietary network #1', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Proprietary network #2', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='SAE J1939 network #4', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Hold signal', length=4, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Suspend signal', length=4, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Suspend duration', length=16, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='SAE J1939 network #5', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='SAE J1939 network #6', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='SAE J1939 network #7', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='SAE J1939 network #8', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='SAE J1939 network #9', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='SAE J1939 network #10', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='SAE J1939 network #11', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description='')], valid=True), 'DM13': PGNType(id=57088, short_name='DM13', name='Stop Start Broadcast', default_priority=6, wrapped_data=None, data_field=[SPN(name='Current data link', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='SAE J1587 network', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='SAE J1922 network', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='SAE J1939 network #1, primary vehicle network ', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='SAE J1939 network #2', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='ISO 9141 network', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='SAE J1850 networ', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Other, manufacturer-specified port', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='SAE J1939 network #3', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Proprietary network #1', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Proprietary network #2', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='SAE J1939 network #4', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Hold signal', length=4, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Suspend signal', length=4, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Suspend duration', length=16, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='SAE J1939 network #5', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='SAE J1939 network #6', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='SAE J1939 network #7', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='SAE J1939 network #8', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='SAE J1939 network #9', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='SAE J1939 network #10', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='SAE J1939 network #11', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description='')], valid=True), 'Stop Start Broadcast': PGNType(id=57088, short_name='DM13', name='Stop Start Broadcast', default_priority=6, wrapped_data=None, data_field=[SPN(name='Current data link', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='SAE J1587 network', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='SAE J1922 network', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='SAE J1939 network #1, primary vehicle network ', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='SAE J1939 network #2', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='ISO 9141 network', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='SAE J1850 networ', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Other, manufacturer-specified port', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='SAE J1939 network #3', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Proprietary network #1', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Proprietary network #2', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='SAE J1939 network #4', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Hold signal', length=4, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Suspend signal', length=4, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Suspend duration', length=16, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='SAE J1939 network #5', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='SAE J1939 network #6', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='SAE J1939 network #7', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='SAE J1939 network #8', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='SAE J1939 network #9', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='SAE J1939 network #10', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='SAE J1939 network #11', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description='')], valid=True), 55552: PGNType(id=55552, short_name='DM14', name='Memory Access Request', default_priority=6, wrapped_data=None, data_field=[SPN(name='Length/number requested (lower)', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=1, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Command', length=3, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Pointer type', length=1, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Length/number requested (upper)', length=3, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Pointer', length=24, data_type=<function bytes_map>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Pointer extension', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Key/User_Level', length=16, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description='')], valid=True), 'DM14': PGNType(id=55552, short_name='DM14', name='Memory Access Request', default_priority=6, wrapped_data=None, data_field=[SPN(name='Length/number requested (lower)', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=1, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Command', length=3, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Pointer type', length=1, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Length/number requested (upper)', length=3, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Pointer', length=24, data_type=<function bytes_map>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Pointer extension', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Key/User_Level', length=16, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description='')], valid=True), 'Memory Access Request': PGNType(id=55552, short_name='DM14', name='Memory Access Request', default_priority=6, wrapped_data=None, data_field=[SPN(name='Length/number requested (lower)', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=1, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Command', length=3, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Pointer type', length=1, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Length/number requested (upper)', length=3, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Pointer', length=24, data_type=<function bytes_map>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Pointer extension', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Key/User_Level', length=16, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description='')], valid=True), 55040: PGNType(id=55040, short_name='DM16', name='Binary Data Transfer ', default_priority=6, wrapped_data=None, data_field=[SPN(name='Data length', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Raw binary data', length=56, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description='')], valid=True), 'DM16': PGNType(id=55040, short_name='DM16', name='Binary Data Transfer ', default_priority=6, wrapped_data=None, data_field=[SPN(name='Data length', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Raw binary data', length=56, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description='')], valid=True), 'Binary Data Transfer ': PGNType(id=55040, short_name='DM16', name='Binary Data Transfer ', default_priority=6, wrapped_data=None, data_field=[SPN(name='Data length', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Raw binary data', length=56, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description='')], valid=True), 54784: PGNType(id=54784, short_name='DM17', name='Boot Load Data', default_priority=6, wrapped_data=None, data_field=[SPN(name='Boot load data', length=64, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description='')], valid=True), 'DM17': PGNType(id=54784, short_name='DM17', name='Boot Load Data', default_priority=6, wrapped_data=None, data_field=[SPN(name='Boot load data', length=64, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description='')], valid=True), 'Boot Load Data': PGNType(id=54784, short_name='DM17', name='Boot Load Data', default_priority=6, wrapped_data=None, data_field=[SPN(name='Boot load data', length=64, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description='')], valid=True), 54272: PGNType(id=54272, short_name='DM18', name='Data Security', default_priority=6, wrapped_data=None, data_field=[SPN(name='Security entity length (lower)', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Security entity type', length=4, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Security entity length (upper)', length=4, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Data security parameter', length=0, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description='')], valid=True), 'DM18': PGNType(id=54272, short_name='DM18', name='Data Security', default_priority=6, wrapped_data=None, data_field=[SPN(name='Security entity length (lower)', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Security entity type', length=4, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Security entity length (upper)', length=4, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Data security parameter', length=0, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description='')], valid=True), 'Data Security': PGNType(id=54272, short_name='DM18', name='Data Security', default_priority=6, wrapped_data=None, data_field=[SPN(name='Security entity length (lower)', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Security entity type', length=4, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Security entity length (upper)', length=4, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Data security parameter', length=0, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description='')], valid=True), 65228: PGNType(id=65228, short_name='DM3', name='Diagnostic Data Clear', default_priority=6, wrapped_data=None, data_field=[], valid=True), 'DM3': PGNType(id=65228, short_name='DM3', name='Diagnostic Data Clear', default_priority=6, wrapped_data=None, data_field=[], valid=True), 'Diagnostic Data Clear': PGNType(id=65228, short_name='DM3', name='Diagnostic Data Clear', default_priority=6, wrapped_data=None, data_field=[], valid=True)}, 16: {60416: PGNType(id=60416, short_name='TP.CM', name='Transport Protocol – Connection Management', default_priority=7, wrapped_data=16, data_field=[SPN(name='Control', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Message Size', length=16, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Packet Count', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Maximum packets per CTS', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='PGN', length=24, data_type=<function <lambda>>, resolution=1, offset=0, recurring=False, description='')], valid=True), 'TP.CM': PGNType(id=60416, short_name='TP.CM', name='Transport Protocol – Connection Management', default_priority=7, wrapped_data=16, data_field=[SPN(name='Control', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Message Size', length=16, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Packet Count', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Maximum packets per CTS', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='PGN', length=24, data_type=<function <lambda>>, resolution=1, offset=0, recurring=False, description='')], valid=True), 'Transport Protocol – Connection Management': PGNType(id=60416, short_name='TP.CM', name='Transport Protocol – Connection Management', default_priority=7, wrapped_data=16, data_field=[SPN(name='Control', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Message Size', length=16, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Packet Count', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Maximum packets per CTS', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='PGN', length=24, data_type=<function <lambda>>, resolution=1, offset=0, recurring=False, description='')], valid=True)}, 17: {60416: PGNType(id=60416, short_name='TP.CM', name='Transport Protocol – Connection Management', default_priority=7, wrapped_data=17, data_field=[SPN(name='Control', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Packets that can be sent', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Next packet#', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=16, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='PGN', length=24, data_type=<function <lambda>>, resolution=1, offset=0, recurring=False, description='')], valid=True), 'TP.CM': PGNType(id=60416, short_name='TP.CM', name='Transport Protocol – Connection Management', default_priority=7, wrapped_data=17, data_field=[SPN(name='Control', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Packets that can be sent', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Next packet#', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=16, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='PGN', length=24, data_type=<function <lambda>>, resolution=1, offset=0, recurring=False, description='')], valid=True), 'Transport Protocol – Connection Management': PGNType(id=60416, short_name='TP.CM', name='Transport Protocol – Connection Management', default_priority=7, wrapped_data=17, data_field=[SPN(name='Control', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Packets that can be sent', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Next packet#', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=16, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='PGN', length=24, data_type=<function <lambda>>, resolution=1, offset=0, recurring=False, description='')], valid=True)}, 19: {60416: PGNType(id=60416, short_name='TP.CM', name='Transport Protocol – Connection Management', default_priority=7, wrapped_data=19, data_field=[SPN(name='Control', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Message Size', length=16, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Packet Count', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='PGN', length=24, data_type=<function <lambda>>, resolution=1, offset=0, recurring=False, description='')], valid=True), 'TP.CM': PGNType(id=60416, short_name='TP.CM', name='Transport Protocol – Connection Management', default_priority=7, wrapped_data=19, data_field=[SPN(name='Control', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Message Size', length=16, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Packet Count', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='PGN', length=24, data_type=<function <lambda>>, resolution=1, offset=0, recurring=False, description='')], valid=True), 'Transport Protocol – Connection Management': PGNType(id=60416, short_name='TP.CM', name='Transport Protocol – Connection Management', default_priority=7, wrapped_data=19, data_field=[SPN(name='Control', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Message Size', length=16, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Packet Count', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='PGN', length=24, data_type=<function <lambda>>, resolution=1, offset=0, recurring=False, description='')], valid=True)}, 255: {60416: PGNType(id=60416, short_name='TP.CM', name='Transport Protocol – Connection Management', default_priority=7, wrapped_data=255, data_field=[SPN(name='Control', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Connection Abort reason', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Role of Sender', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=22, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='PGN', length=24, data_type=<function <lambda>>, resolution=1, offset=0, recurring=False, description='')], valid=True), 'TP.CM': PGNType(id=60416, short_name='TP.CM', name='Transport Protocol – Connection Management', default_priority=7, wrapped_data=255, data_field=[SPN(name='Control', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Connection Abort reason', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Role of Sender', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=22, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='PGN', length=24, data_type=<function <lambda>>, resolution=1, offset=0, recurring=False, description='')], valid=True), 'Transport Protocol – Connection Management': PGNType(id=60416, short_name='TP.CM', name='Transport Protocol – Connection Management', default_priority=7, wrapped_data=255, data_field=[SPN(name='Control', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Connection Abort reason', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Role of Sender', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=22, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='PGN', length=24, data_type=<function <lambda>>, resolution=1, offset=0, recurring=False, description='')], valid=True)}, 32: {60416: PGNType(id=60416, short_name='TP.CM', name='Transport Protocol – Connection Management', default_priority=7, wrapped_data=32, data_field=[SPN(name='Control', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Message Size', length=16, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Packet Count', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='PGN', length=24, data_type=<function <lambda>>, resolution=1, offset=0, recurring=False, description='')], valid=True), 'TP.CM': PGNType(id=60416, short_name='TP.CM', name='Transport Protocol – Connection Management', default_priority=7, wrapped_data=32, data_field=[SPN(name='Control', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Message Size', length=16, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Packet Count', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='PGN', length=24, data_type=<function <lambda>>, resolution=1, offset=0, recurring=False, description='')], valid=True), 'Transport Protocol – Connection Management': PGNType(id=60416, short_name='TP.CM', name='Transport Protocol – Connection Management', default_priority=7, wrapped_data=32, data_field=[SPN(name='Control', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Message Size', length=16, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Packet Count', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='PGN', length=24, data_type=<function <lambda>>, resolution=1, offset=0, recurring=False, description='')], valid=True)}, 0: {61184: PGNType(id=61184, short_name='PropA', name='Battery Configuration Command', default_priority=6, wrapped_data=0, data_field=[SPN(name='Control', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Battery Battle Override', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Automatic Heater Function', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Command Contactor(s)', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Primary CAN Interface', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reset', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Maintenance State', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Virtual Master Power Switch Command', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Pulse Power Control', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=40, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description='')], valid=True), 'PropA': PGNType(id=61184, short_name='PropA', name='Battery Configuration Command', default_priority=6, wrapped_data=0, data_field=[SPN(name='Control', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Battery Battle Override', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Automatic Heater Function', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Command Contactor(s)', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Primary CAN Interface', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reset', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Maintenance State', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Virtual Master Power Switch Command', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Pulse Power Control', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=40, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description='')], valid=True), 'Battery Configuration Command': PGNType(id=61184, short_name='PropA', name='Battery Configuration Command', default_priority=6, wrapped_data=0, data_field=[SPN(name='Control', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Battery Battle Override', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Automatic Heater Function', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Command Contactor(s)', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Primary CAN Interface', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reset', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Maintenance State', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Virtual Master Power Switch Command', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Pulse Power Control', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=40, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description='')], valid=True)}, 1: {61184: PGNType(id=61184, short_name='PropA', name='Battery Configuration Command', default_priority=6, wrapped_data=1, data_field=[SPN(name='Control', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Restore Defaults', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Heartbeat CAN Interface', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=4, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Overwrite Baud Rate', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Overwrite Position ID', length=4, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Configure VMPS Function', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Configure PGN', length=24, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='PGN Tx Rate', length=5, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=11, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description='')], valid=True), 'PropA': PGNType(id=61184, short_name='PropA', name='Battery Configuration Command', default_priority=6, wrapped_data=1, data_field=[SPN(name='Control', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Restore Defaults', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Heartbeat CAN Interface', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=4, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Overwrite Baud Rate', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Overwrite Position ID', length=4, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Configure VMPS Function', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Configure PGN', length=24, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='PGN Tx Rate', length=5, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=11, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description='')], valid=True), 'Battery Configuration Command': PGNType(id=61184, short_name='PropA', name='Battery Configuration Command', default_priority=6, wrapped_data=1, data_field=[SPN(name='Control', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Restore Defaults', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Heartbeat CAN Interface', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=4, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Overwrite Baud Rate', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Overwrite Position ID', length=4, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Configure VMPS Function', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Configure PGN', length=24, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='PGN Tx Rate', length=5, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=11, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description='')], valid=True)}, 2: {61184: PGNType(id=61184, short_name='PropA', name='Battery Configuration Command', default_priority=6, wrapped_data=2, data_field=[SPN(name='Control', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Standby', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=6, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Standby Suspend Period', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Transportability Command', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.5, offset=0, recurring=False, description=''), SPN(name='Reserved', length=32, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description='')], valid=True), 'PropA': PGNType(id=61184, short_name='PropA', name='Battery Configuration Command', default_priority=6, wrapped_data=2, data_field=[SPN(name='Control', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Standby', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=6, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Standby Suspend Period', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Transportability Command', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.5, offset=0, recurring=False, description=''), SPN(name='Reserved', length=32, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description='')], valid=True), 'Battery Configuration Command': PGNType(id=61184, short_name='PropA', name='Battery Configuration Command', default_priority=6, wrapped_data=2, data_field=[SPN(name='Control', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Standby', length=2, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=6, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Standby Suspend Period', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Transportability Command', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=0.5, offset=0, recurring=False, description=''), SPN(name='Reserved', length=32, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description='')], valid=True)}, 3: {61184: PGNType(id=61184, short_name='PropA', name='Battery Configuration Command', default_priority=6, wrapped_data=3, data_field=[SPN(name='Control', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='SOC Reserve Limit', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Application Overcurrent Limit 1', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Application Overcurrent Period 1', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Application Overcurrent Limit 2', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Application Overcurrent Period 2', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=16, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description='')], valid=True), 'PropA': PGNType(id=61184, short_name='PropA', name='Battery Configuration Command', default_priority=6, wrapped_data=3, data_field=[SPN(name='Control', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='SOC Reserve Limit', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Application Overcurrent Limit 1', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Application Overcurrent Period 1', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Application Overcurrent Limit 2', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Application Overcurrent Period 2', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=16, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description='')], valid=True), 'Battery Configuration Command': PGNType(id=61184, short_name='PropA', name='Battery Configuration Command', default_priority=6, wrapped_data=3, data_field=[SPN(name='Control', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='SOC Reserve Limit', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Application Overcurrent Limit 1', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Application Overcurrent Period 1', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Application Overcurrent Limit 2', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Application Overcurrent Period 2', length=8, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description=''), SPN(name='Reserved', length=16, data_type=<function generate_map.<locals>.mapping_func>, resolution=1, offset=0, recurring=False, description='')], valid=True)}}
id: int
short_name: str = ''
name: str = ''
default_priority: int = 6
wrapped_data: int | None = None
data_field: list[SPN]
valid: bool = True
data_page: int
96    @property
97    def data_page(self) -> int:
98        """True if using data pages, else False."""
99        return self.id >> 16

True if using data pages, else False.

class PGNFinder:
121class PGNFinder:  # TODO(JA): replace with metaclass
122    """Find a pgn by id or name."""
123
124    def __getitem__(self, query: int | str | tuple[int | str, list[float]]) -> PGNType:
125        pgn_id, data_list = query if isinstance(query, tuple) else (query, None)  # Unpack tuple
126        wrapped_data_id: int | None = next(map(int, data_list or []), None)  # Grab first item if exists and int
127        if pgn_id not in PGNType.instances.get(wrapped_data_id, {}):  # Only use the wrapped id for wrapped PGNs
128            wrapped_data_id = None
129
130        bad_id = pgn_id if isinstance(pgn_id, int) else -1
131        bad_name = pgn_id if isinstance(pgn_id, str) else "Unknown"
132        return PGNType.instances.get(wrapped_data_id, {}).get(
133            pgn_id,
134            PGNType(
135                bad_id,
136                bad_name,
137                bad_name,
138                data_field=[SPN("Unknown data", 8 * 8, spn_types.bytes_map)],
139                valid=False,
140            ),
141        )

Find a pgn by id or name.

PGN = <PGNFinder object>