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 = '')
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 ""
@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)}}
data_field: list[SPN]
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>