├── requirements.txt ├── .gitignore ├── README.md ├── a2lbincompare.py ├── pdx2csv.py ├── a2l2xml.py ├── a2l2xdf.py └── default.csv /requirements.txt: -------------------------------------------------------------------------------- 1 | pya2ldb 2 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | SC8S5031_C_OEM.a2l.xdf 2 | SC8S5031_C_OEM.a2ldb 3 | SC8S5031_C_OEM.a2l 4 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # A2L2XDF 2 | 3 | Uses the excellent `pyA2L` library to generate an XDF using data from an A2L. See included CSV format for examples. 4 | 5 | Only tested on a small subset of A2Ls which use AXIS_PTS_REF - the concepts, however, should be fairly universal. 6 | 7 | A few notes: 8 | 9 | * Open the A2L and re-save it using UTF-8. Many A2Ls are in LATIN-1 or worse ASCII with wrong characters. Saving it as UTF-8 solves a lot of pain. 10 | * PyA2L has issues with "// " strings in descriptions. Search for "//=" and replace with "=". 11 | * PyA2L has a few other weird parse issues you may need to fix manually. 12 | 13 | # PDX2CSV 14 | 15 | * Unzip a PDX file to a directory. 16 | * Run "python3 pdx2csv.py " 17 | * Checkout dtcs.csv and diag.csv for DTCs and $22 identifiers respectively. 18 | 19 | Tested on PDX from several vendors. 20 | -------------------------------------------------------------------------------- /a2lbincompare.py: -------------------------------------------------------------------------------- 1 | from pya2l import DB, model 2 | from pya2l.api import inspect 3 | from sys import argv 4 | 5 | db = DB() 6 | db2 = DB() 7 | # session = db.import_a2l(argv[1]) 8 | 9 | # CLI arguments: a2lbincompare.py [first_a2l] [first_bin] [second_a2l] [second_bin] [search_term?] 10 | 11 | # First A2L & bin 12 | session = db.open_existing(argv[1]) 13 | data1 = open(argv[2], "rb").read() 14 | 15 | # Second A2L & bin 16 | session2 = db2.open_existing(argv[3]) 17 | data2 = open(argv[4], "rb").read() 18 | 19 | search_term = ( 20 | argv[5] if len(argv) > 5 else None 21 | ) 22 | 23 | def calc_map_size(characteristic): 24 | data_sizes = { 25 | "UWORD": 2, 26 | "UBYTE": 1, 27 | "SBYTE": 1, 28 | "SWORD": 2, 29 | "ULONG": 4, 30 | "SLONG": 4, 31 | "FLOAT32_IEEE": 4, 32 | } 33 | data_size = data_sizes[characteristic.deposit.fncValues["datatype"]] 34 | map_size = data_size 35 | for axis_ref in characteristic.axisDescriptions: 36 | map_size *= axis_ref.maxAxisPoints 37 | return map_size 38 | 39 | 40 | characteristics = ( 41 | session.query(model.Characteristic).order_by(model.Characteristic.name).all() 42 | ) 43 | 44 | for c in characteristics: 45 | if search_term and (search_term not in (c.name+c.longIdentifier)): 46 | # Characteristic does not meet search term, continue 47 | continue 48 | 49 | # Get characteristic from both A2Ls, using the name from the first one 50 | characteristic_data = inspect.Characteristic(session, c.name) 51 | try: 52 | characteristic_data2 = inspect.Characteristic(session2, c.name) 53 | except: 54 | continue 55 | # print(c.name + " does not exist in: "+argv[3]) 56 | 57 | # Get the map size (should be the same but best to double check) 58 | map_size = calc_map_size(characteristic_data) 59 | map_size2 = calc_map_size(characteristic_data2) 60 | 61 | # Get offset 62 | offset = characteristic_data.address - 0xA0800000 63 | offset2 = characteristic_data2.address - 0xA0800000 64 | 65 | # Get data from bin 66 | data1_map = data1[offset : offset + map_size] 67 | data2_map = data2[offset2 : offset2 + map_size2] 68 | 69 | # Check match 70 | is_match = data1_map == data2_map 71 | 72 | if not is_match: 73 | print( 74 | characteristic_data.name + " : " + characteristic_data.longIdentifier 75 | ) # " @ " + hex(offset) + ":" + hex(offset+map_size) + 76 | -------------------------------------------------------------------------------- /pdx2csv.py: -------------------------------------------------------------------------------- 1 | import csv 2 | from pathlib import Path 3 | from sys import argv 4 | import xml.etree.ElementTree as ET 5 | from xml.etree.ElementTree import Element 6 | 7 | ecm_odx = list(Path(argv[1]).glob("EV_*"))[0].read_text(encoding='utf8') 8 | ecm_layer = ET.fromstring(ecm_odx) 9 | 10 | controlmodule_file = list(Path(argv[1]).glob("BL_LIBEnginContrModulUDS_*.odx")) 11 | if len(controlmodule_file) > 0: 12 | controlmoduleuds_odx = list(Path(argv[1]).glob("BL_LIBEnginContrModulUDS_*.odx"))[0].read_text(encoding='utf8') 13 | else: 14 | controlmoduleuds_odx = list(Path(argv[1]).glob("BV_Engin*.odx"))[0].read_text(encoding='utf8') 15 | 16 | control_module_layer = ET.fromstring(controlmoduleuds_odx) 17 | 18 | layers = [control_module_layer, ecm_layer] 19 | 20 | layers_by_name = {} 21 | 22 | def load_layer_by_name(layer_name): 23 | if layer_name in layers_by_name: 24 | return layers_by_name[layer_name] 25 | filepath = list(Path(argv[1]).glob(layer_name + "*.odx"))[0] 26 | layers_by_name[layer_name] = ET.fromstring(filepath.read_text(encoding='utf-8')) 27 | return layers_by_name[layer_name] 28 | 29 | def layer_ref(layer, element): 30 | doc_name = element.get("DOCREF") 31 | if doc_name: 32 | layer = load_layer_by_name(doc_name) 33 | return layer 34 | 35 | def table_row_to_conversion(layer: Element, table_row: Element): 36 | structure_ref = table_row.find("STRUCTURE-REF") 37 | structure_id = structure_ref.get("ID-REF") 38 | layer = layer_ref(layer, structure_ref) 39 | structure = layer.find(f".//STRUCTURE[@ID='{structure_id}']") 40 | dop_ref = structure.find('.//PARAM/DOP-REF') 41 | if dop_ref is None: 42 | dop_ref = structure.find('.//PARAM/DOP-SNREF') 43 | dop_shortname = dop_ref.get("SHORT-NAME") 44 | layer = layer_ref(layer, dop_ref) 45 | data_format = layer.find(f".//DATA-OBJECT-PROP[@ID='{dop_shortname}']") 46 | else: 47 | dop_id = dop_ref.get("ID-REF") 48 | layer = layer_ref(layer, dop_ref) 49 | data_format = layer.find(f".//DATA-OBJECT-PROP[@ID='{dop_id}']") 50 | equation = "" 51 | byte_length = 0 52 | diag_type = "" 53 | unit_display_name = "" 54 | if data_format: 55 | unit_ref = data_format.find("UNIT-REF") 56 | if unit_ref is not None: 57 | unit_id = unit_ref.get("ID-REF") 58 | layer = layer_ref(layer, unit_ref) 59 | unit = layer.find(f".//UNIT[@ID='{unit_id}']") 60 | unit_display_name = unit.find("DISPLAY-NAME").text 61 | diag_type = data_format.find("DIAG-CODED-TYPE").get("BASE-DATA-TYPE") 62 | byte_length_val = data_format.find("DIAG-CODED-TYPE/BIT-LENGTH") 63 | if byte_length_val is not None: 64 | byte_length = int(byte_length_val.text) / 8 65 | numer_factors = data_format.findall(".//COMPU-RATIONAL-COEFFS//COMPU-NUMERATOR//V") 66 | denom_factors = data_format.findall(".//COMPU-RATIONAL-COEFFS//COMPU-DENOMINATOR//V") 67 | if len(numer_factors) > 0 and len(denom_factors) > 0: 68 | equation = f"( {numer_factors[1].text} * X + {numer_factors[0].text} ) / {denom_factors[0].text}" 69 | return (diag_type, byte_length, equation, unit_display_name) 70 | 71 | dtcs = [] 72 | 73 | for dtc in ecm_layer.findall(".//DTC"): 74 | dtc_code = dtc.find("TROUBLE-CODE").text 75 | dtc_pcode = dtc.find("DISPLAY-TROUBLE-CODE").text 76 | dtc_name = dtc.find("TEXT").text 77 | dtc_symbol = dtc.get("OID") 78 | dtcs.append( 79 | { 80 | 'code': dtc_code, 81 | 'pcode': dtc_pcode, 82 | 'name': dtc_name, 83 | 'symbol': dtc_symbol 84 | } 85 | ) 86 | 87 | diag_info = [] 88 | 89 | 90 | with open("dtc.csv", "w", newline="") as csvfile: 91 | fieldnames = [ 92 | "code", "pcode", "name", "symbol" 93 | ] 94 | writer = csv.DictWriter(csvfile, fieldnames=fieldnames) 95 | 96 | writer.writeheader() 97 | for info in dtcs: 98 | writer.writerow(info) 99 | 100 | for ident_table in ecm_layer.findall(".//DATA-OBJECT-PROP[@ID='DOP_TEXTTABLERecorDataIdentMeasuValue']"): 101 | for measurement_value in ident_table.findall(".//COMPU-SCALE"): 102 | identifier = int(measurement_value.find(".//LOWER-LIMIT").text).to_bytes(2, 'big').hex() 103 | key = measurement_value.find(".//VT").text 104 | for layer in layers: 105 | table_row_ref = layer.find(f".//TABLE[@ID='TAB_RecorDataIdentMeasuValue']/TABLE-ROW/KEY[. = '{key}']/..") 106 | if table_row_ref is not None: 107 | row_layer = layer 108 | break 109 | if table_row_ref: 110 | name = table_row_ref.find("LONG-NAME").text 111 | description = table_row_ref.find("DESC") 112 | if description: 113 | description_text = ''.join(description.itertext()).replace("\n","").strip() 114 | else: 115 | description_text = name 116 | (diag_type, byte_length, equation, unit_display_name) = table_row_to_conversion(row_layer, table_row_ref) 117 | diag_info.append( 118 | { 119 | 'identifier': identifier, 120 | 'name': name, 121 | 'description': description_text, 122 | 'unit': unit_display_name, 123 | 'type': diag_type, 124 | 'bytes': int(byte_length), 125 | 'equation': equation 126 | } 127 | ) 128 | else: 129 | name = key 130 | description_text = key 131 | diag_info.append( 132 | { 133 | 'identifier': identifier, 134 | 'name': key, 135 | 'description': key, 136 | 'unit': "", 137 | 'type': "", 138 | 'bytes': "", 139 | 'equation': "" 140 | } 141 | ) 142 | 143 | with open("diag.csv", "w", newline="") as csvfile: 144 | fieldnames = [ 145 | "identifier","name","unit","description","type","bytes","equation" 146 | ] 147 | writer = csv.DictWriter(csvfile, fieldnames=fieldnames) 148 | 149 | writer.writeheader() 150 | for info in diag_info: 151 | writer.writerow(info) -------------------------------------------------------------------------------- /a2l2xml.py: -------------------------------------------------------------------------------- 1 | import csv 2 | import re 3 | import uuid 4 | 5 | from os import path 6 | from pya2l import DB, model 7 | from pya2l.api import inspect 8 | from sys import argv 9 | from xml.etree.ElementTree import Element, SubElement, Comment, ElementTree 10 | import xml.etree.ElementTree as ET 11 | 12 | import pprint 13 | 14 | USE_CONSTANTS = False # Should we use "constants" / "scalars" in the XML? They kind of aren't good at all... 15 | 16 | db = DB() 17 | session = ( 18 | db.open_existing(argv[1]) if path.exists(f"{argv[1]}db") else db.import_a2l(argv[1]) 19 | ) 20 | 21 | BASE_OFFSET = ( 22 | session.query(model.MemorySegment) 23 | .filter(model.MemorySegment.name == "_ROM") 24 | .first() 25 | .address 26 | ) 27 | 28 | data_sizes = { 29 | "UWORD": 2, 30 | "UBYTE": 1, 31 | "SBYTE": 1, 32 | "SWORD": 2, 33 | "ULONG": 4, 34 | "SLONG": 4, 35 | "FLOAT32_IEEE": 4, 36 | } 37 | 38 | storage_types = { 39 | "UBYTE": 'uint8', 40 | "SBYTE": 'int8', 41 | "UWORD": 'uint16', 42 | "SWORD": 'int16', 43 | "ULONG": 'uint32', 44 | "SLONG": 'int32', 45 | "FLOAT32_IEEE": 'float', 46 | } 47 | 48 | tables_in_xml = { 49 | "name": False, 50 | } 51 | 52 | # XML Serialization methods 53 | 54 | categories = [] 55 | 56 | 57 | def xml_root_with_configuration(title): 58 | root = Element("ecus") 59 | 60 | xmlheader = SubElement(root, "ecu_struct") 61 | xmlheader.set('id',str(title).rstrip(".a2l").lstrip(".\\")) 62 | xmlheader.set('type',str(title).rstrip(".a2l").lstrip(".\\")) 63 | xmlheader.set('include',"") 64 | xmlheader.set('desc_size',"#7FC00") 65 | xmlheader.set('reverse_bytes',"False") 66 | xmlheader.set('ecu_type',"vag") 67 | xmlheader.set('flash_template',"") 68 | xmlheader.set('checksum',"") 69 | 70 | return [root, xmlheader] 71 | 72 | 73 | def xml_table_with_root(root: Element, table_def): 74 | axis_count = 1 75 | if "x" in table_def: 76 | axis_count += 1 77 | if "y" in table_def: 78 | axis_count += 1 79 | 80 | table = SubElement(root, "map") 81 | table.set('name',table_def["title"]) 82 | table.set("type",str(axis_count)) 83 | table.set("help",table_def["description"]) 84 | table.set("class","|".join(table_def["category"])) 85 | 86 | data = SubElement(table,"data") 87 | data.set("offset","#"+table_def['z']['address'].lstrip("0x")) 88 | data.set("storagetype",str(storage_types[table_def['z']["dataSize"]])) 89 | data.set("func_2val",table_def['z']['math']) 90 | data.set("func_val2",table_def['z']['math2']) 91 | data.set("format","%0.2f") 92 | data.set("metric",table_def['z']['units']) 93 | data.set("min",str(table_def['z']['min'])) 94 | data.set("max",str(table_def['z']['max'])) 95 | data.set("order", "rc") 96 | 97 | if "x" in table_def: 98 | rows = SubElement(table,"cols") 99 | rows.set("count",str(table_def['x']['length'])) 100 | rows.set("offset","#"+table_def['x']['address'].lstrip("0x")) 101 | rows.set("storagetype",str(storage_types[table_def['x']["dataSize"]])) 102 | rows.set("func_2val",table_def['x']['math']) 103 | rows.set("func_val2",table_def['x']['math2']) 104 | rows.set("format","%0.2f") 105 | rows.set("metric",table_def['x']['units']) 106 | 107 | 108 | if "y" in table_def: 109 | cols = SubElement(table,"rows") 110 | cols.set("count",str(table_def['y']['length'])) 111 | cols.set("offset","#"+table_def['y']['address'].lstrip("0x")) 112 | cols.set("storagetype",str(storage_types[table_def['y']["dataSize"]])) 113 | cols.set("func_2val",table_def['y']['math']) 114 | cols.set("func_val2",table_def['y']['math2']) 115 | cols.set("format","%0.2f") 116 | cols.set("metric",table_def['y']['units']) 117 | 118 | 119 | return table 120 | 121 | 122 | def calc_map_size(characteristic: inspect.Characteristic): 123 | data_size = data_sizes[characteristic.deposit.fncValues["datatype"]] 124 | map_size = data_size 125 | for axis_ref in characteristic.axisDescriptions: 126 | map_size *= axis_ref.maxAxisPoints 127 | return map_size 128 | 129 | 130 | def adjust_address(address): 131 | return address - BASE_OFFSET 132 | 133 | 134 | # A2L to "normal" conversion methods 135 | 136 | 137 | def fix_degree(bad_string): 138 | return re.sub( 139 | "\uFFFD", "\u00B0", bad_string 140 | ) # Replace Unicode "unknown" with degree sign 141 | 142 | 143 | def axis_ref_to_dict(axis_ref: inspect.AxisDescr): 144 | axis_value = { 145 | "name": axis_ref.axisPtsRef.name, 146 | "units": fix_degree(axis_ref.axisPtsRef.compuMethod.unit), 147 | "min": axis_ref.lowerLimit, 148 | "max": axis_ref.upperLimit, 149 | "address": hex( 150 | adjust_address(axis_ref.axisPtsRef.address) 151 | + data_sizes[axis_ref.axisPtsRef.depositAttr.axisPts["x"]["datatype"]] 152 | ), # We need to offset the axis by 1 value, the first value is another length 153 | "length": axis_ref.maxAxisPoints, 154 | "dataSize": axis_ref.axisPtsRef.depositAttr.axisPts["x"]["datatype"], 155 | } 156 | if len(axis_ref.compuMethod.coeffs) > 0: 157 | axis_value["math"] = coefficients_to_equation(axis_ref.compuMethod.coeffs, False) 158 | else: 159 | axis_value["math"] = "X" 160 | 161 | if len(axis_ref.compuMethod.coeffs) > 0: 162 | axis_value["math2"] = coefficients_to_equation(axis_ref.compuMethod.coeffs, True) 163 | else: 164 | axis_value["math2"] = "X" 165 | 166 | return axis_value 167 | 168 | 169 | def coefficients_to_equation(coefficients, inverse): 170 | a, b, c, d, e, f = ( 171 | str(coefficients["a"]), 172 | str(coefficients["b"]), 173 | str(coefficients["c"]), 174 | str(coefficients["d"]), 175 | str(coefficients["e"]), 176 | str(coefficients["f"]), 177 | ) 178 | 179 | operation = "" 180 | if inverse is True: 181 | operation = f"({b} * ([x] / {f})) + {c}" 182 | else: 183 | operation = f"(({f} * [x]) - {c}) / {b}" 184 | 185 | if a == "0.0" and d == "0.0" and e=="0.0" and f!="0.0": # Polynomial is of order 1, ie linear original: f"(({f} * [x]) - {c} ) / ({b} - ({e} * [x]))" 186 | return operation 187 | else: 188 | return "Cannot handle polynomial ratfunc because we do not know how to invert!" 189 | 190 | 191 | # Begin 192 | 193 | root, xmlheader = xml_root_with_configuration(argv[1]) 194 | 195 | with open(argv[2], encoding="utf-8-sig") as csvfile: 196 | print("Enhance...") 197 | csvreader = csv.DictReader(csvfile) 198 | for row in csvreader: 199 | tablename = row["Table Name"] 200 | category = row["Category 1"] 201 | category2 = row["Category 2"] 202 | category3 = row["Category 3"] 203 | custom_name = row["Custom Name"] 204 | characteristics = ( 205 | session.query(model.Characteristic) 206 | .order_by(model.Characteristic.name) 207 | .filter(model.Characteristic.name == tablename) 208 | .first() 209 | ) 210 | if characteristics is None: 211 | print("******** Could not find ! ", tablename) 212 | continue 213 | c_data = inspect.Characteristic(session, tablename) 214 | table_offset = adjust_address(c_data.address) 215 | table_length = calc_map_size(c_data) 216 | axisDescriptions = c_data.axisDescriptions 217 | 218 | 219 | table_def = { 220 | "title": c_data.longIdentifier, 221 | "description": c_data.displayIdentifier, 222 | "category": [category], 223 | "z": { 224 | "min": c_data.lowerLimit, 225 | "max": c_data.upperLimit, 226 | "address": hex(adjust_address(c_data.address)), 227 | "dataSize": c_data.deposit.fncValues["datatype"], 228 | "units": fix_degree(c_data.compuMethod.unit), 229 | }, 230 | } 231 | 232 | if custom_name is not None and len(custom_name) > 0: 233 | table_def["description"] += f'|Original Name: {table_def["title"]}' 234 | table_def["title"] = custom_name 235 | 236 | duplicate = 0 237 | check_title = table_def["title"] 238 | while check_title in tables_in_xml: 239 | duplicate += 1 240 | check_title += " " 241 | 242 | tables_in_xml[check_title] = True 243 | if check_title != table_def["title"]: 244 | id_name = table_def["description"] 245 | table_def["title"] += f" [{id_name}]" #f" {duplicate}" 246 | #print(table_def["title"]) 247 | 248 | tables_in_xml[table_def["title"]] = True 249 | 250 | 251 | if category2 is not None and len(category2) > 0: 252 | table_def["category"].append(category2) 253 | 254 | if category3 is not None and len(category3) > 0: 255 | table_def["category"].append(category3) 256 | 257 | if len(c_data.compuMethod.coeffs) > 0: 258 | table_def["z"]["math"] = coefficients_to_equation(c_data.compuMethod.coeffs, False) 259 | else: 260 | table_def["z"]["math"] = "X" 261 | 262 | if len(c_data.compuMethod.coeffs) > 0: 263 | table_def["z"]["math2"] = coefficients_to_equation(c_data.compuMethod.coeffs, True) 264 | else: 265 | table_def["z"]["math2"] = "X" 266 | 267 | if len(axisDescriptions) == 0 and USE_CONSTANTS is True: 268 | table_def["constant"] = True 269 | if len(axisDescriptions) > 0: 270 | table_def["x"] = axis_ref_to_dict(axisDescriptions[0]) 271 | table_def["z"]["length"] = table_def["x"]["length"] 272 | table_def["description"] += f'|X: {table_def["x"]["name"]}' 273 | if len(axisDescriptions) > 1: 274 | table_def["y"] = axis_ref_to_dict(axisDescriptions[1]) 275 | table_def["description"] += f'|Y: {table_def["y"]["name"]}' 276 | table_def["z"]["rows"] = table_def["y"]["length"] 277 | 278 | table = xml_table_with_root(xmlheader, table_def) 279 | 280 | ElementTree(root).write(f"{argv[1]}.xml") 281 | -------------------------------------------------------------------------------- /a2l2xdf.py: -------------------------------------------------------------------------------- 1 | import csv 2 | import re 3 | import uuid 4 | 5 | from os import path 6 | from pya2l import DB, model 7 | from pya2l.api import inspect 8 | from sys import argv 9 | from xml.etree.ElementTree import Element, SubElement, Comment, ElementTree 10 | 11 | USE_CONSTANTS = False # Should we use "constants" / "scalars" in the XDF? They kind of aren't good at all... 12 | 13 | db = DB() 14 | session = ( 15 | db.open_existing(argv[1]) if path.exists(f"{argv[1]}db") else db.import_a2l(argv[1]) 16 | ) 17 | 18 | BASE_OFFSET = ( 19 | session.query(model.MemorySegment) 20 | .filter(model.MemorySegment.name == "_ROM") 21 | .first() 22 | .address 23 | ) 24 | 25 | data_sizes = { 26 | "UWORD": 2, 27 | "UBYTE": 1, 28 | "SBYTE": 1, 29 | "SWORD": 2, 30 | "ULONG": 4, 31 | "SLONG": 4, 32 | "FLOAT32_IEEE": 4, 33 | } 34 | 35 | axis_in_xdf = { 36 | "address": False, 37 | } 38 | 39 | # XDF Serialization methods 40 | 41 | categories = [] 42 | 43 | 44 | def xdf_add_category(xdfheader, category): 45 | if category not in categories: 46 | categories.append(category) 47 | index = categories.index(category) 48 | xdf_category(xdfheader, category, index) 49 | 50 | 51 | def xdf_root_with_configuration(title): 52 | root = Element("XDFFORMAT") 53 | root.set("version", "1.60") 54 | 55 | xdfheader = SubElement(root, "XDFHEADER") 56 | flags = SubElement(xdfheader, "flags") 57 | flags.text = "0x1" 58 | deftitle = SubElement(xdfheader, "deftitle") 59 | deftitle.text = title 60 | description = SubElement(xdfheader, "description") 61 | description.text = "Auto-generated by A2L2XDF" 62 | baseoffset = SubElement(xdfheader, "BASEOFFSET") 63 | baseoffset.set("offset", "0") 64 | baseoffset.set("subtract", "0") 65 | defaults = SubElement(xdfheader, "DEFAULTS") 66 | defaults.set("datasizeinbits", "8") 67 | defaults.set("sigdigits", "4") 68 | defaults.set("outputtype", "1") 69 | defaults.set("signed", "0") 70 | defaults.set("lsbfirst", "1") 71 | defaults.set("float", "0") 72 | region = SubElement(xdfheader, "REGION") 73 | region.set("type", "0xFFFFFFFF") 74 | region.set("startaddress", "0x0") 75 | region.set("size", "0x400000") 76 | region.set("regionflags", "0x0") 77 | region.set("name", "Binary") 78 | region.set("desc", "BIN for the XDF") 79 | return [root, xdfheader] 80 | 81 | 82 | def xdf_embeddeddata(element: Element, id, axis_def): 83 | embeddeddata = SubElement(element, "EMBEDDEDDATA") 84 | mmedtypeflags = 0x02 if id != "z" else 0x06 85 | if axis_def["dataSize"] == "FLOAT32_IEEE": 86 | mmedtypeflags += 0x10000 87 | 88 | embeddeddata.set("mmedtypeflags", hex(mmedtypeflags)) 89 | embeddeddata.set("mmedaddress", str(axis_def["address"])) 90 | embeddeddata.set("mmedelementsizebits", str(data_sizes[axis_def["dataSize"]] * 8)) 91 | embeddeddata.set( 92 | "mmedcolcount", str(axis_def["length"]) if "length" in axis_def else "1" 93 | ) 94 | if id == "z": 95 | embeddeddata.set( 96 | "mmedrowcount", str(axis_def["rows"]) if "rows" in axis_def else "1" 97 | ) 98 | embeddeddata.set("mmedmajorstridebits", str(data_sizes[axis_def["dataSize"]] * 8)) 99 | embeddeddata.set("mmedminorstridebits", "0") 100 | return embeddeddata 101 | 102 | 103 | def fake_xdf_axis_with_size(table: Element, id, size): 104 | axis = SubElement(table, "XDFAXIS") 105 | axis.set("uniqueid", "0x0") 106 | axis.set("id", id) 107 | indexcount = SubElement(axis, "indexcount") 108 | indexcount.text = str(size) 109 | outputtype = SubElement(axis, "outputtype") 110 | outputtype.text = "4" 111 | dalink = SubElement(axis, "DALINK") 112 | dalink.set("index", "0") 113 | math = SubElement(axis, "MATH") 114 | math.set("equation", "X") 115 | var = SubElement(math, "VAR") 116 | var.set("id", "X") 117 | for label_index in range(size): 118 | label = SubElement(axis, "LABEL") 119 | label.set("index", str(label_index)) 120 | label.set("value", "-") 121 | return axis 122 | 123 | 124 | def xdf_axis_with_table(table: Element, id, axis_def): 125 | axis = SubElement(table, "XDFAXIS") 126 | axis.set("uniqueid", "0x0") 127 | axis.set("id", id) 128 | 129 | xdf_embeddeddata(axis, id, axis_def) 130 | 131 | indexcount = SubElement(axis, "indexcount") 132 | indexcount.text = str(axis_def["length"]) if "length" in axis_def else "1" 133 | min = SubElement(axis, "min") 134 | min.text = str(axis_def["min"]) 135 | max = SubElement(axis, "max") 136 | max.text = str(axis_def["max"]) 137 | units = SubElement(axis, "units") 138 | units.text = axis_def["units"] 139 | embedinfo = SubElement(axis, "embedinfo") 140 | embedinfo.set("type", "3") # "Linked, Scale" 141 | embedinfo.set("linkobjid", str(axis_def["address"])) 142 | dalink = SubElement(axis, "DALINK") 143 | dalink.set("index", "0") 144 | math = SubElement(axis, "MATH") 145 | math.set("equation", axis_def["math"]) 146 | var = SubElement(math, "VAR") 147 | var.set("id", "X") 148 | return axis 149 | 150 | 151 | def xdf_table_with_root(root: Element, table_def): 152 | table = SubElement(root, "XDFTABLE") 153 | table.set("uniqueid", table_def["z"]["address"]) 154 | table.set("flags", "0x30") 155 | title = SubElement(table, "title") 156 | title.text = table_def["title"] 157 | description = SubElement(table, "description") 158 | description.text = table_def["description"] 159 | table_categories = [table_def["category"]] 160 | if "sub_category" in table_def: 161 | table_categories.append(table_def["sub_category"]) 162 | if "subsub_category" in table_def: 163 | table_categories.append(table_def["subsub_category"]) 164 | xdf_add_table_categories(table, table_categories) 165 | return table 166 | 167 | 168 | def xdf_add_table_categories(table, table_categories): 169 | index = 0 170 | for category in table_categories: 171 | categorymem = SubElement(table, "CATEGORYMEM") 172 | categorymem.set("index", str(index)) 173 | categorymem.set("category", str(categories.index(category) + 1)) 174 | index += 1 175 | 176 | 177 | def xdf_constant_with_root(root: Element, table_def): 178 | table = SubElement(root, "XDFCONSTANT") 179 | table.set("uniqueid", table_def["z"]["address"]) 180 | title = SubElement(table, "title") 181 | title.text = table_def["title"] 182 | description = SubElement(table, "description") 183 | description.text = table_def["description"] 184 | table_categories = [table_def["category"]] 185 | if "sub_category" in table_def: 186 | table_categories.append(table_def["sub_category"]) 187 | if "subsub_category" in table_def: 188 | table_categories.append(table_def["subsub_category"]) 189 | xdf_add_table_categories(table, table_categories) 190 | 191 | xdf_embeddeddata(table, "z", table_def["z"]) 192 | 193 | math = SubElement(table, "MATH") 194 | math.set("equation", table_def["z"]["math"]) 195 | var = SubElement(math, "VAR") 196 | var.set("id", "X") 197 | 198 | return table 199 | 200 | 201 | def xdf_table_from_axis(root: Element, table_def, axis_name): 202 | table = SubElement(root, "XDFTABLE") 203 | table.set("uniqueid", table_def[axis_name]["address"]) 204 | table.set("flags", "0x30") 205 | title = SubElement(table, "title") 206 | title.text = ( 207 | f'{table_def["title"]} : {axis_name} axis : {table_def[axis_name]["name"]}' 208 | ) 209 | description = SubElement(table, "description") 210 | description.text = table_def[axis_name]["name"] 211 | 212 | table_categories = ["Axis"] 213 | 214 | # table_categories = [table_def["category"]] 215 | # if "sub_category" in table_def: 216 | # table_categories.append(table_def["sub_category"]) 217 | # table_categories.append("Axis") 218 | 219 | xdf_add_table_categories(table, table_categories) 220 | fake_xdf_axis_with_size(table, "x", table_def[axis_name]["length"]) 221 | fake_xdf_axis_with_size(table, "y", 1) 222 | xdf_axis_with_table(table, "z", table_def[axis_name]) 223 | return table 224 | 225 | 226 | def xdf_category(xdfheader: Element, category_name, category_index): 227 | category = SubElement(xdfheader, "CATEGORY") 228 | category.set("index", hex(category_index)) 229 | category.set("name", category_name) 230 | return category 231 | 232 | 233 | # Helpers 234 | 235 | 236 | def calc_map_size(characteristic: inspect.Characteristic): 237 | data_size = data_sizes[characteristic.deposit.fncValues["datatype"]] 238 | map_size = data_size 239 | for axis_ref in characteristic.axisDescriptions: 240 | map_size *= axis_ref.maxAxisPoints 241 | return map_size 242 | 243 | 244 | def adjust_address(address): 245 | return address - BASE_OFFSET 246 | 247 | 248 | # A2L to "normal" conversion methods 249 | 250 | 251 | def fix_degree(bad_string): 252 | return re.sub( 253 | "\uFFFD", "\u00B0", bad_string 254 | ) # Replace Unicode "unknown" with degree sign 255 | 256 | 257 | def axis_ref_to_dict(axis_ref: inspect.AxisDescr): 258 | axis_value = { 259 | "name": axis_ref.axisPtsRef.name, 260 | "units": fix_degree(axis_ref.axisPtsRef.compuMethod.unit), 261 | "min": axis_ref.lowerLimit, 262 | "max": axis_ref.upperLimit, 263 | "address": hex( 264 | adjust_address(axis_ref.axisPtsRef.address) 265 | + data_sizes[axis_ref.axisPtsRef.depositAttr.axisPts["x"]["datatype"]] 266 | ), # We need to offset the axis by 1 value, the first value is another length 267 | "length": axis_ref.maxAxisPoints, 268 | "dataSize": axis_ref.axisPtsRef.depositAttr.axisPts["x"]["datatype"], 269 | } 270 | if len(axis_ref.compuMethod.coeffs) > 0: 271 | axis_value["math"] = coefficients_to_equation(axis_ref.compuMethod.coeffs) 272 | else: 273 | axis_value["math"] = "X" 274 | return axis_value 275 | 276 | 277 | def coefficients_to_equation(coefficients): 278 | a, b, c, d, e, f = ( 279 | str(coefficients["a"]), 280 | str(coefficients["b"]), 281 | str(coefficients["c"]), 282 | str(coefficients["d"]), 283 | str(coefficients["e"]), 284 | str(coefficients["f"]), 285 | ) 286 | if a == "0.0" and d == "0.0": # Polynomial is of order 1, ie linear 287 | return f"(({f} * X) - {c} ) / ({b} - ({e} * X))" 288 | else: 289 | return "Cannot handle polynomial ratfunc because we do not know how to invert!" 290 | 291 | 292 | # Begin 293 | 294 | root, xdfheader = xdf_root_with_configuration(argv[1]) 295 | xdf_add_category(xdfheader, "Axis") 296 | 297 | with open(argv[2], encoding="utf-8-sig") as csvfile: 298 | print("Enhance...") 299 | csvreader = csv.DictReader(csvfile) 300 | for row in csvreader: 301 | tablename = row["Table Name"] 302 | category = row["Category 1"] 303 | sub_category = row["Category 2"] 304 | subsub_category = row["Category 3"] 305 | custom_name = row["Custom Name"] 306 | characteristics = ( 307 | session.query(model.Characteristic) 308 | .order_by(model.Characteristic.name) 309 | .filter(model.Characteristic.name == tablename) 310 | .first() 311 | ) 312 | if characteristics is None: 313 | print("******** Could not find ! ", tablename) 314 | continue 315 | c_data = inspect.Characteristic(session, tablename) 316 | table_offset = adjust_address(c_data.address) 317 | table_length = calc_map_size(c_data) 318 | axisDescriptions = c_data.axisDescriptions 319 | 320 | xdf_add_category(xdfheader, category) 321 | 322 | table_def = { 323 | "title": c_data.longIdentifier, 324 | "description": c_data.displayIdentifier, 325 | "category": category, 326 | "z": { 327 | "min": c_data.lowerLimit, 328 | "max": c_data.upperLimit, 329 | "address": hex(adjust_address(c_data.address)), 330 | "dataSize": c_data.deposit.fncValues["datatype"], 331 | "units": fix_degree(c_data.compuMethod.unit), 332 | }, 333 | } 334 | 335 | if custom_name is not None and len(custom_name) > 0: 336 | table_def["description"] += f'\nOriginal Name: {table_def["title"]}' 337 | table_def["title"] = custom_name 338 | 339 | if sub_category is not None and len(sub_category) > 0: 340 | xdf_add_category(xdfheader, sub_category) 341 | table_def["sub_category"] = sub_category 342 | 343 | if subsub_category is not None and len(subsub_category) > 0: 344 | xdf_add_category(xdfheader, subsub_category) 345 | table_def["subsub_category"] = subsub_category 346 | 347 | if len(c_data.compuMethod.coeffs) == 0 or table_def["z"]["dataSize"] == "FLOAT32_IEEE": 348 | table_def["z"]["math"] = "X" 349 | else: 350 | table_def["z"]["math"] = coefficients_to_equation(c_data.compuMethod.coeffs) 351 | 352 | if len(axisDescriptions) == 0 and USE_CONSTANTS is True: 353 | table_def["constant"] = True 354 | 355 | if len(axisDescriptions) > 0: 356 | table_def["x"] = axis_ref_to_dict(axisDescriptions[0]) 357 | table_def["z"]["length"] = table_def["x"]["length"] 358 | table_def["description"] += f'\nX: {table_def["x"]["name"]}' 359 | 360 | if len(axisDescriptions) > 1: 361 | table_def["y"] = axis_ref_to_dict(axisDescriptions[1]) 362 | table_def["description"] += f'\nY: {table_def["y"]["name"]}' 363 | table_def["z"]["rows"] = table_def["y"]["length"] 364 | 365 | if "constant" in table_def: 366 | constant = xdf_constant_with_root(root, table_def) 367 | else: 368 | table = xdf_table_with_root(root, table_def) 369 | 370 | if "x" in table_def: 371 | xdf_axis_with_table(table, "x", table_def["x"]) 372 | #if row["Generate X Axis"].lower() == "true": 373 | 374 | duplicate = 0 375 | check_address = table_def["x"]["address"] 376 | while check_address in axis_in_xdf: 377 | duplicate += 1 378 | check_address += " " 379 | 380 | axis_in_xdf[check_address] = True 381 | if check_address == table_def["x"]["address"]: 382 | xdf_table_from_axis(root, table_def, "x") 383 | else: 384 | fake_xdf_axis_with_size(table, "x", 1) 385 | 386 | if "y" in table_def: 387 | xdf_axis_with_table(table, "y", table_def["y"]) 388 | #if row["Generate Y Axis"].lower() == "true": 389 | 390 | duplicate = 0 391 | check_address = table_def["y"]["address"] 392 | while check_address in axis_in_xdf: 393 | duplicate += 1 394 | check_address += " " 395 | 396 | axis_in_xdf[check_address] = True 397 | if check_address == table_def["y"]["address"]: 398 | 399 | xdf_table_from_axis(root, table_def, "y") 400 | else: 401 | fake_xdf_axis_with_size(table, "y", 1) 402 | 403 | xdf_axis_with_table(table, "z", table_def["z"]) 404 | 405 | ElementTree(root).write(f"{argv[1]}.xdf") 406 | -------------------------------------------------------------------------------- /default.csv: -------------------------------------------------------------------------------- 1 | Category 1,Category 2,Category 3,Table Name,Custom Name 2 | Airflow,Port Flaps,,id_port_sp, 3 | Airflow,Port Flaps,,id_port_sp_ch, 4 | Airflow,Port Flaps,,id_port_sp_cmb_ch, 5 | Airflow,Port Flaps,,id_port_sp_gear, 6 | Airflow,Port Flaps,,id_port_sp_gear_opp_1_not, 7 | Airflow,Port Flaps,,id_port_sp_gear_tia, 8 | Airflow,Port Flaps,,id_port_sp_gear_tia_opp_not, 9 | Airflow,Port Flaps,,id_port_sp_opp_1_not, 10 | Airflow,,,ip_put_sp,PUT Setpoint 11 | Airflow,,,ip_fac_maf_cor[0], 12 | Airflow,,,ip_fac_maf_cor[1], 13 | Airflow,,,ip_fac_maf_cor[2], 14 | Airflow,,,ip_fac_maf_cor[3], 15 | Airflow,,,ip_n_min_cap_l_diag,Min Engine Speed CAP Low Diag 16 | Airflow,,,ip_prs_loss_aic_1,Air Intake Pressure Drop 17 | Airflow,,,ip_put_max_cap_h_diag, 18 | Airflow,,,ip_put_min_cap_l_diag, 19 | Airflow,,,lc_put_sp_tol_ena_amp,Pressure Ratio Calc Toggle 1=AMP 0=PRS_CHA_UP 20 | Airflow,,,c_prs_im_sp_lim,Maximum Intake Manifold Pressure 21 | Airflow,,,c_prs_im_sp_max,Maximum Requested Intake Manifold Pressure 22 | Airflow,,,ip_tps_sp_mdl_max, 23 | Airflow,,,ip_prs_up_thr_dif_wide_open_thr, 24 | Fuel,Closed Loop LPFP,,CWBKS4,Codeword 4 for Low Pressure Fuel Control. Bit 0 = switchbks closed-loop LPFP control 25 | Fuel,Closed Loop LPFP,,KFNTBKS,Low Pressure Fuel Target Pressure for HDP Temperature and Speed 26 | Fuel,Closed Loop LPFP,,KFPSNS,Blend factor for Low Pressure Fuel Pressure at Hot Start in Post Start Phase 27 | Fuel,Closed Loop LPFP,,KLKFPSS,Target Low Pressure Fuel Pressure at Hot Start depending on Engine Temperature 28 | Fuel,Closed Loop LPFP,,KLPSKRMX,Fuel Pressure Setpoint by Fuel Flow 29 | Fuel,Closed Loop LPFP,,PSNHSLL,Target Low Pressure Fuel Pressure at Hot Start 30 | Fuel,Flex Fuel,,c_fac_afu_ratio_man,Manual E content value 31 | Fuel,Flex Fuel,,c_mff_sp_afu_int,Sensor Volume/Delay (set to 0) 32 | Fuel,Flex Fuel,,c_state_srv_1_pid[0][10],Enable PID 0x52 (set to 196) 33 | Fuel,Flex Fuel,,ip_mff_fac_afu, 34 | Fuel,Flex Fuel,,ip_perc_ff_sens, 35 | Fuel,Flex Fuel,,ip_temp_fuel_sens, 36 | Fuel,Flex Fuel,,lc_fac_afu_ratio_conf,Sensor Config 0 = FF Sensor 37 | Fuel,Flex Fuel,,lc_fac_afu_ratio_man_act,Use Manual E content 38 | Fuel,HPFP,,c_mfp_max, 39 | Fuel,Lambda Control,,c_lamb_bas_cor_min, 40 | Fuel,Lambda Control,,c_tia_hys_lamb_fl_sp, 41 | Fuel,Lambda Control,,c_tia_thd_lamb_fl_sp,Threshold for Hot IAT Lambda 42 | Fuel,Lambda Control,,ip_lamb_bas_hpdi[0], 43 | Fuel,Lambda Control,,ip_lamb_bas_mpi[0], 44 | Fuel,Lambda Control,,ip_lamb_cop_min, 45 | Fuel,Lambda Control,,ip_lamb_dec_fl, 46 | Fuel,Lambda Control,,ip_lamb_fl_sp,Lambda Setpoint During Full Load 47 | Fuel,Lambda Control,,ip_lamb_fl_sp_tia,Lambda Setpoint During Full Load (Hot IAT) 48 | Fuel,Lambda Control,,ip_lamb_inc_fl, 49 | Fuel,Lambda Control,,ip_lamb_ohp_ext, 50 | Fuel,Lambda Control,,ip_lamb_tur_ohp_min, 51 | Fuel,Lambda Control,,id_pv_av_fl,Pedal Threshold for Full Load Lambda 52 | Fuel,LPFP,,KFFLAF,Low Pressure Fuel Pump PWM for Pressure vs Flow 53 | Fuel,LPFP,,KFFLAF4,Low Pressure Fuel Pump PWM 4WD for Pressure vs Flow 54 | Fuel,LPFP,,KLUBLEMX,Maximum Low Pressure Fuel Pump PWM by Voltage 55 | Fuel,LPFP,,KLUBSTBKS,Low Pressure Fuel Pump Startup Correction by Voltage 56 | Fuel,Mass Fuel Flow,,ip_fac_mff_temp_cor, 57 | Fuel,Mass Fuel Flow,,ip_mff_st_h_2_s, 58 | Fuel,Mass Fuel Flow,,ip_mff_st_h_3_s, 59 | Fuel,Mass Fuel Flow,,ip_mff_st_h_3_s_2, 60 | Fuel,Mass Fuel Flow,,ip_mff_stst_h_2_s, 61 | Fuel,Mass Fuel Flow,,ip_mff_stst_intr_h_1_s, 62 | Fuel,Mass Fuel Flow,,ip_ti_eff_mff_temp_h, 63 | Fuel,Mass Fuel Flow,,ip_ti_eff_mff_temp_l, 64 | Fuel,Mass Fuel Flow,,ip_ti_eff_mff_temp_mid_1, 65 | Fuel,Monitoring REQUIRES ECM3 CHECKSUM,,ip_mff_iv_thd_mon, 66 | Fuel,MPI,,ip_fac_mff_bas_mplh[4], 67 | Fuel,MPI,,ip_fac_mff_ti_stnd_h_rng_mpi[0], 68 | Fuel,MPI,,ip_fac_opp_mpi_2_pls_1, 69 | Fuel,MPI,,ip_fac_opp_mpi_2_pls_1_max, 70 | Fuel,MPI,,ip_fac_ti_prs_mpi, 71 | Fuel,MPI,,ip_ti_add_dly_mpi[0], 72 | Fuel,MPI,,ip_ti_add_dly_temp_cor_mpi, 73 | Fuel,,,c_n_min_fl, 74 | Fuel,,,c_tco_min_fl, 75 | Fuel,,,ip_soi_1_opp_1_cus, 76 | Fuel,,,ip_soi_max_cus, 77 | Immo Power Class,,,DATA_ImoDat.Imo_idxTun01_C_VW,idxTun for Power Class 1 78 | Immo Power Class,,,DATA_ImoDat.Imo_idxTun02_C_VW,idxTun for Power Class 2 79 | Immo Power Class,,,DATA_ImoDat.Imo_idxTun03_C_VW,idxTun for Power Class 3 80 | Immo Power Class,,,DATA_ImoDat.Imo_idxTun04_C_VW,idxTun for Power Class 4 81 | Immo Power Class,,,DATA_ImoDat.Imo_idxTun05_C_VW,idxTun for Power Class 5 82 | Impulse Combustion,Duration,,ip_t_max_pu_end_imp_comb,Max Time Allowed in Impulse Combustion 83 | Impulse Combustion,Duration,,ip_t_act_imp_comb_eng_spt[0],Impulse Comb Time by Gear (MT) (Sport) 84 | Impulse Combustion,Duration,,ip_t_act_imp_comb_eng_spt[1],Impulse Comb Time by Gear (AT) (Sport) 85 | Impulse Combustion,Duration,,ip_t_act_imp_comb_eng_spt[2],Impulse Comb Time by Gear (CVT) (Sport) 86 | Impulse Combustion,Duration,,ip_t_act_imp_comb_eng_spt[3],Impulse Comb Time by Gear (DCT) (Sport) 87 | Impulse Combustion,Duration,,ip_t_act_imp_comb_eng[0],Impulse Comb Time by Gear (MT) 88 | Impulse Combustion,Duration,,ip_t_act_imp_comb_eng[1],Impulse Comb Time by Gear (AT) 89 | Impulse Combustion,Duration,,ip_t_act_imp_comb_eng[2],Impulse Comb Time by Gear (CVT) 90 | Impulse Combustion,Duration,,ip_t_act_imp_comb_eng[3],Impulse Comb Time by Gear (DCT) 91 | Impulse Combustion,Duration,,ip_t_act_imp_comb_gs,Impulse Comb Time After Gear Shift 92 | Impulse Combustion,Duration,,ip_t_act_imp_comb_gs_spt,Impulse Comb Time After Gear Shift (Sport) 93 | Impulse Combustion,Enable Conditions,,lc_imp_comb,Enable Switch for Impulse Combustion 94 | Impulse Combustion,Enable Conditions,,clf_conf_imp_comb_aux,Impuse Combustion Drive Mode Bitmask 95 | Impulse Combustion,Enable Conditions,,c_n_min_imp_comb,Min RPM for Impulse Combustion 96 | Impulse Combustion,Enable Conditions,,id_imp_comb_act_state_cc,Clutch States That Allow Impulse Combustion 97 | Impulse Combustion,Enable Conditions,,c_conf_imp_comb_gs,Impuse Combustion Config During Gearshift (Bitmask) 98 | Impulse Combustion,Enable Conditions,,c_tq_req_dif_tra_min_imp_comb,Torque Difference to Enable Impulse Combustion 99 | Impulse Combustion,Enable Conditions,,lc_imp_comb_puc_ena,Enable Impulse Combustion Ouside of Fuel Cutoff State 100 | Impulse Combustion,Spark,,ip_iga_imp_comb_sof_act[0],Spark During Impulse 0 Exh Flaps Closed 101 | Impulse Combustion,Spark,,ip_iga_imp_comb_sof_act[1],Spark During Impulse 1 Exh Flaps Closed 102 | Impulse Combustion,Spark,,ip_iga_imp_comb_sof_deac[0],Spark During Impulse 0 Exh Flaps Open 103 | Impulse Combustion,Spark,,ip_iga_imp_comb_sof_deac[1],Spark During Impulse 1 Exh Flaps Open 104 | Impulse Combustion,,,c_tco_min_imp_comb, 105 | Impulse Combustion,,,c_temp_cat_imp_comb_max, 106 | Impulse Combustion,,,c_temp_cat_imp_comb_min, 107 | Impulse Combustion,,,c_temp_imp_comb_max, 108 | Impulse Combustion,,,c_temp_imp_comb_min, 109 | Impulse Combustion,,,c_vs_min_imp_comb, 110 | Impulse Combustion,,,ip_fac_t_act_imp_comb, 111 | Impulse Combustion,,,ip_t_dly_temp_cat_imp_comb, 112 | Impulse Combustion,,,ip_tqi_gs_fast_inc_max_imp_comb,Max Torque Impulse Combustion is Allowed 113 | Impulse Combustion,,,lc_gs_tq_inc_imp_comb_ena, 114 | Impulse Combustion,,,lc_iga_bol_imp_comb_ena, 115 | Limiter,Monitoring REQUIRES ECM3 CHECKSUM,,ip_tqi_ref_max_mon, 116 | Limiter,RPM,,c_n_max_at, 117 | Limiter,RPM,,c_n_max_crk_err, 118 | Limiter,RPM,,c_n_max_cvt, 119 | Limiter,RPM,,c_n_max_dct, 120 | Limiter,RPM,,c_n_max_fcut_ofs, 121 | Limiter,RPM,,c_n_max_icl_min, 122 | Limiter,RPM,,c_n_max_imp_comb, 123 | Limiter,RPM,,c_n_max_mt, 124 | Limiter,RPM,,c_n_max_vst_eol, 125 | Limiter,RPM,,id_n_max_stat_vvl_h, 126 | Limiter,RPM,,id_n_max_stat_vvl_h_sel_psn_h, 127 | Limiter,RPM,,id_n_max_stat_vvl_l, 128 | Limiter,RPM,,id_n_max_sub, 129 | Limiter,RPM,,ip_n_max_sub, 130 | Limiter,RPM,,ip_n_max_toil, 131 | Limiter,Speed,,DATA_LMVLim.LMVLim_vMax_vLim_C_VW.VehSpdl2Lvl1, 132 | Limiter,Speed,,DATA_LMVLim.LMVLim_vMax_vLim_C_VW.VehSpdl2Lvl2, 133 | Limiter,Speed,,DATA_LMVLim.LMVLim_vMax_vLim_C_VW.VehSpdl2Lvl3, 134 | Limiter,Speed,,DATA_LMVLim.LMVLim_vMax_vLim_C_VW.VehSpdl2NotAcv, 135 | Limiter,,,c_m_air_cyl_sp_max, 136 | Limiter,,,c_temp_cop_act_thd[0], 137 | Limiter,,,c_temp_cop_act_thd[1], 138 | Limiter,,,ip_m_air_cyl_max_stnd_vvl[0], 139 | Limiter,,,ip_m_air_cyl_max_stnd_vvl[1], 140 | Limiter,,,ip_teg_tur_up_sp, 141 | Limiter,,,ip_teg_tur_up_sp[0], 142 | Limiter,,,ip_teg_tur_up_sp[1], 143 | Limiter,,,ip_tqi_pow_max_bas, 144 | Limiter,,,ip_tqi_ref_n_m_air, 145 | Limiter,,,ip_tqi_teg_max_tur_min, 146 | Misc,,,c_ctr_temp_poil_h_pump_oil_el, 147 | Misc,,,c_n_pvs_bls_bts_plaus, 148 | Misc,,,c_pv_av_pvs_bls_bts_plaus, 149 | Misc,,,c_tco_max_pump_oil_el, 150 | Misc,,,id_poil_h_pump_oil_el_maf_grd, 151 | Misc,,,id_poil_h_pump_oil_el_maf_sp, 152 | Misc,,,c_n_32_poil_h_pump_oil_el, 153 | Misc,,,c_vs_pvs_bls_bts_plaus, 154 | Misc,,,id_eff_scc_sp_min, 155 | Misc,,,id_eff_scc_sp_min_spt, 156 | Misc,,,id_gear_max_ef_lock_open[0][2][0],Lock Left Exhaust Flap by Gear for Silent mode 157 | Misc,,,id_gear_max_ef_lock_open[0][2][1],Lock Left Exhaust Flap by Gear for Dynamic mode 158 | Misc,,,id_gear_max_ef_lock_open[0][2][2],Lock Left Exhaust Flap by Gear for Normal mode 159 | Misc,,,id_gear_max_ef_lock_open[1][2][0],Lock Right Exhaust Flap by Gear for Silent mode 160 | Misc,,,id_gear_max_ef_lock_open[1][2][1],Lock Right Exhaust Flap by Gear for Dynamic mode 161 | Misc,,,id_gear_max_ef_lock_open[1][2][2],Lock Right Exhaust Flap by Gear for Normal mode 162 | Misc,,,id_state_gear_ef_mod_sel[2][0],Selection between AUX (0) and Normal (1) Maps for Silent mode 163 | Misc,,,id_state_gear_ef_mod_sel[2][1],Selection between AUX (0) and Normal (1) Maps for Dynamic mode 164 | Misc,,,id_state_gear_ef_mod_sel[2][2],Selection between AUX (0) and Normal (1) Maps for Normal mode 165 | Misc,,,id_state_sp_ef_aux[0][2][0],Left Exhaust Flap AUX map for Silent mode 166 | Misc,,,id_state_sp_ef_aux[0][2][1],Left Exhaust Flap AUX map for Dynamic mode 167 | Misc,,,id_state_sp_ef_aux[0][2][2],Left Exhaust Flap AUX map for Normal mode 168 | Misc,,,id_state_sp_ef_aux[1][2][0],Right Exhaust Flap AUX map for Silent mode 169 | Misc,,,id_state_sp_ef_aux[1][2][1],Right Exhaust Flap AUX map for Dynamic mode 170 | Misc,,,id_state_sp_ef_aux[1][2][2],Right Exhaust Flap AUX map for Normal mode 171 | Misc,,,id_state_sp_ef[0][2][0],Left Exhaust Flap map for Silent mode 172 | Misc,,,id_state_sp_ef[0][2][1],Left Exhaust Flap map for Dynamic mode 173 | Misc,,,id_state_sp_ef[0][2][2],Left Exhaust Flap map for Normal mode 174 | Misc,,,id_state_sp_ef[1][2][0],Right Exhaust Flap map for Silent mode 175 | Misc,,,id_state_sp_ef[1][2][1],Right Exhaust Flap map for Dynamic mode 176 | Misc,,,id_state_sp_ef[1][2][2],Right Exhaust Flap map for Normal mode 177 | Misc,,,id_idx_var_pow_clas_ef,Power Class Mapping for Exhaust Flaps 178 | Misc,,,id_idx_noise_mod_aut_ef,Driving Mode Mapping for Exhaust Flaps 179 | Misc,,,ip_cam_sp_is_vcp[0], 180 | Misc,,,ip_cam_sp_is_vcp[1], 181 | Misc,,,ip_cam_sp_vcp[0][0][0], 182 | Misc,,,ip_cam_sp_vcp[0][1][0], 183 | Misc,,,ip_cam_sp_vcp[1][0][0], 184 | Misc,,,ip_cam_sp_vcp[1][1][0], 185 | Misc,,,ip_n_grd_max_vlft_1_tip, 186 | Misc,,,ip_n_sp_is_t_ast, 187 | Misc,,,ip_n_sp_is_t_ast_ch, 188 | Misc,,,ip_vlft_sp, 189 | Misc,,,lc_pvs_bls_bts_plaus_ena, 190 | MPI,Cmb Pri,,c_nr_cmb_mod_pri_req[0], 191 | MPI,Cmb Pri,,c_nr_cmb_mod_pri_req[1], 192 | MPI,Cmb Pri,,c_nr_cmb_mod_pri_req[10], 193 | MPI,Cmb Pri,,c_nr_cmb_mod_pri_req[11], 194 | MPI,Cmb Pri,,c_nr_cmb_mod_pri_req[12], 195 | MPI,Cmb Pri,,c_nr_cmb_mod_pri_req[13], 196 | MPI,Cmb Pri,,c_nr_cmb_mod_pri_req[14], 197 | MPI,Cmb Pri,,c_nr_cmb_mod_pri_req[15], 198 | MPI,Cmb Pri,,c_nr_cmb_mod_pri_req[16], 199 | MPI,Cmb Pri,,c_nr_cmb_mod_pri_req[17], 200 | MPI,Cmb Pri,,c_nr_cmb_mod_pri_req[18], 201 | MPI,Cmb Pri,,c_nr_cmb_mod_pri_req[19], 202 | MPI,Cmb Pri,,c_nr_cmb_mod_pri_req[2], 203 | MPI,Cmb Pri,,c_nr_cmb_mod_pri_req[20], 204 | MPI,Cmb Pri,,c_nr_cmb_mod_pri_req[21], 205 | MPI,Cmb Pri,,c_nr_cmb_mod_pri_req[22], 206 | MPI,Cmb Pri,,c_nr_cmb_mod_pri_req[23], 207 | MPI,Cmb Pri,,c_nr_cmb_mod_pri_req[24], 208 | MPI,Cmb Pri,,c_nr_cmb_mod_pri_req[25], 209 | MPI,Cmb Pri,,c_nr_cmb_mod_pri_req[26], 210 | MPI,Cmb Pri,,c_nr_cmb_mod_pri_req[27], 211 | MPI,Cmb Pri,,c_nr_cmb_mod_pri_req[28], 212 | MPI,Cmb Pri,,c_nr_cmb_mod_pri_req[29], 213 | MPI,Cmb Pri,,c_nr_cmb_mod_pri_req[3], 214 | MPI,Cmb Pri,,c_nr_cmb_mod_pri_req[30], 215 | MPI,Cmb Pri,,c_nr_cmb_mod_pri_req[31], 216 | MPI,Cmb Pri,,c_nr_cmb_mod_pri_req[32], 217 | MPI,Cmb Pri,,c_nr_cmb_mod_pri_req[33], 218 | MPI,Cmb Pri,,c_nr_cmb_mod_pri_req[34], 219 | MPI,Cmb Pri,,c_nr_cmb_mod_pri_req[35], 220 | MPI,Cmb Pri,,c_nr_cmb_mod_pri_req[36], 221 | MPI,Cmb Pri,,c_nr_cmb_mod_pri_req[37], 222 | MPI,Cmb Pri,,c_nr_cmb_mod_pri_req[38], 223 | MPI,Cmb Pri,,c_nr_cmb_mod_pri_req[39], 224 | MPI,Cmb Pri,,c_nr_cmb_mod_pri_req[4], 225 | MPI,Cmb Pri,,c_nr_cmb_mod_pri_req[40], 226 | MPI,Cmb Pri,,c_nr_cmb_mod_pri_req[41], 227 | MPI,Cmb Pri,,c_nr_cmb_mod_pri_req[42], 228 | MPI,Cmb Pri,,c_nr_cmb_mod_pri_req[43], 229 | MPI,Cmb Pri,,c_nr_cmb_mod_pri_req[44], 230 | MPI,Cmb Pri,,c_nr_cmb_mod_pri_req[45], 231 | MPI,Cmb Pri,,c_nr_cmb_mod_pri_req[46], 232 | MPI,Cmb Pri,,c_nr_cmb_mod_pri_req[47], 233 | MPI,Cmb Pri,,c_nr_cmb_mod_pri_req[48], 234 | MPI,Cmb Pri,,c_nr_cmb_mod_pri_req[5], 235 | MPI,Cmb Pri,,c_nr_cmb_mod_pri_req[6], 236 | MPI,Cmb Pri,,c_nr_cmb_mod_pri_req[7], 237 | MPI,Cmb Pri,,c_nr_cmb_mod_pri_req[8], 238 | MPI,Cmb Pri,,c_nr_cmb_mod_pri_req[9], 239 | MPI,Inhibit,,c_lf_cmb_mod_inh_sel[0], 240 | MPI,Inhibit,,c_lf_cmb_mod_inh_sel[1], 241 | MPI,Inhibit,,c_lf_cmb_mod_inh_sel[10], 242 | MPI,Inhibit,,c_lf_cmb_mod_inh_sel[11], 243 | MPI,Inhibit,,c_lf_cmb_mod_inh_sel[12], 244 | MPI,Inhibit,,c_lf_cmb_mod_inh_sel[2], 245 | MPI,Inhibit,,c_lf_cmb_mod_inh_sel[3], 246 | MPI,Inhibit,,c_lf_cmb_mod_inh_sel[4], 247 | MPI,Inhibit,,c_lf_cmb_mod_inh_sel[5], 248 | MPI,Inhibit,,c_lf_cmb_mod_inh_sel[6], 249 | MPI,Inhibit,,c_lf_cmb_mod_inh_sel[7], 250 | MPI,Inhibit,,c_lf_cmb_mod_inh_sel[8], 251 | MPI,Inhibit,,c_lf_cmb_mod_inh_sel[9], 252 | MPI,Operating Point,,c_idx_cmb_mod_opp_stnd[0], 253 | MPI,Operating Point,,c_idx_cmb_mod_opp_stnd[1], 254 | MPI,Operating Point,,c_idx_cmb_mod_opp_stnd[2], 255 | MPI,Operating Point,,c_idx_cmb_mod_opp_stnd[3], 256 | MPI,Operating Point,,c_idx_cmb_mod_opp_stnd[4], 257 | MPI,Operating Point,,c_idx_cmb_mod_opp_stnd[5], 258 | MPI,Operating Point,,c_n_thd_mplh_opp_max[0], 259 | MPI,Operating Point,,c_n_thd_mplh_opp_max[1], 260 | MPI,Operating Point,,c_n_thd_mplh_opp_max[2], 261 | MPI,Operating Point,,c_n_thd_mplh_opp_max[3], 262 | MPI,Operating Point,,c_n_thd_mplh_opp_max[4], 263 | MPI,Operating Point,,c_n_thd_mplh_opp_max[5], 264 | MPI,,,c_abc_ini_typ_IV_MPI_OC_0, 265 | MPI,,,c_lf_cmb_mod_inh_stop_tran[0][0], 266 | MPI,,,c_lf_cmb_mod_inh_stop_tran[0][0], 267 | MPI,,,c_n_32_min_iv_mpi_diag, 268 | MPI,,,c_ti_thd_inh_diag_iv_mpi, 269 | MPI,,,clf_iv_mpi_diag_inh_man[0], 270 | MPI,,,CWBKSMPI, 271 | MPI,,,ip_iga_knk_mpi_thd, 272 | MPI,,,ip_tqi_thd_mplh_opp_max[5], 273 | MPI,,,ip_tqi_thd_mplh_opp_min[5], 274 | MPI Inhibitors,,,id_tia_toil_mpi_inh, 275 | MPI Inhibitors,,,ip_fup_efp_thd, 276 | MPI Inhibitors,,,ip_maf_int_ast_mpi_inh_thd, 277 | MPI Inhibitors,,,ip_maf_int_thd_clr_mpi_inh, 278 | Spark,Base - Port Flap High,,ip_iga_bas_ivvt_vvl_port_h[0][0][0],Basic Ignition Angle VVL 0 Intake 0 Exhaust 0 279 | Spark,Base - Port Flap High,,ip_iga_bas_ivvt_vvl_port_h[0][0][1],Basic Ignition Angle VVL 0 Intake 0 Exhaust 1 280 | Spark,Base - Port Flap High,,ip_iga_bas_ivvt_vvl_port_h[0][0][2],Basic Ignition Angle VVL 0 Intake 0 Exhaust 2 281 | Spark,Base - Port Flap High,,ip_iga_bas_ivvt_vvl_port_h[0][1][0],Basic Ignition Angle VVL 0 Intake 1 Exhaust 0 282 | Spark,Base - Port Flap High,,ip_iga_bas_ivvt_vvl_port_h[0][1][1],Basic Ignition Angle VVL 0 Intake 1 Exhaust 1 283 | Spark,Base - Port Flap High,,ip_iga_bas_ivvt_vvl_port_h[0][1][2],Basic Ignition Angle VVL 0 Intake 1 Exhaust 2 284 | Spark,Base - Port Flap High,,ip_iga_bas_ivvt_vvl_port_h[0][2][0],Basic Ignition Angle VVL 0 Intake 2 Exhaust 0 285 | Spark,Base - Port Flap High,,ip_iga_bas_ivvt_vvl_port_h[0][2][1],Basic Ignition Angle VVL 0 Intake 2 Exhaust 1 286 | Spark,Base - Port Flap High,,ip_iga_bas_ivvt_vvl_port_h[0][2][2],Basic Ignition Angle VVL 0 Intake 2 Exhaust 2 287 | Spark,Base - Port Flap High,,ip_iga_bas_ivvt_vvl_port_h[1][0][0],Basic Ignition Angle VVL 1 Intake 0 Exhaust 0 288 | Spark,Base - Port Flap High,,ip_iga_bas_ivvt_vvl_port_h[1][0][1],Basic Ignition Angle VVL 1 Intake 0 Exhaust 1 289 | Spark,Base - Port Flap High,,ip_iga_bas_ivvt_vvl_port_h[1][0][2],Basic Ignition Angle VVL 1 Intake 0 Exhaust 2 290 | Spark,Base - Port Flap High,,ip_iga_bas_ivvt_vvl_port_h[1][1][0],Basic Ignition Angle VVL 1 Intake 1 Exhaust 0 291 | Spark,Base - Port Flap High,,ip_iga_bas_ivvt_vvl_port_h[1][1][1],Basic Ignition Angle VVL 1 Intake 1 Exhaust 1 292 | Spark,Base - Port Flap High,,ip_iga_bas_ivvt_vvl_port_h[1][1][2],Basic Ignition Angle VVL 1 Intake 1 Exhaust 2 293 | Spark,Base - Port Flap High,,ip_iga_bas_ivvt_vvl_port_h[1][2][0],Basic Ignition Angle VVL 1 Intake 2 Exhaust 0 294 | Spark,Base - Port Flap High,,ip_iga_bas_ivvt_vvl_port_h[1][2][1],Basic Ignition Angle VVL 1 Intake 2 Exhaust 1 295 | Spark,Base - Port Flap High,,ip_iga_bas_ivvt_vvl_port_h[1][2][2],Basic Ignition Angle VVL 1 Intake 2 Exhaust 2 296 | Spark,Base - Port Flap Low,,ip_iga_bas_ivvt_vvl_port_l[0][0][0],Basic Ignition Angle VVL 0 Intake 0 Exhaust 0 297 | Spark,Base - Port Flap Low,,ip_iga_bas_ivvt_vvl_port_l[0][0][1],Basic Ignition Angle VVL 0 Intake 0 Exhaust 1 298 | Spark,Base - Port Flap Low,,ip_iga_bas_ivvt_vvl_port_l[0][0][2],Basic Ignition Angle VVL 0 Intake 0 Exhaust 2 299 | Spark,Base - Port Flap Low,,ip_iga_bas_ivvt_vvl_port_l[0][1][0],Basic Ignition Angle VVL 0 Intake 1 Exhaust 0 300 | Spark,Base - Port Flap Low,,ip_iga_bas_ivvt_vvl_port_l[0][1][1],Basic Ignition Angle VVL 0 Intake 1 Exhaust 1 301 | Spark,Base - Port Flap Low,,ip_iga_bas_ivvt_vvl_port_l[0][1][2],Basic Ignition Angle VVL 0 Intake 1 Exhaust 2 302 | Spark,Base - Port Flap Low,,ip_iga_bas_ivvt_vvl_port_l[0][2][0],Basic Ignition Angle VVL 0 Intake 2 Exhaust 0 303 | Spark,Base - Port Flap Low,,ip_iga_bas_ivvt_vvl_port_l[0][2][1],Basic Ignition Angle VVL 0 Intake 2 Exhaust 1 304 | Spark,Base - Port Flap Low,,ip_iga_bas_ivvt_vvl_port_l[0][2][2],Basic Ignition Angle VVL 0 Intake 2 Exhaust 2 305 | Spark,Base - Port Flap Low,,ip_iga_bas_ivvt_vvl_port_l[1][0][0],Basic Ignition Angle VVL 1 Intake 0 Exhaust 0 306 | Spark,Base - Port Flap Low,,ip_iga_bas_ivvt_vvl_port_l[1][0][1],Basic Ignition Angle VVL 1 Intake 0 Exhaust 1 307 | Spark,Base - Port Flap Low,,ip_iga_bas_ivvt_vvl_port_l[1][0][2],Basic Ignition Angle VVL 1 Intake 0 Exhaust 2 308 | Spark,Base - Port Flap Low,,ip_iga_bas_ivvt_vvl_port_l[1][1][0],Basic Ignition Angle VVL 1 Intake 1 Exhaust 0 309 | Spark,Base - Port Flap Low,,ip_iga_bas_ivvt_vvl_port_l[1][1][1],Basic Ignition Angle VVL 1 Intake 1 Exhaust 1 310 | Spark,Base - Port Flap Low,,ip_iga_bas_ivvt_vvl_port_l[1][1][2],Basic Ignition Angle VVL 1 Intake 1 Exhaust 2 311 | Spark,Base - Port Flap Low,,ip_iga_bas_ivvt_vvl_port_l[1][2][0],Basic Ignition Angle VVL 1 Intake 2 Exhaust 0 312 | Spark,Base - Port Flap Low,,ip_iga_bas_ivvt_vvl_port_l[1][2][1],Basic Ignition Angle VVL 1 Intake 2 Exhaust 1 313 | Spark,Base - Port Flap Low,,ip_iga_bas_ivvt_vvl_port_l[1][2][2],Basic Ignition Angle VVL 1 Intake 2 Exhaust 2 314 | Spark,Knock,,ip_dly_inc_ad_1_knk,Cyl Strokes Between Knock Decay Steps AD1 315 | Spark,Knock,,ip_fac_iga_dec_knk,Knock Energy Muliplier 316 | Spark,Knock,,ip_dly_inc_fast_knk,Cyl Strokes Between Knock Decay Steps 317 | Spark,Knock,,ip_iga_dec_knk,Initial Knock Correction 318 | Spark,Knock,,ip_iga_inc_knk,Knock Correction Decay Amount 319 | Spark,Knock,,ip_knks_gain_1[0], 320 | Spark,Knock,,ip_knks_gain_1[1], 321 | Spark,Knock,,ip_knks_gain_1[2], 322 | Spark,Knock,,ip_knks_gain_1[3], 323 | Spark,Knock,,ip_knks_gain_pre[0], 324 | Spark,Knock,,ip_knks_gain_pre[1], 325 | Spark,Knock,,ip_knks_gain_pre[2], 326 | Spark,Knock,,ip_knks_gain_pre[3], 327 | Spark,Knock,,ip_knks_gain[0], 328 | Spark,Knock,,ip_knks_gain[1], 329 | Spark,Knock,,ip_knks_gain[2], 330 | Spark,Knock,,ip_knks_gain[3], 331 | Spark,Knock,,ip_knks_thd_fac_1[0], 332 | Spark,Knock,,ip_knks_thd_fac_1[1], 333 | Spark,Knock,,ip_knks_thd_fac_1[2], 334 | Spark,Knock,,ip_knks_thd_fac_1[3], 335 | Spark,Knock,,ip_knks_thd_fac[0], 336 | Spark,Knock,,ip_knks_thd_fac[1], 337 | Spark,Knock,,ip_knks_thd_fac[2], 338 | Spark,Knock,,ip_knks_thd_fac[3], 339 | Spark,MBT - Port Flap High,,ip_iga_ref_ivvt_vvl_port_h[0][0][0],MBT Ignition Angle VVL 0 Intake 0 Exhaust 0 340 | Spark,MBT - Port Flap High,,ip_iga_ref_ivvt_vvl_port_h[0][0][1],MBT Ignition Angle VVL 0 Intake 0 Exhaust 1 341 | Spark,MBT - Port Flap High,,ip_iga_ref_ivvt_vvl_port_h[0][0][2],MBT Ignition Angle VVL 0 Intake 0 Exhaust 2 342 | Spark,MBT - Port Flap High,,ip_iga_ref_ivvt_vvl_port_h[0][1][0],MBT Ignition Angle VVL 0 Intake 1 Exhaust 0 343 | Spark,MBT - Port Flap High,,ip_iga_ref_ivvt_vvl_port_h[0][1][1],MBT Ignition Angle VVL 0 Intake 1 Exhaust 1 344 | Spark,MBT - Port Flap High,,ip_iga_ref_ivvt_vvl_port_h[0][1][2],MBT Ignition Angle VVL 0 Intake 1 Exhaust 2 345 | Spark,MBT - Port Flap High,,ip_iga_ref_ivvt_vvl_port_h[0][2][0],MBT Ignition Angle VVL 0 Intake 2 Exhaust 0 346 | Spark,MBT - Port Flap High,,ip_iga_ref_ivvt_vvl_port_h[0][2][1],MBT Ignition Angle VVL 0 Intake 2 Exhaust 1 347 | Spark,MBT - Port Flap High,,ip_iga_ref_ivvt_vvl_port_h[0][2][2],MBT Ignition Angle VVL 0 Intake 2 Exhaust 2 348 | Spark,MBT - Port Flap High,,ip_iga_ref_ivvt_vvl_port_h[1][0][0],MBT Ignition Angle VVL 1 Intake 0 Exhaust 0 349 | Spark,MBT - Port Flap High,,ip_iga_ref_ivvt_vvl_port_h[1][0][1],MBT Ignition Angle VVL 1 Intake 0 Exhaust 1 350 | Spark,MBT - Port Flap High,,ip_iga_ref_ivvt_vvl_port_h[1][0][2],MBT Ignition Angle VVL 1 Intake 0 Exhaust 2 351 | Spark,MBT - Port Flap High,,ip_iga_ref_ivvt_vvl_port_h[1][1][0],MBT Ignition Angle VVL 1 Intake 1 Exhaust 0 352 | Spark,MBT - Port Flap High,,ip_iga_ref_ivvt_vvl_port_h[1][1][1],MBT Ignition Angle VVL 1 Intake 1 Exhaust 1 353 | Spark,MBT - Port Flap High,,ip_iga_ref_ivvt_vvl_port_h[1][1][2],MBT Ignition Angle VVL 1 Intake 1 Exhaust 2 354 | Spark,MBT - Port Flap High,,ip_iga_ref_ivvt_vvl_port_h[1][2][0],MBT Ignition Angle VVL 1 Intake 2 Exhaust 0 355 | Spark,MBT - Port Flap High,,ip_iga_ref_ivvt_vvl_port_h[1][2][1],MBT Ignition Angle VVL 1 Intake 2 Exhaust 1 356 | Spark,MBT - Port Flap High,,ip_iga_ref_ivvt_vvl_port_h[1][2][2],MBT Ignition Angle VVL 1 Intake 2 Exhaust 2 357 | Spark,MBT - Port Flap Low,,ip_iga_ref_ivvt_vvl_port_l[0][0][0],MBT Ignition Angle VVL 0 Intake 0 Exhaust 0 358 | Spark,MBT - Port Flap Low,,ip_iga_ref_ivvt_vvl_port_l[0][0][1],MBT Ignition Angle VVL 0 Intake 0 Exhaust 1 359 | Spark,MBT - Port Flap Low,,ip_iga_ref_ivvt_vvl_port_l[0][0][2],MBT Ignition Angle VVL 0 Intake 0 Exhaust 2 360 | Spark,MBT - Port Flap Low,,ip_iga_ref_ivvt_vvl_port_l[0][1][0],MBT Ignition Angle VVL 0 Intake 1 Exhaust 0 361 | Spark,MBT - Port Flap Low,,ip_iga_ref_ivvt_vvl_port_l[0][1][1],MBT Ignition Angle VVL 0 Intake 1 Exhaust 1 362 | Spark,MBT - Port Flap Low,,ip_iga_ref_ivvt_vvl_port_l[0][1][2],MBT Ignition Angle VVL 0 Intake 1 Exhaust 2 363 | Spark,MBT - Port Flap Low,,ip_iga_ref_ivvt_vvl_port_l[0][2][0],MBT Ignition Angle VVL 0 Intake 2 Exhaust 0 364 | Spark,MBT - Port Flap Low,,ip_iga_ref_ivvt_vvl_port_l[0][2][1],MBT Ignition Angle VVL 0 Intake 2 Exhaust 1 365 | Spark,MBT - Port Flap Low,,ip_iga_ref_ivvt_vvl_port_l[0][2][2],MBT Ignition Angle VVL 0 Intake 2 Exhaust 2 366 | Spark,MBT - Port Flap Low,,ip_iga_ref_ivvt_vvl_port_l[1][0][0],MBT Ignition Angle VVL 1 Intake 0 Exhaust 0 367 | Spark,MBT - Port Flap Low,,ip_iga_ref_ivvt_vvl_port_l[1][0][1],MBT Ignition Angle VVL 1 Intake 0 Exhaust 1 368 | Spark,MBT - Port Flap Low,,ip_iga_ref_ivvt_vvl_port_l[1][0][2],MBT Ignition Angle VVL 1 Intake 0 Exhaust 2 369 | Spark,MBT - Port Flap Low,,ip_iga_ref_ivvt_vvl_port_l[1][1][0],MBT Ignition Angle VVL 1 Intake 1 Exhaust 0 370 | Spark,MBT - Port Flap Low,,ip_iga_ref_ivvt_vvl_port_l[1][1][1],MBT Ignition Angle VVL 1 Intake 1 Exhaust 1 371 | Spark,MBT - Port Flap Low,,ip_iga_ref_ivvt_vvl_port_l[1][1][2],MBT Ignition Angle VVL 1 Intake 1 Exhaust 2 372 | Spark,MBT - Port Flap Low,,ip_iga_ref_ivvt_vvl_port_l[1][2][0],MBT Ignition Angle VVL 1 Intake 2 Exhaust 0 373 | Spark,MBT - Port Flap Low,,ip_iga_ref_ivvt_vvl_port_l[1][2][1],MBT Ignition Angle VVL 1 Intake 2 Exhaust 1 374 | Spark,MBT - Port Flap Low,,ip_iga_ref_ivvt_vvl_port_l[1][2][2],MBT Ignition Angle VVL 1 Intake 2 Exhaust 2 375 | Spark,Minimum - Port Flap High,,ip_iga_min_bas_cbk_sel_port_h[0][0][0],Minimum Spark Bank 0 VVL 0 CMB 0 376 | Spark,Minimum - Port Flap High,,ip_iga_min_bas_cbk_sel_port_h[0][0][1],Minimum Spark Bank 0 VVL 0 CMB 1 377 | Spark,Minimum - Port Flap High,,ip_iga_min_bas_cbk_sel_port_h[0][0][2],Minimum Spark Bank 0 VVL 0 CMB 2 378 | Spark,Minimum - Port Flap High,,ip_iga_min_bas_cbk_sel_port_h[0][0][3],Minimum Spark Bank 0 VVL 0 CMB 3 379 | Spark,Minimum - Port Flap High,,ip_iga_min_bas_cbk_sel_port_h[0][0][4],Minimum Spark Bank 0 VVL 0 CMB 4 380 | Spark,Minimum - Port Flap High,,ip_iga_min_bas_cbk_sel_port_h[0][0][5],Minimum Spark Bank 0 VVL 0 CMB 5 381 | Spark,Minimum - Port Flap High,,ip_iga_min_bas_cbk_sel_port_h[0][0][6],Minimum Spark Bank 0 VVL 0 CMB 6 382 | Spark,Minimum - Port Flap High,,ip_iga_min_bas_cbk_sel_port_h[0][0][7],Minimum Spark Bank 0 VVL 0 CMB 7 383 | Spark,Minimum - Port Flap High,,ip_iga_min_bas_cbk_sel_port_h[0][1][0],Minimum Spark Bank 0 VVL 1 CMB 0 384 | Spark,Minimum - Port Flap High,,ip_iga_min_bas_cbk_sel_port_h[0][1][1],Minimum Spark Bank 0 VVL 1 CMB 1 385 | Spark,Minimum - Port Flap High,,ip_iga_min_bas_cbk_sel_port_h[0][1][2],Minimum Spark Bank 0 VVL 1 CMB 2 386 | Spark,Minimum - Port Flap High,,ip_iga_min_bas_cbk_sel_port_h[0][1][3],Minimum Spark Bank 0 VVL 1 CMB 3 387 | Spark,Minimum - Port Flap High,,ip_iga_min_bas_cbk_sel_port_h[0][1][4],Minimum Spark Bank 0 VVL 1 CMB 4 388 | Spark,Minimum - Port Flap High,,ip_iga_min_bas_cbk_sel_port_h[0][1][5],Minimum Spark Bank 0 VVL 1 CMB 5 389 | Spark,Minimum - Port Flap High,,ip_iga_min_bas_cbk_sel_port_h[0][1][6],Minimum Spark Bank 0 VVL 1 CMB 6 390 | Spark,Minimum - Port Flap High,,ip_iga_min_bas_cbk_sel_port_h[0][1][7],Minimum Spark Bank 0 VVL 1 CMB 7 391 | Spark,Minimum - Port Flap Low,,ip_iga_min_bas_cbk_sel_port_l[0][0][0],Minimum Spark Bank 0 VVL 0 CMB 0 392 | Spark,Minimum - Port Flap Low,,ip_iga_min_bas_cbk_sel_port_l[0][0][1],Minimum Spark Bank 0 VVL 0 CMB 1 393 | Spark,Minimum - Port Flap Low,,ip_iga_min_bas_cbk_sel_port_l[0][0][2],Minimum Spark Bank 0 VVL 0 CMB 2 394 | Spark,Minimum - Port Flap Low,,ip_iga_min_bas_cbk_sel_port_l[0][0][3],Minimum Spark Bank 0 VVL 0 CMB 3 395 | Spark,Minimum - Port Flap Low,,ip_iga_min_bas_cbk_sel_port_l[0][0][4],Minimum Spark Bank 0 VVL 0 CMB 4 396 | Spark,Minimum - Port Flap Low,,ip_iga_min_bas_cbk_sel_port_l[0][0][5],Minimum Spark Bank 0 VVL 0 CMB 5 397 | Spark,Minimum - Port Flap Low,,ip_iga_min_bas_cbk_sel_port_l[0][0][6],Minimum Spark Bank 0 VVL 0 CMB 6 398 | Spark,Minimum - Port Flap Low,,ip_iga_min_bas_cbk_sel_port_l[0][0][7],Minimum Spark Bank 0 VVL 0 CMB 7 399 | Spark,Minimum - Port Flap Low,,ip_iga_min_bas_cbk_sel_port_l[0][1][0],Minimum Spark Bank 0 VVL 1 CMB 0 400 | Spark,Minimum - Port Flap Low,,ip_iga_min_bas_cbk_sel_port_l[0][1][1],Minimum Spark Bank 0 VVL 1 CMB 1 401 | Spark,Minimum - Port Flap Low,,ip_iga_min_bas_cbk_sel_port_l[0][1][2],Minimum Spark Bank 0 VVL 1 CMB 2 402 | Spark,Minimum - Port Flap Low,,ip_iga_min_bas_cbk_sel_port_l[0][1][3],Minimum Spark Bank 0 VVL 1 CMB 3 403 | Spark,Minimum - Port Flap Low,,ip_iga_min_bas_cbk_sel_port_l[0][1][4],Minimum Spark Bank 0 VVL 1 CMB 4 404 | Spark,Minimum - Port Flap Low,,ip_iga_min_bas_cbk_sel_port_l[0][1][5],Minimum Spark Bank 0 VVL 1 CMB 5 405 | Spark,Minimum - Port Flap Low,,ip_iga_min_bas_cbk_sel_port_l[0][1][6],Minimum Spark Bank 0 VVL 1 CMB 6 406 | Spark,Minimum - Port Flap Low,,ip_iga_min_bas_cbk_sel_port_l[0][1][7],Minimum Spark Bank 0 VVL 1 CMB 7 407 | Spark,,,ip_fac_tqi_pow_lim_pi, 408 | Spark,,,ip_iga_bas_cmb_mod_cor[0], 409 | Spark,,,ip_iga_bas_cmb_mod_cor[2], 410 | Spark,,,ip_iga_bas_cmb_mod_cor[4], 411 | Spark,,,ip_iga_bas_temp_n_32,Spark IAT Correction 412 | Spark,,,ip_iga_bas_temp_neg_fac,Spark IAT Negitive Weight Factor 413 | Spark,,,ip_iga_bas_temp_pos_fac,Spark IAT Positive Weight Factor 414 | Spark,,,ip_iga_ref_temp_n_32,Spark IAT Correction MBT 415 | Spark,,,ip_iga_ref_temp_neg_fac,Spark IAT Negitive Weight Factor MBT 416 | Spark,,,ip_iga_ref_temp_pos_fac,Spark IAT Negitive Positive Factor MBT 417 | Spark,,,ip_lamb_iga_afl, 418 | System,,,DATA_ThmMng.CoTE_tHdCtlSp_M_VW,Cylinder Head Temperature Desired 419 | System,,,DATA_ThmMng.CoTE_tHdCtlSp_v_T_VW,CHT Desired Speed Dependent 420 | System,,,ip_prs_im_mes,MAP Scaling 421 | System,,,ip_prs_up_thr_mes,PUT Scaling 422 | Torque Management,Transmission,,clf_conf_gb_nctl[1],Trans Engine Speed Control Config (Bitmask) 1 423 | Torque Management,Transmission,,clf_conf_gb_nctl[2],Trans Engine Speed Control Config (Bitmask) 2 424 | Torque Management,Transmission,,clf_conf_gb_nctl[3],Trans Engine Speed Control Config (Bitmask) 3 425 | Torque Management,Transmission,,ip_ki_gb_nctl_driv_slow,Rev Match Speed Control I Gain (Slow Path) 426 | Torque Management,Transmission,,ip_kp_gb_nctl_driv_slow,Rev Match Speed Control P Gain (Slow Path) 427 | Torque Management,Transmission,,ip_kp_gb_nctl_driv_fast,Rev Match Speed Control P Gain (Fast Path) 428 | Torque Management,Transmission,,ip_iga_add_min_gs_req,Min Spark Adder During Gearshift 429 | Torque Management,Transmission,,ip_iga_add_min_gs_req_spt,Min Spark Adder During Gearshift (Sport) 430 | Torque Management,Transmission,,id_eff_scc_sp_min,Torque Ratio During Fuel Cut For Gearshift 431 | Torque Management,Transmission,,id_eff_scc_sp_min_spt,Torque Ratio During Fuel Cut For Gearshift (Sport) 432 | Torque Management,,,ip_fac_amp_n_cor[0],Torque Limit for Ambient Pressure (PC0) 433 | Torque Management,,,ip_fac_amp_n_cor[1],Torque Limit for Ambient Pressure (PC1) 434 | Torque Management,,,ip_fac_amp_n_cor[2],Torque Limit for Ambient Pressure (PC2) 435 | Torque Management,,,ip_fac_amp_n_cor[3],Torque Limit for Ambient Pressure (PC3) 436 | Torque Management,,,ip_fac_amp_n_cor[4],Torque Limit for Ambient Pressure (PC4) 437 | Torque Management,,,ip_fac_pow_max_toil,Torque Limit for Oil Temperature 438 | Torque Management,,,ip_fac_tia_n_cor[0],Torque Limit for IAT (PC0) 439 | Torque Management,,,ip_fac_tia_n_cor[1],Torque Limit for IAT (PC1) 440 | Torque Management,,,ip_fac_tia_n_cor[2],Torque Limit for IAT (PC2) 441 | Torque Management,,,ip_fac_tia_n_cor[3],Torque Limit for IAT (PC3) 442 | Torque Management,,,ip_fac_tia_n_cor[4],Torque Limit for IAT (PC4) 443 | Torque Management,,,ip_tq_lim_gb_prot_max_dct, 444 | Torque Management,,,ip_tq_lim_gb_prot_max_mt, 445 | Torque Management,,,ip_tq_lim_gb_prot_max_mt_4wd, 446 | Torque Management,,,ip_tq_pow_max_drof_mt, 447 | Torque Management,,,ip_tq_pow_max_drof_mt_4wd, 448 | Torque Model,Airflow to Torque - Port Flap High,,ip_tqi_ref_n_m_air_vvl_cam_h[0][0][0],Airflow to Torque VVL 0 Intake 0 Exhaust 0 449 | Torque Model,Airflow to Torque - Port Flap High,,ip_tqi_ref_n_m_air_vvl_cam_h[0][0][1],Airflow to Torque VVL 0 Intake 0 Exhaust 1 450 | Torque Model,Airflow to Torque - Port Flap High,,ip_tqi_ref_n_m_air_vvl_cam_h[0][1][0],Airflow to Torque VVL 0 Intake 1 Exhaust 0 451 | Torque Model,Airflow to Torque - Port Flap High,,ip_tqi_ref_n_m_air_vvl_cam_h[0][1][1],Airflow to Torque VVL 0 Intake 1 Exhaust 1 452 | Torque Model,Airflow to Torque - Port Flap High,,ip_tqi_ref_n_m_air_vvl_cam_h[0][2][0],Airflow to Torque VVL 0 Intake 2 Exhaust 0 453 | Torque Model,Airflow to Torque - Port Flap High,,ip_tqi_ref_n_m_air_vvl_cam_h[0][2][1],Airflow to Torque VVL 0 Intake 2 Exhaust 1 454 | Torque Model,Airflow to Torque - Port Flap High,,ip_tqi_ref_n_m_air_vvl_cam_h[1][0][0],Airflow to Torque VVL 1 Intake 0 Exhaust 0 455 | Torque Model,Airflow to Torque - Port Flap High,,ip_tqi_ref_n_m_air_vvl_cam_h[1][0][1],Airflow to Torque VVL 1 Intake 0 Exhaust 1 456 | Torque Model,Airflow to Torque - Port Flap High,,ip_tqi_ref_n_m_air_vvl_cam_h[1][1][0],Airflow to Torque VVL 1 Intake 1 Exhaust 0 457 | Torque Model,Airflow to Torque - Port Flap High,,ip_tqi_ref_n_m_air_vvl_cam_h[1][1][1],Airflow to Torque VVL 1 Intake 1 Exhaust 1 458 | Torque Model,Airflow to Torque - Port Flap High,,ip_tqi_ref_n_m_air_vvl_cam_h[1][2][0],Airflow to Torque VVL 1 Intake 2 Exhaust 0 459 | Torque Model,Airflow to Torque - Port Flap High,,ip_tqi_ref_n_m_air_vvl_cam_h[1][2][1],Airflow to Torque VVL 1 Intake 2 Exhaust 1 460 | Torque Model,Airflow to Torque - Port Flap Low,,ip_tqi_ref_n_m_air_vvl_cam_l[0][0][0],Airflow to Torque VVL 0 Intake 0 Exhaust 0 461 | Torque Model,Airflow to Torque - Port Flap Low,,ip_tqi_ref_n_m_air_vvl_cam_l[0][0][1],Airflow to Torque VVL 0 Intake 0 Exhaust 1 462 | Torque Model,Airflow to Torque - Port Flap Low,,ip_tqi_ref_n_m_air_vvl_cam_l[0][1][0],Airflow to Torque VVL 0 Intake 1 Exhaust 0 463 | Torque Model,Airflow to Torque - Port Flap Low,,ip_tqi_ref_n_m_air_vvl_cam_l[0][1][1],Airflow to Torque VVL 0 Intake 1 Exhaust 1 464 | Torque Model,Airflow to Torque - Port Flap Low,,ip_tqi_ref_n_m_air_vvl_cam_l[0][2][0],Airflow to Torque VVL 0 Intake 2 Exhaust 0 465 | Torque Model,Airflow to Torque - Port Flap Low,,ip_tqi_ref_n_m_air_vvl_cam_l[0][2][1],Airflow to Torque VVL 0 Intake 2 Exhaust 1 466 | Torque Model,Airflow to Torque - Port Flap Low,,ip_tqi_ref_n_m_air_vvl_cam_l[1][0][0],Airflow to Torque VVL 1 Intake 0 Exhaust 0 467 | Torque Model,Airflow to Torque - Port Flap Low,,ip_tqi_ref_n_m_air_vvl_cam_l[1][0][1],Airflow to Torque VVL 1 Intake 0 Exhaust 1 468 | Torque Model,Airflow to Torque - Port Flap Low,,ip_tqi_ref_n_m_air_vvl_cam_l[1][1][0],Airflow to Torque VVL 1 Intake 1 Exhaust 0 469 | Torque Model,Airflow to Torque - Port Flap Low,,ip_tqi_ref_n_m_air_vvl_cam_l[1][1][1],Airflow to Torque VVL 1 Intake 1 Exhaust 1 470 | Torque Model,Airflow to Torque - Port Flap Low,,ip_tqi_ref_n_m_air_vvl_cam_l[1][2][0],Airflow to Torque VVL 1 Intake 2 Exhaust 0 471 | Torque Model,Airflow to Torque - Port Flap Low,,ip_tqi_ref_n_m_air_vvl_cam_l[1][2][1],Airflow to Torque VVL 1 Intake 2 Exhaust 1 472 | Torque Model,Torque to Airflow - Port Flap High,,ip_maf_stk_sp_vvl_cam_h[0][0][0],Torque to Airflow VVL 0 Intake 0 Exhaust 0 473 | Torque Model,Torque to Airflow - Port Flap High,,ip_maf_stk_sp_vvl_cam_h[0][0][1],Torque to Airflow VVL 0 Intake 0 Exhaust 1 474 | Torque Model,Torque to Airflow - Port Flap High,,ip_maf_stk_sp_vvl_cam_h[0][1][0],Torque to Airflow VVL 0 Intake 1 Exhaust 0 475 | Torque Model,Torque to Airflow - Port Flap High,,ip_maf_stk_sp_vvl_cam_h[0][1][1],Torque to Airflow VVL 0 Intake 1 Exhaust 1 476 | Torque Model,Torque to Airflow - Port Flap High,,ip_maf_stk_sp_vvl_cam_h[0][2][0],Torque to Airflow VVL 0 Intake 2 Exhaust 0 477 | Torque Model,Torque to Airflow - Port Flap High,,ip_maf_stk_sp_vvl_cam_h[0][2][1],Torque to Airflow VVL 0 Intake 2 Exhaust 1 478 | Torque Model,Torque to Airflow - Port Flap High,,ip_maf_stk_sp_vvl_cam_h[1][0][0],Torque to Airflow VVL 1 Intake 0 Exhaust 0 479 | Torque Model,Torque to Airflow - Port Flap High,,ip_maf_stk_sp_vvl_cam_h[1][0][1],Torque to Airflow VVL 1 Intake 0 Exhaust 1 480 | Torque Model,Torque to Airflow - Port Flap High,,ip_maf_stk_sp_vvl_cam_h[1][1][0],Torque to Airflow VVL 1 Intake 1 Exhaust 0 481 | Torque Model,Torque to Airflow - Port Flap High,,ip_maf_stk_sp_vvl_cam_h[1][1][1],Torque to Airflow VVL 1 Intake 1 Exhaust 1 482 | Torque Model,Torque to Airflow - Port Flap High,,ip_maf_stk_sp_vvl_cam_h[1][2][0],Torque to Airflow VVL 1 Intake 2 Exhaust 0 483 | Torque Model,Torque to Airflow - Port Flap High,,ip_maf_stk_sp_vvl_cam_h[1][2][1],Torque to Airflow VVL 1 Intake 2 Exhaust 1 484 | Torque Model,Torque to Airflow - Port Flap Low,,ip_maf_stk_sp_vvl_cam_l[0][0][0],Torque to Airflow VVL 0 Intake 0 Exhaust 0 485 | Torque Model,Torque to Airflow - Port Flap Low,,ip_maf_stk_sp_vvl_cam_l[0][0][1],Torque to Airflow VVL 0 Intake 0 Exhaust 1 486 | Torque Model,Torque to Airflow - Port Flap Low,,ip_maf_stk_sp_vvl_cam_l[0][1][0],Torque to Airflow VVL 0 Intake 1 Exhaust 0 487 | Torque Model,Torque to Airflow - Port Flap Low,,ip_maf_stk_sp_vvl_cam_l[0][1][1],Torque to Airflow VVL 0 Intake 1 Exhaust 1 488 | Torque Model,Torque to Airflow - Port Flap Low,,ip_maf_stk_sp_vvl_cam_l[0][2][0],Torque to Airflow VVL 0 Intake 2 Exhaust 0 489 | Torque Model,Torque to Airflow - Port Flap Low,,ip_maf_stk_sp_vvl_cam_l[0][2][1],Torque to Airflow VVL 0 Intake 2 Exhaust 1 490 | Torque Model,Torque to Airflow - Port Flap Low,,ip_maf_stk_sp_vvl_cam_l[1][0][0],Torque to Airflow VVL 1 Intake 0 Exhaust 0 491 | Torque Model,Torque to Airflow - Port Flap Low,,ip_maf_stk_sp_vvl_cam_l[1][0][1],Torque to Airflow VVL 1 Intake 0 Exhaust 1 492 | Torque Model,Torque to Airflow - Port Flap Low,,ip_maf_stk_sp_vvl_cam_l[1][1][0],Torque to Airflow VVL 1 Intake 1 Exhaust 0 493 | Torque Model,Torque to Airflow - Port Flap Low,,ip_maf_stk_sp_vvl_cam_l[1][1][1],Torque to Airflow VVL 1 Intake 1 Exhaust 1 494 | Torque Model,Torque to Airflow - Port Flap Low,,ip_maf_stk_sp_vvl_cam_l[1][2][0],Torque to Airflow VVL 1 Intake 2 Exhaust 0 495 | Torque Model,Torque to Airflow - Port Flap Low,,ip_maf_stk_sp_vvl_cam_l[1][2][1],Torque to Airflow VVL 1 Intake 2 Exhaust 1 496 | Torque Request,AT,,ip_fac_slop_pv_ofrd, 497 | Torque Request,AT,,ip_fac_slop_pv_at, 498 | Torque Request,AT,,ip_fac_tq_req_driv_l_vs_at,Driver Pedal Torque Request Low Speed (AT) 499 | Torque Request,AT,,ip_fac_tq_req_driv_h_vs_at,Driver Pedal Torque Request High Speed (AT) 500 | Torque Request,AT,,ip_fac_tq_req_driv_h_vs_at_s,Driver Pedal Torque Request High Speed (AT) (Sport) 501 | Torque Request,AT,,ip_fac_tq_req_driv_l_vs_at_s,Driver Pedal Torque Request Low Speed (AT) (Sport) 502 | Torque Request,AT,,ip_fac_tq_req_driv_l_vs_cvt,Driver Pedal Torque Request Low Speed (CVT) 503 | Torque Request,AT,,ip_fac_tq_req_driv_h_vs_cvt,Driver Pedal Torque Request High Speed (CVT) 504 | Torque Request,AT,,ip_fac_tq_req_driv_l_vs_cvt_s,Driver Pedal Torque Request Low Speed (CVT) (Sport) 505 | Torque Request,AT,,ip_fac_tq_req_driv_h_vs_cvt_s,Driver Pedal Torque Request High Speed (CVT) (Sport) 506 | Torque Request,AT,,c_vs_thd_min_cvt,Vehicle Speed for Low Speed Pedal Table (CVT) 507 | Torque Request,AT,,c_vs_thd_max_cvt,Vehicle Speed for High Speed Pedal Table (CVT) 508 | Torque Request,AT,,ip_fac_tq_req_driv_h_vs_dct,Driver Pedal Torque Request High Speed (DCT) 509 | Torque Request,AT,,ip_fac_tq_req_driv_h_vs_dct_s,Driver Pedal Torque Request High Speed (DCT) (Sport) 510 | Torque Request,AT,,ip_fac_tq_req_driv_l_vs_dct,Driver Pedal Torque Request Low Speed (DCT) 511 | Torque Request,AT,,ip_fac_tq_req_driv_l_vs_dct_s,Driver Pedal Torque Request Low Speed (DCT) (Sport) 512 | Torque Request,AT,,c_vs_thd_min_dct,Vehicle Speed for Low Speed Pedal Table (DCT) 513 | Torque Request,AT,,c_vs_thd_max_dct,Vehicle Speed for High Speed Pedal Table (DCT) 514 | Torque Request,AT,,ip_tq_pow_max_at[0][0],Maximum Torque at Clutch AT PC 0 Type 0 515 | Torque Request,AT,,ip_tq_pow_max_at[0][1],Maximum Torque at Clutch AT PC 0 Type 1 516 | Torque Request,AT,,ip_tq_pow_max_at[0][2],Maximum Torque at Clutch AT PC 0 Type 2 517 | Torque Request,AT,,ip_tq_pow_max_at[1][0],Maximum Torque at Clutch AT PC 1 Type 0 518 | Torque Request,AT,,ip_tq_pow_max_at[1][1],Maximum Torque at Clutch AT PC 1 Type 1 519 | Torque Request,AT,,ip_tq_pow_max_at[1][2],Maximum Torque at Clutch AT PC 1 Type 2 520 | Torque Request,AT,,ip_tq_pow_max_at[2][0],Maximum Torque at Clutch AT PC 2 Type 0 521 | Torque Request,AT,,ip_tq_pow_max_at[2][1],Maximum Torque at Clutch AT PC 2 Type 1 522 | Torque Request,AT,,ip_tq_pow_max_at[2][2],Maximum Torque at Clutch AT PC 2 Type 2 523 | Torque Request,AT,,ip_tq_pow_max_at[3][0],Maximum Torque at Clutch AT PC 3 Type 0 524 | Torque Request,AT,,ip_tq_pow_max_at[3][1],Maximum Torque at Clutch AT PC 3 Type 1 525 | Torque Request,AT,,ip_tq_pow_max_at[3][2],Maximum Torque at Clutch AT PC 3 Type 2 526 | Torque Request,AT,,ip_tq_pow_max_at[4][0],Maximum Torque at Clutch AT PC 4 Type 0 527 | Torque Request,AT,,ip_tq_pow_max_at[4][1],Maximum Torque at Clutch AT PC 4 Type 1 528 | Torque Request,AT,,ip_tq_pow_max_at[4][2],Maximum Torque at Clutch AT PC 4 Type 2 529 | Torque Request,MT,,ip_fac_tq_req_driv_l_ofrd_mt,Driver Pedal Torque Request Low Speed (MT) (Offroad) 530 | Torque Request,MT,,ip_fac_tq_req_driv_h_ofrd_mt,Driver Pedal Torque Request High Speed (MT) (Offroad) 531 | Torque Request,MT,,ip_fac_tq_req_driv_h_vs_mt,Driver Pedal Torque Request High Speed (MT) 532 | Torque Request,MT,,ip_fac_tq_req_driv_l_vs_mt,Driver Pedal Torque Request Low Speed (MT) 533 | Torque Request,MT,,c_vs_thd_max_mt,Vehicle Speed for Low/High Speed Transition (MT) 534 | Torque Request,MT,,ip_fac_tq_req_driv_spt_mt,Driver Demand Modifier for Sport Mode (MT) 535 | Torque Request,MT,,ip_tq_pow_max_mt[0][0],Maximum Torque at Clutch MT PC 0 Type 0 536 | Torque Request,MT,,ip_tq_pow_max_mt[0][1],Maximum Torque at Clutch MT PC 0 Type 1 537 | Torque Request,MT,,ip_tq_pow_max_mt[1][0],Maximum Torque at Clutch MT PC 1 Type 0 538 | Torque Request,MT,,ip_tq_pow_max_mt[1][1],Maximum Torque at Clutch MT PC 1 Type 1 539 | Torque Request,MT,,ip_tq_pow_max_mt[2][0],Maximum Torque at Clutch MT PC 2 Type 0 540 | Torque Request,MT,,ip_tq_pow_max_mt[2][1],Maximum Torque at Clutch MT PC 2 Type 1 541 | Torque Request,MT,,ip_tq_pow_max_mt[3][0],Maximum Torque at Clutch MT PC 3 Type 0 542 | Torque Request,MT,,ip_tq_pow_max_mt[3][1],Maximum Torque at Clutch MT PC 3 Type 1 543 | Torque Request,MT,,ip_tq_pow_max_mt[4][0],Maximum Torque at Clutch MT PC 4 Type 0 544 | Torque Request,MT,,ip_tq_pow_max_mt[4][1],Maximum Torque at Clutch MT PC 4 Type 1 545 | Torque Request,,,ip_fac_tq_req_driv_rvg,Driver Pedal Torque Request (Reverse) 546 | Torque Request,,,ip_fac_tq_req_driv_drof,Driver Pedal Torque Request During Driveoff 547 | Torque Request,,,ip_fac_tq_req_driv_h_vs_ofrd,Driver Pedal Torque Request High Speed (Offroad) 548 | Torque Request,,,ip_fac_tq_req_driv_l_vs_ofrd,Driver Pedal Torque Request Low Speed (Offroad) 549 | Torque Request,,,ip_tq_lgrd_pow_max_req_clu_dec, 550 | Torque Request,,,ip_tq_lgrd_pow_max_req_clu_inc, 551 | Turbocharger,Model - Compressor,,ip_fac_eff_cmpr,Air Temperature Increase Factor 552 | Turbocharger,Model - Compressor,,ip_pq_cha_surge_dl,Turbo Compressor Surge Line 553 | Turbocharger,Model - Compressor,,ip_pq_cha_surge_dl_hys_pl,Turbocharger Compressor Surge Line Hysteresis Part Load 554 | Turbocharger,Model - Compressor,,ip_fac_eff_cmpr_mdl,Compressor Efficiency 555 | Turbocharger,Model - Compressor,,ip_n_tcha_stnd,Turbocharger Speed 556 | Turbocharger,Model - Turbine,,ip_pq_tur_ref,Reference Turbine Pressure Ratio 557 | Turbocharger,Model - Turbine,,ip_fac_pow_tur_ref,Reference Turbine Power Factor 558 | Turbocharger,Model - Turbine,,ip_flow_tur_cor_pq_tur[0],Turbine Mass Flow VVL 0 559 | Turbocharger,Model - Turbine,,ip_flow_tur_cor_pq_tur[1],Turbine Mass Flow VVL 1 560 | Turbocharger,Model - Turbine,,ip_pq_tur_dif[0],Turbine Pressure Ratio VVL 0 561 | Turbocharger,Model - Turbine,,ip_pq_tur_dif[1],Turbine Pressure Ratio VVL 1 562 | Turbocharger,Torque Management,,c_tia_thr_tcha_max,Compressor Outlet Temp for Maximum Torque Management 563 | Turbocharger,Torque Management,,c_tia_thr_tcha_max_sp,Compressor Outlet Temp to Start Torque Mangement 564 | Turbocharger,Torque Management,,ip_pq_cha_max,Turbo Max Pressure Ratio 565 | Turbocharger,Torque Management,,ip_fac_put_sp_bol_atjs,Boost Pressure Launch Control 566 | Turbocharger,Torque Management,,c_n_tcha_max,Turbocharger Speed for Maximum Torque Management 567 | Turbocharger,Torque Management,,c_n_tcha_max_sp,Turbocharger Speed to Start Torque Mangement 568 | Turbocharger,Wastegate,,ip_fac_bpa_sp_amp_ofs, 569 | Turbocharger,Wastegate,,ip_fac_bpa_sp[0],Wastegate Position Feedforward VVL 0 570 | Turbocharger,Wastegate,,ip_fac_bpa_sp[1],Wastegate Position Feedforward VVL 1 571 | Turbocharger,Wastegate,,ip_fac_kp_bpa_ctl_cor_neg, 572 | Turbocharger,Wastegate,,ip_fac_kp_bpa_ctl_cor_neg_1, 573 | Turbocharger,Wastegate,,ip_fac_kp_bpa_ctl_cor_pos, 574 | Turbocharger,Wastegate,,ip_fac_kp_bpa_ctl_cor_pos_1, 575 | --------------------------------------------------------------------------------