android: AndrOBD library vendored (no submodule, no git link)
@@ -1,4 +0,0 @@
|
||||
[submodule "android/AndrOBD"]
|
||||
path = android/AndrOBD
|
||||
url = https://github.com/fr3ts0n/AndrOBD.git
|
||||
ignore = all
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
// AndrOBD library module — только протокол ELM327/OBD2
|
||||
// Источник: https://github.com/fr3ts0n/AndrOBD (GPLv2)
|
||||
// Директория содержится как vendored код, не submodule
|
||||
|
||||
plugins {
|
||||
id("com.android.library")
|
||||
}
|
||||
|
||||
android {
|
||||
namespace = "com.fr3ts0n.ecu.prot"
|
||||
compileSdk = 34
|
||||
|
||||
defaultConfig {
|
||||
minSdk = 24
|
||||
targetSdk = 34
|
||||
}
|
||||
|
||||
compileOptions {
|
||||
sourceCompatibility = JavaVersion.VERSION_17
|
||||
targetCompatibility = JavaVersion.VERSION_17
|
||||
}
|
||||
|
||||
sourceSets {
|
||||
getByName("main") {
|
||||
java.srcDirs("com")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation("androidx.annotation:annotation:1.7.0")
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
package com.fr3ts0n.common;
|
||||
|
||||
import java.util.ResourceBundle;
|
||||
|
||||
/**
|
||||
* Wrapper class to ensure UTF8 encoding for resource bundle reading
|
||||
*
|
||||
* @author fr3ts0n
|
||||
*/
|
||||
|
||||
public class UTF8Bundle
|
||||
{
|
||||
private static ResourceBundle.Control ctrl = null;
|
||||
|
||||
public UTF8Bundle(ResourceBundle.Control control)
|
||||
{
|
||||
ctrl = control;
|
||||
}
|
||||
|
||||
public static ResourceBundle getBundle(String bundleName)
|
||||
{
|
||||
if (ctrl != null)
|
||||
{
|
||||
return ResourceBundle.getBundle(bundleName, ctrl);
|
||||
}
|
||||
else
|
||||
{
|
||||
return ResourceBundle.getBundle(bundleName);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,68 @@
|
||||
/*
|
||||
* (C) Copyright 2015 by fr3ts0n <erwin.scheuch-heilig@gmx.at>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of
|
||||
* the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
||||
* MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
package com.fr3ts0n.common;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.InputStreamReader;
|
||||
import java.net.URL;
|
||||
import java.net.URLConnection;
|
||||
import java.util.Locale;
|
||||
import java.util.PropertyResourceBundle;
|
||||
import java.util.ResourceBundle;
|
||||
import java.util.ResourceBundle.Control;
|
||||
|
||||
/**
|
||||
* Utility class to load UTF8 resources into a @see ResourceBundle
|
||||
*
|
||||
* @author fr3ts0n - (found as snippet from stackoverflow)
|
||||
*/
|
||||
public class UTF8Control extends Control {
|
||||
public ResourceBundle newBundle
|
||||
(String baseName, Locale locale, String format, ClassLoader loader, boolean reload)
|
||||
throws IOException
|
||||
{
|
||||
// The below is a copy of the default implementation.
|
||||
String bundleName = toBundleName(baseName, locale);
|
||||
String resourceName = toResourceName(bundleName, "properties");
|
||||
ResourceBundle bundle = null;
|
||||
InputStream stream = null;
|
||||
if (reload) {
|
||||
URL url = loader.getResource(resourceName);
|
||||
if (url != null) {
|
||||
URLConnection connection = url.openConnection();
|
||||
if (connection != null) {
|
||||
connection.setUseCaches(false);
|
||||
stream = connection.getInputStream();
|
||||
}
|
||||
}
|
||||
} else {
|
||||
stream = loader.getResourceAsStream(resourceName);
|
||||
}
|
||||
if (stream != null) {
|
||||
try {
|
||||
// Only this line is changed to make it to read properties files as UTF-8.
|
||||
bundle = new PropertyResourceBundle(new InputStreamReader(stream, "UTF-8"));
|
||||
} finally {
|
||||
stream.close();
|
||||
}
|
||||
}
|
||||
return bundle;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
/*
|
||||
* (C) Copyright 2015 by fr3ts0n <erwin.scheuch-heilig@gmx.at>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of
|
||||
* the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
||||
* MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
/**
|
||||
* common stuff which is valid for all packages
|
||||
*
|
||||
* @author fr3ts0n
|
||||
*/
|
||||
package com.fr3ts0n.common;
|
||||
|
After Width: | Height: | Size: 538 B |
|
After Width: | Height: | Size: 491 B |
|
After Width: | Height: | Size: 710 B |
|
After Width: | Height: | Size: 551 B |
|
After Width: | Height: | Size: 1.0 KiB |
|
After Width: | Height: | Size: 745 B |
|
After Width: | Height: | Size: 605 B |
|
After Width: | Height: | Size: 554 B |
|
After Width: | Height: | Size: 732 B |
|
After Width: | Height: | Size: 821 B |
|
After Width: | Height: | Size: 267 B |
@@ -0,0 +1,130 @@
|
||||
/*
|
||||
* (C) Copyright 2015 by fr3ts0n <erwin.scheuch-heilig@gmx.at>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of
|
||||
* the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
||||
* MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
package com.fr3ts0n.ecu;
|
||||
|
||||
import com.fr3ts0n.ecu.prot.obd.Messages;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.TreeMap;
|
||||
|
||||
/**
|
||||
* conversion of numeric values based on a Bitmap
|
||||
*
|
||||
* @author erwin
|
||||
*/
|
||||
public class BitmapConversion extends NumericConversion
|
||||
{
|
||||
/** SerialVersion UID */
|
||||
private static final long serialVersionUID = -8498739122873083420L;
|
||||
/* the HashMap Data */
|
||||
private final TreeMap<Long,String> hashData = new TreeMap<Long,String>();
|
||||
|
||||
/**
|
||||
* create a new hash converter which is initialized with values from map data
|
||||
* The map data needs to contain Bit position and the meaning of it
|
||||
*
|
||||
* @param data map data for conversions
|
||||
*/
|
||||
@SuppressWarnings({"unchecked", "rawtypes"})
|
||||
public BitmapConversion(Map data)
|
||||
{
|
||||
hashData.putAll(data);
|
||||
}
|
||||
|
||||
/**
|
||||
* create a new hash converter which is initialized with avlues from an array
|
||||
* of strings in the format "BitPos=value"
|
||||
*
|
||||
* @param initData initializer strings for conversions in the format "BitPos=value[;BitPos=value[...]]"
|
||||
*/
|
||||
public BitmapConversion(String[] initData)
|
||||
{
|
||||
initFromStrings(initData);
|
||||
}
|
||||
|
||||
/**
|
||||
* initialize hash map with values from an array of strings in the format "BitPos=value"
|
||||
*
|
||||
* @param initData initializer strings for conversions in the format "BitPos=value[;BitPos=value[...]]"
|
||||
*/
|
||||
private void initFromStrings(String[] initData)
|
||||
{
|
||||
Long key;
|
||||
String value;
|
||||
String[] data;
|
||||
// clear old hash data
|
||||
hashData.clear();
|
||||
|
||||
// loop through all string entries ...
|
||||
for (String anInitData : initData)
|
||||
{
|
||||
data = anInitData.split(";");
|
||||
for (String aData : data)
|
||||
{
|
||||
// ... split key and value ...
|
||||
String[] words = aData.split("=");
|
||||
key = (long) (1 << Long.valueOf(words[0]));
|
||||
value = words[1];
|
||||
|
||||
// attempt to translate ...
|
||||
String xlatKey = value;
|
||||
xlatKey = xlatKey.replaceAll("[ -]", "_").toLowerCase();
|
||||
value = Messages.getString(xlatKey, value);
|
||||
// debug log translated message
|
||||
log.finer(String.format("%s=%s", xlatKey, value));
|
||||
|
||||
// ... and enter into hash map
|
||||
hashData.put(key, value);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public Number memToPhys(long value)
|
||||
{
|
||||
return value;
|
||||
}
|
||||
|
||||
public Number physToMem(Number value)
|
||||
{
|
||||
return value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String physToPhysFmtString(Number physVal, String format)
|
||||
{
|
||||
StringBuilder result = null;
|
||||
long val = physVal.longValue();
|
||||
|
||||
for(Map.Entry<Long,String> item : hashData.entrySet())
|
||||
{
|
||||
// if this is NOT the first entry, then add a new line
|
||||
if (result == null)
|
||||
result = new StringBuilder();
|
||||
else
|
||||
result.append(System.lineSeparator());
|
||||
// now add the result
|
||||
result.append(String.format("%s %s",
|
||||
((val & item.getKey()) != 0) ? "(*)" : "( )",
|
||||
item.getValue()));
|
||||
}
|
||||
// if we haven't found a string representation, return numeric value
|
||||
if (result == null) result = new StringBuilder(super.physToPhysFmtString(physVal, format));
|
||||
return (result.toString());
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,70 @@
|
||||
/*
|
||||
* (C) Copyright 2015 by fr3ts0n <erwin.scheuch-heilig@gmx.at>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of
|
||||
* the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
||||
* MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
package com.fr3ts0n.ecu;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* interface for various Data conversion types
|
||||
*
|
||||
* @author erwin
|
||||
*/
|
||||
public interface Conversion extends Serializable
|
||||
{
|
||||
/**
|
||||
* convert measurement item from storage format to physical value
|
||||
*
|
||||
* @param value memory value
|
||||
* @return physical value
|
||||
*/
|
||||
Number memToPhys(long value);
|
||||
|
||||
/**
|
||||
* convert measurement item from storage format to physical value
|
||||
*
|
||||
* @param value physical value
|
||||
* @return memory value
|
||||
*/
|
||||
Number physToMem(Number value);
|
||||
|
||||
/**
|
||||
* convert a numerical physical value into a formatted string
|
||||
*
|
||||
* @param physVal physical value
|
||||
* @param format formatting pattern for text display
|
||||
* @return formatted String
|
||||
*/
|
||||
String physToPhysFmtString(Number physVal, String format);
|
||||
|
||||
/**
|
||||
* convert measurement item from storage format to physical value
|
||||
*
|
||||
* @param value memory value
|
||||
* @param numDecimals number of decimal for string formatting of numbers
|
||||
* @return string representation of numeric value
|
||||
*/
|
||||
String memToString(Number value, int numDecimals);
|
||||
|
||||
/**
|
||||
* return physical units of this conversion
|
||||
*
|
||||
* @return physical units of this conversion
|
||||
*/
|
||||
String getUnits();
|
||||
}
|
||||
@@ -0,0 +1,200 @@
|
||||
/*
|
||||
* (C) Copyright 2015 by fr3ts0n <erwin.scheuch-heilig@gmx.at>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of
|
||||
* the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
||||
* MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
package com.fr3ts0n.ecu;
|
||||
|
||||
import com.fr3ts0n.pvs.PvLimits;
|
||||
|
||||
import java.text.DecimalFormat;
|
||||
|
||||
|
||||
/**
|
||||
* Collection of all known OBD data conversions.
|
||||
* This collection implements conversions to metric and imperial system
|
||||
*
|
||||
* @author erwin
|
||||
*/
|
||||
public class Conversions
|
||||
{
|
||||
|
||||
private static final int SYSTEM_METRIC = 0;
|
||||
public static final int SYSTEM_IMPERIAL = 1;
|
||||
public static final int SYSTEM_TYPES = 2;
|
||||
|
||||
// current conversion system
|
||||
private static final int cnvSystem = SYSTEM_METRIC;
|
||||
/**
|
||||
* ID's of Conversions
|
||||
* These ID's are used as index into table below
|
||||
* Please take care of the order
|
||||
*/
|
||||
public static final int CNV_ID_ONETOONE = 0;
|
||||
public static final int CNV_ID_PERCENT = 1;
|
||||
public static final int CNV_ID_PERCENT_REL = 2;
|
||||
public static final int CNV_ID_PERCENT7 = 3;
|
||||
public static final int CNV_ID_PERCENT7_REL = 4;
|
||||
public static final int CNV_ID_RPM = 5;
|
||||
public static final int CNV_ID_VEHSPEED = 6;
|
||||
public static final int CNV_ID_TEMPERATURE = 7;
|
||||
public static final int CNV_ID_TEMP_WIDERANGE = 8;
|
||||
public static final int CNV_ID_AIRFLOW = 9;
|
||||
public static final int CNV_ID_PRESS = 10;
|
||||
public static final int CNV_ID_PRESS_AIR = 11;
|
||||
public static final int CNV_ID_PRESS_REL = 12;
|
||||
public static final int CNV_ID_PRESS_WIDERANGE = 13;
|
||||
public static final int CNV_ID_PRESS_VAPOR = 14;
|
||||
public static final int CNV_ID_ANGLE = 15;
|
||||
public static final int CNV_ID_VOLTAGE = 16;
|
||||
public static final int CNV_ID_VOLTAGE_HIGHRES = 17;
|
||||
public static final int CNV_ID_RATIO = 18;
|
||||
public static final int CNV_ID_RATIO_WIDERANGE = 19;
|
||||
public static final int CNV_ID_DISTANCE = 20;
|
||||
public static final int CNV_ID_HOURS = 21;
|
||||
public static final int CNV_ID_SPEED_HIGHRES = 22;
|
||||
public static final int CNV_ID_TORQUE = 23;
|
||||
public static final int CNV_ID_RATIO_RELATIVE = 24;
|
||||
public static final int CNV_ID_OBD_TYPE = 25;
|
||||
public static final int CNV_ID_OBD_CODELIST = 26;
|
||||
public static final int CNV_ID_MAX = 27;// This needs to be last entry
|
||||
|
||||
private static final ObdCodeList obdCodeList = new ObdCodeList();
|
||||
|
||||
private static final HashConversion cnvObdType = new HashConversion(new String[]{
|
||||
"1=OBD II",
|
||||
"2=OBD Federal EPA",
|
||||
"3=OBD and OBD II",
|
||||
"4=OBD I",
|
||||
"5=Not OBD compliant",
|
||||
"6=EOBD",
|
||||
"7=EOBD and OBD II",
|
||||
"8=EOBD and OBD",
|
||||
"9=EOBD, OBD and OBD II",
|
||||
"10=JOBD",
|
||||
"11=JOBD and OBD II",
|
||||
"12=JOBD and EOBD",
|
||||
"13=JOBD, EOBD and OBD II"
|
||||
});
|
||||
|
||||
/** limits for RPM display */
|
||||
private static final PvLimits rpmLimits = new PvLimits(0.0f, 6000.0f);
|
||||
|
||||
private static final Conversion[][] cnvFactors =
|
||||
{
|
||||
// METRIC , IMPERIAL
|
||||
// FACT, DIV, OFFS, PhOf, UNIT , FACT, DIV, OFFS, PhOf, UNIT
|
||||
{new LinearConversion(1, 1, 0, 0, "-"), new LinearConversion(1, 1, 0, 0, "-")}, // OneToOne
|
||||
{new LinearConversion(100, 255, 0, 0, "%"), new LinearConversion(100, 255, 0, 0, "%")}, // Percent
|
||||
{new LinearConversion(100, 255, -128, 0, "%"), new LinearConversion(100, 255, -128, 0, "%")}, // Percent relative
|
||||
{new LinearConversion(100, 128, 0, 0, "%"), new LinearConversion(100, 128, 0, 0, "%")}, // Percent 7Bit (Fuel Trim)
|
||||
{new LinearConversion(100, 128, -128, 0, "%"), new LinearConversion(100, 128, -128, 0, "%")}, // Percent 7Bit relative)
|
||||
{new LinearConversion(1, 4, 0, 0, "/min", rpmLimits), new LinearConversion(1, 4, 0, 0, "/min", rpmLimits)}, // RPM
|
||||
{new LinearConversion(1, 1, 0, 0, "km/h"), new LinearConversion(1000, 1609, 0, 0, "mph")}, // vehicle speed
|
||||
{new LinearConversion(1, 1, -40, 0, "°C"), new LinearConversion(9, 5, -40, 32, "°F")}, // Temperature
|
||||
{new LinearConversion(1, 10, -40, 0, "°C"), new LinearConversion(9, 50, -40, 32, "°F")}, // Temperature (wide range)
|
||||
{new LinearConversion(1, 100, 0, 0, "g/s"), new LinearConversion(1, 756, 0, 0, "lb/min")}, // Air Flow
|
||||
{new LinearConversion(3, 1, 0, 0, "kPa"), new LinearConversion(4351, 10000, 0, 0, "PSI")}, // Pressure
|
||||
{new LinearConversion(1, 1, 0, 0, "kPa"), new LinearConversion(2953, 10000, 0, 0, "inHg")}, // Pressure (intake)
|
||||
{new LinearConversion(79, 1000, 0, 0, "kPa"), new LinearConversion(100, 8727, 0, 0, "PSI")}, // Pressure (relative)
|
||||
{new LinearConversion(10, 1, 0, 0, "kPa"), new LinearConversion(14504, 10000, 0, 0, "PSI")}, // Pressure (wide range)
|
||||
{new LinearConversion(1, 4, 0, 0, "Pa"), new LinearConversion(100, 99635, 0, 0, "in H2O")}, // Pressure (Vapor)
|
||||
{new LinearConversion(1, 2, -128, 0, "°"), new LinearConversion(1, 2, -128, 0, "°")}, // Angle (Timing adv)
|
||||
{new LinearConversion(1, 1000, 0, 0, "V"), new LinearConversion(1, 1000, 0, 0, "V")}, // Voltage
|
||||
{new LinearConversion(10, 81967, 0, 0, "V"), new LinearConversion(10, 81967, 0, 0, "V")}, // Voltage (high resolution)
|
||||
{new LinearConversion(100, 32768, 0, 0, "%"), new LinearConversion(100, 32768, 0, 0, "%")}, // Ratio
|
||||
{new LinearConversion(100, 256, -32768, 0, "%"), new LinearConversion(100, 256, -32768, 0, "%")}, // Ratio (wide range)
|
||||
{new LinearConversion(1, 1, 0, 0, "km"), new LinearConversion(1000, 1609, 0, 0, "miles")}, // Distance
|
||||
{new LinearConversion(1, 3600, 0, 0, "h"), new LinearConversion(1, 3600, 0, 0, "h")}, // Time (hours)
|
||||
{new LinearConversion(1, 128, 0, 0, "km/h"), new LinearConversion(100, 20595, 0, 0, "mph")}, // vehicle speed
|
||||
{new LinearConversion(1, 1, 0, 0, "Nm"), new LinearConversion(1, 1, 0, 0, "Nm")}, // Torque
|
||||
{new LinearConversion(100, 65535, 0, 0, "%"), new LinearConversion(100, 65535, 0, 0, "%")}, // Ratio relative
|
||||
{cnvObdType, cnvObdType},
|
||||
{obdCodeList, obdCodeList},
|
||||
};
|
||||
|
||||
/**
|
||||
* Creates a new instance of Conversions
|
||||
*/
|
||||
public Conversions()
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* convert measurement item from storage format to physical value
|
||||
*/
|
||||
public static float memToPhys(long value, int cnvID)
|
||||
{
|
||||
return (cnvFactors[cnvID][cnvSystem].memToPhys(value).floatValue());
|
||||
}
|
||||
|
||||
/**
|
||||
* convert measurement item from storage format to physical value
|
||||
*/
|
||||
public static long physToMem(float value, int cnvID)
|
||||
{
|
||||
return (cnvFactors[cnvID][cnvSystem].physToMem(value).longValue());
|
||||
}
|
||||
|
||||
/**
|
||||
* convert measurement item from storage format to physical value
|
||||
*/
|
||||
public static String getUnits(int cnvID)
|
||||
{
|
||||
return (cnvFactors[cnvID][cnvSystem].getUnits());
|
||||
}
|
||||
|
||||
/**
|
||||
* convert measurement item from storage format to physical value
|
||||
*/
|
||||
private static String memToString(long value, int cnvID, int decimals)
|
||||
{
|
||||
return (cnvFactors[cnvID][cnvSystem].memToString(value, decimals));
|
||||
}
|
||||
|
||||
/** object to be used for parsing and formatting decimal numbers */
|
||||
private static DecimalFormat decimalFormat;
|
||||
private static final DecimalFormat[] formats =
|
||||
{
|
||||
new DecimalFormat("0;-#"),
|
||||
new DecimalFormat("0.0;-#"),
|
||||
new DecimalFormat("0.00;-#"),
|
||||
new DecimalFormat("0.000;-#"),
|
||||
new DecimalFormat("0.0000;-#")
|
||||
};
|
||||
|
||||
/**
|
||||
* Format physical value to physical value string
|
||||
*
|
||||
* @param physVal physical value
|
||||
* @param cnvId ID of conversion to be used
|
||||
* @param decimals number of decimals for formatting
|
||||
* @return physical value as formatted string
|
||||
*/
|
||||
public static String physToPhysFmtString(Float physVal, int cnvId, int decimals)
|
||||
{
|
||||
String result;
|
||||
if (decimals >= 0)
|
||||
{
|
||||
decimalFormat = formats[decimals];
|
||||
result = decimalFormat.format(physVal);
|
||||
} else
|
||||
{
|
||||
result = Conversions.memToString(physVal.longValue(), cnvId, decimals);
|
||||
}
|
||||
return (result);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,94 @@
|
||||
/*
|
||||
* (C) Copyright 2015 by fr3ts0n <erwin.scheuch-heilig@gmx.at>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of
|
||||
* the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
||||
* MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
package com.fr3ts0n.ecu;
|
||||
|
||||
import com.fr3ts0n.pvs.IndexedProcessVar;
|
||||
|
||||
/**
|
||||
* ECU fault code
|
||||
*
|
||||
* @author erwin
|
||||
*/
|
||||
public class EcuCodeItem extends IndexedProcessVar
|
||||
implements Comparable<EcuCodeItem>
|
||||
{
|
||||
/** unique class id*/
|
||||
public static final long serialVersionUID = -1;
|
||||
// Field IDs
|
||||
public static final int FID_CODE = 0;
|
||||
public static final int FID_DESCRIPT = 1;
|
||||
public static final int FID_STATUS = 2;
|
||||
|
||||
public static final String[] FIELDS =
|
||||
{
|
||||
"CODE",
|
||||
"DESCRIPTION",
|
||||
"STATUS",
|
||||
};
|
||||
|
||||
EcuCodeItem()
|
||||
{
|
||||
}
|
||||
|
||||
/** Creates a new instance of EcuCodeItem
|
||||
* @param code String representation of DFC
|
||||
* @param description descriptive text of DFC
|
||||
*/
|
||||
public EcuCodeItem(String code, String description)
|
||||
{
|
||||
put(FID_CODE, code);
|
||||
put(FID_DESCRIPT, description);
|
||||
}
|
||||
|
||||
/** Creates a new instance of ObdCodeItem
|
||||
* @param numericCode numeric code ID
|
||||
* @param description descriptive text of DFC
|
||||
*/
|
||||
public EcuCodeItem(int numericCode, String description)
|
||||
{
|
||||
put(FID_CODE, String.valueOf(numericCode));
|
||||
put(FID_DESCRIPT, description);
|
||||
}
|
||||
|
||||
public String[] getFields()
|
||||
{
|
||||
return ObdCodeItem.FIELDS;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return String representation of Code item
|
||||
* @return String representation of code
|
||||
*/
|
||||
@Override
|
||||
public String toString()
|
||||
{
|
||||
return String.format("%02X.%s", get(FID_STATUS), get(FID_CODE));
|
||||
}
|
||||
|
||||
/**
|
||||
* Implementation of Comparable to allow sorting
|
||||
* @param o the other object
|
||||
* @return result of comparison
|
||||
*/
|
||||
public int compareTo(EcuCodeItem o)
|
||||
{
|
||||
return toString().compareTo(o.toString());
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,139 @@
|
||||
/*
|
||||
* (C) Copyright 2015 by fr3ts0n <erwin.scheuch-heilig@gmx.at>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of
|
||||
* the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
||||
* MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
package com.fr3ts0n.ecu;
|
||||
|
||||
import com.fr3ts0n.common.UTF8Bundle;
|
||||
import com.fr3ts0n.ecu.prot.obd.Messages;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.MissingResourceException;
|
||||
import java.util.ResourceBundle;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* Vehicle fault code list
|
||||
*
|
||||
* @author erwin
|
||||
*/
|
||||
public class EcuCodeList
|
||||
implements Conversion
|
||||
{
|
||||
private static final long serialVersionUID = 219865459629423028L;
|
||||
private final transient ResourceBundle codes;
|
||||
private transient int radix = 10;
|
||||
|
||||
/**
|
||||
* construct a new code list
|
||||
*/
|
||||
EcuCodeList()
|
||||
{
|
||||
this("com.fr3ts0n.ecu.prot.obd.res.codes");
|
||||
}
|
||||
|
||||
/**
|
||||
* Construct a new code list and initialize it with ressources files
|
||||
*
|
||||
* @param resourceBundleName name of used resource bundle
|
||||
*/
|
||||
public EcuCodeList(String resourceBundleName)
|
||||
{
|
||||
codes = UTF8Bundle.getBundle(resourceBundleName);
|
||||
}
|
||||
|
||||
/**
|
||||
* Construct a new code list and initialize it with ressources files
|
||||
*
|
||||
* @param resourceBundleName name of used resource bundle
|
||||
* @param idRadix radix of numeric code id
|
||||
*/
|
||||
public EcuCodeList(String resourceBundleName, int idRadix)
|
||||
{
|
||||
this(resourceBundleName);
|
||||
radix = idRadix;
|
||||
}
|
||||
|
||||
String getCode(Number value)
|
||||
{
|
||||
return(Long.toString(value.longValue(),radix));
|
||||
}
|
||||
|
||||
public EcuCodeItem get(Number value)
|
||||
{
|
||||
EcuCodeItem result = null;
|
||||
if (codes != null)
|
||||
{
|
||||
String key = getCode(value);
|
||||
try
|
||||
{
|
||||
result = new EcuCodeItem(key, codes.getString(key));
|
||||
} catch (MissingResourceException e)
|
||||
{
|
||||
result = new EcuCodeItem(key,
|
||||
Messages.getString(
|
||||
"customer.specific.trouble.code.see.manual"));
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* return all known values
|
||||
* @return all known ressource values
|
||||
*/
|
||||
public Set<String> values()
|
||||
{
|
||||
Set<String> values = new HashSet<String>();
|
||||
for( String key : codes.keySet())
|
||||
{
|
||||
values.add(codes.getString(key));
|
||||
}
|
||||
return values;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getUnits()
|
||||
{
|
||||
return "";
|
||||
}
|
||||
|
||||
@Override
|
||||
public Number memToPhys(long value)
|
||||
{
|
||||
return (float) value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String memToString(Number value, int numDecimals)
|
||||
{
|
||||
String fmt = "%." + numDecimals + "f";
|
||||
return physToPhysFmtString(memToPhys(value.longValue()), fmt);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Number physToMem(Number value)
|
||||
{
|
||||
return value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String physToPhysFmtString(Number value, String format)
|
||||
{
|
||||
return (get(value).toString());
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,234 @@
|
||||
/*
|
||||
* (C) Copyright 2015 by fr3ts0n <erwin.scheuch-heilig@gmx.at>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of
|
||||
* the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
||||
* MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
package com.fr3ts0n.ecu;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.InputStreamReader;
|
||||
import java.util.HashMap;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
/**
|
||||
* Diagnostic data conversions
|
||||
*
|
||||
* @author erwin
|
||||
*/
|
||||
public class EcuConversions extends HashMap<String, Conversion[]>
|
||||
{
|
||||
/** SerialVersion UID */
|
||||
private static final long serialVersionUID = 273813879102783740L;
|
||||
|
||||
/** conversion type IDs from CSV file */
|
||||
private static final String CNV_TYPE_LINEAR = "LINEAR";
|
||||
private static final String CNV_TYPE_HASH = "HASH";
|
||||
private static final String CNV_TYPE_BITMAP = "BITMAP";
|
||||
private static final String CNV_TYPE_CODELIST = "CODELIST";
|
||||
private static final String CNV_TYPE_PCODELIST = "PCODELIST";
|
||||
private static final String CNV_TYPE_VAG = "VAG";
|
||||
private static final String CNV_TYPE_INT = "INTEGER";
|
||||
private static final String CNV_TYPE_ASCII = "ASCII";
|
||||
|
||||
/** CSV field positions */
|
||||
private static final int FLD_NAME = 0;
|
||||
private static final int FLD_TYPE = 1;
|
||||
private static final int FLD_VARIANT = 2;
|
||||
private static final int FLD_SYSTEM = 3;
|
||||
private static final int FLD_FACTOR = 4;
|
||||
private static final int FLD_DIVIDER = 5;
|
||||
private static final int FLD_OFFSET = 6;
|
||||
private static final int FLD_PHOFFSET = 7;
|
||||
private static final int FLD_UNITS = 8;
|
||||
static final int FLD_DESCRIPTION = 9;
|
||||
private static final int FLD_PARAMETERS = 10;
|
||||
|
||||
// the data logger
|
||||
private static final Logger log = Logger.getLogger("data.cnv");
|
||||
|
||||
/** DEFAULT type conversion */
|
||||
public static final NumericConversion dfltCnv = new IntConversion();
|
||||
|
||||
/** code list conversion */
|
||||
public static EcuCodeList codeList = null;
|
||||
/**
|
||||
* Create conversion list from default resource file (tab delimited csv)
|
||||
* (prot/res/conversion.csv)
|
||||
*/
|
||||
public EcuConversions()
|
||||
{
|
||||
// add dynamic entris from csv file(s)
|
||||
this("prot/res/obd/conversions.csv");
|
||||
}
|
||||
|
||||
/**
|
||||
* Create conversion list from resource file (tab delimited csv)
|
||||
*
|
||||
* @param resource name of resource to be loaded
|
||||
*/
|
||||
public EcuConversions(String resource)
|
||||
{
|
||||
// add static conversions
|
||||
put("DEFAULT", new Conversion[]{dfltCnv, dfltCnv});
|
||||
// add dynamic entris from csv file(s)
|
||||
loadFromResource(resource);
|
||||
}
|
||||
|
||||
public void loadFromStream(InputStream inStr)
|
||||
{
|
||||
BufferedReader rdr;
|
||||
String currLine;
|
||||
String[] params;
|
||||
Conversion[] currCnvSet;
|
||||
Conversion newCnv;
|
||||
int line = 0;
|
||||
|
||||
try
|
||||
{
|
||||
rdr = new BufferedReader(new InputStreamReader(inStr));
|
||||
// loop through all lines of the file ...
|
||||
while ((currLine = rdr.readLine()) != null)
|
||||
{
|
||||
// ignore line 1
|
||||
if (++line == 1)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
// replace all optional quotes from CSV code list
|
||||
currLine = currLine.replaceAll("\"", "");
|
||||
// split CSV line into parameters
|
||||
params = currLine.split("\t");
|
||||
if (params[FLD_TYPE].equals(CNV_TYPE_LINEAR))
|
||||
{
|
||||
if(params.length > FLD_PARAMETERS)
|
||||
{
|
||||
// create linear conversion (w/ dynamic parameters)
|
||||
newCnv = new LinearConversion(Integer.parseInt(params[FLD_FACTOR]),
|
||||
Integer.parseInt(params[FLD_DIVIDER]),
|
||||
Integer.parseInt(params[FLD_OFFSET]),
|
||||
Integer.parseInt(params[FLD_PHOFFSET]),
|
||||
params[FLD_UNITS],
|
||||
params[FLD_PARAMETERS]);
|
||||
}
|
||||
else
|
||||
{
|
||||
// create linear conversion (w/o dynamic parameter)
|
||||
newCnv = new LinearConversion(Integer.parseInt(params[FLD_FACTOR]),
|
||||
Integer.parseInt(params[FLD_DIVIDER]),
|
||||
Integer.parseInt(params[FLD_OFFSET]),
|
||||
Integer.parseInt(params[FLD_PHOFFSET]),
|
||||
params[FLD_UNITS]);
|
||||
}
|
||||
}
|
||||
else if (params[FLD_TYPE].equals(CNV_TYPE_HASH))
|
||||
{
|
||||
// create HashConversion based on CSV data
|
||||
newCnv = new HashConversion( String.valueOf(params[FLD_PARAMETERS]).split(";") );
|
||||
}
|
||||
else if (params[FLD_TYPE].equals(CNV_TYPE_BITMAP))
|
||||
{
|
||||
// create BitmapConversion based on CSV parameters
|
||||
newCnv = new BitmapConversion( String.valueOf(params[FLD_PARAMETERS]).split(";") );
|
||||
}
|
||||
else if (params[FLD_TYPE].equals(CNV_TYPE_CODELIST))
|
||||
{
|
||||
// create ECU code list based on ResourceBundle
|
||||
codeList = new EcuCodeList( String.valueOf(params[FLD_PARAMETERS]));
|
||||
newCnv = codeList;
|
||||
}
|
||||
else if (params[FLD_TYPE].equals(CNV_TYPE_PCODELIST))
|
||||
{
|
||||
// create OBD code list based on ResourceBundle
|
||||
codeList = new ObdCodeList( String.valueOf(params[FLD_PARAMETERS]));
|
||||
newCnv = codeList;
|
||||
}
|
||||
else if (params[FLD_TYPE].equals(CNV_TYPE_VAG))
|
||||
{
|
||||
// create VAG conversion
|
||||
newCnv = new VagConversion(Integer.parseInt(params[FLD_VARIANT]),
|
||||
Double.parseDouble(params[FLD_FACTOR]) / Integer.parseInt(params[FLD_DIVIDER]),
|
||||
Double.parseDouble(params[FLD_OFFSET]),
|
||||
params[FLD_UNITS]);
|
||||
}
|
||||
else if (params[FLD_TYPE].equals(CNV_TYPE_ASCII))
|
||||
{
|
||||
newCnv = null;
|
||||
}
|
||||
else if (params[FLD_TYPE].equals(CNV_TYPE_INT))
|
||||
{
|
||||
newCnv = dfltCnv;
|
||||
}
|
||||
else
|
||||
{
|
||||
newCnv = dfltCnv;
|
||||
}
|
||||
|
||||
// insert fault code element
|
||||
currCnvSet = get(params[FLD_NAME]);
|
||||
// if this conversion does not exist yet ...
|
||||
if (currCnvSet == null)
|
||||
{
|
||||
// create new set for metric and imperial
|
||||
currCnvSet = new Conversion[EcuDataItem.SYSTEM_TYPES];
|
||||
// and initialize both systems with this data
|
||||
for (int i = 0; i < EcuDataItem.SYSTEM_TYPES; i++)
|
||||
{
|
||||
currCnvSet[i] = newCnv;
|
||||
log.finer("+" + params[FLD_NAME] + "/" + params[FLD_SYSTEM] + " - " + String.valueOf(newCnv));
|
||||
}
|
||||
} else
|
||||
{
|
||||
// if it is known already, then only update the matching system
|
||||
for (int i = 0; i < EcuDataItem.SYSTEM_TYPES; i++)
|
||||
{
|
||||
if (EcuDataItem.cnvSystems[i].equals(params[FLD_SYSTEM]))
|
||||
{
|
||||
currCnvSet[i] = newCnv;
|
||||
log.finer("+" + params[FLD_NAME] + "/" + params[FLD_SYSTEM] + " - " + newCnv.toString());
|
||||
}
|
||||
}
|
||||
}
|
||||
// (re-)enter the updated conversion set into map
|
||||
put(params[FLD_NAME], currCnvSet);
|
||||
}
|
||||
rdr.close();
|
||||
} catch (IOException e)
|
||||
{
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* load conversion list from resource file (tab delimited)
|
||||
*
|
||||
* @param resource name of resource to be loaded
|
||||
*/
|
||||
private void loadFromResource(String resource)
|
||||
{
|
||||
try
|
||||
{
|
||||
loadFromStream(getClass().getResource(resource).openStream());
|
||||
}
|
||||
catch(IOException ex)
|
||||
{
|
||||
ex.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,348 @@
|
||||
/*
|
||||
* (C) Copyright 2015 by fr3ts0n <erwin.scheuch-heilig@gmx.at>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of
|
||||
* the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
||||
* MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
package com.fr3ts0n.ecu;
|
||||
|
||||
import com.fr3ts0n.prot.ProtUtils;
|
||||
import com.fr3ts0n.prot.ProtoHeader;
|
||||
|
||||
import java.util.logging.Logger;
|
||||
|
||||
/**
|
||||
* Definition of a single ECU Data item (EcuDataItem)
|
||||
*
|
||||
* @author erwin
|
||||
*/
|
||||
public class EcuDataItem
|
||||
implements Cloneable
|
||||
{
|
||||
/** conversion systems METRIC and IMPERIAL */
|
||||
public static final int SYSTEM_METRIC = 0;
|
||||
public static final int SYSTEM_IMPERIAL = 1;
|
||||
public static final int SYSTEM_TYPES = 2;
|
||||
/** names of conversion system types */
|
||||
public static final String[] cnvSystems =
|
||||
{
|
||||
"METRIC",
|
||||
"IMPERIAL",
|
||||
};
|
||||
// current conversion system
|
||||
public static int cnvSystem = SYSTEM_METRIC;
|
||||
// maximum number of conversion errors before disabling data item
|
||||
public static int MAX_ERROR_COUNT = 3;
|
||||
|
||||
public int pid; ///< pid
|
||||
public int ofs; ///< Offset within message
|
||||
public Conversion[] cnv; ///< type of conversion
|
||||
private int bytes; ///< number of data bytes expected from vehicle
|
||||
private int bitOffset = 0; ///< bit offset within extracted long
|
||||
private int numBits = 32; ///< number of relevant bits within extracted long
|
||||
private long bitMask = 0xFFFFFFFF; ///< mask for relevant bits within extracted long
|
||||
private String fmt; ///< Format for text output
|
||||
public String label; ///< text label
|
||||
private String mnemonic; ///< unique textual mnemonic
|
||||
public EcuDataPv pv; ///< the process variable for displaying
|
||||
private int currErrorCount = 0; ///< current number of consecutive conversion errors
|
||||
public long updatePeriod_ms = 0; ///< Minimum update period in ms
|
||||
|
||||
// Logger object
|
||||
private static final Logger log = Logger.getLogger("data.ecu");
|
||||
|
||||
public static int[] byteValues =
|
||||
{
|
||||
0xFFFF, // fake default max value for length 0
|
||||
0xFF,
|
||||
0xFFFF,
|
||||
0xFFFFFF,
|
||||
0xFFFFFFFF
|
||||
};
|
||||
|
||||
/**
|
||||
* Creates a new instance of EcuDataItem
|
||||
*/
|
||||
public EcuDataItem()
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new instance of EcuDataItem
|
||||
*
|
||||
* @param newPid PID of data item
|
||||
* @param offset offset within PID data (in bytes)
|
||||
* @param numBytes length of parameter in bytes
|
||||
* @param bitOfs Bit offset of measurement within numeric value
|
||||
* @param numberOfBits Number of relevant bits within numeric value
|
||||
* @param conversions data conversion to be used with this item
|
||||
* @param format formatting string for text representation
|
||||
* @param minValue minimum physical value to display/scale
|
||||
* @param maxValue maximum physical value to display/scale
|
||||
* @param minUpdatePeriod Minimum expected data update period in ms
|
||||
* @param labelText descriptive text label
|
||||
*/
|
||||
public EcuDataItem( int newPid,
|
||||
int offset,
|
||||
int numBytes,
|
||||
int bitOfs,
|
||||
int numberOfBits,
|
||||
long maskingBits,
|
||||
Conversion[] conversions,
|
||||
String format,
|
||||
Number minValue,
|
||||
Number maxValue,
|
||||
long minUpdatePeriod,
|
||||
String labelText,
|
||||
String _mnemonic)
|
||||
{
|
||||
pid = newPid;
|
||||
ofs = offset;
|
||||
bytes = numBytes;
|
||||
bitOffset = bitOfs;
|
||||
numBits = numberOfBits;
|
||||
bitMask = maskingBits;
|
||||
cnv = conversions;
|
||||
fmt = format;
|
||||
updatePeriod_ms = minUpdatePeriod;
|
||||
label = labelText;
|
||||
mnemonic = _mnemonic;
|
||||
pv = new EcuDataPv();
|
||||
|
||||
// initialize new PID with current data
|
||||
pv.put(EcuDataPv.FID_PID, Integer.valueOf(pid));
|
||||
pv.put(EcuDataPv.FID_OFS, Integer.valueOf(ofs));
|
||||
pv.put(EcuDataPv.FID_BIT_OFS, Integer.valueOf(bitOffset));
|
||||
pv.put(EcuDataPv.FID_DESCRIPT, label);
|
||||
pv.put(EcuDataPv.FID_MNEMONIC, mnemonic);
|
||||
pv.put(EcuDataPv.FID_UNITS,
|
||||
(cnv != null && cnv[cnvSystem] != null)
|
||||
? cnv[cnvSystem].getUnits()
|
||||
: "");
|
||||
pv.put(EcuDataPv.FID_VALUE, Float.valueOf(0));
|
||||
pv.put(EcuDataPv.FID_FORMAT, fmt);
|
||||
pv.put(EcuDataPv.FID_CNVID, cnv);
|
||||
updateLimits(minValue, maxValue);
|
||||
}
|
||||
|
||||
/**
|
||||
* Update MIN/MAX limit values
|
||||
*
|
||||
* - if values are specified, this sets the MIN/MAX limits to specified values
|
||||
* - if NOT specified the MIN/MAX range is calculated from the data range using the given conversion
|
||||
*
|
||||
* This update is required on:
|
||||
* - Initialisation
|
||||
* - Update of dynamic conversion factors
|
||||
*
|
||||
* @param minValue Specific MIN value or NULL if not specified
|
||||
* @param maxValue Specific MAX value or NULL if not specified
|
||||
*/
|
||||
protected void updateLimits(Number minValue, Number maxValue)
|
||||
{
|
||||
// set specified values
|
||||
Number minVal = minValue;
|
||||
Number maxVal = maxValue;
|
||||
// Check conversion
|
||||
if(cnv != null && cnv[cnvSystem] != null)
|
||||
{
|
||||
// If MIN/MAX value un-specified. calculate from data range conversion
|
||||
if(minVal == null) minVal = physMin();
|
||||
if(maxVal == null) maxVal = physMax();
|
||||
}
|
||||
// Update limits ...
|
||||
pv.put(EcuDataPv.FID_MIN, minVal);
|
||||
pv.put(EcuDataPv.FID_MAX, maxVal);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return minimum raw (integer) value before conversion
|
||||
* - calculated based on bit width & mask
|
||||
*
|
||||
* @apiNote Just for completeness, This wil always return a 0
|
||||
*
|
||||
* @return MIM raw integer value
|
||||
*/
|
||||
public long rawMin()
|
||||
{
|
||||
return 0L;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return maximum raw (integer) value before conversion
|
||||
* - calculated based on bit width & mask
|
||||
*
|
||||
* @return MAX raw integer value
|
||||
*/
|
||||
public long rawMax()
|
||||
{
|
||||
return((((1L<<numBits)-1) & bitMask));
|
||||
}
|
||||
|
||||
/**
|
||||
* Return physical value from raw (integer) value
|
||||
* @param rawVal RAW integer value
|
||||
* @return Physical value
|
||||
*/
|
||||
public Number physVal(long rawVal)
|
||||
{
|
||||
return( cnv[cnvSystem].memToPhys( rawVal ));
|
||||
}
|
||||
|
||||
/**
|
||||
* Return raw (integer) value from physical value
|
||||
* - calculation based on conversion
|
||||
*
|
||||
* @param physVal physical value
|
||||
* @return raw integer value
|
||||
*/
|
||||
public long rawVal(Number physVal)
|
||||
{
|
||||
return cnv[cnvSystem].physToMem(physVal).longValue();
|
||||
}
|
||||
|
||||
/**
|
||||
* Return physically minimum value
|
||||
* - Value is calculated from bit width and data conversion
|
||||
*
|
||||
* @return MIN value
|
||||
*/
|
||||
public Number physMin()
|
||||
{
|
||||
return physVal(rawMin());
|
||||
}
|
||||
|
||||
/**
|
||||
* Return physically maximum value
|
||||
* - Value is calculated from bit width and data conversion
|
||||
*
|
||||
* @return MAX value
|
||||
*/
|
||||
public Number physMax()
|
||||
{
|
||||
return physVal(rawMax());
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString()
|
||||
{
|
||||
return (String.format("%02X.%d.%d", pid, ofs, bitOffset));
|
||||
}
|
||||
|
||||
/**
|
||||
* get physical value from buffer
|
||||
*
|
||||
* @param buffer communication buffer content
|
||||
* @return physical value
|
||||
*/
|
||||
private Object physFromBuffer(char[] buffer)
|
||||
{
|
||||
Object result;
|
||||
try
|
||||
{
|
||||
if (cnv != null && cnv[cnvSystem] != null)
|
||||
{
|
||||
// extract value from buffer
|
||||
long value = ProtoHeader.getParamInt(ofs, bytes, buffer).longValue();
|
||||
// calculate effective value ...
|
||||
// shift on bit offset
|
||||
value = (value >> bitOffset);
|
||||
// mask with bit lenth mask
|
||||
value = (value & ((1L << numBits)-1));
|
||||
// mask with specific bit mask
|
||||
value = (value & bitMask);
|
||||
|
||||
// now run conversion to physical value on it ...
|
||||
result = physVal(value);
|
||||
}
|
||||
else
|
||||
{
|
||||
// get number of padding \0 characters
|
||||
int padChars = 0; while(buffer[ofs + padChars] == 0) padChars++;
|
||||
// copy string content after padding characters ...
|
||||
result = String.copyValueOf(buffer, ofs + padChars, bytes);
|
||||
}
|
||||
// decrement error counter
|
||||
currErrorCount = Math.max(0, currErrorCount -1);
|
||||
} catch(Exception ex)
|
||||
{
|
||||
result = "n/a";
|
||||
log.warning(String.format("%s: %s - [%s]", toString(), ex.getMessage(), ProtUtils.hexDumpBuffer(buffer)));
|
||||
|
||||
// increment error counter
|
||||
currErrorCount = Math.min(MAX_ERROR_COUNT, currErrorCount +1);
|
||||
}
|
||||
return (result);
|
||||
}
|
||||
|
||||
/**
|
||||
* Update process var from Buffer value
|
||||
*
|
||||
* @param buffer communication buffer content
|
||||
* @return Next expected update period
|
||||
*/
|
||||
@SuppressWarnings("DefaultLocale")
|
||||
public long updatePvFomBuffer(char[] buffer)
|
||||
{
|
||||
// process data item
|
||||
try
|
||||
{
|
||||
// get physical value
|
||||
Object result = physFromBuffer(buffer);
|
||||
// if consecutive conversion error counter not exceeded
|
||||
if(currErrorCount < MAX_ERROR_COUNT)
|
||||
{
|
||||
pv.put(EcuDataPv.FID_VALUE, result);
|
||||
pv.put(EcuDataPv.FID_UNITS, pv.getUnits());
|
||||
log.fine(String.format("%02X %-30s %16s %s",
|
||||
pid,
|
||||
label,
|
||||
pv.get(EcuDataPv.FID_VALUE),
|
||||
pv.get(EcuDataPv.FID_UNITS)));
|
||||
}
|
||||
else
|
||||
{
|
||||
log.warning(String.format("Item disabled: %s (%d/%d)",
|
||||
toString(),
|
||||
currErrorCount,
|
||||
MAX_ERROR_COUNT));
|
||||
}
|
||||
}
|
||||
catch(Exception ex)
|
||||
{
|
||||
log.warning(ex.toString());
|
||||
}
|
||||
|
||||
/* return next expected update period */
|
||||
return updatePeriod_ms;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object clone()
|
||||
{
|
||||
EcuDataItem result = null;
|
||||
try
|
||||
{
|
||||
result = (EcuDataItem) super.clone();
|
||||
result.pv = (EcuDataPv) pv.clone();
|
||||
} catch (CloneNotSupportedException ex)
|
||||
{
|
||||
ex.printStackTrace();
|
||||
}
|
||||
|
||||
return (result);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,324 @@
|
||||
/*
|
||||
* (C) Copyright 2015 by fr3ts0n <erwin.scheuch-heilig@gmx.at>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of
|
||||
* the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
||||
* MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
package com.fr3ts0n.ecu;
|
||||
|
||||
import com.fr3ts0n.ecu.prot.obd.Messages;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.InputStreamReader;
|
||||
import java.util.HashMap;
|
||||
import java.util.Vector;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
/**
|
||||
* Collection of all known data items:
|
||||
* <pre>
|
||||
* The data structure looks as follows:
|
||||
* Service -- PID -- EcuDataItem
|
||||
* | |- EcuDataItem
|
||||
* | |- ...
|
||||
* ... |- PID -- EcuDataItem
|
||||
* | |- ...
|
||||
* |- ... -- ...
|
||||
* Service ...
|
||||
* </pre>
|
||||
*
|
||||
* @author erwin
|
||||
*/
|
||||
public class EcuDataItems extends HashMap<Integer, HashMap<Integer, Vector<EcuDataItem>>>
|
||||
{
|
||||
/**
|
||||
* SerialVersion UID
|
||||
*/
|
||||
private static final long serialVersionUID = 5525561909111851836L;
|
||||
|
||||
/**
|
||||
* CSV field positions
|
||||
*/
|
||||
enum FLD
|
||||
{
|
||||
SVC,
|
||||
PID,
|
||||
OFS,
|
||||
LEN,
|
||||
BIT_OFS,
|
||||
BIT_LEN,
|
||||
BIT_MASK,
|
||||
FORMULA,
|
||||
FORMAT,
|
||||
MIN,
|
||||
MAX,
|
||||
UPDATE_MIN,
|
||||
MNEMONIC,
|
||||
LABEL,
|
||||
DESCRIPTION,
|
||||
NUMBEROFFIELDS
|
||||
}
|
||||
|
||||
// set of all conversions
|
||||
public static EcuConversions cnv;
|
||||
// the data logger
|
||||
private static final Logger log = Logger.getLogger("data.items");
|
||||
// map of MNEMONIC data item
|
||||
public static final HashMap<String, EcuDataItem> byMnemonic = new HashMap<>();
|
||||
|
||||
/**
|
||||
* Create data items from default CSV pidResource files
|
||||
* (prot/obd/res/pids.csv, prot/obd/res/conversions.csv)
|
||||
*/
|
||||
public EcuDataItems()
|
||||
{
|
||||
this("prot/obd/res/pids.csv",
|
||||
"prot/obd/res/conversions.csv",
|
||||
"com.fr3ts0n.ecu.prot.obd.res.messages");
|
||||
}
|
||||
|
||||
/**
|
||||
* Create data items from CSV pidResource file
|
||||
*
|
||||
* @param pidResource resource file for PIDs (csv)
|
||||
* @param conversionResource resource file for conversions (csv)
|
||||
*/
|
||||
public EcuDataItems(String pidResource, String conversionResource, String resourceBundleName)
|
||||
{
|
||||
Messages.init(resourceBundleName);
|
||||
cnv = new EcuConversions(conversionResource);
|
||||
loadFromResource(pidResource);
|
||||
}
|
||||
|
||||
/**
|
||||
* read data from resource file into data structure
|
||||
*
|
||||
* @param resource the resource file (csv)
|
||||
*/
|
||||
private void loadFromResource(String resource)
|
||||
{
|
||||
try
|
||||
{
|
||||
loadFromStream(getClass().getResource(resource).openStream());
|
||||
}
|
||||
catch (IOException e)
|
||||
{
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* read data from input stream (csv) into data structure
|
||||
*
|
||||
* @param inStr the csv input stream
|
||||
*/
|
||||
public void loadFromStream(InputStream inStr)
|
||||
{
|
||||
BufferedReader rdr;
|
||||
String currLine;
|
||||
String[] params;
|
||||
Conversion[] currCnvSet;
|
||||
EcuDataItem newItm;
|
||||
int line = 0;
|
||||
try
|
||||
{
|
||||
rdr = new BufferedReader(new InputStreamReader(inStr));
|
||||
// loop through all lines of the file ...
|
||||
while ((currLine = rdr.readLine()) != null)
|
||||
{
|
||||
// ignore first line
|
||||
if (++line == 1 || currLine.startsWith("#")) //$NON-NLS-1$
|
||||
{
|
||||
continue;
|
||||
}
|
||||
// repalce all optional quotes from CSV code list
|
||||
currLine = currLine.replaceAll("\"", ""); //$NON-NLS-1$ //$NON-NLS-2$
|
||||
// split CSV line into parameters
|
||||
params = currLine.split("\t"); //$NON-NLS-1$
|
||||
|
||||
currCnvSet = cnv.get(params[FLD.FORMULA.ordinal()]);
|
||||
if (currCnvSet == null)
|
||||
{
|
||||
log.warning("Conversion not found: " + params[FLD.FORMULA.ordinal()] + " " + currLine); //$NON-NLS-1$ //$NON-NLS-2$
|
||||
}
|
||||
// try to use MIN/MAX values from CSV
|
||||
Float minVal = null;
|
||||
Float maxVal = null;
|
||||
try { minVal = Float.parseFloat(params[FLD.MIN.ordinal()]); }
|
||||
catch(NumberFormatException ex) { /* ignore */ }
|
||||
try { maxVal = Float.parseFloat(params[FLD.MAX.ordinal()]); }
|
||||
catch(NumberFormatException e) { /* ignore */ }
|
||||
|
||||
long updateVal = 0;
|
||||
try { updateVal = Long.parseLong(params[FLD.UPDATE_MIN.ordinal()]); }
|
||||
catch(NumberFormatException ex) { updateVal = 0; }
|
||||
|
||||
String label = Messages.getString(params[FLD.MNEMONIC.ordinal()],
|
||||
params[FLD.LABEL.ordinal()]);
|
||||
// create linear conversion
|
||||
newItm = new EcuDataItem(Integer.decode(params[FLD.PID.ordinal()]),
|
||||
Integer.parseInt(params[FLD.OFS.ordinal()]),
|
||||
Integer.parseInt(params[FLD.LEN.ordinal()]),
|
||||
Integer.parseInt(params[FLD.BIT_OFS.ordinal()]),
|
||||
Integer.parseInt(params[FLD.BIT_LEN.ordinal()]),
|
||||
Long.decode(params[FLD.BIT_MASK.ordinal()]),
|
||||
currCnvSet,
|
||||
params[FLD.FORMAT.ordinal()],
|
||||
minVal,
|
||||
maxVal,
|
||||
updateVal,
|
||||
label,
|
||||
params[FLD.MNEMONIC.ordinal()]);
|
||||
|
||||
// Add item to mnemonic map
|
||||
byMnemonic.put(params[FLD.MNEMONIC.ordinal()], newItm);
|
||||
|
||||
// enter data item for all specified services
|
||||
String[] services = params[FLD.SVC.ordinal()].split(","); //$NON-NLS-1$
|
||||
for (String service : services)
|
||||
{
|
||||
int svcId = Integer.decode(service);
|
||||
appendItemToService(svcId, newItm);
|
||||
}
|
||||
}
|
||||
rdr.close();
|
||||
} catch (IOException e)
|
||||
{
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* get all data items for selected service and PID
|
||||
*
|
||||
* @param service service to search data items for
|
||||
* @param pid pid to search data items for
|
||||
* @return Vector to data items - or null if no data items exist
|
||||
*/
|
||||
public Vector<EcuDataItem> getPidDataItems(int service, int pid)
|
||||
{
|
||||
Vector<EcuDataItem> currVec = null;
|
||||
HashMap<Integer, Vector<EcuDataItem>> currSvc = get(service);
|
||||
if (currSvc != null)
|
||||
{
|
||||
currVec = currSvc.get(pid);
|
||||
}
|
||||
return (currVec);
|
||||
}
|
||||
|
||||
/**
|
||||
* get all data items for selected service
|
||||
*
|
||||
* @param service service to search data items for
|
||||
* @return Vector to data items - or null if no data items exist
|
||||
*/
|
||||
public Vector<EcuDataItem> getSvcDataItems(int service)
|
||||
{
|
||||
Vector<EcuDataItem> result = new Vector<>();
|
||||
HashMap<Integer, Vector<EcuDataItem>> currSvc = get(service);
|
||||
if (currSvc != null)
|
||||
{
|
||||
for (Vector<EcuDataItem> currVec : currSvc.values())
|
||||
{
|
||||
result.addAll(currVec);
|
||||
}
|
||||
}
|
||||
return (result);
|
||||
}
|
||||
|
||||
/**
|
||||
* Notify about a change of conversion factors
|
||||
*
|
||||
* - Updates MIN/MAX range of all items using specified conversion
|
||||
*
|
||||
* @param conversion Conversion which notifies changes
|
||||
*/
|
||||
protected static void notifyConversionChange(NumericConversion conversion)
|
||||
{
|
||||
// Loop through all items ...
|
||||
for (EcuDataItem item : byMnemonic.values())
|
||||
{
|
||||
// If item uses specified conversion ...
|
||||
if(item.cnv[EcuDataItem.cnvSystem] == conversion)
|
||||
{
|
||||
// update MIN/MAX limits of item
|
||||
item.updateLimits(null, null);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* append new data item to specified service
|
||||
*
|
||||
* @param service service to add item to
|
||||
* @param newItem EcuDataItem to be added
|
||||
*/
|
||||
public void appendItemToService(int service, EcuDataItem newItem)
|
||||
{
|
||||
// check if service existes already
|
||||
HashMap<Integer, Vector<EcuDataItem>> currSvc = get(service);
|
||||
// if not - create it
|
||||
if (currSvc == null)
|
||||
{
|
||||
currSvc = new HashMap<>();
|
||||
log.finer("+SVC: " + service + " - " + currSvc); //$NON-NLS-1$ //$NON-NLS-2$
|
||||
}
|
||||
|
||||
// check if item list exists for current PID
|
||||
Vector<EcuDataItem> currVec = currSvc.get(newItem.pid);
|
||||
// if not -- create it
|
||||
if (currVec == null)
|
||||
{
|
||||
currVec = new Vector<>();
|
||||
log.finer("+PID: " + newItem.pid + " - " + currVec); //$NON-NLS-1$ //$NON-NLS-2$
|
||||
}
|
||||
// enter data item into list of items / PID
|
||||
currVec.add(newItem);
|
||||
// and update list in into the pid map for corresponding service
|
||||
currSvc.put(newItem.pid, currVec);
|
||||
// update map of services
|
||||
put(service, currSvc);
|
||||
// debug message of new enty
|
||||
log.finer("+" + service + "/" + String.format("0x%02X", newItem.pid) + " - " + currVec); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
|
||||
}
|
||||
|
||||
/**
|
||||
* Update all EcuDataItems with new data from buffer
|
||||
*
|
||||
* @param service service of current data
|
||||
* @param pid pid of current data
|
||||
* @param buffer data buffer to do conversions on
|
||||
* @return Next expected update interval
|
||||
*/
|
||||
public long updateDataItems(int service, int pid, char[] buffer)
|
||||
{
|
||||
long nextUpdate = 0;
|
||||
|
||||
Vector<EcuDataItem> currItms = getPidDataItems(service, pid);
|
||||
if(currItms != null)
|
||||
{
|
||||
for (EcuDataItem currItm : currItms)
|
||||
{
|
||||
long currItmUpdate = currItm.updatePvFomBuffer(buffer);
|
||||
nextUpdate = Math.max(nextUpdate, currItmUpdate);
|
||||
}
|
||||
}
|
||||
return nextUpdate;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,118 @@
|
||||
/*
|
||||
* (C) Copyright 2015 by fr3ts0n <erwin.scheuch-heilig@gmx.at>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of
|
||||
* the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
||||
* MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
package com.fr3ts0n.ecu;
|
||||
|
||||
import com.fr3ts0n.pvs.IndexedProcessVar;
|
||||
|
||||
/**
|
||||
* Process variable which contains a single OBD data item
|
||||
*
|
||||
* @author erwin
|
||||
*/
|
||||
public class EcuDataPv extends IndexedProcessVar
|
||||
{
|
||||
/** UID for serialisation */
|
||||
private static final long serialVersionUID = -7787217159439147214L;
|
||||
|
||||
// Field IDs
|
||||
public static final int FID_PID = 0;
|
||||
public static final int FID_OFS = 1;
|
||||
public static final int FID_DESCRIPT = 2;
|
||||
public static final int FID_VALUE = 3;
|
||||
public static final int FID_UNITS = 4;
|
||||
// optional Field IDs which will be invisible for table display
|
||||
public static final String FID_FORMAT = "FMT";
|
||||
public static final String FID_CNVID = "CNV_ID";
|
||||
public static final String FID_MIN = "MIN";
|
||||
public static final String FID_MAX = "MAX";
|
||||
public static final String FID_BIT_OFS = "BIT_OFS";
|
||||
public static final String FID_MNEMONIC = "MNEMONIC";
|
||||
public static final String FID_COLOR = "COLOR";
|
||||
public static final String FID_UPDT_PERIOD = "PERIOD";
|
||||
|
||||
public static final String[] FIELDS =
|
||||
{
|
||||
"PID",
|
||||
"OFS",
|
||||
"DESCRIPTION",
|
||||
"VALUE",
|
||||
"UNITS",
|
||||
};
|
||||
|
||||
private transient Object renderingComponent;
|
||||
|
||||
/**
|
||||
* Creates a new instance of EcuDataPv
|
||||
*/
|
||||
public EcuDataPv()
|
||||
{
|
||||
super();
|
||||
this.setKeyAttribute(FIELDS[0]);
|
||||
}
|
||||
|
||||
public String[] getFields()
|
||||
{
|
||||
return (FIELDS);
|
||||
}
|
||||
|
||||
/**
|
||||
* get physical measurement units of a data PV.
|
||||
* Units may change because of the conversion system changed (metric/imperial)
|
||||
*
|
||||
* @return string of physical measurement units
|
||||
*/
|
||||
public String getUnits()
|
||||
{
|
||||
String result = "";
|
||||
try
|
||||
{
|
||||
// Try to get from assigned conversion
|
||||
Conversion[] cnv = (Conversion[]) get(FID_CNVID);
|
||||
if(cnv != null && cnv[EcuDataItem.cnvSystem] != null)
|
||||
{
|
||||
result = cnv[EcuDataItem.cnvSystem].getUnits();
|
||||
}
|
||||
else
|
||||
{
|
||||
// Attempt to get units from field
|
||||
result = get(FID_UNITS).toString();
|
||||
}
|
||||
}
|
||||
catch(Exception ex)
|
||||
{
|
||||
result="";
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
public Object getRenderingComponent()
|
||||
{
|
||||
return renderingComponent;
|
||||
}
|
||||
|
||||
public void setRenderingComponent(Object renderingComponent)
|
||||
{
|
||||
this.renderingComponent = renderingComponent;
|
||||
}
|
||||
|
||||
public String toString()
|
||||
{
|
||||
return (String.format("%02X.%d.%d", get(FID_PID), get(FID_OFS), get(FID_BIT_OFS)));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,120 @@
|
||||
/*
|
||||
* (C) Copyright 2015 by fr3ts0n <erwin.scheuch-heilig@gmx.at>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of
|
||||
* the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
||||
* MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
package com.fr3ts0n.ecu;
|
||||
|
||||
import com.fr3ts0n.ecu.prot.obd.Messages;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* conversion of numeric values based on a hash map
|
||||
*
|
||||
* @author erwin
|
||||
*/
|
||||
public class HashConversion extends NumericConversion
|
||||
{
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private static final long serialVersionUID = -1077047688974749271L;
|
||||
/* the HashMap Data */
|
||||
private final HashMap<Long, String> hashData = new HashMap<Long, String>();
|
||||
|
||||
/**
|
||||
* create a new hash converter which is initialized with values from map data
|
||||
*
|
||||
* @param data map data for conversions
|
||||
*/
|
||||
@SuppressWarnings({"rawtypes", "unchecked"})
|
||||
public HashConversion(Map data)
|
||||
{
|
||||
hashData.putAll(data);
|
||||
}
|
||||
|
||||
/**
|
||||
* create a new hash converter which is initialized with avlues from an array
|
||||
* of strings in the format "key=value"
|
||||
*
|
||||
* @param initData initializer strings for conversions in the format "key=value[;key=value[...]]"
|
||||
*/
|
||||
public HashConversion(String[] initData)
|
||||
{
|
||||
initFromStrings(initData);
|
||||
}
|
||||
|
||||
/**
|
||||
* initialize hash map with values from an array of strings in the format "key=value"
|
||||
*
|
||||
* @param initData initializer strings for conversions in the format "key=value[;key=value[...]]"
|
||||
*/
|
||||
private void initFromStrings(String[] initData)
|
||||
{
|
||||
Long key;
|
||||
String value;
|
||||
String[] data;
|
||||
// clear old hash data
|
||||
hashData.clear();
|
||||
|
||||
// loop through all entries ...
|
||||
for (String anInitData : initData)
|
||||
{
|
||||
data = anInitData.split(";");
|
||||
for (String aData : data)
|
||||
{
|
||||
// ... split key and value ...
|
||||
String[] words = aData.split("=");
|
||||
key = Long.valueOf(words[0]);
|
||||
value = words[1];
|
||||
|
||||
// attempt to translate ...
|
||||
String xlatKey = value;
|
||||
xlatKey = xlatKey.replaceAll("[ -]", "_").toLowerCase();
|
||||
value = Messages.getString(xlatKey, value);
|
||||
// debug log translated message
|
||||
log.finer(String.format("%s=%s", xlatKey, value));
|
||||
|
||||
// ... and enter into hash map
|
||||
hashData.put(key, value);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public Number memToPhys(long value)
|
||||
{
|
||||
return value;
|
||||
}
|
||||
|
||||
public Number physToMem(Number value)
|
||||
{
|
||||
return value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String physToPhysFmtString(Number physVal, String format)
|
||||
{
|
||||
String result = hashData.get(physVal.longValue());
|
||||
// if we haven't found a string representation, return numeric value
|
||||
if (result == null)
|
||||
result = "Unknown state: "+super.physToPhysFmtString(physVal, format);
|
||||
|
||||
return (result);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
/*
|
||||
* (C) Copyright 2015 by fr3ts0n <erwin.scheuch-heilig@gmx.at>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of
|
||||
* the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
||||
* MA 02111-1307 USA
|
||||
*
|
||||
*/
|
||||
|
||||
package com.fr3ts0n.ecu;
|
||||
|
||||
/**
|
||||
* Internal int-based conversion for hex display
|
||||
*/
|
||||
public class IntConversion
|
||||
extends NumericConversion
|
||||
{
|
||||
/** uid */
|
||||
private static final long serialVersionUID = -2551205550381391025L;
|
||||
|
||||
@Override
|
||||
public Number memToPhys(long value)
|
||||
{
|
||||
return value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Number physToMem(Number value)
|
||||
{
|
||||
return value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String physToPhysFmtString(Number physVal, String format)
|
||||
{
|
||||
long val = physVal.longValue();
|
||||
return String.format(format, val);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,163 @@
|
||||
/*
|
||||
* (C) Copyright 2015 by fr3ts0n <erwin.scheuch-heilig@gmx.at>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of
|
||||
* the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
||||
* MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
package com.fr3ts0n.ecu;
|
||||
|
||||
import com.fr3ts0n.pvs.PvLimits;
|
||||
|
||||
/**
|
||||
* Definition of a single OBD data conversion
|
||||
*
|
||||
* @author erwin
|
||||
*/
|
||||
public class LinearConversion extends NumericConversion
|
||||
{
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private static final long serialVersionUID = 7409621816599441879L;
|
||||
private int factor = 1;
|
||||
private int divider = 1;
|
||||
private int offset = 0;
|
||||
private int offsetPhys = 0;
|
||||
private PvLimits limits = null;
|
||||
// mnemonic of dynamic factor
|
||||
private String factMnemonic = null;
|
||||
|
||||
/**
|
||||
* Creates a new instance of Conversion
|
||||
*/
|
||||
public LinearConversion()
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new instance of Conversion
|
||||
*
|
||||
* @param factor conversion factor (integer part)
|
||||
* @param divider conversion divider (integer part)
|
||||
* @param offset linear offset to be added to raw memory value before conversion
|
||||
* @param offsetPhys physical offset to be added after converting raw value
|
||||
* @param units physical units for this conversion
|
||||
*/
|
||||
public LinearConversion(int factor, int divider, int offset, int offsetPhys,
|
||||
String units)
|
||||
{
|
||||
this.offset = offset;
|
||||
this.factor = factor;
|
||||
this.divider = divider;
|
||||
this.offsetPhys = offsetPhys;
|
||||
this.units = units;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new instance of Conversion with usage of a optional dynamic conversion factor
|
||||
*
|
||||
* @param factor conversion factor (integer part)
|
||||
* @param divider conversion divider (integer part)
|
||||
* @param offset linear offset to be added to raw memory value before conversion
|
||||
* @param offsetPhys physical offset to be added after converting raw value
|
||||
* @param units physical units for this conversion
|
||||
* @param factMnemonic mnemonic of dynamic conversion factor value
|
||||
*/
|
||||
public LinearConversion(int factor, int divider, int offset, int offsetPhys,
|
||||
String units, String factMnemonic)
|
||||
{
|
||||
this(factor, divider, offset, offsetPhys, units);
|
||||
if (factMnemonic != null && !factMnemonic.isEmpty())
|
||||
{
|
||||
this.factMnemonic = factMnemonic;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new instance of Conversion
|
||||
*
|
||||
* @param factor conversion factor (integer part)
|
||||
* @param divider conversion divider (integer part)
|
||||
* @param offset linear offset to be added to raw memory value before conversion
|
||||
* @param offsetPhys physical offset to be added after converting raw value
|
||||
* @param units physical units for this conversion
|
||||
*/
|
||||
public LinearConversion(int factor, int divider, int offset, int offsetPhys,
|
||||
String units, PvLimits limits)
|
||||
{
|
||||
this(factor, divider, offset, offsetPhys, units);
|
||||
this.limits = limits;
|
||||
}
|
||||
|
||||
/**
|
||||
* Dynamic update of conversion factor from other measurement value
|
||||
*
|
||||
* The dynamic conversion factor overrides the initial, static factor if:
|
||||
* - Factor is reported by protocol
|
||||
* - Value > 0
|
||||
*/
|
||||
private void updateCnvFromDynamicFactor()
|
||||
{
|
||||
if (factMnemonic != null)
|
||||
{
|
||||
// Get data item of dynamic conversion factor
|
||||
EcuDataItem newFactItm = EcuDataItems.byMnemonic.get(factMnemonic);
|
||||
if (newFactItm != null)
|
||||
{
|
||||
// Get value of dynamic conversion factor
|
||||
Number factVal = (Number)newFactItm.pv.get(EcuDataPv.FID_VALUE);
|
||||
// If there is a valid value, update factor with dynamic factor
|
||||
if ( factVal != null // Factor defined
|
||||
&& factVal.intValue() > 0 // and specified ...
|
||||
&& factVal.intValue() != factor // and changed
|
||||
)
|
||||
{
|
||||
// update conversion factor from dynamic value
|
||||
factor = factVal.intValue();
|
||||
// Notify all users of this conversion to update the data ranges
|
||||
EcuDataItems.notifyConversionChange(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* convert measurement item from storage format to physical value
|
||||
*
|
||||
* @param value raw memory value to be converted
|
||||
*/
|
||||
public Number memToPhys(long value)
|
||||
{
|
||||
updateCnvFromDynamicFactor();
|
||||
float result = ((float) (value + offset) * factor / divider + offsetPhys);
|
||||
if (limits != null)
|
||||
{
|
||||
result = (Float) limits.limitedValue(result);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* convert measurement item from physical value to raw storage format
|
||||
*
|
||||
* @param value physical value to be converted
|
||||
*/
|
||||
public Number physToMem(Number value)
|
||||
{
|
||||
return ((long) java.lang.Math.round((value.floatValue() - offsetPhys)
|
||||
* divider / factor - offset));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,85 @@
|
||||
/*
|
||||
* (C) Copyright 2015 by fr3ts0n <erwin.scheuch-heilig@gmx.at>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of
|
||||
* the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
||||
* MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
package com.fr3ts0n.ecu;
|
||||
|
||||
import java.util.logging.Logger;
|
||||
|
||||
/**
|
||||
* Base class for numeric diagnostic data conversions
|
||||
*
|
||||
* @author erwin
|
||||
*/
|
||||
public abstract class NumericConversion implements Conversion
|
||||
{
|
||||
/** fixed serial version id */
|
||||
private static final long serialVersionUID = 5506104864792893549L;
|
||||
/** Logger object */
|
||||
static final Logger log = Logger.getLogger("data.ecu");
|
||||
|
||||
/** physical units of data item */
|
||||
String units = "";
|
||||
|
||||
@Override
|
||||
public String physToPhysFmtString(Number physVal, String format)
|
||||
{
|
||||
return String.format(format, physVal);
|
||||
}
|
||||
|
||||
NumericConversion()
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* return physical units of measurement
|
||||
*
|
||||
* @return physical units
|
||||
*/
|
||||
public String getUnits()
|
||||
{
|
||||
return units;
|
||||
}
|
||||
|
||||
/**
|
||||
* convert measurement item from storage format to physical value
|
||||
*
|
||||
* @param value memory value
|
||||
* @param numDecimals number of decimal for string formatting of numbers
|
||||
* @return string representation of numeric value
|
||||
*/
|
||||
public String memToString(Number value, int numDecimals)
|
||||
{
|
||||
String fmt = "%." + numDecimals + "d";
|
||||
return physToPhysFmtString(memToPhys(value.longValue()), fmt);
|
||||
}
|
||||
|
||||
/**
|
||||
* convert measurement item from storage format to physical value
|
||||
*
|
||||
* @param value raw memory value to be converted
|
||||
*/
|
||||
public abstract Number memToPhys(long value);
|
||||
|
||||
/**
|
||||
* convert measurement item from physical value to raw storage format
|
||||
*
|
||||
* @param value physical value to be converted
|
||||
*/
|
||||
public abstract Number physToMem(Number value);
|
||||
|
||||
}
|
||||
@@ -0,0 +1,114 @@
|
||||
/*
|
||||
* (C) Copyright 2015 by fr3ts0n <erwin.scheuch-heilig@gmx.at>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of
|
||||
* the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
||||
* MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
package com.fr3ts0n.ecu;
|
||||
|
||||
import com.fr3ts0n.prot.ProtoHeader;
|
||||
|
||||
/**
|
||||
* Definition of a single OBD failure code
|
||||
*
|
||||
* @author erwin
|
||||
*/
|
||||
public class ObdCodeItem extends EcuCodeItem
|
||||
{
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private static final long serialVersionUID = -3976920283943009811L;
|
||||
|
||||
/** code types */
|
||||
private static final String codeTypes = "PCBU";
|
||||
|
||||
private static final int ID_CODE_TYPE = 0;
|
||||
private static final int ID_CODE_VALUE = 1;
|
||||
|
||||
/**
|
||||
* List of telegram parameters in order of appearance
|
||||
*/
|
||||
private static final int[][] TC_PARAMETERS =
|
||||
/* START, LEN, PARAM-TYPE // REMARKS */
|
||||
/* ------------------------------------------- */
|
||||
{{0, 1, ProtoHeader.PT_ALPHA}, // ID_CODE_TYPE
|
||||
{1, 4, ProtoHeader.PT_HEX}, // ID_CODE_VALUE
|
||||
};
|
||||
|
||||
/** Creates a new instance of ObdCodeItem */
|
||||
public ObdCodeItem()
|
||||
{
|
||||
setKeyAttribute(FIELDS[0]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new instance of ObdCodeItem
|
||||
*
|
||||
* @param code String representation of DFC
|
||||
* @param description descriptive text of DFC
|
||||
*/
|
||||
public ObdCodeItem(String code, String description)
|
||||
{
|
||||
setKeyAttribute(FIELDS[0]);
|
||||
put(FID_CODE, code);
|
||||
put(FID_DESCRIPT, description);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new instance of ObdCodeItem
|
||||
*
|
||||
* @param numericCode numeric code ID
|
||||
* @param description descriptive text of DFC
|
||||
*/
|
||||
public ObdCodeItem(int numericCode, String description)
|
||||
{
|
||||
setKeyAttribute(FIELDS[0]);
|
||||
put(FID_CODE, getPCode(numericCode));
|
||||
put(FID_DESCRIPT, description);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return numeric code representation from P/C/B/U-Code String
|
||||
*
|
||||
* @param pCode P/C/B/U-Code String
|
||||
* @return numeric code value for corresponding code
|
||||
*/
|
||||
protected static int getNumericCode(String pCode)
|
||||
{
|
||||
// get code number
|
||||
int numCode = Integer.valueOf(pCode.substring(1), 16).intValue();
|
||||
int typIdx = codeTypes.indexOf(pCode.charAt(0));
|
||||
numCode |= (typIdx << 14);
|
||||
|
||||
return (numCode);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return P/C/B/U-Code String representation from numeric code
|
||||
*
|
||||
* @param numericCode numeric code value for corresponding code
|
||||
* @return P/C/B/U-Code String
|
||||
*/
|
||||
static String getPCode(int numericCode)
|
||||
{
|
||||
char[] buffer = new char[5];
|
||||
int codeType = numericCode >> 14;
|
||||
int codeVal = numericCode & 0x3FFF;
|
||||
ProtoHeader.setParamValue(ID_CODE_TYPE, TC_PARAMETERS, buffer, codeTypes.substring(codeType, codeType + 1));
|
||||
ProtoHeader.setParamValue(ID_CODE_VALUE, TC_PARAMETERS, buffer, Integer.valueOf(codeVal));
|
||||
return (new String(buffer));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,57 @@
|
||||
/*
|
||||
* (C) Copyright 2015 by fr3ts0n <erwin.scheuch-heilig@gmx.at>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of
|
||||
* the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
||||
* MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
package com.fr3ts0n.ecu;
|
||||
|
||||
/**
|
||||
* List of all known OBD failure codes
|
||||
* This list is initialized by reading data files 'res/pcodes' and 'res/ucodes'
|
||||
*
|
||||
* @author erwin
|
||||
*/
|
||||
public class ObdCodeList
|
||||
extends EcuCodeList
|
||||
{
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private static final long serialVersionUID = 2198654596294230437L;
|
||||
|
||||
/** Creates a new instance of ObdCodeList */
|
||||
public ObdCodeList()
|
||||
{
|
||||
super("com.fr3ts0n.ecu.prot.obd.res.codes");
|
||||
}
|
||||
|
||||
/**
|
||||
* Construct a new code list and initialize it with ressources files
|
||||
*
|
||||
* @param resourceBundleName name of used resource bundle
|
||||
*/
|
||||
public ObdCodeList(String resourceBundleName)
|
||||
{
|
||||
super(resourceBundleName);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getCode(Number value)
|
||||
{
|
||||
return ObdCodeItem.getPCode(value.intValue());
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,78 @@
|
||||
package com.fr3ts0n.ecu;
|
||||
|
||||
import java.util.Comparator;
|
||||
|
||||
/**
|
||||
* OBD PID definition
|
||||
* - Allow prioritization of PID requests by providing:
|
||||
* - timestamp (ms) of next expected request
|
||||
* - sort algorithm by request timestamp for PID Collections
|
||||
*/
|
||||
public class ObdPid
|
||||
extends Number
|
||||
{
|
||||
/** The PID value itself */
|
||||
private final int pid;
|
||||
/** Timestamp (system ms) for next expected data request */
|
||||
private long nextRequest_ms = 0;
|
||||
|
||||
public ObdPid(int pidCode)
|
||||
{
|
||||
pid = pidCode;
|
||||
}
|
||||
|
||||
@Override
|
||||
public double doubleValue() {
|
||||
return (double)pid;
|
||||
}
|
||||
|
||||
@Override
|
||||
public float floatValue() {
|
||||
return (float)pid;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int intValue() {
|
||||
return pid;
|
||||
}
|
||||
|
||||
@Override
|
||||
public long longValue() {
|
||||
return (long)pid;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return Integer.toString(pid, 16);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set timestamp of next expected PID request
|
||||
* @param _nextRequest Timestamp [ms] of next expected request
|
||||
*/
|
||||
public void setNextRequest(long _nextRequest)
|
||||
{
|
||||
nextRequest_ms = _nextRequest;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get timestamp of next expected PID request
|
||||
* @return Timestamp of next expected PID request
|
||||
*/
|
||||
public long getNextRequest()
|
||||
{
|
||||
return nextRequest_ms;
|
||||
}
|
||||
|
||||
/**
|
||||
* Comparator to allow list / vector sorting by next request
|
||||
*/
|
||||
public static Comparator<ObdPid> requestSorter = new Comparator<ObdPid>()
|
||||
{
|
||||
@Override
|
||||
public int compare(ObdPid arg0, ObdPid arg1)
|
||||
{
|
||||
return Long.compare(arg0.nextRequest_ms, arg1.nextRequest_ms);
|
||||
}
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,91 @@
|
||||
/*
|
||||
* (C) Copyright 2015 by fr3ts0n <erwin.scheuch-heilig@gmx.at>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of
|
||||
* the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
||||
* MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
package com.fr3ts0n.ecu;
|
||||
|
||||
import com.fr3ts0n.pvs.IndexedProcessVar;
|
||||
|
||||
/**
|
||||
* OBD Vehicle identification Item
|
||||
* The VID item does not contain any units, since it is all alphanumeric IDs
|
||||
*
|
||||
* @author root
|
||||
*/
|
||||
public class ObdVidItem
|
||||
extends IndexedProcessVar
|
||||
{
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private static final long serialVersionUID = 955050909875054165L;
|
||||
public static final int FID_DESCRIPT = 0;
|
||||
public static final int FID_VALUE = 1;
|
||||
|
||||
/**
|
||||
* description of all relevant fields for VID item
|
||||
*/
|
||||
private static final String[] fields =
|
||||
{
|
||||
"Description",
|
||||
"Value"
|
||||
};
|
||||
|
||||
@Override
|
||||
public String[] getFields()
|
||||
{
|
||||
return (fields);
|
||||
}
|
||||
|
||||
/**
|
||||
* Descriptions of mode 9 PIDs
|
||||
*/
|
||||
private static final String[] descriptions =
|
||||
{
|
||||
/* PID 0 */ "Supported PIDs",
|
||||
/* PID 1 */ "VIN Count",
|
||||
/* PID 2 */ "Vehicle ID Number",
|
||||
/* PID 3 */ "Cal ID Count",
|
||||
/* PID 4 */ "Calibration ID",
|
||||
/* PID 5 */ "Cal Version Count",
|
||||
/* PID 6 */ "Cal Version",
|
||||
/* PID 7 */ "IPT Count",
|
||||
/* PID 8 */ "IPT",
|
||||
/* PID 9 */ "Control System count",
|
||||
/* PID A */ "Control System ID",
|
||||
};
|
||||
|
||||
/**
|
||||
* Return description for Mode $09 PID
|
||||
*
|
||||
* @param pid
|
||||
* @return description for selected PID
|
||||
*/
|
||||
public static String getPidDescription(int pid)
|
||||
{
|
||||
String result;
|
||||
try
|
||||
{
|
||||
result = descriptions[pid];
|
||||
} catch (Exception e)
|
||||
{
|
||||
// PID is not defined -> create dummy
|
||||
result = String.format("PID %02X", pid);
|
||||
}
|
||||
return (result);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,328 @@
|
||||
/*
|
||||
* (C) Copyright 2015 by fr3ts0n <erwin.scheuch-heilig@gmx.at>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of
|
||||
* the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
||||
* MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
package com.fr3ts0n.ecu;
|
||||
|
||||
/**
|
||||
* VAG data conversions (used by Kw1281 ...)
|
||||
*
|
||||
* @author Erwin Scheuch-Heilig
|
||||
*/
|
||||
public class VagConversion extends NumericConversion
|
||||
{
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private static final long serialVersionUID = 9130358043909319282L;
|
||||
|
||||
|
||||
/*
|
||||
* Formulas:
|
||||
*
|
||||
* 0 : Tabelle
|
||||
* 10 : (MW+Offset)*NW*Faktor
|
||||
* 11 : (MW.NW+Offset)*Faktor
|
||||
* 12 : (NW.MW+Offset)*Faktor
|
||||
* 13 : (NW*255+MW+Offset)*Faktor
|
||||
* 14 : (MW+Offset)/NW*Faktor
|
||||
* 15 : MW*Faktor+NW*Offset
|
||||
* 16 : (MW+Offset)*Faktor
|
||||
* 17 : 1+(MW+Offset)*NW*Faktor
|
||||
* 18 : (MW*NW*Faktor)+Offset
|
||||
* 20 : Bitdarstellung
|
||||
* 21 : 2 Ascii-Zeichen
|
||||
* 22 : Ascii-Text
|
||||
* 23 : Uhrzeit
|
||||
* 24 : Hexdarstellung
|
||||
*/
|
||||
public static final int CNV_ID_TBL = 0;
|
||||
|
||||
|
||||
private int cnvId = 10;
|
||||
private double factor = 1.0;
|
||||
private double offset = 0.0;
|
||||
/** table values as they come from the meta package */
|
||||
/** Value 2 for calcualtion as it comes from meta package */
|
||||
private char metaNw = 0;
|
||||
/** table values as they come from the meta package */
|
||||
private char[] metaTblValues = {0, 255};
|
||||
|
||||
public VagConversion()
|
||||
{
|
||||
}
|
||||
|
||||
public VagConversion(int cnvId, double factor, double offset, String units)
|
||||
{
|
||||
this.cnvId = cnvId;
|
||||
this.factor = factor;
|
||||
this.offset = offset;
|
||||
this.units = units;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param metaNw the metaNw to set
|
||||
*/
|
||||
public void setMetaNw(char metaNw)
|
||||
{
|
||||
this.metaNw = metaNw;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param metaTblValues the metaTblValues to set
|
||||
*/
|
||||
public void setMetaTblValues(char[] metaTblValues)
|
||||
{
|
||||
this.metaTblValues = metaTblValues;
|
||||
}
|
||||
|
||||
/**
|
||||
* calculation of interpolated table value
|
||||
* table values are transferred with the meta package
|
||||
*
|
||||
* @param mw value 1 for calculation
|
||||
* @param nw value 2 for calcualtion
|
||||
* @return result of calculation
|
||||
*/
|
||||
private double tableValue(int mw, int nw)
|
||||
{
|
||||
// mask value to 1 byte
|
||||
int internalVal = mw & 0xFF;
|
||||
// get position into table
|
||||
double stepwidth = (double) 0xFF / (metaTblValues.length - 1);
|
||||
int pos = (int) (internalVal / stepwidth);
|
||||
int ofs = (int) (internalVal % stepwidth);
|
||||
// get both table values
|
||||
int valBefore = metaTblValues[pos];
|
||||
int valAfter = pos < metaTblValues.length - 1 ? metaTblValues[pos + 1] : valBefore;
|
||||
// interpolate value between table entries
|
||||
return ((valBefore + (valAfter - valBefore) * ofs / stepwidth) + offset - nw) * factor;
|
||||
}
|
||||
|
||||
/**
|
||||
* calculation of formula ID 10
|
||||
* <pre>(MW+Offset)*NW*Faktor</pre>
|
||||
*
|
||||
* @param mw value 1 for calculation
|
||||
* @param nw value 2 for calcualtion
|
||||
* @return result of calculation
|
||||
*/
|
||||
private double formula10Value(int mw, int nw)
|
||||
{
|
||||
return ((mw + offset) * nw * factor);
|
||||
}
|
||||
|
||||
/**
|
||||
* calculation of formula ID 11
|
||||
* <pre>(MW.NW+Offset)*Faktor</pre>
|
||||
*
|
||||
* @param mw value 1 for calculation
|
||||
* @param nw value 2 for calcualtion
|
||||
* @return result of calculation
|
||||
*/
|
||||
private double formula11Value(int mw, int nw)
|
||||
{
|
||||
return ((Double.parseDouble(String.format("%d.%d", mw, nw)) + offset) * factor);
|
||||
}
|
||||
|
||||
/**
|
||||
* calculation of formula ID 12
|
||||
* <pre>(NW.MW+Offset)*Faktor</pre>
|
||||
*
|
||||
* @param mw value 1 for calculation
|
||||
* @param nw value 2 for calcualtion
|
||||
* @return result of calculation
|
||||
*/
|
||||
private double formula12Value(int mw, int nw)
|
||||
{
|
||||
return ((Double.parseDouble(String.format("%d.%d", nw, mw)) + offset) * factor);
|
||||
}
|
||||
|
||||
/**
|
||||
* calculation of formula ID 13
|
||||
* <pre>(NW*255+MW+Offset)*Faktor</pre>
|
||||
*
|
||||
* @param mw value 1 for calculation
|
||||
* @param nw value 2 for calcualtion
|
||||
* @return result of calculation
|
||||
*/
|
||||
private double formula13Value(int mw, int nw)
|
||||
{
|
||||
return ((nw * 255 + mw + offset) * factor);
|
||||
}
|
||||
|
||||
/**
|
||||
* calculation of formula ID 14
|
||||
* <pre>(MW+Offset)/NW*Faktor</pre>
|
||||
*
|
||||
* @param mw value 1 for calculation
|
||||
* @param nw value 2 for calcualtion
|
||||
* @return result of calculation
|
||||
*/
|
||||
private double formula14Value(int mw, int nw)
|
||||
{
|
||||
return ((mw + offset) / nw * factor);
|
||||
}
|
||||
|
||||
/**
|
||||
* calculation of formula ID 15
|
||||
* <pre>MW*Faktor+NW*Offset</pre>
|
||||
*
|
||||
* @param mw value 1 for calculation
|
||||
* @param nw value 2 for calcualtion
|
||||
* @return result of calculation
|
||||
*/
|
||||
private double formula15Value(int mw, int nw)
|
||||
{
|
||||
return (mw * factor + nw * offset);
|
||||
}
|
||||
|
||||
/**
|
||||
* calculation of formula ID 16
|
||||
* <pre>(MW+Offset)*Faktor</pre>
|
||||
*
|
||||
* @param mw value 1 for calculation
|
||||
* @return result of calculation
|
||||
*/
|
||||
private double formula16Value(int mw)
|
||||
{
|
||||
return ((mw + offset) * factor);
|
||||
}
|
||||
|
||||
/**
|
||||
* calculation of formula ID 17
|
||||
* <pre>1+(MW+Offset)*NW*Faktor</pre>
|
||||
*
|
||||
* @param mw value 1 for calculation
|
||||
* @param nw value 2 for calcualtion
|
||||
* @return result of calculation
|
||||
*/
|
||||
private double formula17Value(int mw, int nw)
|
||||
{
|
||||
return (1 + (mw + offset) * nw * factor);
|
||||
}
|
||||
|
||||
/**
|
||||
* calculation of formula ID 18
|
||||
* <pre>(MW*NW*Faktor)+Offset</pre>
|
||||
*
|
||||
* @param mw value 1 for calculation
|
||||
* @param nw value 2 for calcualtion
|
||||
* @return result of calculation
|
||||
*/
|
||||
private double formula18Value(int mw, int nw)
|
||||
{
|
||||
return (mw * nw * factor + offset);
|
||||
}
|
||||
|
||||
/**
|
||||
* convert memory value to physical value
|
||||
*
|
||||
* @param value memory value
|
||||
* @return physical value
|
||||
*/
|
||||
public Number memToPhys(long value)
|
||||
{
|
||||
double result = 0;
|
||||
int mw = (int) (value % 0x100);
|
||||
// if meta value is set, then it will be used
|
||||
int nw = metaNw != 0 ? metaNw : (int) (value / 0x100);
|
||||
switch (cnvId)
|
||||
{
|
||||
case 0:
|
||||
result = tableValue(mw, nw);
|
||||
break;
|
||||
case 10:
|
||||
result = formula10Value(mw, nw);
|
||||
break;
|
||||
case 11:
|
||||
result = formula11Value(mw, nw);
|
||||
break;
|
||||
case 12:
|
||||
result = formula12Value(mw, nw);
|
||||
break;
|
||||
case 13:
|
||||
result = formula13Value(mw, nw);
|
||||
break;
|
||||
case 14:
|
||||
result = formula14Value(mw, nw);
|
||||
break;
|
||||
case 15:
|
||||
result = formula15Value(mw, nw);
|
||||
break;
|
||||
case 16:
|
||||
result = formula16Value(mw);
|
||||
break;
|
||||
case 17:
|
||||
result = formula17Value(mw, nw);
|
||||
break;
|
||||
case 18:
|
||||
result = formula18Value(mw, nw);
|
||||
break;
|
||||
case 20:
|
||||
result = mw & nw;
|
||||
break;
|
||||
case 21:
|
||||
case 22:
|
||||
case 23:
|
||||
result = nw << 8 | mw;
|
||||
break;
|
||||
|
||||
default:
|
||||
log.info(String.format("Unsupported Formula: ID=%d [%s]", cnvId, units));
|
||||
}
|
||||
return (float) result;
|
||||
}
|
||||
|
||||
public Number physToMem(Number value)
|
||||
{
|
||||
throw new UnsupportedOperationException("Not supported yet.");
|
||||
}
|
||||
|
||||
@Override
|
||||
public String physToPhysFmtString(Number physValue, String format)
|
||||
{
|
||||
String result;
|
||||
switch (cnvId)
|
||||
{
|
||||
case 20: // * 20 : Bitdarstellung
|
||||
result = Integer.toBinaryString(physValue.intValue());
|
||||
break;
|
||||
|
||||
case 21: // * 21 : 2 Ascii-Zeichen
|
||||
case 22: // * 22 : Ascii-Text
|
||||
result = String.format("%c%c",
|
||||
physValue.intValue() / 0x100,
|
||||
physValue.intValue() % 0x100);
|
||||
break;
|
||||
|
||||
case 23: // * 23 : Uhrzeit
|
||||
result = String.format("%02d:%02d",
|
||||
physValue.intValue() / 0x100,
|
||||
physValue.intValue() % 0x100);
|
||||
break;
|
||||
|
||||
case 24: // * 24 : Hexdarstellung
|
||||
result = String.format("%04X", physValue.intValue());
|
||||
break;
|
||||
|
||||
default:
|
||||
result = super.physToPhysFmtString(physValue, format);
|
||||
}
|
||||
return (result);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,67 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
|
||||
<Form version="1.3" maxVersion="1.7" type="org.netbeans.modules.form.forminfo.JPanelFormInfo">
|
||||
<AuxValues>
|
||||
<AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="0"/>
|
||||
<AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
|
||||
<AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/>
|
||||
<AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/>
|
||||
<AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="false"/>
|
||||
<AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/>
|
||||
<AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
|
||||
<AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
|
||||
<AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/>
|
||||
<AuxValue name="designerSize" type="java.awt.Dimension" value="-84,-19,0,5,115,114,0,18,106,97,118,97,46,97,119,116,46,68,105,109,101,110,115,105,111,110,65,-114,-39,-41,-84,95,68,20,2,0,2,73,0,6,104,101,105,103,104,116,73,0,5,119,105,100,116,104,120,112,0,0,0,-30,0,0,1,47"/>
|
||||
</AuxValues>
|
||||
|
||||
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout"/>
|
||||
<SubComponents>
|
||||
<Component class="javax.swing.JLabel" name="lblImage">
|
||||
<Properties>
|
||||
<Property name="horizontalAlignment" type="int" value="0"/>
|
||||
<Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor">
|
||||
<Image iconType="3" name="/com.fr3ts0n.ecu/res/JaVAG_Logo.png"/>
|
||||
</Property>
|
||||
</Properties>
|
||||
<Constraints>
|
||||
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout" value="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout$BorderConstraintsDescription">
|
||||
<BorderConstraints direction="Center"/>
|
||||
</Constraint>
|
||||
</Constraints>
|
||||
</Component>
|
||||
<Container class="javax.swing.JPanel" name="jPanel1">
|
||||
<Constraints>
|
||||
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout" value="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout$BorderConstraintsDescription">
|
||||
<BorderConstraints direction="First"/>
|
||||
</Constraint>
|
||||
</Constraints>
|
||||
|
||||
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignGridLayout">
|
||||
<Property name="columns" type="int" value="1"/>
|
||||
<Property name="rows" type="int" value="0"/>
|
||||
</Layout>
|
||||
<SubComponents>
|
||||
<Component class="javax.swing.JLabel" name="lblName">
|
||||
<Properties>
|
||||
<Property name="horizontalAlignment" type="int" value="0"/>
|
||||
</Properties>
|
||||
</Component>
|
||||
<Component class="javax.swing.JLabel" name="lblVersion">
|
||||
<Properties>
|
||||
<Property name="horizontalAlignment" type="int" value="0"/>
|
||||
</Properties>
|
||||
</Component>
|
||||
</SubComponents>
|
||||
</Container>
|
||||
<Component class="javax.swing.JLabel" name="lblCopyright">
|
||||
<Properties>
|
||||
<Property name="horizontalAlignment" type="int" value="0"/>
|
||||
</Properties>
|
||||
<Constraints>
|
||||
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout" value="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout$BorderConstraintsDescription">
|
||||
<BorderConstraints direction="Last"/>
|
||||
</Constraint>
|
||||
</Constraints>
|
||||
</Component>
|
||||
</SubComponents>
|
||||
</Form>
|
||||
@@ -0,0 +1,122 @@
|
||||
/*
|
||||
* (C) Copyright 2015 by fr3ts0n <erwin.scheuch-heilig@gmx.at>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of
|
||||
* the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
||||
* MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
package com.fr3ts0n.ecu.gui.application;
|
||||
|
||||
import javax.swing.Icon;
|
||||
|
||||
/**
|
||||
* @author erwin
|
||||
*/
|
||||
public class AboutPanel extends javax.swing.JPanel
|
||||
{
|
||||
|
||||
/** Serial version UID */
|
||||
private static final long serialVersionUID = -7733037825291372813L;
|
||||
|
||||
/** Creates new form AboutPanel */
|
||||
public AboutPanel()
|
||||
{
|
||||
initComponents();
|
||||
}
|
||||
|
||||
/**
|
||||
* This method is called from within the constructor to
|
||||
* initialize the form.
|
||||
* WARNING: Do NOT modify this code. The content of this method is
|
||||
* always regenerated by the Form Editor.
|
||||
*/
|
||||
|
||||
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
|
||||
private void initComponents()
|
||||
{
|
||||
|
||||
lblImage = new javax.swing.JLabel();
|
||||
// Variables declaration - do not modify//GEN-BEGIN:variables
|
||||
javax.swing.JPanel jPanel1 = new javax.swing.JPanel();
|
||||
lblName = new javax.swing.JLabel();
|
||||
lblVersion = new javax.swing.JLabel();
|
||||
lblCopyright = new javax.swing.JLabel();
|
||||
|
||||
setLayout(new java.awt.BorderLayout());
|
||||
|
||||
lblImage.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
|
||||
lblImage.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/fr3ts0n/ecu/gui/res/JaVAG_Logo.png"))); // NOI18N
|
||||
add(lblImage, java.awt.BorderLayout.CENTER);
|
||||
|
||||
jPanel1.setLayout(new java.awt.GridLayout(0, 1));
|
||||
|
||||
lblName.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
|
||||
jPanel1.add(lblName);
|
||||
|
||||
lblVersion.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
|
||||
jPanel1.add(lblVersion);
|
||||
|
||||
add(jPanel1, java.awt.BorderLayout.PAGE_START);
|
||||
|
||||
lblCopyright.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
|
||||
add(lblCopyright, java.awt.BorderLayout.PAGE_END);
|
||||
}// </editor-fold>//GEN-END:initComponents
|
||||
|
||||
/**
|
||||
* set icon for application about dialog
|
||||
*
|
||||
* @param icon icon to show
|
||||
*/
|
||||
public void setIcon(Icon icon)
|
||||
{
|
||||
lblImage.setIcon(icon);
|
||||
}
|
||||
|
||||
/**
|
||||
* set application name
|
||||
*
|
||||
* @param appName application name
|
||||
*/
|
||||
public void setApplicationName(String appName)
|
||||
{
|
||||
lblName.setText(appName);
|
||||
}
|
||||
|
||||
/**
|
||||
* set application version
|
||||
*
|
||||
* @param appVersion application version string
|
||||
*/
|
||||
public void setApplicationVersion(String appVersion)
|
||||
{
|
||||
lblVersion.setText(appVersion);
|
||||
}
|
||||
|
||||
/**
|
||||
* set copyright string
|
||||
*
|
||||
* @param cRightString copyright string
|
||||
*/
|
||||
public void setCopyrightString(String cRightString)
|
||||
{
|
||||
lblCopyright.setText(cRightString);
|
||||
}
|
||||
|
||||
private javax.swing.JLabel lblCopyright;
|
||||
private javax.swing.JLabel lblImage;
|
||||
private javax.swing.JLabel lblName;
|
||||
private javax.swing.JLabel lblVersion;
|
||||
// End of variables declaration//GEN-END:variables
|
||||
|
||||
}
|
||||
@@ -0,0 +1,211 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
|
||||
<Form version="1.2" maxVersion="1.2" type="org.netbeans.modules.form.forminfo.JPanelFormInfo">
|
||||
<Properties>
|
||||
<Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
|
||||
<Font name="Dialog" size="10" style="0"/>
|
||||
</Property>
|
||||
<Property name="name" type="java.lang.String" value="DataPanel" noResource="true"/>
|
||||
</Properties>
|
||||
<AuxValues>
|
||||
<AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="0"/>
|
||||
<AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
|
||||
<AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/>
|
||||
<AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/>
|
||||
<AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="false"/>
|
||||
<AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
|
||||
<AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
|
||||
<AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/>
|
||||
<AuxValue name="designerSize" type="java.awt.Dimension" value="-84,-19,0,5,115,114,0,18,106,97,118,97,46,97,119,116,46,68,105,109,101,110,115,105,111,110,65,-114,-39,-41,-84,95,68,20,2,0,2,73,0,6,104,101,105,103,104,116,73,0,5,119,105,100,116,104,120,112,0,0,1,44,0,0,1,-112"/>
|
||||
</AuxValues>
|
||||
|
||||
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout"/>
|
||||
<SubComponents>
|
||||
<Container class="javax.swing.JSplitPane" name="jSplitPane1">
|
||||
<Properties>
|
||||
<Property name="dividerLocation" type="int" value="0"/>
|
||||
<Property name="dividerSize" type="int" value="8"/>
|
||||
<Property name="orientation" type="int" value="0"/>
|
||||
<Property name="resizeWeight" type="double" value="0.5"/>
|
||||
<Property name="toolTipText" type="java.lang.String" value="Move to show graph display"/>
|
||||
<Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
|
||||
<Font name="Dialog" size="10" style="0"/>
|
||||
</Property>
|
||||
<Property name="name" type="java.lang.String" value="splitter" noResource="true"/>
|
||||
<Property name="oneTouchExpandable" type="boolean" value="true"/>
|
||||
</Properties>
|
||||
<Constraints>
|
||||
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout" value="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout$BorderConstraintsDescription">
|
||||
<BorderConstraints direction="Center"/>
|
||||
</Constraint>
|
||||
</Constraints>
|
||||
|
||||
<Layout class="org.netbeans.modules.form.compat2.layouts.support.JSplitPaneSupportLayout"/>
|
||||
<SubComponents>
|
||||
<Container class="javax.swing.JPanel" name="panGraph">
|
||||
<Properties>
|
||||
<Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
|
||||
<Font name="Dialog" size="10" style="0"/>
|
||||
</Property>
|
||||
</Properties>
|
||||
<Constraints>
|
||||
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.support.JSplitPaneSupportLayout" value="org.netbeans.modules.form.compat2.layouts.support.JSplitPaneSupportLayout$JSplitPaneConstraintsDescription">
|
||||
<JSplitPaneConstraints position="left"/>
|
||||
</Constraint>
|
||||
</Constraints>
|
||||
|
||||
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout"/>
|
||||
<SubComponents>
|
||||
<Component class="com.fr3ts0n.ecu.ObdDataPlotter" name="plotter">
|
||||
<Properties>
|
||||
<Property name="toolTipText" type="java.lang.String" value="Select data items in Table to activate graphing"/>
|
||||
<Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
|
||||
<Font name="Dialog" size="10" style="0"/>
|
||||
</Property>
|
||||
<Property name="name" type="java.lang.String" value="plotter" noResource="true"/>
|
||||
</Properties>
|
||||
<Constraints>
|
||||
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout" value="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout$BorderConstraintsDescription">
|
||||
<BorderConstraints direction="Center"/>
|
||||
</Constraint>
|
||||
</Constraints>
|
||||
</Component>
|
||||
<Container class="javax.swing.JPanel" name="jPanel1">
|
||||
<Properties>
|
||||
<Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
|
||||
<Font name="Dialog" size="10" style="0"/>
|
||||
</Property>
|
||||
</Properties>
|
||||
<Constraints>
|
||||
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout" value="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout$BorderConstraintsDescription">
|
||||
<BorderConstraints direction="South"/>
|
||||
</Constraint>
|
||||
</Constraints>
|
||||
|
||||
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout"/>
|
||||
<SubComponents>
|
||||
<Container class="javax.swing.JPanel" name="jPanel2">
|
||||
<Properties>
|
||||
<Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
|
||||
<Border info="org.netbeans.modules.form.compat2.border.BevelBorderInfo">
|
||||
<BevelBorder bevelType="1"/>
|
||||
</Border>
|
||||
</Property>
|
||||
<Property name="toolTipText" type="java.lang.String" value="maximum history time in minutes"/>
|
||||
</Properties>
|
||||
<Constraints>
|
||||
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout" value="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout$BorderConstraintsDescription">
|
||||
<BorderConstraints direction="Center"/>
|
||||
</Constraint>
|
||||
</Constraints>
|
||||
|
||||
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout"/>
|
||||
<SubComponents>
|
||||
<Component class="javax.swing.JSlider" name="slGraphTime">
|
||||
<Properties>
|
||||
<Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
|
||||
<Font name="Dialog" size="10" style="0"/>
|
||||
</Property>
|
||||
<Property name="maximum" type="int" value="180"/>
|
||||
<Property name="value" type="int" value="180"/>
|
||||
</Properties>
|
||||
<Events>
|
||||
<EventHandler event="stateChanged" listener="javax.swing.event.ChangeListener" parameters="javax.swing.event.ChangeEvent" handler="slGraphTimeStateChanged"/>
|
||||
</Events>
|
||||
<Constraints>
|
||||
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
|
||||
<GridBagConstraints gridX="-1" gridY="-1" gridWidth="1" gridHeight="1" fill="1" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="1.0" weightY="0.0"/>
|
||||
</Constraint>
|
||||
</Constraints>
|
||||
</Component>
|
||||
<Component class="javax.swing.JLabel" name="lblHistTime">
|
||||
<Properties>
|
||||
<Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
|
||||
<Font name="Dialog" size="10" style="0"/>
|
||||
</Property>
|
||||
<Property name="horizontalAlignment" type="int" value="4"/>
|
||||
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.form.RADConnectionPropertyEditor">
|
||||
<Connection code="String.valueOf(slGraphTime.getValue())+" min"" type="code"/>
|
||||
</Property>
|
||||
<Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
|
||||
<Border info="org.netbeans.modules.form.compat2.border.EmptyBorderInfo">
|
||||
<EmptyBorder bottom="1" left="3" right="3" top="1"/>
|
||||
</Border>
|
||||
</Property>
|
||||
<Property name="horizontalTextPosition" type="int" value="0"/>
|
||||
</Properties>
|
||||
<Constraints>
|
||||
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
|
||||
<GridBagConstraints gridX="-1" gridY="-1" gridWidth="1" gridHeight="1" fill="1" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.0"/>
|
||||
</Constraint>
|
||||
</Constraints>
|
||||
</Component>
|
||||
</SubComponents>
|
||||
</Container>
|
||||
<Component class="javax.swing.JButton" name="btnClearHist">
|
||||
<Properties>
|
||||
<Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
|
||||
<Font name="Dialog" size="10" style="0"/>
|
||||
</Property>
|
||||
<Property name="mnemonic" type="int" value="67"/>
|
||||
<Property name="text" type="java.lang.String" value="Clear History"/>
|
||||
<Property name="toolTipText" type="java.lang.String" value="Clear history buffer for graphing"/>
|
||||
</Properties>
|
||||
<Events>
|
||||
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="btnClearHistActionPerformed"/>
|
||||
</Events>
|
||||
<Constraints>
|
||||
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout" value="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout$BorderConstraintsDescription">
|
||||
<BorderConstraints direction="East"/>
|
||||
</Constraint>
|
||||
</Constraints>
|
||||
</Component>
|
||||
</SubComponents>
|
||||
</Container>
|
||||
</SubComponents>
|
||||
</Container>
|
||||
<Container class="javax.swing.JPanel" name="panTable">
|
||||
<Properties>
|
||||
<Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
|
||||
<Font name="Dialog" size="10" style="0"/>
|
||||
</Property>
|
||||
</Properties>
|
||||
<Constraints>
|
||||
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.support.JSplitPaneSupportLayout" value="org.netbeans.modules.form.compat2.layouts.support.JSplitPaneSupportLayout$JSplitPaneConstraintsDescription">
|
||||
<JSplitPaneConstraints position="bottom"/>
|
||||
</Constraint>
|
||||
</Constraints>
|
||||
|
||||
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout"/>
|
||||
<SubComponents>
|
||||
<Container class="javax.swing.JScrollPane" name="jScrollPane1">
|
||||
<AuxValues>
|
||||
<AuxValue name="autoScrollPane" type="java.lang.Boolean" value="true"/>
|
||||
</AuxValues>
|
||||
<Constraints>
|
||||
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout" value="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout$BorderConstraintsDescription">
|
||||
<BorderConstraints direction="Center"/>
|
||||
</Constraint>
|
||||
</Constraints>
|
||||
|
||||
<Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/>
|
||||
<SubComponents>
|
||||
<Component class="com.fr3ts0n.pvs.gui.PvTable" name="tblPids">
|
||||
<Properties>
|
||||
<Property name="autoResizeMode" type="int" value="5"/>
|
||||
<Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
|
||||
<Font name="Dialog" size="10" style="0"/>
|
||||
</Property>
|
||||
<Property name="name" type="java.lang.String" value="DataTable" noResource="true"/>
|
||||
<Property name="showGrid" type="boolean" value="true"/>
|
||||
<Property name="toolTipText" type="java.lang.String" value="Select items to start graphing"/>
|
||||
</Properties>
|
||||
</Component>
|
||||
</SubComponents>
|
||||
</Container>
|
||||
</SubComponents>
|
||||
</Container>
|
||||
</SubComponents>
|
||||
</Container>
|
||||
</SubComponents>
|
||||
</Form>
|
||||
@@ -0,0 +1,416 @@
|
||||
/*
|
||||
* (C) Copyright 2015 by fr3ts0n <erwin.scheuch-heilig@gmx.at>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of
|
||||
* the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
||||
* MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
package com.fr3ts0n.ecu.gui.application;
|
||||
|
||||
import com.fr3ts0n.ecu.EcuDataPv;
|
||||
import com.fr3ts0n.pvs.ProcessVar;
|
||||
import com.fr3ts0n.pvs.PvChangeEvent;
|
||||
import com.fr3ts0n.pvs.PvChangeListener;
|
||||
import com.fr3ts0n.pvs.PvList;
|
||||
|
||||
import org.jfree.data.time.Second;
|
||||
import org.jfree.data.time.TimeSeries;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.logging.Level;
|
||||
|
||||
import javax.swing.JPanel;
|
||||
import javax.swing.event.ListSelectionEvent;
|
||||
import javax.swing.event.ListSelectionListener;
|
||||
|
||||
|
||||
/**
|
||||
* Panel to combine tabular- and graphical display for OBD data
|
||||
*
|
||||
* @author erwin
|
||||
*/
|
||||
public class ObdDataPanel extends JPanel
|
||||
implements PvChangeListener, ListSelectionListener
|
||||
{
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private static final long serialVersionUID = 4441869977997912421L;
|
||||
// selectable PID's'
|
||||
HashMap<Object, TimeSeries> selPids = new HashMap<>();
|
||||
|
||||
/** Creates new form ObdGraphPanel */
|
||||
public ObdDataPanel()
|
||||
{
|
||||
initComponents();
|
||||
tblPids.setPvModel(new ObdItemTableModel());
|
||||
tblPids.getSelectionModel().addListSelectionListener(this);
|
||||
tblPids.setDefaultRenderer(EcuDataPv.class, new ObdItemTableRenderer());
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates new form ObdGraphPanel
|
||||
*
|
||||
* @param pvList List of Process vars (PIDS) to display
|
||||
*/
|
||||
public ObdDataPanel(PvList pvList)
|
||||
{
|
||||
initComponents();
|
||||
tblPids.setPvModel(new ObdItemTableModel());
|
||||
tblPids.getSelectionModel().addListSelectionListener(this);
|
||||
tblPids.setDefaultRenderer(EcuDataPv.class, new ObdItemTableRenderer());
|
||||
setPidPvs(pvList);
|
||||
}
|
||||
|
||||
/**
|
||||
* This method is called from within the constructor to
|
||||
* initialize the form.
|
||||
* WARNING: Do NOT modify this code. The content of this method is
|
||||
* always regenerated by the Form Editor.
|
||||
*/
|
||||
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
|
||||
private void initComponents()
|
||||
{
|
||||
java.awt.GridBagConstraints gridBagConstraints;
|
||||
|
||||
javax.swing.JSplitPane jSplitPane1 = new javax.swing.JSplitPane();
|
||||
JPanel panGraph = new JPanel();
|
||||
plotter = new com.fr3ts0n.ecu.gui.application.ObdDataPlotter();
|
||||
JPanel jPanel1 = new JPanel();
|
||||
JPanel jPanel2 = new JPanel();
|
||||
slGraphTime = new javax.swing.JSlider();
|
||||
lblHistTime = new javax.swing.JLabel();
|
||||
// Variables declaration - do not modify//GEN-BEGIN:variables
|
||||
javax.swing.JButton btnClearHist = new javax.swing.JButton();
|
||||
JPanel panTable = new JPanel();
|
||||
javax.swing.JScrollPane jScrollPane1 = new javax.swing.JScrollPane();
|
||||
tblPids = new com.fr3ts0n.pvs.gui.PvTable();
|
||||
|
||||
setFont(new java.awt.Font("Dialog", 0, 10));
|
||||
setName("DataPanel"); // NOI18N
|
||||
setLayout(new java.awt.BorderLayout());
|
||||
|
||||
jSplitPane1.setDividerLocation(0);
|
||||
jSplitPane1.setDividerSize(8);
|
||||
jSplitPane1.setOrientation(javax.swing.JSplitPane.VERTICAL_SPLIT);
|
||||
jSplitPane1.setResizeWeight(0.5);
|
||||
jSplitPane1.setToolTipText("Move to show graph display");
|
||||
jSplitPane1.setFont(new java.awt.Font("Dialog", 0, 10));
|
||||
jSplitPane1.setName("splitter"); // NOI18N
|
||||
jSplitPane1.setOneTouchExpandable(true);
|
||||
|
||||
panGraph.setFont(new java.awt.Font("Dialog", 0, 10));
|
||||
panGraph.setLayout(new java.awt.BorderLayout());
|
||||
|
||||
plotter.setToolTipText("Select data items in Table to activate graphing");
|
||||
plotter.setFont(new java.awt.Font("Dialog", 0, 10));
|
||||
plotter.setName("plotter"); // NOI18N
|
||||
panGraph.add(plotter, java.awt.BorderLayout.CENTER);
|
||||
|
||||
jPanel1.setFont(new java.awt.Font("Dialog", 0, 10)); // NOI18N
|
||||
jPanel1.setLayout(new java.awt.BorderLayout());
|
||||
|
||||
jPanel2.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.LOWERED));
|
||||
jPanel2.setToolTipText("maximum history time in minutes");
|
||||
jPanel2.setLayout(new java.awt.GridBagLayout());
|
||||
|
||||
slGraphTime.setFont(new java.awt.Font("Dialog", 0, 10));
|
||||
slGraphTime.setMaximum(180);
|
||||
slGraphTime.setValue(180);
|
||||
slGraphTime.addChangeListener(new javax.swing.event.ChangeListener()
|
||||
{
|
||||
public void stateChanged(javax.swing.event.ChangeEvent evt)
|
||||
{
|
||||
slGraphTimeStateChanged();
|
||||
}
|
||||
});
|
||||
gridBagConstraints = new java.awt.GridBagConstraints();
|
||||
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
|
||||
gridBagConstraints.weightx = 1.0;
|
||||
jPanel2.add(slGraphTime, gridBagConstraints);
|
||||
|
||||
lblHistTime.setFont(new java.awt.Font("Dialog", 0, 10));
|
||||
lblHistTime.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
|
||||
lblHistTime.setText(String.valueOf(slGraphTime.getValue()) + " min");
|
||||
lblHistTime.setBorder(javax.swing.BorderFactory.createEmptyBorder(1, 3, 1, 3));
|
||||
lblHistTime.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
|
||||
gridBagConstraints = new java.awt.GridBagConstraints();
|
||||
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
|
||||
jPanel2.add(lblHistTime, gridBagConstraints);
|
||||
|
||||
jPanel1.add(jPanel2, java.awt.BorderLayout.CENTER);
|
||||
|
||||
btnClearHist.setFont(new java.awt.Font("Dialog", 0, 10));
|
||||
btnClearHist.setMnemonic('C');
|
||||
btnClearHist.setText("Clear History");
|
||||
btnClearHist.setToolTipText("Clear history buffer for graphing");
|
||||
btnClearHist.addActionListener(new java.awt.event.ActionListener()
|
||||
{
|
||||
public void actionPerformed(java.awt.event.ActionEvent evt)
|
||||
{
|
||||
btnClearHistActionPerformed();
|
||||
}
|
||||
});
|
||||
jPanel1.add(btnClearHist, java.awt.BorderLayout.EAST);
|
||||
|
||||
panGraph.add(jPanel1, java.awt.BorderLayout.SOUTH);
|
||||
|
||||
jSplitPane1.setLeftComponent(panGraph);
|
||||
|
||||
panTable.setFont(new java.awt.Font("Dialog", 0, 10));
|
||||
panTable.setLayout(new java.awt.BorderLayout());
|
||||
|
||||
tblPids.setAutoResizeMode(5);
|
||||
tblPids.setFont(new java.awt.Font("Dialog", 0, 10));
|
||||
tblPids.setName("DataTable"); // NOI18N
|
||||
tblPids.setShowGrid(true);
|
||||
tblPids.setToolTipText("Select items to start graphing");
|
||||
jScrollPane1.setViewportView(tblPids);
|
||||
|
||||
panTable.add(jScrollPane1, java.awt.BorderLayout.CENTER);
|
||||
|
||||
jSplitPane1.setBottomComponent(panTable);
|
||||
|
||||
add(jSplitPane1, java.awt.BorderLayout.CENTER);
|
||||
}// </editor-fold>//GEN-END:initComponents
|
||||
|
||||
private void btnClearHistActionPerformed()//GEN-FIRST:event_btnClearHistActionPerformed
|
||||
{//GEN-HEADEREND:event_btnClearHistActionPerformed
|
||||
TimeSeries ts;
|
||||
Iterator<TimeSeries> it = selPids.values().iterator();
|
||||
while (it.hasNext())
|
||||
{
|
||||
ts = it.next();
|
||||
ts.clear();
|
||||
}
|
||||
}//GEN-LAST:event_btnClearHistActionPerformed
|
||||
|
||||
private void slGraphTimeStateChanged()//GEN-FIRST:event_slGraphTimeStateChanged
|
||||
{//GEN-HEADEREND:event_slGraphTimeStateChanged
|
||||
TimeSeries ts;
|
||||
lblHistTime.setText(String.valueOf(slGraphTime.getValue()) + " min");
|
||||
if (!slGraphTime.getValueIsAdjusting())
|
||||
{
|
||||
Iterator<TimeSeries> it = selPids.values().iterator();
|
||||
while (it.hasNext())
|
||||
{
|
||||
ts = it.next();
|
||||
ts.setMaximumItemAge(slGraphTime.getValue() * 60);
|
||||
}
|
||||
}
|
||||
}//GEN-LAST:event_slGraphTimeStateChanged
|
||||
|
||||
/**
|
||||
* get readable unique String from PV
|
||||
*/
|
||||
private Object getPvId(ProcessVar pv)
|
||||
{
|
||||
return (pv.getKeyValue());
|
||||
}
|
||||
|
||||
|
||||
private javax.swing.JLabel lblHistTime;
|
||||
private com.fr3ts0n.ecu.gui.application.ObdDataPlotter plotter;
|
||||
private javax.swing.JSlider slGraphTime;
|
||||
private com.fr3ts0n.pvs.gui.PvTable tblPids;
|
||||
// End of variables declaration//GEN-END:variables
|
||||
|
||||
/**
|
||||
* Holds value of property pidPvs.
|
||||
*/
|
||||
private PvList pidPvs;
|
||||
|
||||
/**
|
||||
* Getter for property pidPvs.
|
||||
*
|
||||
* @return Value of property pidPvs.
|
||||
*/
|
||||
public PvList getPidPvs()
|
||||
{
|
||||
return this.pidPvs;
|
||||
}
|
||||
|
||||
/**
|
||||
* Setter for property pidPvs.
|
||||
*
|
||||
* @param pidPvs New value of property pidPvs.
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
public void setPidPvs(PvList pidPvs)
|
||||
{
|
||||
TimeSeries ts;
|
||||
// if there is an o previous instance registered, unregister ...
|
||||
if (this.pidPvs != null)
|
||||
this.pidPvs.removePvChangeListener(this);
|
||||
this.pidPvs = pidPvs;
|
||||
tblPids.setProcessVar(pidPvs);
|
||||
tblPids.setDefaultRenderer(Object.class, new ObdItemTableRenderer());
|
||||
pidPvs.addPvChangeListener(this);
|
||||
|
||||
// update all TimeSeries with PIDs from PV-List
|
||||
plotter.dataset.removeAllSeries();
|
||||
selPids.clear();
|
||||
Iterator<EcuDataPv> it = pidPvs.values().iterator();
|
||||
while (it.hasNext())
|
||||
{
|
||||
EcuDataPv pv = it.next();
|
||||
// create new data series
|
||||
ts = new TimeSeries(String.valueOf(pv.get(EcuDataPv.FID_DESCRIPT)));
|
||||
ts.setDescription(String.valueOf(pv.get(EcuDataPv.FID_DESCRIPT)));
|
||||
ts.setRangeDescription(String.valueOf(pv.get(EcuDataPv.FID_UNITS)));
|
||||
// set graph time of new element
|
||||
ts.setMaximumItemAge(slGraphTime.getValue() * 60);
|
||||
// and add to selectable PID list
|
||||
selPids.put(getPvId(pv), ts);
|
||||
}
|
||||
updateColumnWidths();
|
||||
}
|
||||
|
||||
/**
|
||||
* set a new graph title
|
||||
*
|
||||
* @param newTitle new graph title
|
||||
*/
|
||||
public void setTitle(String newTitle)
|
||||
{
|
||||
plotter.setTitle(newTitle);
|
||||
}
|
||||
|
||||
/**
|
||||
* handle changes in the process var(s)
|
||||
*
|
||||
* @param event Process var event to be handled
|
||||
*/
|
||||
public void pvChanged(PvChangeEvent event)
|
||||
{
|
||||
TimeSeries ts;
|
||||
EcuDataPv pv;
|
||||
|
||||
switch (event.getType())
|
||||
{
|
||||
case PvChangeEvent.PV_MODIFIED:
|
||||
pv = (EcuDataPv) event.getValue();
|
||||
if ((ts = selPids.get(getPvId(pv))) != null)
|
||||
try
|
||||
{
|
||||
ts.addOrUpdate(new Second(), ((Number)pv.get(EcuDataPv.FID_VALUE)).floatValue());
|
||||
} catch (Exception e)
|
||||
{
|
||||
ProcessVar.log.log(Level.SEVERE, "", e);
|
||||
}
|
||||
break;
|
||||
|
||||
case PvChangeEvent.PV_DELETED:
|
||||
// remove from selectable PIDs
|
||||
pv = (EcuDataPv) event.getValue();
|
||||
selPids.remove(pv);
|
||||
break;
|
||||
|
||||
case PvChangeEvent.PV_CLEARED:
|
||||
// remove all from selectable PIDs
|
||||
selPids.clear();
|
||||
break;
|
||||
|
||||
case PvChangeEvent.PV_ADDED:
|
||||
if ((event.getValue() instanceof EcuDataPv))
|
||||
{
|
||||
pv = (EcuDataPv) event.getValue();
|
||||
addDataSeries(pv);
|
||||
} else if ((event.getValue() instanceof Object[]))
|
||||
{
|
||||
for (Object currPv : (Object[]) event.getValue())
|
||||
{
|
||||
addDataSeries((ProcessVar) currPv);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
// update table column widths
|
||||
updateColumnWidths();
|
||||
}
|
||||
|
||||
|
||||
private void addDataSeries(ProcessVar pv)
|
||||
{
|
||||
TimeSeries ts;
|
||||
// create new data series
|
||||
ts = new TimeSeries(String.valueOf(pv.get(EcuDataPv.FID_DESCRIPT)),
|
||||
null,
|
||||
String.valueOf(pv.get(EcuDataPv.FID_UNITS)));
|
||||
// set graph time of new element
|
||||
ts.setMaximumItemAge(slGraphTime.getValue() * 60);
|
||||
// and add to selectable PID list
|
||||
selPids.put(getPvId(pv), ts);
|
||||
}
|
||||
|
||||
/**
|
||||
* update the column widths of data table
|
||||
*/
|
||||
private void updateColumnWidths()
|
||||
{
|
||||
if (tblPids.getRowCount() >= 1)
|
||||
{
|
||||
/** set column sizes here, since this only works with inserted data */
|
||||
tblPids.getColumn(EcuDataPv.FIELDS[EcuDataPv.FID_PID]).setPreferredWidth(40);
|
||||
tblPids.getColumn(EcuDataPv.FIELDS[EcuDataPv.FID_OFS]).setPreferredWidth(40);
|
||||
tblPids.getColumn(EcuDataPv.FIELDS[EcuDataPv.FID_DESCRIPT]).setPreferredWidth(350);
|
||||
tblPids.getColumn(EcuDataPv.FIELDS[EcuDataPv.FID_VALUE]).setPreferredWidth(150);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* update specified column of all available table rows
|
||||
*
|
||||
* @param columnId - column id to be updated
|
||||
*/
|
||||
public void updateAllTableRows(int columnId)
|
||||
{
|
||||
((ObdItemTableModel) tblPids.getPvModel()).updateAllRows();
|
||||
}
|
||||
|
||||
/**
|
||||
* handle change in table selection
|
||||
* activate / deactivate graphing of selected data items
|
||||
*/
|
||||
public void valueChanged(ListSelectionEvent e)
|
||||
{
|
||||
TimeSeries ts;
|
||||
int[] selIDs;
|
||||
|
||||
// clean up dataset
|
||||
plotter.removeAllSeries();
|
||||
// get selected items as list of data
|
||||
// rather than array of ID's'
|
||||
selIDs = tblPids.getSelectedRows();
|
||||
for (int i = 0; i < selIDs.length; i++)
|
||||
{
|
||||
/* since table model changed, it returns the complete object for any field */
|
||||
EcuDataPv currPid = (EcuDataPv) tblPids.getModel().getValueAt(selIDs[i], EcuDataPv.FID_PID);
|
||||
ts = selPids.get(currPid.get(EcuDataPv.FID_PID));
|
||||
// if Series found
|
||||
if (ts != null)
|
||||
{
|
||||
// add new series to plotter ..
|
||||
plotter.addSeries(ts);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString()
|
||||
{
|
||||
return (this.getName());
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,224 @@
|
||||
/*
|
||||
* (C) Copyright 2015 by fr3ts0n <erwin.scheuch-heilig@gmx.at>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of
|
||||
* the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
||||
* MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
package com.fr3ts0n.ecu.gui.application;
|
||||
|
||||
import org.jfree.chart.ChartFactory;
|
||||
import org.jfree.chart.ChartPanel;
|
||||
import org.jfree.chart.JFreeChart;
|
||||
import org.jfree.chart.axis.AxisLocation;
|
||||
import org.jfree.chart.axis.DateAxis;
|
||||
import org.jfree.chart.axis.NumberAxis;
|
||||
import org.jfree.chart.labels.StandardXYToolTipGenerator;
|
||||
import org.jfree.chart.labels.XYToolTipGenerator;
|
||||
import org.jfree.chart.plot.DefaultDrawingSupplier;
|
||||
import org.jfree.chart.plot.XYPlot;
|
||||
import org.jfree.chart.renderer.xy.XYItemRenderer;
|
||||
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
|
||||
import org.jfree.data.time.TimeSeries;
|
||||
import org.jfree.data.time.TimeSeriesCollection;
|
||||
import org.jfree.data.xy.XYDataset;
|
||||
|
||||
import java.awt.BorderLayout;
|
||||
import java.awt.Color;
|
||||
import java.awt.Font;
|
||||
import java.awt.Paint;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Iterator;
|
||||
|
||||
import javax.swing.JPanel;
|
||||
|
||||
/**
|
||||
* OBD data graphing panel
|
||||
*/
|
||||
public class ObdDataPlotter extends JPanel
|
||||
{
|
||||
private static final long serialVersionUID = 9085602185360330792L;
|
||||
/* Font for all legent items */
|
||||
private static final Font legendFont = new Font("Dialog", 0, 7);
|
||||
/** generator for all tool tips */
|
||||
private static final XYToolTipGenerator toolTipGen =
|
||||
StandardXYToolTipGenerator.getTimeSeriesInstance();
|
||||
|
||||
/** switch to use range series per series */
|
||||
private static final boolean oneRangePerSeries = true;
|
||||
|
||||
|
||||
private int raIndex = 0;
|
||||
final TimeSeriesCollection dataset = new TimeSeriesCollection();
|
||||
|
||||
private JFreeChart chart;
|
||||
|
||||
/**
|
||||
* create the graphing panel
|
||||
*/
|
||||
public ObdDataPlotter()
|
||||
{
|
||||
setLayout(new BorderLayout());
|
||||
chart = createChart(dataset);
|
||||
ChartPanel chartPanel = new ChartPanel(chart);
|
||||
chartPanel.setMouseZoomable(true, false);
|
||||
add(chartPanel, BorderLayout.CENTER);
|
||||
}
|
||||
|
||||
/**
|
||||
* set a new graph title
|
||||
*
|
||||
* @param newTitle the frame title.
|
||||
*/
|
||||
public void setTitle(String newTitle)
|
||||
{
|
||||
chart.setTitle(newTitle);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a chart.
|
||||
*
|
||||
* @param dataset a dataset.
|
||||
* @return A chart.
|
||||
*/
|
||||
private JFreeChart createChart(XYDataset dataset)
|
||||
{
|
||||
|
||||
chart = ChartFactory.createTimeSeriesChart(
|
||||
"OBD Data Graph", // title
|
||||
"Time", // x-axis label
|
||||
"Value", // y-axis label
|
||||
dataset, // data
|
||||
true, // create legend?
|
||||
true, // generate tooltips?
|
||||
false // generate URLs?
|
||||
);
|
||||
|
||||
chart.setBackgroundPaint(Color.white);
|
||||
|
||||
XYPlot plot = (XYPlot) chart.getPlot();
|
||||
plot.setBackgroundPaint(Color.lightGray);
|
||||
plot.setDomainGridlinePaint(Color.white);
|
||||
plot.setRangeGridlinePaint(Color.white);
|
||||
plot.setDomainCrosshairVisible(true);
|
||||
plot.setRangeCrosshairVisible(true);
|
||||
plot.getDomainAxis().setTickLabelFont(legendFont);
|
||||
|
||||
DateAxis axis = (DateAxis) plot.getDomainAxis();
|
||||
axis.setDateFormatOverride(new SimpleDateFormat("HH:mm:ss"));
|
||||
chart.getLegend().setItemFont(legendFont);
|
||||
|
||||
return chart;
|
||||
}
|
||||
|
||||
/**
|
||||
* remove all data series from graph object
|
||||
*/
|
||||
public synchronized void removeAllSeries()
|
||||
{
|
||||
dataset.removeAllSeries();
|
||||
if (oneRangePerSeries)
|
||||
{
|
||||
XYPlot plot = (XYPlot) chart.getPlot();
|
||||
for (; raIndex > 0; raIndex--)
|
||||
{
|
||||
plot.setDataset(raIndex, null);
|
||||
plot.setRenderer(raIndex, null);
|
||||
plot.setRangeAxis(raIndex, null);
|
||||
}
|
||||
plot.setDataset(dataset);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* add a new series to the graph
|
||||
*
|
||||
* @param series The new series to be added
|
||||
*/
|
||||
public synchronized void addSeries(TimeSeries series)
|
||||
{
|
||||
|
||||
if (oneRangePerSeries)
|
||||
{
|
||||
// get paint for current axis/range/...
|
||||
Paint currPaint =
|
||||
DefaultDrawingSupplier.DEFAULT_PAINT_SEQUENCE[
|
||||
raIndex % DefaultDrawingSupplier.DEFAULT_PAINT_SEQUENCE.length];
|
||||
|
||||
XYPlot plot = (XYPlot) chart.getPlot();
|
||||
// set dataset
|
||||
plot.setDataset(raIndex, new TimeSeriesCollection(series));
|
||||
// ** set axis
|
||||
NumberAxis axis = new NumberAxis();
|
||||
axis.setTickLabelFont(legendFont);
|
||||
axis.setAxisLinePaint(currPaint);
|
||||
axis.setTickLabelPaint(currPaint);
|
||||
axis.setTickMarkPaint(currPaint);
|
||||
// ** set axis in plot
|
||||
plot.setRangeAxis(raIndex, axis);
|
||||
plot.setRangeAxisLocation(raIndex, raIndex % 2 == 0 ? AxisLocation.TOP_OR_LEFT : AxisLocation.BOTTOM_OR_RIGHT);
|
||||
plot.mapDatasetToRangeAxis(raIndex, raIndex);
|
||||
// ** create renderer
|
||||
XYItemRenderer renderer = new XYLineAndShapeRenderer(true, false);
|
||||
renderer.setBaseToolTipGenerator(toolTipGen);
|
||||
renderer.setSeriesPaint(0, currPaint);
|
||||
// ** set renderer in plot
|
||||
plot.setRenderer(raIndex, renderer);
|
||||
|
||||
raIndex++;
|
||||
}
|
||||
dataset.addSeries(series);
|
||||
}
|
||||
|
||||
/**
|
||||
* Holds value of property graphTime.
|
||||
*/
|
||||
private int graphTime;
|
||||
|
||||
/**
|
||||
* Getter for property graphTime.
|
||||
*
|
||||
* @return Value of property graphTime.
|
||||
*/
|
||||
public int getGraphTime()
|
||||
{
|
||||
return this.graphTime;
|
||||
}
|
||||
|
||||
/**
|
||||
* Setter for property graphTime.
|
||||
*
|
||||
* @param graphTime New value of property graphTime.
|
||||
*/
|
||||
@SuppressWarnings("rawtypes")
|
||||
public synchronized void setGraphTime(int graphTime)
|
||||
{
|
||||
TimeSeries currSer;
|
||||
TimeSeriesCollection currDs;
|
||||
XYPlot currPlot = (XYPlot) chart.getPlot();
|
||||
this.graphTime = graphTime;
|
||||
// lop through all datasets
|
||||
for (int i = currPlot.getDatasetCount(); i >= 0; --i)
|
||||
{
|
||||
currDs = (TimeSeriesCollection) currPlot.getDataset(i);
|
||||
// Update all series within dataset
|
||||
Iterator it = currDs.getSeries().iterator();
|
||||
while (it.hasNext())
|
||||
{
|
||||
currSer = (TimeSeries) it.next();
|
||||
currSer.setMaximumItemAge(graphTime);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,228 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
|
||||
<Form version="1.2" maxVersion="1.2" type="org.netbeans.modules.form.forminfo.JPanelFormInfo">
|
||||
<AuxValues>
|
||||
<AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="0"/>
|
||||
<AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
|
||||
<AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/>
|
||||
<AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/>
|
||||
<AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="false"/>
|
||||
<AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
|
||||
<AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
|
||||
<AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/>
|
||||
<AuxValue name="designerSize" type="java.awt.Dimension" value="-84,-19,0,5,115,114,0,18,106,97,118,97,46,97,119,116,46,68,105,109,101,110,115,105,111,110,65,-114,-39,-41,-84,95,68,20,2,0,2,73,0,6,104,101,105,103,104,116,73,0,5,119,105,100,116,104,120,112,0,0,1,44,0,0,1,-81"/>
|
||||
</AuxValues>
|
||||
|
||||
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout"/>
|
||||
<SubComponents>
|
||||
<Container class="javax.swing.JPanel" name="panHeader">
|
||||
<Properties>
|
||||
<Property name="background" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor">
|
||||
<Color blue="ff" green="ff" red="ff" type="rgb"/>
|
||||
</Property>
|
||||
</Properties>
|
||||
<Constraints>
|
||||
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout" value="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout$BorderConstraintsDescription">
|
||||
<BorderConstraints direction="North"/>
|
||||
</Constraint>
|
||||
</Constraints>
|
||||
|
||||
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout">
|
||||
<Property name="horizontalGap" type="int" value="10"/>
|
||||
<Property name="verticalGap" type="int" value="10"/>
|
||||
</Layout>
|
||||
<SubComponents>
|
||||
<Component class="javax.swing.JLabel" name="lblCodeType">
|
||||
<Properties>
|
||||
<Property name="horizontalAlignment" type="int" value="0"/>
|
||||
<Property name="text" type="java.lang.String" value="Trouble codes"/>
|
||||
</Properties>
|
||||
<Constraints>
|
||||
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout" value="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout$BorderConstraintsDescription">
|
||||
<BorderConstraints direction="Center"/>
|
||||
</Constraint>
|
||||
</Constraints>
|
||||
</Component>
|
||||
<Component class="javax.swing.JLabel" name="lblMil">
|
||||
<Properties>
|
||||
<Property name="horizontalAlignment" type="int" value="0"/>
|
||||
<Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.RADConnectionPropertyEditor">
|
||||
<Connection code="icoMilOff" type="code"/>
|
||||
</Property>
|
||||
<Property name="horizontalTextPosition" type="int" value="4"/>
|
||||
</Properties>
|
||||
<Constraints>
|
||||
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout" value="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout$BorderConstraintsDescription">
|
||||
<BorderConstraints direction="West"/>
|
||||
</Constraint>
|
||||
</Constraints>
|
||||
</Component>
|
||||
<Component class="javax.swing.JLabel" name="lblMil1">
|
||||
<Properties>
|
||||
<Property name="horizontalAlignment" type="int" value="0"/>
|
||||
<Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.RADConnectionPropertyEditor">
|
||||
<Connection code="icoMilOff" type="code"/>
|
||||
</Property>
|
||||
<Property name="horizontalTextPosition" type="int" value="2"/>
|
||||
</Properties>
|
||||
<Constraints>
|
||||
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout" value="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout$BorderConstraintsDescription">
|
||||
<BorderConstraints direction="East"/>
|
||||
</Constraint>
|
||||
</Constraints>
|
||||
</Component>
|
||||
<Component class="javax.swing.JLabel" name="lblNumCodes">
|
||||
<Properties>
|
||||
<Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
|
||||
<Font name="Dialog" size="10" style="0"/>
|
||||
</Property>
|
||||
<Property name="horizontalAlignment" type="int" value="0"/>
|
||||
<Property name="text" type="java.lang.String" value="0 Trouble codes set"/>
|
||||
</Properties>
|
||||
<Constraints>
|
||||
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout" value="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout$BorderConstraintsDescription">
|
||||
<BorderConstraints direction="South"/>
|
||||
</Constraint>
|
||||
</Constraints>
|
||||
</Component>
|
||||
</SubComponents>
|
||||
</Container>
|
||||
<Container class="javax.swing.JPanel" name="panFooter">
|
||||
<Constraints>
|
||||
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout" value="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout$BorderConstraintsDescription">
|
||||
<BorderConstraints direction="South"/>
|
||||
</Constraint>
|
||||
</Constraints>
|
||||
|
||||
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout"/>
|
||||
<SubComponents>
|
||||
<Component class="javax.swing.JButton" name="btnReadCodes">
|
||||
<Properties>
|
||||
<Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
|
||||
<Font name="Dialog" size="10" style="0"/>
|
||||
</Property>
|
||||
<Property name="mnemonic" type="int" value="82"/>
|
||||
<Property name="text" type="java.lang.String" value="Read Codes"/>
|
||||
<Property name="toolTipText" type="java.lang.String" value="Read all truble codes (Mode $3)"/>
|
||||
<Property name="actionCommand" type="java.lang.String" value="ReadCodes"/>
|
||||
</Properties>
|
||||
<Events>
|
||||
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="btnReadCodesActionPerformed"/>
|
||||
</Events>
|
||||
<AuxValues>
|
||||
<AuxValue name="JavaCodeGenerator_VariableModifier" type="java.lang.Integer" value="4"/>
|
||||
</AuxValues>
|
||||
<Constraints>
|
||||
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
|
||||
<GridBagConstraints gridX="-1" gridY="-1" gridWidth="1" gridHeight="1" fill="1" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="1.0" weightY="0.0"/>
|
||||
</Constraint>
|
||||
</Constraints>
|
||||
</Component>
|
||||
<Component class="javax.swing.JButton" name="btnReadPending">
|
||||
<Properties>
|
||||
<Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
|
||||
<Font name="Dialog" size="10" style="0"/>
|
||||
</Property>
|
||||
<Property name="mnemonic" type="int" value="80"/>
|
||||
<Property name="text" type="java.lang.String" value="Read Pending"/>
|
||||
<Property name="toolTipText" type="java.lang.String" value="Read pending fault codes (Mode $7)"/>
|
||||
<Property name="actionCommand" type="java.lang.String" value="ReadPending"/>
|
||||
</Properties>
|
||||
<Events>
|
||||
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="btnReadPendingActionPerformed"/>
|
||||
</Events>
|
||||
<AuxValues>
|
||||
<AuxValue name="JavaCodeGenerator_VariableModifier" type="java.lang.Integer" value="4"/>
|
||||
</AuxValues>
|
||||
<Constraints>
|
||||
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
|
||||
<GridBagConstraints gridX="-1" gridY="-1" gridWidth="1" gridHeight="1" fill="1" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="1.0" weightY="0.0"/>
|
||||
</Constraint>
|
||||
</Constraints>
|
||||
</Component>
|
||||
<Component class="javax.swing.JButton" name="btnReadPermanent">
|
||||
<Properties>
|
||||
<Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
|
||||
<Font name="Dialog" size="10" style="0"/>
|
||||
</Property>
|
||||
<Property name="mnemonic" type="int" value="101"/>
|
||||
<Property name="text" type="java.lang.String" value="Read Permanent"/>
|
||||
<Property name="toolTipText" type="java.lang.String" value="Read permanent Trouble codes (Mode $A)"/>
|
||||
<Property name="actionCommand" type="java.lang.String" value="ReadPermanent"/>
|
||||
</Properties>
|
||||
<Events>
|
||||
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="btnReadPermanentActionPerformed"/>
|
||||
</Events>
|
||||
<AuxValues>
|
||||
<AuxValue name="JavaCodeGenerator_VariableModifier" type="java.lang.Integer" value="4"/>
|
||||
</AuxValues>
|
||||
<Constraints>
|
||||
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
|
||||
<GridBagConstraints gridX="-1" gridY="-1" gridWidth="1" gridHeight="1" fill="1" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="1.0" weightY="0.0"/>
|
||||
</Constraint>
|
||||
</Constraints>
|
||||
</Component>
|
||||
<Component class="javax.swing.JButton" name="btnClearCodes">
|
||||
<Properties>
|
||||
<Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
|
||||
<Font name="Dialog" size="10" style="0"/>
|
||||
</Property>
|
||||
<Property name="mnemonic" type="int" value="67"/>
|
||||
<Property name="text" type="java.lang.String" value="Clear Codes"/>
|
||||
<Property name="toolTipText" type="java.lang.String" value="Clear troble codes (Mode $4)"/>
|
||||
<Property name="actionCommand" type="java.lang.String" value="ClearCodes"/>
|
||||
</Properties>
|
||||
<Events>
|
||||
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="btnClearCodesActionPerformed"/>
|
||||
</Events>
|
||||
<AuxValues>
|
||||
<AuxValue name="JavaCodeGenerator_VariableModifier" type="java.lang.Integer" value="4"/>
|
||||
</AuxValues>
|
||||
<Constraints>
|
||||
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
|
||||
<GridBagConstraints gridX="-1" gridY="-1" gridWidth="1" gridHeight="1" fill="1" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="1.0" weightY="0.0"/>
|
||||
</Constraint>
|
||||
</Constraints>
|
||||
</Component>
|
||||
</SubComponents>
|
||||
</Container>
|
||||
<Container class="javax.swing.JPanel" name="panCenter">
|
||||
<Constraints>
|
||||
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout" value="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout$BorderConstraintsDescription">
|
||||
<BorderConstraints direction="Center"/>
|
||||
</Constraint>
|
||||
</Constraints>
|
||||
|
||||
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout"/>
|
||||
<SubComponents>
|
||||
<Container class="javax.swing.JScrollPane" name="jScrollPane1">
|
||||
<AuxValues>
|
||||
<AuxValue name="autoScrollPane" type="java.lang.Boolean" value="true"/>
|
||||
</AuxValues>
|
||||
<Constraints>
|
||||
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout" value="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout$BorderConstraintsDescription">
|
||||
<BorderConstraints direction="Center"/>
|
||||
</Constraint>
|
||||
</Constraints>
|
||||
|
||||
<Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/>
|
||||
<SubComponents>
|
||||
<Component class="com.fr3ts0n.pvs.gui.PvTable" name="tblFCodes">
|
||||
<Properties>
|
||||
<Property name="autoResizeMode" type="int" value="5"/>
|
||||
<Property name="name" type="java.lang.String" value="CodeTable" noResource="true"/>
|
||||
</Properties>
|
||||
</Component>
|
||||
</SubComponents>
|
||||
</Container>
|
||||
<Component class="com.fr3ts0n.ecu.VagCodeStatPanel" name="panStatus">
|
||||
<Constraints>
|
||||
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout" value="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout$BorderConstraintsDescription">
|
||||
<BorderConstraints direction="South"/>
|
||||
</Constraint>
|
||||
</Constraints>
|
||||
</Component>
|
||||
</SubComponents>
|
||||
</Container>
|
||||
</SubComponents>
|
||||
</Form>
|
||||
@@ -0,0 +1,416 @@
|
||||
/*
|
||||
* (C) Copyright 2015 by fr3ts0n <erwin.scheuch-heilig@gmx.at>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of
|
||||
* the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
||||
* MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
package com.fr3ts0n.ecu.gui.application;
|
||||
|
||||
import com.fr3ts0n.ecu.EcuCodeItem;
|
||||
import com.fr3ts0n.ecu.ObdCodeItem;
|
||||
import com.fr3ts0n.pvs.PvChangeEvent;
|
||||
import com.fr3ts0n.pvs.PvChangeListener;
|
||||
import com.fr3ts0n.pvs.PvList;
|
||||
|
||||
import java.awt.Color;
|
||||
import java.awt.event.ActionListener;
|
||||
import java.beans.PropertyChangeListener;
|
||||
|
||||
import javax.swing.ImageIcon;
|
||||
import javax.swing.JOptionPane;
|
||||
import javax.swing.JPanel;
|
||||
import javax.swing.ListSelectionModel;
|
||||
import javax.swing.event.ListSelectionEvent;
|
||||
import javax.swing.event.ListSelectionListener;
|
||||
|
||||
|
||||
/**
|
||||
* GUI Panel to control reading/clearing OBD failure codes
|
||||
*
|
||||
* @author erwin
|
||||
*/
|
||||
public class ObdDtcPanel extends JPanel
|
||||
implements PropertyChangeListener, PvChangeListener
|
||||
{
|
||||
/** serial version UID * */
|
||||
private static final long serialVersionUID = -1285434908785275242L;
|
||||
/** icons */
|
||||
private final ImageIcon icoMilOff = new javax.swing.ImageIcon(getClass().getResource("/com/fr3ts0n/ecu/gui/res/mil_off.png"));
|
||||
private final ImageIcon icoMilOn = new javax.swing.ImageIcon(getClass().getResource("/com/fr3ts0n/ecu/gui/res/mil_on.png"));
|
||||
|
||||
/** milStatus */
|
||||
private boolean milStatus = false;
|
||||
|
||||
/** Creates new form ObdDfcPanel */
|
||||
public ObdDtcPanel()
|
||||
{
|
||||
initComponents();
|
||||
panStatus.setVisible(false);
|
||||
tblFCodes.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
|
||||
tblFCodes.getSelectionModel().addListSelectionListener(new ListSelectionListener()
|
||||
{
|
||||
public void valueChanged(ListSelectionEvent e)
|
||||
{
|
||||
Integer stat = null;
|
||||
int selIdx = tblFCodes.getSelectedRow();
|
||||
if (selIdx >= 0)
|
||||
stat = (Integer) tblFCodes.getModel().getValueAt(selIdx, EcuCodeItem.FID_STATUS);
|
||||
panStatus.setVisible(stat != null);
|
||||
if (stat != null)
|
||||
{
|
||||
panStatus.setStatusFlags(stat.intValue());
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* This method is called from within the constructor to
|
||||
* initialize the form.
|
||||
* WARNING: Do NOT modify this code. The content of this method is
|
||||
* always regenerated by the Form Editor.
|
||||
*/
|
||||
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
|
||||
private void initComponents()
|
||||
{
|
||||
java.awt.GridBagConstraints gridBagConstraints;
|
||||
|
||||
JPanel panHeader = new JPanel();
|
||||
lblCodeType = new javax.swing.JLabel();
|
||||
lblMil = new javax.swing.JLabel();
|
||||
lblMil1 = new javax.swing.JLabel();
|
||||
lblNumCodes = new javax.swing.JLabel();
|
||||
JPanel panFooter = new JPanel();
|
||||
btnReadCodes = new javax.swing.JButton();
|
||||
btnReadPending = new javax.swing.JButton();
|
||||
btnReadPermanent = new javax.swing.JButton();
|
||||
btnClearCodes = new javax.swing.JButton();
|
||||
JPanel panCenter = new JPanel();
|
||||
javax.swing.JScrollPane jScrollPane1 = new javax.swing.JScrollPane();
|
||||
tblFCodes = new com.fr3ts0n.pvs.gui.PvTable();
|
||||
panStatus = new com.fr3ts0n.ecu.gui.application.VagCodeStatPanel();
|
||||
|
||||
setLayout(new java.awt.BorderLayout());
|
||||
|
||||
panHeader.setBackground(new java.awt.Color(255, 255, 255));
|
||||
panHeader.setLayout(new java.awt.BorderLayout(10, 10));
|
||||
|
||||
lblCodeType.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
|
||||
lblCodeType.setText("Trouble codes");
|
||||
panHeader.add(lblCodeType, java.awt.BorderLayout.CENTER);
|
||||
|
||||
lblMil.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
|
||||
lblMil.setIcon(icoMilOff);
|
||||
lblMil.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT);
|
||||
panHeader.add(lblMil, java.awt.BorderLayout.WEST);
|
||||
|
||||
lblMil1.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
|
||||
lblMil1.setIcon(icoMilOff);
|
||||
lblMil1.setHorizontalTextPosition(javax.swing.SwingConstants.LEFT);
|
||||
panHeader.add(lblMil1, java.awt.BorderLayout.EAST);
|
||||
|
||||
lblNumCodes.setFont(new java.awt.Font("Dialog", 0, 10));
|
||||
lblNumCodes.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
|
||||
lblNumCodes.setText("0 Trouble codes set");
|
||||
panHeader.add(lblNumCodes, java.awt.BorderLayout.SOUTH);
|
||||
|
||||
add(panHeader, java.awt.BorderLayout.NORTH);
|
||||
|
||||
panFooter.setLayout(new java.awt.GridBagLayout());
|
||||
|
||||
btnReadCodes.setFont(new java.awt.Font("Dialog", 0, 10));
|
||||
btnReadCodes.setMnemonic('R');
|
||||
btnReadCodes.setText("Read Codes");
|
||||
btnReadCodes.setToolTipText("Read all truble codes (Mode $3)");
|
||||
btnReadCodes.setActionCommand("ReadCodes");
|
||||
btnReadCodes.addActionListener(new java.awt.event.ActionListener()
|
||||
{
|
||||
public void actionPerformed(java.awt.event.ActionEvent evt)
|
||||
{
|
||||
btnReadCodesActionPerformed();
|
||||
}
|
||||
});
|
||||
gridBagConstraints = new java.awt.GridBagConstraints();
|
||||
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
|
||||
gridBagConstraints.weightx = 1.0;
|
||||
panFooter.add(btnReadCodes, gridBagConstraints);
|
||||
|
||||
btnReadPending.setFont(new java.awt.Font("Dialog", 0, 10));
|
||||
btnReadPending.setMnemonic('P');
|
||||
btnReadPending.setText("Read Pending");
|
||||
btnReadPending.setToolTipText("Read pending fault codes (Mode $7)");
|
||||
btnReadPending.setActionCommand("ReadPending");
|
||||
btnReadPending.addActionListener(new java.awt.event.ActionListener()
|
||||
{
|
||||
public void actionPerformed(java.awt.event.ActionEvent evt)
|
||||
{
|
||||
btnReadPendingActionPerformed();
|
||||
}
|
||||
});
|
||||
gridBagConstraints = new java.awt.GridBagConstraints();
|
||||
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
|
||||
gridBagConstraints.weightx = 1.0;
|
||||
panFooter.add(btnReadPending, gridBagConstraints);
|
||||
|
||||
btnReadPermanent.setFont(new java.awt.Font("Dialog", 0, 10));
|
||||
btnReadPermanent.setMnemonic('e');
|
||||
btnReadPermanent.setText("Read Permanent");
|
||||
btnReadPermanent.setToolTipText("Read permanent Trouble codes (Mode $A)");
|
||||
btnReadPermanent.setActionCommand("ReadPermanent");
|
||||
btnReadPermanent.addActionListener(new java.awt.event.ActionListener()
|
||||
{
|
||||
public void actionPerformed(java.awt.event.ActionEvent evt)
|
||||
{
|
||||
btnReadPermanentActionPerformed();
|
||||
}
|
||||
});
|
||||
gridBagConstraints = new java.awt.GridBagConstraints();
|
||||
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
|
||||
gridBagConstraints.weightx = 1.0;
|
||||
panFooter.add(btnReadPermanent, gridBagConstraints);
|
||||
|
||||
btnClearCodes.setFont(new java.awt.Font("Dialog", 0, 10));
|
||||
btnClearCodes.setMnemonic('C');
|
||||
btnClearCodes.setText("Clear Codes");
|
||||
btnClearCodes.setToolTipText("Clear troble codes (Mode $4)");
|
||||
btnClearCodes.setActionCommand("ClearCodes");
|
||||
btnClearCodes.addActionListener(new java.awt.event.ActionListener()
|
||||
{
|
||||
public void actionPerformed(java.awt.event.ActionEvent evt)
|
||||
{
|
||||
btnClearCodesActionPerformed(evt);
|
||||
}
|
||||
});
|
||||
gridBagConstraints = new java.awt.GridBagConstraints();
|
||||
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
|
||||
gridBagConstraints.weightx = 1.0;
|
||||
panFooter.add(btnClearCodes, gridBagConstraints);
|
||||
|
||||
add(panFooter, java.awt.BorderLayout.SOUTH);
|
||||
|
||||
panCenter.setLayout(new java.awt.BorderLayout());
|
||||
|
||||
tblFCodes.setAutoResizeMode(5);
|
||||
tblFCodes.setName("CodeTable"); // NOI18N
|
||||
jScrollPane1.setViewportView(tblFCodes);
|
||||
|
||||
panCenter.add(jScrollPane1, java.awt.BorderLayout.CENTER);
|
||||
panCenter.add(panStatus, java.awt.BorderLayout.SOUTH);
|
||||
|
||||
add(panCenter, java.awt.BorderLayout.CENTER);
|
||||
}// </editor-fold>//GEN-END:initComponents
|
||||
|
||||
private void btnReadPendingActionPerformed()//GEN-FIRST:event_btnReadPendingActionPerformed
|
||||
{//GEN-HEADEREND:event_btnReadPendingActionPerformed
|
||||
lblCodeType.setText("Pending trouble codes");
|
||||
}//GEN-LAST:event_btnReadPendingActionPerformed
|
||||
|
||||
private void btnClearCodesActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_btnClearCodesActionPerformed
|
||||
{//GEN-HEADEREND:event_btnClearCodesActionPerformed
|
||||
if (JOptionPane.showConfirmDialog(this,
|
||||
"This will reset the MIL and clear all emission-related diagnostic\n"
|
||||
+ " information, including:\n\n"
|
||||
+ " - Diagnostic trouble codes\n"
|
||||
+ " - Freeze frame data\n"
|
||||
+ " - Oxygen sensor com.fr3ts0n.test data\n"
|
||||
+ " - Status of system monitoring tests\n"
|
||||
+ " - On-board monitoring tests results\n"
|
||||
+ " - Distance travelled while MIL activated\n"
|
||||
+ " - Number of warm-ups since DTCs cleared\n"
|
||||
+ " - Distance travelled since DTCs cleared\n"
|
||||
+ " - Engine run time while MIL activated\n"
|
||||
+ " - Time since DTCs cleared\n\n"
|
||||
+ "Other manufacturer-specific 'clearing/resetting' actions may occur.\n"
|
||||
+ "The loss of data may cause the vehicle to run poorly for a short \n"
|
||||
+ "period of time while the ECU recalibrates itself.",
|
||||
"Clear codes?",
|
||||
JOptionPane.YES_NO_OPTION,
|
||||
JOptionPane.WARNING_MESSAGE) != JOptionPane.YES_OPTION)
|
||||
evt.setSource(null);
|
||||
}//GEN-LAST:event_btnClearCodesActionPerformed
|
||||
|
||||
private void btnReadCodesActionPerformed()//GEN-FIRST:event_btnReadCodesActionPerformed
|
||||
{//GEN-HEADEREND:event_btnReadCodesActionPerformed
|
||||
lblCodeType.setText("Stored trouble codes");
|
||||
}//GEN-LAST:event_btnReadCodesActionPerformed
|
||||
|
||||
private void btnReadPermanentActionPerformed()
|
||||
{//GEN-FIRST:event_btnReadPermanentActionPerformed
|
||||
lblCodeType.setText("Permanent trouble codes");
|
||||
}//GEN-LAST:event_btnReadPermanentActionPerformed
|
||||
|
||||
|
||||
// Variables declaration - do not modify//GEN-BEGIN:variables
|
||||
private javax.swing.JButton btnClearCodes;
|
||||
private javax.swing.JButton btnReadCodes;
|
||||
javax.swing.JButton btnReadPending;
|
||||
javax.swing.JButton btnReadPermanent;
|
||||
private javax.swing.JLabel lblCodeType;
|
||||
private javax.swing.JLabel lblMil;
|
||||
private javax.swing.JLabel lblMil1;
|
||||
private javax.swing.JLabel lblNumCodes;
|
||||
private com.fr3ts0n.ecu.gui.application.VagCodeStatPanel panStatus;
|
||||
private com.fr3ts0n.pvs.gui.PvTable tblFCodes;
|
||||
// End of variables declaration//GEN-END:variables
|
||||
|
||||
public boolean getMilStatus()
|
||||
{
|
||||
return (milStatus);
|
||||
}
|
||||
|
||||
private void setMilStatus(boolean newStatus)
|
||||
{
|
||||
milStatus = newStatus;
|
||||
// set the MIL-status display
|
||||
String msg = milStatus ? "MIL is ON" : "MIL is OFF";
|
||||
ImageIcon icn = milStatus ? icoMilOn : icoMilOff;
|
||||
Color clr = milStatus ? Color.RED : Color.GREEN;
|
||||
lblMil.setIcon(icn);
|
||||
lblMil.setText(msg);
|
||||
lblMil.setToolTipText(msg);
|
||||
lblMil.setForeground(clr);
|
||||
lblMil1.setIcon(icn);
|
||||
lblMil1.setText(msg);
|
||||
lblMil1.setToolTipText(msg);
|
||||
lblMil1.setForeground(clr);
|
||||
}
|
||||
|
||||
/**
|
||||
* Holds value of property tcList.
|
||||
*/
|
||||
private PvList tcList;
|
||||
|
||||
/**
|
||||
* Holds value of property numCodes.
|
||||
*/
|
||||
private int numCodes;
|
||||
|
||||
/**
|
||||
* Getter for property pvList.
|
||||
*
|
||||
* @return Value of property pvList.
|
||||
*/
|
||||
public PvList getTcList()
|
||||
{
|
||||
return this.tcList;
|
||||
}
|
||||
|
||||
/**
|
||||
* Setter for trouble code list
|
||||
*
|
||||
* @param tcList New value of trouble code list.
|
||||
*/
|
||||
public void setTcList(PvList tcList)
|
||||
{
|
||||
this.tcList = tcList;
|
||||
// set the process var list of the table
|
||||
tblFCodes.setProcessVar(tcList);
|
||||
tcList.addPvChangeListener(this);
|
||||
updateColumnWidths();
|
||||
}
|
||||
|
||||
/**
|
||||
* Getter for property numCodes.
|
||||
*
|
||||
* @return Value of property numCodes.
|
||||
*/
|
||||
public int getNumCodes()
|
||||
{
|
||||
return this.numCodes;
|
||||
}
|
||||
|
||||
/**
|
||||
* Setter for property numCodes.
|
||||
*
|
||||
* @param numCodes New value of property numCodes.
|
||||
*/
|
||||
private void setNumCodes(int numCodes)
|
||||
{
|
||||
this.numCodes = numCodes & 0x7F;
|
||||
setMilStatus((numCodes & 0x80) != 0);
|
||||
lblNumCodes.setText(this.numCodes + " Trouble codes set");
|
||||
}
|
||||
|
||||
/**
|
||||
* update the column widths of data table
|
||||
*/
|
||||
private void updateColumnWidths()
|
||||
{
|
||||
if (tcList.size() > 0)
|
||||
{
|
||||
/** set column sizes here, since this only works with inserted data */
|
||||
tblFCodes.getColumn(ObdCodeItem.FIELDS[ObdCodeItem.FID_CODE]).setPreferredWidth(40);
|
||||
tblFCodes.getColumn(ObdCodeItem.FIELDS[ObdCodeItem.FID_DESCRIPT]).setPreferredWidth(330);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* This method gets called when a bound property is changed.
|
||||
*
|
||||
* @param evt A PropertyChangeEvent object describing the event source
|
||||
* and the property that has changed.
|
||||
*/
|
||||
public void propertyChange(java.beans.PropertyChangeEvent evt)
|
||||
{
|
||||
if (evt.getPropertyName().equals("numCodes"))
|
||||
{
|
||||
setNumCodes(((Integer) evt.getNewValue()).intValue());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* special handling of changes in displayed code list
|
||||
*
|
||||
* @param event Event to be handled
|
||||
*/
|
||||
public void pvChanged(PvChangeEvent event)
|
||||
{
|
||||
switch (event.getType())
|
||||
{
|
||||
/* update column width on added lines, since this only works with
|
||||
* tables containing at least one row of data
|
||||
*/
|
||||
case PvChangeEvent.PV_ADDED:
|
||||
updateColumnWidths();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Add actionListener to all action sources on panel
|
||||
*
|
||||
* @param al ActionListener to be registered
|
||||
*/
|
||||
public void addActionListener(ActionListener al)
|
||||
{
|
||||
btnClearCodes.addActionListener(al);
|
||||
btnReadCodes.addActionListener(al);
|
||||
btnReadPending.addActionListener(al);
|
||||
btnReadPermanent.addActionListener(al);
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove actionListener from all action sources on panel
|
||||
*
|
||||
* @param al ActionListener to be registered
|
||||
*/
|
||||
public void removeActionListener(ActionListener al)
|
||||
{
|
||||
btnClearCodes.removeActionListener(al);
|
||||
btnReadCodes.removeActionListener(al);
|
||||
btnReadPending.removeActionListener(al);
|
||||
btnReadPermanent.removeActionListener(al);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,88 @@
|
||||
/*
|
||||
* (C) Copyright 2015 by fr3ts0n <erwin.scheuch-heilig@gmx.at>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of
|
||||
* the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
||||
* MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
package com.fr3ts0n.ecu.gui.application;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
import javax.swing.filechooser.FileFilter;
|
||||
|
||||
/**
|
||||
* File filter for saving/loading OBD files
|
||||
*
|
||||
* @author erwin
|
||||
*/
|
||||
class ObdFileFilter extends FileFilter
|
||||
{
|
||||
|
||||
private static final String[] FLT_EXTENSIONS =
|
||||
{
|
||||
"obd",
|
||||
};
|
||||
private static final String FLT_DESCRIPTION = "OBD Files";
|
||||
|
||||
/** Creates a new instance of ObdFileFilter */
|
||||
public ObdFileFilter()
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the extension portion of the file's name .
|
||||
*
|
||||
* @param f file to get extension for
|
||||
* @return file extension
|
||||
* @see #getExtension
|
||||
* @see FileFilter#accept
|
||||
*/
|
||||
private String getExtension(File f)
|
||||
{
|
||||
if (f != null)
|
||||
{
|
||||
String filename = f.getName();
|
||||
int i = filename.lastIndexOf('.');
|
||||
if (i > 0 && i < filename.length() - 1)
|
||||
{
|
||||
return filename.substring(i + 1);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Whether the given file is accepted by this filter.
|
||||
*/
|
||||
public boolean accept(java.io.File f)
|
||||
{
|
||||
boolean result = f.isDirectory();
|
||||
String ext = getExtension(f);
|
||||
for (int i = 0; !result && i < FLT_EXTENSIONS.length; i++)
|
||||
result |= FLT_EXTENSIONS[i].equalsIgnoreCase(ext);
|
||||
return (result);
|
||||
}
|
||||
|
||||
/**
|
||||
* The description of this filter. For example: "JPG and GIF Images"
|
||||
*
|
||||
* @return description of filter (to be used within file chooser ...)
|
||||
*/
|
||||
public String getDescription()
|
||||
{
|
||||
return (FLT_DESCRIPTION);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,79 @@
|
||||
/*
|
||||
* (C) Copyright 2015 by fr3ts0n <erwin.scheuch-heilig@gmx.at>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of
|
||||
* the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
||||
* MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
package com.fr3ts0n.ecu.gui.application;
|
||||
|
||||
import com.fr3ts0n.pvs.IndexedProcessVar;
|
||||
import com.fr3ts0n.pvs.gui.PvTableModel;
|
||||
|
||||
/**
|
||||
* TableModel for OBD data items
|
||||
*
|
||||
* @author erwin
|
||||
*/
|
||||
public class ObdItemTableModel
|
||||
extends PvTableModel
|
||||
{
|
||||
|
||||
/** used for caching current row */
|
||||
private int currRowIndex = -1;
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private static final long serialVersionUID = -1162610644870557702L;
|
||||
|
||||
/** Creates a new instance of ObdItemTableModel */
|
||||
public ObdItemTableModel()
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* get the value for table location (x,y)
|
||||
* This implementation returns the complete OBD-Item which represents the complete row
|
||||
* the field handling shall be done by the renderer, since the OBD-item
|
||||
* also includes formatting information which is required for rendering.
|
||||
*
|
||||
* @param rowIndex row number
|
||||
* @param columnIndex column number
|
||||
* @return value for table location
|
||||
*/
|
||||
@Override
|
||||
public Object getValueAt(int rowIndex, int columnIndex)
|
||||
{
|
||||
// if the pv is set ...
|
||||
if (pv != null)
|
||||
{
|
||||
// get the column value
|
||||
if (rowIndex != currRowIndex && rowIndex < getRowCount())
|
||||
{
|
||||
currRowIndex = rowIndex;
|
||||
currRow = (IndexedProcessVar) pv.get(keys[rowIndex]);
|
||||
}
|
||||
}
|
||||
return (currRow);
|
||||
}
|
||||
|
||||
/**
|
||||
* fire update events for specified column on all rows
|
||||
*
|
||||
*/
|
||||
public synchronized void updateAllRows()
|
||||
{
|
||||
fireTableRowsUpdated(0, getRowCount());
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,159 @@
|
||||
/*
|
||||
* (C) Copyright 2015 by fr3ts0n <erwin.scheuch-heilig@gmx.at>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of
|
||||
* the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
||||
* MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
package com.fr3ts0n.ecu.gui.application;
|
||||
|
||||
import com.fr3ts0n.ecu.Conversion;
|
||||
import com.fr3ts0n.ecu.EcuDataItem;
|
||||
import com.fr3ts0n.ecu.EcuDataPv;
|
||||
|
||||
import java.awt.Color;
|
||||
import java.awt.Component;
|
||||
import java.awt.Font;
|
||||
|
||||
import javax.swing.JLabel;
|
||||
import javax.swing.JTable;
|
||||
import javax.swing.border.EmptyBorder;
|
||||
import javax.swing.table.TableCellRenderer;
|
||||
|
||||
/**
|
||||
* Renderer for EcuDataPv Elements
|
||||
*
|
||||
* @author erwin
|
||||
*/
|
||||
public class ObdItemTableRenderer
|
||||
extends JLabel
|
||||
implements TableCellRenderer
|
||||
{
|
||||
|
||||
private static final long serialVersionUID = -1067775643797324582L;
|
||||
private static final EmptyBorder brdr = new EmptyBorder(0, 5, 0, 5);
|
||||
private Font parentFont = null;
|
||||
private Color bgColor = null;
|
||||
private Color selColor = null;
|
||||
private JTable parentTable = null;
|
||||
|
||||
/** Creates a new instance of ObdItemTableRenderer */
|
||||
public ObdItemTableRenderer()
|
||||
{
|
||||
setOpaque(true);
|
||||
setBorder(brdr);
|
||||
}
|
||||
|
||||
/**
|
||||
* set visualisation parameters referring to given table
|
||||
*
|
||||
* @param table
|
||||
* - the table object to refer to ...
|
||||
*/
|
||||
private void setParentTable(JTable table)
|
||||
{
|
||||
parentTable = table;
|
||||
// set the font only once, and then just use it
|
||||
parentFont = table.getFont();
|
||||
setFont(parentFont);
|
||||
|
||||
// get background color from Table
|
||||
bgColor = table.getBackground();
|
||||
// get selection color from Table
|
||||
selColor = table.getSelectionBackground();
|
||||
}
|
||||
|
||||
public Component getTableCellRendererComponent(JTable table,
|
||||
Object value,
|
||||
boolean isSelected,
|
||||
boolean hasFocus,
|
||||
int row,
|
||||
int column)
|
||||
{
|
||||
String fmtText = null;
|
||||
|
||||
// if we don't know the parent table yet, set visual parameters
|
||||
if (parentTable == null)
|
||||
setParentTable(table);
|
||||
|
||||
// background is dependent on selection status
|
||||
setBackground(isSelected ? selColor : bgColor);
|
||||
|
||||
// if row is valid ...
|
||||
if (value != null)
|
||||
{
|
||||
// get column value
|
||||
Object colVal = ((EcuDataPv) value).get(column);
|
||||
if (colVal != null)
|
||||
{
|
||||
try
|
||||
{
|
||||
// formatting is based on column ...
|
||||
switch (column)
|
||||
{
|
||||
case EcuDataPv.FID_PID:
|
||||
setHorizontalAlignment(RIGHT);
|
||||
fmtText = String.format("%02X", colVal);
|
||||
break;
|
||||
|
||||
case EcuDataPv.FID_OFS:
|
||||
setHorizontalAlignment(RIGHT);
|
||||
fmtText = String.valueOf(colVal);
|
||||
break;
|
||||
|
||||
case EcuDataPv.FID_VALUE:
|
||||
case EcuDataPv.FID_UNITS:
|
||||
EcuDataPv currPv = (EcuDataPv) value;
|
||||
Object cnvObj = currPv.get(EcuDataPv.FID_CNVID);
|
||||
if (cnvObj instanceof Conversion[]
|
||||
&& ((Conversion[]) cnvObj)[EcuDataItem.cnvSystem] != null)
|
||||
{
|
||||
Conversion cnv;
|
||||
cnv = ((Conversion[]) cnvObj)[EcuDataItem.cnvSystem];
|
||||
if (column == EcuDataPv.FID_VALUE)
|
||||
{
|
||||
setHorizontalAlignment(RIGHT);
|
||||
// formated data
|
||||
fmtText = cnv.physToPhysFmtString((Number) colVal,
|
||||
(String) currPv.get(EcuDataPv.FID_FORMAT));
|
||||
}
|
||||
else
|
||||
{
|
||||
setHorizontalAlignment(LEFT);
|
||||
// formated units
|
||||
fmtText = cnv.getUnits();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
fmtText = String.valueOf(colVal);
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
setHorizontalAlignment(LEFT);
|
||||
fmtText = String.valueOf(colVal);
|
||||
break;
|
||||
}
|
||||
} catch (Exception ex)
|
||||
{
|
||||
fmtText = String.valueOf(colVal);
|
||||
}
|
||||
}
|
||||
}
|
||||
setText(fmtText);
|
||||
|
||||
return this;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,411 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
|
||||
<Form version="1.2" maxVersion="1.2" type="org.netbeans.modules.form.forminfo.JFrameFormInfo">
|
||||
<NonVisualComponents>
|
||||
<Component class="javax.swing.JFileChooser" name="fChoose">
|
||||
<Properties>
|
||||
<Property name="fileFilter" type="javax.swing.filechooser.FileFilter" editor="org.netbeans.modules.form.RADConnectionPropertyEditor">
|
||||
<Connection code="new ObdFileFilter()" type="code"/>
|
||||
</Property>
|
||||
<Property name="fileSelectionMode" type="int" value="2"/>
|
||||
</Properties>
|
||||
</Component>
|
||||
<Menu class="javax.swing.JMenuBar" name="mbMain">
|
||||
<Properties>
|
||||
<Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
|
||||
<Font name="Dialog" size="10" style="0"/>
|
||||
</Property>
|
||||
</Properties>
|
||||
<SubComponents>
|
||||
<Menu class="javax.swing.JMenu" name="mnuFile">
|
||||
<Properties>
|
||||
<Property name="mnemonic" type="int" value="70"/>
|
||||
<Property name="text" type="java.lang.String" value="File"/>
|
||||
<Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
|
||||
<Font name="Dialog" size="10" style="0"/>
|
||||
</Property>
|
||||
</Properties>
|
||||
<SubComponents>
|
||||
<MenuItem class="javax.swing.JMenuItem" name="miLoad">
|
||||
<Properties>
|
||||
<Property name="accelerator" type="javax.swing.KeyStroke" editor="org.netbeans.modules.form.editors.KeyStrokeEditor">
|
||||
<KeyStroke key="F3"/>
|
||||
</Property>
|
||||
<Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
|
||||
<Font name="Dialog" size="10" style="0"/>
|
||||
</Property>
|
||||
<Property name="mnemonic" type="int" value="76"/>
|
||||
<Property name="text" type="java.lang.String" value="Load measurement"/>
|
||||
</Properties>
|
||||
<Events>
|
||||
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="miLoadActionPerformed"/>
|
||||
</Events>
|
||||
</MenuItem>
|
||||
<MenuItem class="javax.swing.JMenuItem" name="miSave">
|
||||
<Properties>
|
||||
<Property name="accelerator" type="javax.swing.KeyStroke" editor="org.netbeans.modules.form.editors.KeyStrokeEditor">
|
||||
<KeyStroke key="F4"/>
|
||||
</Property>
|
||||
<Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
|
||||
<Font name="Dialog" size="10" style="0"/>
|
||||
</Property>
|
||||
<Property name="mnemonic" type="int" value="83"/>
|
||||
<Property name="text" type="java.lang.String" value="Save measurement"/>
|
||||
</Properties>
|
||||
<Events>
|
||||
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="miSaveActionPerformed"/>
|
||||
</Events>
|
||||
</MenuItem>
|
||||
</SubComponents>
|
||||
</Menu>
|
||||
<Menu class="javax.swing.JMenu" name="mnuComm">
|
||||
<Properties>
|
||||
<Property name="mnemonic" type="int" value="67"/>
|
||||
<Property name="text" type="java.lang.String" value="Communication"/>
|
||||
<Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
|
||||
<Font name="Dialog" size="10" style="0"/>
|
||||
</Property>
|
||||
</Properties>
|
||||
<SubComponents>
|
||||
<MenuItem class="javax.swing.JMenuItem" name="miCommConfigure">
|
||||
<Properties>
|
||||
<Property name="accelerator" type="javax.swing.KeyStroke" editor="org.netbeans.modules.form.editors.KeyStrokeEditor">
|
||||
<KeyStroke key="F8"/>
|
||||
</Property>
|
||||
<Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
|
||||
<Font name="Dialog" size="10" style="0"/>
|
||||
</Property>
|
||||
<Property name="mnemonic" type="int" value="67"/>
|
||||
<Property name="text" type="java.lang.String" value="Port Configuration..."/>
|
||||
</Properties>
|
||||
<Events>
|
||||
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="miCommConfigureActionPerformed"/>
|
||||
</Events>
|
||||
</MenuItem>
|
||||
<MenuItem class="javax.swing.JMenuItem" name="miCommInit">
|
||||
<Properties>
|
||||
<Property name="accelerator" type="javax.swing.KeyStroke" editor="org.netbeans.modules.form.editors.KeyStrokeEditor">
|
||||
<KeyStroke key="F5"/>
|
||||
</Property>
|
||||
<Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
|
||||
<Font name="Dialog" size="10" style="0"/>
|
||||
</Property>
|
||||
<Property name="mnemonic" type="int" value="73"/>
|
||||
<Property name="text" type="java.lang.String" value="Initialize"/>
|
||||
</Properties>
|
||||
<Events>
|
||||
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="miCommInitActionPerformed"/>
|
||||
</Events>
|
||||
</MenuItem>
|
||||
<MenuItem class="javax.swing.JMenuItem" name="miCommStart">
|
||||
<Properties>
|
||||
<Property name="accelerator" type="javax.swing.KeyStroke" editor="org.netbeans.modules.form.editors.KeyStrokeEditor">
|
||||
<KeyStroke key="F11"/>
|
||||
</Property>
|
||||
<Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
|
||||
<Font name="Dialog" size="10" style="0"/>
|
||||
</Property>
|
||||
<Property name="mnemonic" type="int" value="83"/>
|
||||
<Property name="text" type="java.lang.String" value="Start"/>
|
||||
</Properties>
|
||||
<Events>
|
||||
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="miCommStartActionPerformed"/>
|
||||
</Events>
|
||||
</MenuItem>
|
||||
<MenuItem class="javax.swing.JMenuItem" name="miCommStop">
|
||||
<Properties>
|
||||
<Property name="accelerator" type="javax.swing.KeyStroke" editor="org.netbeans.modules.form.editors.KeyStrokeEditor">
|
||||
<KeyStroke key="F9"/>
|
||||
</Property>
|
||||
<Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
|
||||
<Font name="Dialog" size="10" style="0"/>
|
||||
</Property>
|
||||
<Property name="mnemonic" type="int" value="112"/>
|
||||
<Property name="text" type="java.lang.String" value="Stop"/>
|
||||
</Properties>
|
||||
<Events>
|
||||
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="miCommStopActionPerformed"/>
|
||||
</Events>
|
||||
</MenuItem>
|
||||
</SubComponents>
|
||||
</Menu>
|
||||
</SubComponents>
|
||||
</Menu>
|
||||
</NonVisualComponents>
|
||||
<Properties>
|
||||
<Property name="defaultCloseOperation" type="int" value="3"/>
|
||||
<Property name="title" type="java.lang.String" value="JObdScanTool"/>
|
||||
</Properties>
|
||||
<SyntheticProperties>
|
||||
<SyntheticProperty name="menuBar" type="java.lang.String" value="mbMain"/>
|
||||
<SyntheticProperty name="formSizePolicy" type="int" value="1"/>
|
||||
</SyntheticProperties>
|
||||
<AuxValues>
|
||||
<AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="0"/>
|
||||
<AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
|
||||
<AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/>
|
||||
<AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="false"/>
|
||||
<AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="1"/>
|
||||
<AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
|
||||
<AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/>
|
||||
<AuxValue name="designerSize" type="java.awt.Dimension" value="-84,-19,0,5,115,114,0,18,106,97,118,97,46,97,119,116,46,68,105,109,101,110,115,105,111,110,65,-114,-39,-41,-84,95,68,20,2,0,2,73,0,6,104,101,105,103,104,116,73,0,5,119,105,100,116,104,120,112,0,0,1,-100,0,0,1,-54"/>
|
||||
</AuxValues>
|
||||
|
||||
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout"/>
|
||||
<SubComponents>
|
||||
<Container class="javax.swing.JTabbedPane" name="tabMain">
|
||||
<Properties>
|
||||
<Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
|
||||
<Font name="Dialog" size="10" style="0"/>
|
||||
</Property>
|
||||
<Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
|
||||
<Dimension value="[520, 350]"/>
|
||||
</Property>
|
||||
</Properties>
|
||||
<Events>
|
||||
<EventHandler event="stateChanged" listener="javax.swing.event.ChangeListener" parameters="javax.swing.event.ChangeEvent" handler="tabMainStateChanged"/>
|
||||
</Events>
|
||||
<Constraints>
|
||||
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout" value="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout$BorderConstraintsDescription">
|
||||
<BorderConstraints direction="Center"/>
|
||||
</Constraint>
|
||||
</Constraints>
|
||||
|
||||
<Layout class="org.netbeans.modules.form.compat2.layouts.support.JTabbedPaneSupportLayout"/>
|
||||
<SubComponents>
|
||||
<Container class="javax.swing.JPanel" name="panStart">
|
||||
<Properties>
|
||||
<Property name="background" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor">
|
||||
<Color blue="ff" green="ff" red="ff" type="rgb"/>
|
||||
</Property>
|
||||
</Properties>
|
||||
<Constraints>
|
||||
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.support.JTabbedPaneSupportLayout" value="org.netbeans.modules.form.compat2.layouts.support.JTabbedPaneSupportLayout$JTabbedPaneConstraintsDescription">
|
||||
<JTabbedPaneConstraints tabName="About">
|
||||
<Property name="tabTitle" type="java.lang.String" value="About"/>
|
||||
</JTabbedPaneConstraints>
|
||||
</Constraint>
|
||||
</Constraints>
|
||||
|
||||
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout"/>
|
||||
<SubComponents>
|
||||
<Component class="javax.swing.JLabel" name="lblTitle">
|
||||
<Properties>
|
||||
<Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
|
||||
<Font name="Dialog" size="18" style="1"/>
|
||||
</Property>
|
||||
<Property name="horizontalAlignment" type="int" value="0"/>
|
||||
<Property name="text" type="java.lang.String" value="Java OBD ScanTool"/>
|
||||
</Properties>
|
||||
<Constraints>
|
||||
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout" value="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout$BorderConstraintsDescription">
|
||||
<BorderConstraints direction="North"/>
|
||||
</Constraint>
|
||||
</Constraints>
|
||||
</Component>
|
||||
<Component class="javax.swing.JLabel" name="lblFooter">
|
||||
<Properties>
|
||||
<Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
|
||||
<Font name="Dialog" size="10" style="0"/>
|
||||
</Property>
|
||||
<Property name="horizontalAlignment" type="int" value="0"/>
|
||||
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.form.RADConnectionPropertyEditor">
|
||||
<Connection code="copyright" type="code"/>
|
||||
</Property>
|
||||
</Properties>
|
||||
<Constraints>
|
||||
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout" value="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout$BorderConstraintsDescription">
|
||||
<BorderConstraints direction="South"/>
|
||||
</Constraint>
|
||||
</Constraints>
|
||||
</Component>
|
||||
<Container class="javax.swing.JPanel" name="jPanel1">
|
||||
<Properties>
|
||||
<Property name="background" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor">
|
||||
<Color blue="ff" green="ff" red="ff" type="rgb"/>
|
||||
</Property>
|
||||
<Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
|
||||
<Border info="org.netbeans.modules.form.compat2.border.EmptyBorderInfo">
|
||||
<EmptyBorder bottom="20" left="10" right="10" top="20"/>
|
||||
</Border>
|
||||
</Property>
|
||||
</Properties>
|
||||
<Constraints>
|
||||
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout" value="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout$BorderConstraintsDescription">
|
||||
<BorderConstraints direction="Center"/>
|
||||
</Constraint>
|
||||
</Constraints>
|
||||
|
||||
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignGridLayout">
|
||||
<Property name="columns" type="int" value="0"/>
|
||||
<Property name="rows" type="int" value="2"/>
|
||||
</Layout>
|
||||
<SubComponents>
|
||||
<Component class="com.fr3ts0n.pvs.gui.PvTable" name="TblVehIDs">
|
||||
<Properties>
|
||||
<Property name="autoResizeMode" type="int" value="5"/>
|
||||
<Property name="name" type="java.lang.String" value="TblVids" noResource="true"/>
|
||||
<Property name="opaque" type="boolean" value="false"/>
|
||||
<Property name="rowHeight" type="int" value="20"/>
|
||||
<Property name="showGrid" type="boolean" value="false"/>
|
||||
</Properties>
|
||||
<AuxValues>
|
||||
<AuxValue name="JavaCodeGenerator_CreateCodeCustom" type="java.lang.String" value="new com.fr3ts0n.pvs.gui.PvTable(prt.VidPvs)"/>
|
||||
</AuxValues>
|
||||
</Component>
|
||||
<Component class="javax.swing.JLabel" name="jLabel1">
|
||||
<Properties>
|
||||
<Property name="horizontalAlignment" type="int" value="0"/>
|
||||
<Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor">
|
||||
<Image iconType="3" name="/com.fr3ts0n.ecu/res/SUNFIRE.png"/>
|
||||
</Property>
|
||||
</Properties>
|
||||
</Component>
|
||||
</SubComponents>
|
||||
</Container>
|
||||
</SubComponents>
|
||||
</Container>
|
||||
<Component class="com.fr3ts0n.ecu.ObdDtcPanel" name="panObdDtc">
|
||||
<Constraints>
|
||||
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.support.JTabbedPaneSupportLayout" value="org.netbeans.modules.form.compat2.layouts.support.JTabbedPaneSupportLayout$JTabbedPaneConstraintsDescription">
|
||||
<JTabbedPaneConstraints tabName="Fault Codes">
|
||||
<Property name="tabTitle" type="java.lang.String" value="Fault Codes"/>
|
||||
</JTabbedPaneConstraints>
|
||||
</Constraint>
|
||||
</Constraints>
|
||||
</Component>
|
||||
<Component class="com.fr3ts0n.ecu.ObdDataPanel" name="panObdFreezeFrame">
|
||||
<Constraints>
|
||||
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.support.JTabbedPaneSupportLayout" value="org.netbeans.modules.form.compat2.layouts.support.JTabbedPaneSupportLayout$JTabbedPaneConstraintsDescription">
|
||||
<JTabbedPaneConstraints tabName="Freeze Frames">
|
||||
<Property name="tabTitle" type="java.lang.String" value="Freeze Frames"/>
|
||||
</JTabbedPaneConstraints>
|
||||
</Constraint>
|
||||
</Constraints>
|
||||
</Component>
|
||||
<Component class="com.fr3ts0n.ecu.ObdDataPanel" name="panObdData">
|
||||
<Constraints>
|
||||
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.support.JTabbedPaneSupportLayout" value="org.netbeans.modules.form.compat2.layouts.support.JTabbedPaneSupportLayout$JTabbedPaneConstraintsDescription">
|
||||
<JTabbedPaneConstraints tabName="OBD-Data">
|
||||
<Property name="tabTitle" type="java.lang.String" value="OBD-Data"/>
|
||||
</JTabbedPaneConstraints>
|
||||
</Constraint>
|
||||
</Constraints>
|
||||
</Component>
|
||||
<Component class="com.fr3ts0n.ecu.ObdDataPanel" name="panCanData">
|
||||
<Constraints>
|
||||
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.support.JTabbedPaneSupportLayout" value="org.netbeans.modules.form.compat2.layouts.support.JTabbedPaneSupportLayout$JTabbedPaneConstraintsDescription">
|
||||
<JTabbedPaneConstraints tabName="CAN-Monitor">
|
||||
<Property name="tabTitle" type="java.lang.String" value="CAN-Monitor"/>
|
||||
</JTabbedPaneConstraints>
|
||||
</Constraint>
|
||||
</Constraints>
|
||||
</Component>
|
||||
</SubComponents>
|
||||
</Container>
|
||||
<Container class="javax.swing.JPanel" name="panFooter">
|
||||
<Constraints>
|
||||
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout" value="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout$BorderConstraintsDescription">
|
||||
<BorderConstraints direction="South"/>
|
||||
</Constraint>
|
||||
</Constraints>
|
||||
|
||||
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout"/>
|
||||
<SubComponents>
|
||||
<Component class="javax.swing.JLabel" name="lblStatus">
|
||||
<Properties>
|
||||
<Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
|
||||
<Font name="Dialog" size="10" style="0"/>
|
||||
</Property>
|
||||
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.form.RADConnectionPropertyEditor">
|
||||
<Connection code="version" type="code"/>
|
||||
</Property>
|
||||
<Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
|
||||
<Border info="org.netbeans.modules.form.compat2.border.CompoundBorderInfo">
|
||||
<CompoundBorder>
|
||||
<Border PropertyName="outside" info="org.netbeans.modules.form.compat2.border.BevelBorderInfo">
|
||||
<BevelBorder bevelType="1"/>
|
||||
</Border>
|
||||
<Border PropertyName="inside" info="org.netbeans.modules.form.compat2.border.EmptyBorderInfo">
|
||||
<EmptyBorder bottom="1" left="3" right="3" top="1"/>
|
||||
</Border>
|
||||
</CompoundBorder>
|
||||
</Border>
|
||||
</Property>
|
||||
</Properties>
|
||||
<Constraints>
|
||||
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
|
||||
<GridBagConstraints gridX="-1" gridY="-1" gridWidth="1" gridHeight="1" fill="1" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="1.0" weightY="0.0"/>
|
||||
</Constraint>
|
||||
</Constraints>
|
||||
</Component>
|
||||
<Component class="javax.swing.JComboBox" name="cbCnvSystem">
|
||||
<Properties>
|
||||
<Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
|
||||
<Font name="Dialog" size="10" style="0"/>
|
||||
</Property>
|
||||
<Property name="model" type="javax.swing.ComboBoxModel" editor="org.netbeans.modules.form.editors2.ComboBoxModelEditor">
|
||||
<StringArray count="2">
|
||||
<StringItem index="0" value="Metric"/>
|
||||
<StringItem index="1" value="Imperial"/>
|
||||
</StringArray>
|
||||
</Property>
|
||||
<Property name="toolTipText" type="java.lang.String" value="Select conversion system"/>
|
||||
<Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
|
||||
<Border info="org.netbeans.modules.form.compat2.border.BevelBorderInfo">
|
||||
<BevelBorder bevelType="1"/>
|
||||
</Border>
|
||||
</Property>
|
||||
<Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
|
||||
<Dimension value="[71, 23]"/>
|
||||
</Property>
|
||||
</Properties>
|
||||
<Events>
|
||||
<EventHandler event="itemStateChanged" listener="java.awt.event.ItemListener" parameters="java.awt.event.ItemEvent" handler="cbCnvSystemItemStateChanged"/>
|
||||
</Events>
|
||||
<Constraints>
|
||||
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
|
||||
<GridBagConstraints gridX="-1" gridY="-1" gridWidth="1" gridHeight="1" fill="1" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.0"/>
|
||||
</Constraint>
|
||||
</Constraints>
|
||||
</Component>
|
||||
<Component class="javax.swing.JComboBox" name="cbProtocol">
|
||||
<Properties>
|
||||
<Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
|
||||
<Font name="Dialog" size="10" style="0"/>
|
||||
</Property>
|
||||
<Property name="model" type="javax.swing.ComboBoxModel" editor="org.netbeans.modules.form.RADConnectionPropertyEditor">
|
||||
<Connection code="new javax.swing.DefaultComboBoxModel(prt.protocols)" type="code"/>
|
||||
</Property>
|
||||
<Property name="toolTipText" type="java.lang.String" value="Select communication protocol"/>
|
||||
<Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
|
||||
<Border info="org.netbeans.modules.form.compat2.border.BevelBorderInfo">
|
||||
<BevelBorder bevelType="1"/>
|
||||
</Border>
|
||||
</Property>
|
||||
</Properties>
|
||||
<Events>
|
||||
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="cbProtocolActionPerformed"/>
|
||||
</Events>
|
||||
<Constraints>
|
||||
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
|
||||
<GridBagConstraints gridX="-1" gridY="-1" gridWidth="1" gridHeight="1" fill="1" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.0"/>
|
||||
</Constraint>
|
||||
</Constraints>
|
||||
</Component>
|
||||
</SubComponents>
|
||||
</Container>
|
||||
<Container class="javax.swing.JPanel" name="panHeader">
|
||||
<Constraints>
|
||||
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout" value="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout$BorderConstraintsDescription">
|
||||
<BorderConstraints direction="North"/>
|
||||
</Constraint>
|
||||
</Constraints>
|
||||
|
||||
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignGridLayout">
|
||||
<Property name="columns" type="int" value="0"/>
|
||||
<Property name="rows" type="int" value="1"/>
|
||||
</Layout>
|
||||
</Container>
|
||||
</SubComponents>
|
||||
</Form>
|
||||
@@ -0,0 +1,630 @@
|
||||
/*
|
||||
* (C) Copyright 2015 by fr3ts0n <erwin.scheuch-heilig@gmx.at>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of
|
||||
* the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
||||
* MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
package com.fr3ts0n.ecu.gui.application;
|
||||
|
||||
import com.fr3ts0n.common.UTF8Bundle;
|
||||
import com.fr3ts0n.common.UTF8Control;
|
||||
import com.fr3ts0n.ecu.EcuDataItem;
|
||||
import com.fr3ts0n.ecu.EcuDataPv;
|
||||
import com.fr3ts0n.ecu.prot.obd.ElmProt;
|
||||
import com.fr3ts0n.ecu.prot.obd.ObdProt;
|
||||
import com.fr3ts0n.prot.gui.SerialHandler;
|
||||
import com.fr3ts0n.pvs.PvChangeEvent;
|
||||
import com.fr3ts0n.pvs.PvChangeListener;
|
||||
import com.fr3ts0n.pvs.PvList;
|
||||
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
import java.beans.PropertyChangeEvent;
|
||||
import java.beans.PropertyChangeListener;
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.ObjectInputStream;
|
||||
import java.io.ObjectOutputStream;
|
||||
import java.util.HashMap;
|
||||
|
||||
import javax.swing.ImageIcon;
|
||||
import javax.swing.JFileChooser;
|
||||
import javax.swing.JOptionPane;
|
||||
|
||||
|
||||
/**
|
||||
* Main application frame for OBD com.fr3ts0n.test application
|
||||
*
|
||||
* @author erwin
|
||||
*/
|
||||
public class ObdTestFrame extends javax.swing.JFrame
|
||||
implements PropertyChangeListener, PvChangeListener
|
||||
{
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private static final long serialVersionUID = 3393967156524083209L;
|
||||
/** Program version string */
|
||||
private static final String version = "Version 0.9.7";
|
||||
private static final String copyright = "Copyright (C) 2007-2009 Erwin Scheuch-Heilig";
|
||||
|
||||
/** Initialize UTF8 resource bundle */
|
||||
static UTF8Bundle res = new UTF8Bundle(new UTF8Control());
|
||||
|
||||
/** icons */
|
||||
public ImageIcon icoCar = new javax.swing.ImageIcon(getClass().getResource("/com/fr3ts0n/ecu/gui/res/SUNFIRE.png"));
|
||||
|
||||
/** protocol handler */
|
||||
private static final ElmProt prt = new ElmProt();
|
||||
/** Serial communication handler */
|
||||
private static final SerialHandler ser = new SerialHandler();
|
||||
|
||||
/** is this a simulation, or the real world? */
|
||||
static boolean isSimulation = false;
|
||||
|
||||
/**
|
||||
* Action listener to handle read/clear code actions
|
||||
*/
|
||||
private final ActionListener hdlrCodeButtons = new ActionListener()
|
||||
{
|
||||
|
||||
public void actionPerformed(ActionEvent e)
|
||||
{
|
||||
// if source is not defined, ignore event
|
||||
if (e.getSource() == null) return;
|
||||
|
||||
if (e.getActionCommand().equals("ReadCodes"))
|
||||
{
|
||||
prt.setService(ElmProt.OBD_SVC_READ_CODES);
|
||||
} else if (e.getActionCommand().equals("ReadPending"))
|
||||
{
|
||||
prt.setService(ElmProt.OBD_SVC_PENDINGCODES);
|
||||
} else if (e.getActionCommand().equals("ReadPermanent"))
|
||||
{
|
||||
prt.setService(ElmProt.OBD_SVC_PERMACODES);
|
||||
} else if (e.getActionCommand().equals("ClearCodes"))
|
||||
{
|
||||
prt.setService(ElmProt.OBD_SVC_CLEAR_CODES);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
/** Creates new form ObdTestFrame */
|
||||
private ObdTestFrame()
|
||||
{
|
||||
ObdProt.VidPvs.addPvChangeListener(this);
|
||||
// set up serial handler and protocol drivers
|
||||
ser.setMessageHandler(prt);
|
||||
prt.addTelegramWriter(ser);
|
||||
initComponents();
|
||||
// panAbout.setText(about);
|
||||
panObdData.setPidPvs(ObdProt.PidPvs);
|
||||
panObdFreezeFrame.setPidPvs(ObdProt.PidPvs);
|
||||
panCanData.setPidPvs(ElmProt.canProt.CanPvs);
|
||||
panCanData.setTitle("CAN Data Graph");
|
||||
panObdDtc.setTcList(ObdProt.tCodes);
|
||||
panObdDtc.addActionListener(hdlrCodeButtons);
|
||||
/* handle number of DTC changes */
|
||||
prt.addPropertyChangeListener(panObdDtc);
|
||||
/* handle protocol status changes */
|
||||
prt.addPropertyChangeListener(this);
|
||||
}
|
||||
|
||||
/**
|
||||
* This method is called from within the constructor to
|
||||
* initialize the form.
|
||||
* WARNING: Do NOT modify this code. The content of this method is
|
||||
* always regenerated by the Form Editor.
|
||||
*/
|
||||
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
|
||||
@SuppressWarnings({"rawtypes", "unchecked"})
|
||||
private void initComponents()
|
||||
{
|
||||
java.awt.GridBagConstraints gridBagConstraints;
|
||||
|
||||
fChoose = new javax.swing.JFileChooser();
|
||||
tabMain = new javax.swing.JTabbedPane();
|
||||
javax.swing.JPanel panStart = new javax.swing.JPanel();
|
||||
javax.swing.JLabel lblTitle = new javax.swing.JLabel();
|
||||
javax.swing.JLabel lblFooter = new javax.swing.JLabel();
|
||||
javax.swing.JPanel jPanel1 = new javax.swing.JPanel();
|
||||
TblVehIDs = new com.fr3ts0n.pvs.gui.PvTable(ObdProt.VidPvs);
|
||||
javax.swing.JLabel jLabel1 = new javax.swing.JLabel();
|
||||
panObdDtc = new com.fr3ts0n.ecu.gui.application.ObdDtcPanel();
|
||||
panObdFreezeFrame = new com.fr3ts0n.ecu.gui.application.ObdDataPanel();
|
||||
panObdData = new com.fr3ts0n.ecu.gui.application.ObdDataPanel();
|
||||
panCanData = new com.fr3ts0n.ecu.gui.application.ObdDataPanel();
|
||||
javax.swing.JPanel panFooter = new javax.swing.JPanel();
|
||||
lblStatus = new javax.swing.JLabel();
|
||||
cbCnvSystem = new javax.swing.JComboBox();
|
||||
cbProtocol = new javax.swing.JComboBox();
|
||||
javax.swing.JPanel panHeader = new javax.swing.JPanel();
|
||||
javax.swing.JMenuBar mbMain = new javax.swing.JMenuBar();
|
||||
javax.swing.JMenu mnuFile = new javax.swing.JMenu();
|
||||
miLoad = new javax.swing.JMenuItem();
|
||||
miSave = new javax.swing.JMenuItem();
|
||||
javax.swing.JMenu mnuComm = new javax.swing.JMenu();
|
||||
miCommConfigure = new javax.swing.JMenuItem();
|
||||
miCommInit = new javax.swing.JMenuItem();
|
||||
miCommStart = new javax.swing.JMenuItem();
|
||||
miCommStop = new javax.swing.JMenuItem();
|
||||
|
||||
FormListener formListener = new FormListener();
|
||||
|
||||
fChoose.setFileFilter(new ObdFileFilter());
|
||||
fChoose.setFileSelectionMode(javax.swing.JFileChooser.FILES_AND_DIRECTORIES);
|
||||
|
||||
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
|
||||
setTitle("JObdScanTool");
|
||||
|
||||
tabMain.setFont(new java.awt.Font("Dialog", 0, 10));
|
||||
tabMain.setPreferredSize(new java.awt.Dimension(520, 350));
|
||||
tabMain.addChangeListener(formListener);
|
||||
|
||||
panStart.setBackground(new java.awt.Color(255, 255, 255));
|
||||
panStart.setLayout(new java.awt.BorderLayout());
|
||||
|
||||
lblTitle.setFont(new java.awt.Font("Dialog", 1, 18));
|
||||
lblTitle.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
|
||||
lblTitle.setText("Java OBD ScanTool");
|
||||
panStart.add(lblTitle, java.awt.BorderLayout.NORTH);
|
||||
|
||||
lblFooter.setFont(new java.awt.Font("Dialog", 0, 10));
|
||||
lblFooter.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
|
||||
lblFooter.setText(copyright);
|
||||
panStart.add(lblFooter, java.awt.BorderLayout.SOUTH);
|
||||
|
||||
jPanel1.setBackground(new java.awt.Color(255, 255, 255));
|
||||
jPanel1.setBorder(javax.swing.BorderFactory.createEmptyBorder(20, 10, 20, 10));
|
||||
jPanel1.setLayout(new java.awt.GridLayout(2, 0));
|
||||
|
||||
TblVehIDs.setName("TblVids"); // NOI18N
|
||||
TblVehIDs.setOpaque(false);
|
||||
TblVehIDs.setRowHeight(20);
|
||||
TblVehIDs.setShowGrid(false);
|
||||
jPanel1.add(TblVehIDs);
|
||||
|
||||
jLabel1.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
|
||||
jLabel1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/fr3ts0n/ecu/gui/res/SUNFIRE.png"))); // NOI18N
|
||||
jPanel1.add(jLabel1);
|
||||
|
||||
panStart.add(jPanel1, java.awt.BorderLayout.CENTER);
|
||||
|
||||
tabMain.addTab("About", panStart);
|
||||
tabMain.addTab("Fault Codes", panObdDtc);
|
||||
tabMain.addTab("Freeze Frames", panObdFreezeFrame);
|
||||
tabMain.addTab("OBD-Data", panObdData);
|
||||
tabMain.addTab("CAN-Monitor", panCanData);
|
||||
|
||||
getContentPane().add(tabMain, java.awt.BorderLayout.CENTER);
|
||||
|
||||
panFooter.setLayout(new java.awt.GridBagLayout());
|
||||
|
||||
lblStatus.setFont(new java.awt.Font("Dialog", 0, 10));
|
||||
lblStatus.setText(version);
|
||||
lblStatus.setBorder(javax.swing.BorderFactory.createCompoundBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.LOWERED), javax.swing.BorderFactory.createEmptyBorder(1, 3, 1, 3)));
|
||||
gridBagConstraints = new java.awt.GridBagConstraints();
|
||||
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
|
||||
gridBagConstraints.weightx = 1.0;
|
||||
panFooter.add(lblStatus, gridBagConstraints);
|
||||
|
||||
cbCnvSystem.setFont(new java.awt.Font("Dialog", 0, 10));
|
||||
cbCnvSystem.setModel(new javax.swing.DefaultComboBoxModel(new String[]{"Metric", "Imperial"}));
|
||||
cbCnvSystem.setToolTipText("Select conversion system");
|
||||
cbCnvSystem.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.LOWERED));
|
||||
cbCnvSystem.setPreferredSize(new java.awt.Dimension(71, 23));
|
||||
cbCnvSystem.addItemListener(formListener);
|
||||
gridBagConstraints = new java.awt.GridBagConstraints();
|
||||
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
|
||||
panFooter.add(cbCnvSystem, gridBagConstraints);
|
||||
|
||||
cbProtocol.setFont(new java.awt.Font("Dialog", 0, 10));
|
||||
cbProtocol.setModel(new javax.swing.DefaultComboBoxModel(ElmProt.PROT.values()));
|
||||
cbProtocol.setToolTipText("Select communication protocol");
|
||||
cbProtocol.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.LOWERED));
|
||||
cbProtocol.addActionListener(formListener);
|
||||
gridBagConstraints = new java.awt.GridBagConstraints();
|
||||
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
|
||||
panFooter.add(cbProtocol, gridBagConstraints);
|
||||
|
||||
getContentPane().add(panFooter, java.awt.BorderLayout.SOUTH);
|
||||
|
||||
panHeader.setLayout(new java.awt.GridLayout(1, 0));
|
||||
getContentPane().add(panHeader, java.awt.BorderLayout.NORTH);
|
||||
|
||||
mbMain.setFont(new java.awt.Font("Dialog", 0, 10));
|
||||
|
||||
mnuFile.setMnemonic('F');
|
||||
mnuFile.setText("File");
|
||||
mnuFile.setFont(new java.awt.Font("Dialog", 0, 10));
|
||||
|
||||
miLoad.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_F3, 0));
|
||||
miLoad.setFont(new java.awt.Font("Dialog", 0, 10));
|
||||
miLoad.setMnemonic('L');
|
||||
miLoad.setText("Load measurement");
|
||||
miLoad.addActionListener(formListener);
|
||||
mnuFile.add(miLoad);
|
||||
|
||||
miSave.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_F4, 0));
|
||||
miSave.setFont(new java.awt.Font("Dialog", 0, 10));
|
||||
miSave.setMnemonic('S');
|
||||
miSave.setText("Save measurement");
|
||||
miSave.addActionListener(formListener);
|
||||
mnuFile.add(miSave);
|
||||
|
||||
mbMain.add(mnuFile);
|
||||
|
||||
mnuComm.setMnemonic('C');
|
||||
mnuComm.setText("Communication");
|
||||
mnuComm.setFont(new java.awt.Font("Dialog", 0, 10));
|
||||
|
||||
miCommConfigure.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_F8, 0));
|
||||
miCommConfigure.setFont(new java.awt.Font("Dialog", 0, 10));
|
||||
miCommConfigure.setMnemonic('C');
|
||||
miCommConfigure.setText("Port Configuration...");
|
||||
miCommConfigure.addActionListener(formListener);
|
||||
mnuComm.add(miCommConfigure);
|
||||
|
||||
miCommInit.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_F5, 0));
|
||||
miCommInit.setFont(new java.awt.Font("Dialog", 0, 10));
|
||||
miCommInit.setMnemonic('I');
|
||||
miCommInit.setText("Initialize");
|
||||
miCommInit.addActionListener(formListener);
|
||||
mnuComm.add(miCommInit);
|
||||
|
||||
miCommStart.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_F11, 0));
|
||||
miCommStart.setFont(new java.awt.Font("Dialog", 0, 10));
|
||||
miCommStart.setMnemonic('S');
|
||||
miCommStart.setText("Start");
|
||||
miCommStart.addActionListener(formListener);
|
||||
mnuComm.add(miCommStart);
|
||||
|
||||
miCommStop.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_F9, 0));
|
||||
miCommStop.setFont(new java.awt.Font("Dialog", 0, 10));
|
||||
miCommStop.setMnemonic('p');
|
||||
miCommStop.setText("Stop");
|
||||
miCommStop.addActionListener(formListener);
|
||||
mnuComm.add(miCommStop);
|
||||
|
||||
mbMain.add(mnuComm);
|
||||
|
||||
setJMenuBar(mbMain);
|
||||
|
||||
pack();
|
||||
}
|
||||
|
||||
// Code for dispatching events from components to event handlers.
|
||||
|
||||
private class FormListener implements java.awt.event.ActionListener, java.awt.event.ItemListener, javax.swing.event.ChangeListener
|
||||
{
|
||||
FormListener()
|
||||
{
|
||||
}
|
||||
|
||||
public void actionPerformed(java.awt.event.ActionEvent evt)
|
||||
{
|
||||
if (evt.getSource() == cbProtocol)
|
||||
{
|
||||
ObdTestFrame.this.cbProtocolActionPerformed();
|
||||
} else if (evt.getSource() == miLoad)
|
||||
{
|
||||
ObdTestFrame.this.miLoadActionPerformed();
|
||||
} else if (evt.getSource() == miSave)
|
||||
{
|
||||
ObdTestFrame.this.miSaveActionPerformed();
|
||||
} else if (evt.getSource() == miCommConfigure)
|
||||
{
|
||||
ObdTestFrame.this.miCommConfigureActionPerformed();
|
||||
} else if (evt.getSource() == miCommInit)
|
||||
{
|
||||
ObdTestFrame.this.miCommInitActionPerformed();
|
||||
} else if (evt.getSource() == miCommStart)
|
||||
{
|
||||
ObdTestFrame.this.miCommStartActionPerformed();
|
||||
} else if (evt.getSource() == miCommStop)
|
||||
{
|
||||
ObdTestFrame.this.miCommStopActionPerformed();
|
||||
}
|
||||
}
|
||||
|
||||
public void itemStateChanged(java.awt.event.ItemEvent evt)
|
||||
{
|
||||
if (evt.getSource() == cbCnvSystem)
|
||||
{
|
||||
ObdTestFrame.this.cbCnvSystemItemStateChanged();
|
||||
}
|
||||
}
|
||||
|
||||
public void stateChanged(javax.swing.event.ChangeEvent evt)
|
||||
{
|
||||
if (evt.getSource() == tabMain)
|
||||
{
|
||||
ObdTestFrame.this.tabMainStateChanged();
|
||||
}
|
||||
}
|
||||
}// </editor-fold>//GEN-END:initComponents
|
||||
|
||||
private void miCommConfigureActionPerformed()//GEN-FIRST:event_miCommConfigureActionPerformed
|
||||
{//GEN-HEADEREND:event_miCommConfigureActionPerformed
|
||||
ser.configure();
|
||||
}//GEN-LAST:event_miCommConfigureActionPerformed
|
||||
|
||||
private void miCommStopActionPerformed()//GEN-FIRST:event_miCommStopActionPerformed
|
||||
{//GEN-HEADEREND:event_miCommStopActionPerformed
|
||||
// switch off PID's supported'
|
||||
prt.setService(ElmProt.OBD_SVC_NONE);
|
||||
}//GEN-LAST:event_miCommStopActionPerformed
|
||||
|
||||
private void miCommStartActionPerformed()//GEN-FIRST:event_miCommStartActionPerformed
|
||||
{//GEN-HEADEREND:event_miCommStartActionPerformed
|
||||
// request OBD service for selected Tab
|
||||
requestServiceForSelectedTab();
|
||||
}//GEN-LAST:event_miCommStartActionPerformed
|
||||
|
||||
private void miCommInitActionPerformed()//GEN-FIRST:event_miCommInitActionPerformed
|
||||
{//GEN-HEADEREND:event_miCommInitActionPerformed
|
||||
prt.sendCommand(ElmProt.CMD.RESET, 0);
|
||||
}//GEN-LAST:event_miCommInitActionPerformed
|
||||
|
||||
private void miSaveActionPerformed()//GEN-FIRST:event_miSaveActionPerformed
|
||||
{//GEN-HEADEREND:event_miSaveActionPerformed
|
||||
if (fChoose.showSaveDialog(this) == JFileChooser.APPROVE_OPTION)
|
||||
{
|
||||
File file = fChoose.getSelectedFile();
|
||||
// ask for overwrite existing file
|
||||
if (!file.exists()
|
||||
|| JOptionPane.showConfirmDialog(this,
|
||||
"Really want to overwrite " + file.getPath(),
|
||||
"File overwrite",
|
||||
JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION)
|
||||
try
|
||||
{
|
||||
|
||||
FileOutputStream out = new FileOutputStream(file);
|
||||
ObjectOutputStream oOut = new ObjectOutputStream(out);
|
||||
/* remember current measurement page for loading again */
|
||||
Integer currPage = Integer.valueOf(tabMain.getSelectedIndex());
|
||||
oOut.writeObject(currPage);
|
||||
/* save the data */
|
||||
oOut.writeObject(ObdProt.PidPvs);
|
||||
oOut.writeObject(ElmProt.canProt.CanPvs);
|
||||
oOut.writeObject(panObdData.selPids);
|
||||
oOut.writeObject(panCanData.selPids);
|
||||
oOut.close();
|
||||
} catch (IOException ex)
|
||||
{
|
||||
ex.printStackTrace();
|
||||
JOptionPane.showMessageDialog(this,
|
||||
ex.getLocalizedMessage(),
|
||||
"Save ERROR",
|
||||
JOptionPane.ERROR_MESSAGE);
|
||||
}
|
||||
}
|
||||
}//GEN-LAST:event_miSaveActionPerformed
|
||||
|
||||
@SuppressWarnings({"unchecked", "rawtypes"})
|
||||
private void miLoadActionPerformed()//GEN-FIRST:event_miLoadActionPerformed
|
||||
{//GEN-HEADEREND:event_miLoadActionPerformed
|
||||
if (fChoose.showOpenDialog(this) == JFileChooser.APPROVE_OPTION)
|
||||
{
|
||||
File file = fChoose.getSelectedFile();
|
||||
try
|
||||
{
|
||||
FileInputStream in = new FileInputStream(file);
|
||||
ObjectInputStream oIn = new ObjectInputStream(in);
|
||||
/* ensure that measurement page is activated
|
||||
to avoid deletion of loaded data afterwards */
|
||||
Integer currPage = (Integer) oIn.readObject();
|
||||
tabMain.setSelectedIndex(currPage);
|
||||
/* read in the data */
|
||||
ObdProt.PidPvs = (PvList) oIn.readObject();
|
||||
ElmProt.canProt.CanPvs = (PvList) oIn.readObject();
|
||||
// re-setup data connection
|
||||
panObdData.setPidPvs(ObdProt.PidPvs);
|
||||
panCanData.setPidPvs(ElmProt.canProt.CanPvs);
|
||||
// read measurement history
|
||||
panObdData.selPids = (HashMap) oIn.readObject();
|
||||
panCanData.selPids = (HashMap) oIn.readObject();
|
||||
oIn.close();
|
||||
} catch (Exception ex)
|
||||
{
|
||||
ex.printStackTrace();
|
||||
JOptionPane.showMessageDialog(this,
|
||||
ex.getLocalizedMessage(),
|
||||
"Load ERROR",
|
||||
JOptionPane.ERROR_MESSAGE);
|
||||
}
|
||||
}
|
||||
}//GEN-LAST:event_miLoadActionPerformed
|
||||
|
||||
private void cbProtocolActionPerformed()//GEN-FIRST:event_cbProtocolActionPerformed
|
||||
{//GEN-HEADEREND:event_cbProtocolActionPerformed
|
||||
prt.sendCommand(ElmProt.CMD.SETPROTAUTO, cbProtocol.getSelectedIndex());
|
||||
}//GEN-LAST:event_cbProtocolActionPerformed
|
||||
|
||||
/**
|
||||
* handle change of conversion system
|
||||
*/
|
||||
private void cbCnvSystemItemStateChanged()//GEN-FIRST:event_cbCnvSystemItemStateChanged
|
||||
{//GEN-HEADEREND:event_cbCnvSystemItemStateChanged
|
||||
// set new conversion system
|
||||
EcuDataItem.cnvSystem = cbCnvSystem.getSelectedIndex();
|
||||
|
||||
// update currently selected display
|
||||
switch (tabMain.getSelectedIndex())
|
||||
{
|
||||
case 2:
|
||||
panObdFreezeFrame.updateAllTableRows(EcuDataPv.FID_UNITS);
|
||||
break;
|
||||
|
||||
case 3:
|
||||
panObdData.updateAllTableRows(EcuDataPv.FID_UNITS);
|
||||
break;
|
||||
|
||||
case 4:
|
||||
panCanData.updateAllTableRows(EcuDataPv.FID_UNITS);
|
||||
break;
|
||||
|
||||
default:
|
||||
// intentionally do nothing ...
|
||||
}
|
||||
}//GEN-LAST:event_cbCnvSystemItemStateChanged
|
||||
|
||||
/**
|
||||
* update form/tab selection
|
||||
*/
|
||||
private void tabMainStateChanged()//GEN-FIRST:event_tabMainStateChanged
|
||||
{//GEN-HEADEREND:event_tabMainStateChanged
|
||||
// request OBD service for selected Tab
|
||||
requestServiceForSelectedTab();
|
||||
updateColumnWidths();
|
||||
}//GEN-LAST:event_tabMainStateChanged
|
||||
|
||||
/**
|
||||
* request corresponding OBD service for selected Tab
|
||||
*/
|
||||
private void requestServiceForSelectedTab()
|
||||
{
|
||||
// handle page change ...
|
||||
switch (tabMain.getSelectedIndex())
|
||||
{
|
||||
case 0: // About panel
|
||||
// switch off PID's supported'
|
||||
prt.setService(ElmProt.OBD_SVC_VEH_INFO);
|
||||
break;
|
||||
|
||||
case 1: // Trouble code panel
|
||||
// we don't set any service here
|
||||
// since service is selected by buttons
|
||||
prt.setService(ElmProt.OBD_SVC_NONE);
|
||||
break;
|
||||
|
||||
case 2: // freeze frame panel
|
||||
// write data initialisation telegram
|
||||
prt.setService(ElmProt.OBD_SVC_FREEZEFRAME);
|
||||
break;
|
||||
|
||||
case 3: // data item panel
|
||||
// write data initialisation telegram
|
||||
prt.setService(ElmProt.OBD_SVC_DATA);
|
||||
break;
|
||||
|
||||
case 4: // CAN monitor panel
|
||||
// write data initialisation telegram
|
||||
prt.setService(ElmProt.OBD_SVC_CAN_MONITOR);
|
||||
break;
|
||||
|
||||
default:
|
||||
// switch off PID's supported'
|
||||
prt.setService(ElmProt.OBD_SVC_NONE);
|
||||
// do nothing
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* The main routine
|
||||
*
|
||||
* @param args the command line arguments
|
||||
*/
|
||||
public static void main(String args[])
|
||||
{
|
||||
ObdTestFrame frm = new ObdTestFrame();
|
||||
frm.setVisible(true);
|
||||
// command line argument is the com port
|
||||
if (args.length > 0)
|
||||
{
|
||||
try
|
||||
{
|
||||
ser.setDeviceName(args[0]);
|
||||
} catch (Exception ex)
|
||||
{
|
||||
JOptionPane.showMessageDialog(frm,
|
||||
ex,
|
||||
"Communication error",
|
||||
JOptionPane.ERROR_MESSAGE);
|
||||
}
|
||||
ser.start();
|
||||
} else
|
||||
{
|
||||
// without parameter we do internal telegram simulation ...
|
||||
Thread sim = new Thread(prt);
|
||||
sim.start();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Property change listener to ELM-Protocol
|
||||
*
|
||||
* @param evt the property change event to be handled
|
||||
*/
|
||||
public void propertyChange(PropertyChangeEvent evt)
|
||||
{
|
||||
/* handle protocol status changes */
|
||||
if (evt.getPropertyName().equals("status"))
|
||||
{
|
||||
lblStatus.setText(evt.getNewValue().toString());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* update the column widths of data table
|
||||
*/
|
||||
private void updateColumnWidths()
|
||||
{
|
||||
if (TblVehIDs.getRowCount() >= 1)
|
||||
{
|
||||
/** set column sizes here, since this only works with inserted data */
|
||||
TblVehIDs.getColumn(EcuDataPv.FIELDS[EcuDataPv.FID_PID]).setPreferredWidth(20);
|
||||
TblVehIDs.getColumn(EcuDataPv.FIELDS[EcuDataPv.FID_OFS]).setPreferredWidth(20);
|
||||
TblVehIDs.getColumn(EcuDataPv.FIELDS[EcuDataPv.FID_DESCRIPT]).setPreferredWidth(350);
|
||||
TblVehIDs.getColumn(EcuDataPv.FIELDS[EcuDataPv.FID_VALUE]).setPreferredWidth(350);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* handle changes in the process var(s)
|
||||
*
|
||||
* @param event Process var event to be handled
|
||||
*/
|
||||
public void pvChanged(PvChangeEvent event)
|
||||
{
|
||||
// update table column widths
|
||||
updateColumnWidths();
|
||||
}
|
||||
|
||||
// Variables declaration - do not modify//GEN-BEGIN:variables
|
||||
private com.fr3ts0n.pvs.gui.PvTable TblVehIDs;
|
||||
@SuppressWarnings("rawtypes")
|
||||
private javax.swing.JComboBox cbCnvSystem;
|
||||
@SuppressWarnings("rawtypes")
|
||||
private javax.swing.JComboBox cbProtocol;
|
||||
private javax.swing.JFileChooser fChoose;
|
||||
private javax.swing.JLabel lblStatus;
|
||||
private javax.swing.JMenuItem miCommConfigure;
|
||||
private javax.swing.JMenuItem miCommInit;
|
||||
private javax.swing.JMenuItem miCommStart;
|
||||
private javax.swing.JMenuItem miCommStop;
|
||||
private javax.swing.JMenuItem miLoad;
|
||||
private javax.swing.JMenuItem miSave;
|
||||
private com.fr3ts0n.ecu.gui.application.ObdDataPanel panCanData;
|
||||
private com.fr3ts0n.ecu.gui.application.ObdDataPanel panObdData;
|
||||
private com.fr3ts0n.ecu.gui.application.ObdDtcPanel panObdDtc;
|
||||
private com.fr3ts0n.ecu.gui.application.ObdDataPanel panObdFreezeFrame;
|
||||
private javax.swing.JTabbedPane tabMain;
|
||||
// End of variables declaration//GEN-END:variables
|
||||
|
||||
}
|
||||
@@ -0,0 +1,208 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
|
||||
<Form version="1.3" maxVersion="1.7" type="org.netbeans.modules.form.forminfo.JPanelFormInfo">
|
||||
<Properties>
|
||||
<Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
|
||||
<Font name="Dialog" size="10" style="0"/>
|
||||
</Property>
|
||||
</Properties>
|
||||
<AuxValues>
|
||||
<AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="0"/>
|
||||
<AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
|
||||
<AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/>
|
||||
<AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/>
|
||||
<AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="false"/>
|
||||
<AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/>
|
||||
<AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
|
||||
<AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
|
||||
<AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/>
|
||||
<AuxValue name="designerSize" type="java.awt.Dimension" value="-84,-19,0,5,115,114,0,18,106,97,118,97,46,97,119,116,46,68,105,109,101,110,115,105,111,110,65,-114,-39,-41,-84,95,68,20,2,0,2,73,0,6,104,101,105,103,104,116,73,0,5,119,105,100,116,104,120,112,0,0,0,111,0,0,1,-62"/>
|
||||
</AuxValues>
|
||||
|
||||
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout"/>
|
||||
<SubComponents>
|
||||
<Container class="javax.swing.JPanel" name="jPanel1">
|
||||
<Constraints>
|
||||
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout" value="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout$BorderConstraintsDescription">
|
||||
<BorderConstraints direction="Center"/>
|
||||
</Constraint>
|
||||
</Constraints>
|
||||
|
||||
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout"/>
|
||||
<SubComponents>
|
||||
<Container class="javax.swing.JPanel" name="panStatus">
|
||||
<Properties>
|
||||
<Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
|
||||
<Border info="org.netbeans.modules.form.compat2.border.TitledBorderInfo">
|
||||
<TitledBorder title="Status">
|
||||
<Font PropertyName="font" name="Dialog" size="10" style="0"/>
|
||||
</TitledBorder>
|
||||
</Border>
|
||||
</Property>
|
||||
</Properties>
|
||||
<Constraints>
|
||||
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
|
||||
<GridBagConstraints gridX="0" gridY="0" gridWidth="1" gridHeight="1" fill="1" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="11" weightX="1.0" weightY="0.0"/>
|
||||
</Constraint>
|
||||
</Constraints>
|
||||
|
||||
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout"/>
|
||||
<SubComponents>
|
||||
<Container class="javax.swing.JPanel" name="panMilStatus">
|
||||
<Properties>
|
||||
<Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
|
||||
<Border info="org.netbeans.modules.form.compat2.border.TitledBorderInfo">
|
||||
<TitledBorder title="MIL status">
|
||||
<Font PropertyName="font" name="Dialog" size="10" style="0"/>
|
||||
</TitledBorder>
|
||||
</Border>
|
||||
</Property>
|
||||
<Property name="enabled" type="boolean" value="false"/>
|
||||
</Properties>
|
||||
<Constraints>
|
||||
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
|
||||
<GridBagConstraints gridX="0" gridY="0" gridWidth="1" gridHeight="1" fill="1" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="1.0" weightY="0.0"/>
|
||||
</Constraint>
|
||||
</Constraints>
|
||||
|
||||
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout"/>
|
||||
<SubComponents>
|
||||
<Component class="javax.swing.JCheckBox" name="cbMilStatus">
|
||||
<Properties>
|
||||
<Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
|
||||
<Font name="Dialog" size="10" style="0"/>
|
||||
</Property>
|
||||
<Property name="text" type="java.lang.String" value="MIL on"/>
|
||||
<Property name="enabled" type="boolean" value="false"/>
|
||||
</Properties>
|
||||
<Constraints>
|
||||
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout" value="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout$BorderConstraintsDescription">
|
||||
<BorderConstraints direction="Center"/>
|
||||
</Constraint>
|
||||
</Constraints>
|
||||
</Component>
|
||||
</SubComponents>
|
||||
</Container>
|
||||
<Container class="javax.swing.JPanel" name="panTestStatus">
|
||||
<Properties>
|
||||
<Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
|
||||
<Border info="org.netbeans.modules.form.compat2.border.TitledBorderInfo">
|
||||
<TitledBorder title="DTC com.fr3ts0n.test status">
|
||||
<Font PropertyName="font" name="Dialog" size="10" style="0"/>
|
||||
</TitledBorder>
|
||||
</Border>
|
||||
</Property>
|
||||
<Property name="enabled" type="boolean" value="false"/>
|
||||
</Properties>
|
||||
<Constraints>
|
||||
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
|
||||
<GridBagConstraints gridX="-1" gridY="-1" gridWidth="1" gridHeight="1" fill="1" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="1.0" weightY="0.0"/>
|
||||
</Constraint>
|
||||
</Constraints>
|
||||
|
||||
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout"/>
|
||||
<SubComponents>
|
||||
<Component class="javax.swing.JCheckBox" name="cbTestComplete">
|
||||
<Properties>
|
||||
<Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
|
||||
<Font name="Dialog" size="10" style="0"/>
|
||||
</Property>
|
||||
<Property name="text" type="java.lang.String" value="DTC com.fr3ts0n.test complete"/>
|
||||
<Property name="enabled" type="boolean" value="false"/>
|
||||
</Properties>
|
||||
<Constraints>
|
||||
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout" value="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout$BorderConstraintsDescription">
|
||||
<BorderConstraints direction="Center"/>
|
||||
</Constraint>
|
||||
</Constraints>
|
||||
</Component>
|
||||
</SubComponents>
|
||||
</Container>
|
||||
<Container class="javax.swing.JPanel" name="panFaultStatus">
|
||||
<Properties>
|
||||
<Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
|
||||
<Border info="org.netbeans.modules.form.compat2.border.TitledBorderInfo">
|
||||
<TitledBorder title="Fault status">
|
||||
<Font PropertyName="font" name="Dialog" size="10" style="0"/>
|
||||
</TitledBorder>
|
||||
</Border>
|
||||
</Property>
|
||||
<Property name="enabled" type="boolean" value="false"/>
|
||||
</Properties>
|
||||
<Constraints>
|
||||
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
|
||||
<GridBagConstraints gridX="-1" gridY="-1" gridWidth="1" gridHeight="1" fill="1" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="1.0" weightY="0.0"/>
|
||||
</Constraint>
|
||||
</Constraints>
|
||||
|
||||
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignGridLayout">
|
||||
<Property name="columns" type="int" value="3"/>
|
||||
<Property name="rows" type="int" value="0"/>
|
||||
</Layout>
|
||||
<SubComponents>
|
||||
<Component class="javax.swing.JCheckBox" name="cbSporadic">
|
||||
<Properties>
|
||||
<Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
|
||||
<Font name="Dialog" size="10" style="0"/>
|
||||
</Property>
|
||||
<Property name="text" type="java.lang.String" value="sporadic"/>
|
||||
<Property name="enabled" type="boolean" value="false"/>
|
||||
</Properties>
|
||||
</Component>
|
||||
<Component class="javax.swing.JCheckBox" name="cbShortTerm">
|
||||
<Properties>
|
||||
<Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
|
||||
<Font name="Dialog" size="10" style="0"/>
|
||||
</Property>
|
||||
<Property name="text" type="java.lang.String" value="short term"/>
|
||||
<Property name="enabled" type="boolean" value="false"/>
|
||||
</Properties>
|
||||
</Component>
|
||||
<Component class="javax.swing.JCheckBox" name="cbStatic">
|
||||
<Properties>
|
||||
<Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
|
||||
<Font name="Dialog" size="10" style="0"/>
|
||||
</Property>
|
||||
<Property name="text" type="java.lang.String" value="static"/>
|
||||
<Property name="enabled" type="boolean" value="false"/>
|
||||
</Properties>
|
||||
</Component>
|
||||
</SubComponents>
|
||||
</Container>
|
||||
</SubComponents>
|
||||
</Container>
|
||||
<Container class="javax.swing.JPanel" name="panSymptom">
|
||||
<Properties>
|
||||
<Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
|
||||
<Border info="org.netbeans.modules.form.compat2.border.TitledBorderInfo">
|
||||
<TitledBorder title="Symptom">
|
||||
<Font PropertyName="font" name="Dialog" size="10" style="0"/>
|
||||
</TitledBorder>
|
||||
</Border>
|
||||
</Property>
|
||||
</Properties>
|
||||
<Constraints>
|
||||
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
|
||||
<GridBagConstraints gridX="0" gridY="1" gridWidth="1" gridHeight="1" fill="1" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="15" weightX="1.0" weightY="1.0"/>
|
||||
</Constraint>
|
||||
</Constraints>
|
||||
|
||||
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout"/>
|
||||
<SubComponents>
|
||||
<Component class="javax.swing.JLabel" name="lblSymptom">
|
||||
<Properties>
|
||||
<Property name="text" type="java.lang.String" value="Symptom"/>
|
||||
<Property name="enabled" type="boolean" value="false"/>
|
||||
</Properties>
|
||||
<Constraints>
|
||||
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout" value="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout$BorderConstraintsDescription">
|
||||
<BorderConstraints direction="Center"/>
|
||||
</Constraint>
|
||||
</Constraints>
|
||||
</Component>
|
||||
</SubComponents>
|
||||
</Container>
|
||||
</SubComponents>
|
||||
</Container>
|
||||
</SubComponents>
|
||||
</Form>
|
||||
@@ -0,0 +1,203 @@
|
||||
/*
|
||||
* (C) Copyright 2015 by fr3ts0n <erwin.scheuch-heilig@gmx.at>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of
|
||||
* the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
||||
* MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
package com.fr3ts0n.ecu.gui.application;
|
||||
|
||||
/**
|
||||
* Fault code propertiy panel
|
||||
*
|
||||
* @author erwin
|
||||
*/
|
||||
public class VagCodeStatPanel extends javax.swing.JPanel
|
||||
{
|
||||
public static final long serialVersionUID = 1L;
|
||||
|
||||
/** DFC symptoms to display */
|
||||
private static final String[] Symptoms =
|
||||
{
|
||||
"No display",
|
||||
"Value above MAX",
|
||||
"Value below MIN",
|
||||
"Mechanical fault",
|
||||
"No signal / no communication",
|
||||
"Base adjustment / adaption",
|
||||
"Shortcut to battery",
|
||||
"Shortcut to ground",
|
||||
"Signal plausibility",
|
||||
"Open load / Shortcut to ground",
|
||||
"Open load / Shortcut to battery",
|
||||
"Open load",
|
||||
"Electric fault ",
|
||||
"Please read fault codes",
|
||||
"Defect",
|
||||
"Currently not checkable",
|
||||
};
|
||||
|
||||
/** Creates new form VagCodeStatPanel */
|
||||
public VagCodeStatPanel()
|
||||
{
|
||||
initComponents();
|
||||
}
|
||||
|
||||
/**
|
||||
* This method is called from within the constructor to
|
||||
* initialize the form.
|
||||
* WARNING: Do NOT modify this code. The content of this method is
|
||||
* always regenerated by the Form Editor.
|
||||
*/
|
||||
|
||||
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
|
||||
private void initComponents()
|
||||
{
|
||||
java.awt.GridBagConstraints gridBagConstraints;
|
||||
|
||||
javax.swing.JPanel jPanel1 = new javax.swing.JPanel();
|
||||
javax.swing.JPanel panStatus = new javax.swing.JPanel();
|
||||
javax.swing.JPanel panMilStatus = new javax.swing.JPanel();
|
||||
cbMilStatus = new javax.swing.JCheckBox();
|
||||
javax.swing.JPanel panTestStatus = new javax.swing.JPanel();
|
||||
cbTestComplete = new javax.swing.JCheckBox();
|
||||
javax.swing.JPanel panFaultStatus = new javax.swing.JPanel();
|
||||
cbSporadic = new javax.swing.JCheckBox();
|
||||
cbShortTerm = new javax.swing.JCheckBox();
|
||||
cbStatic = new javax.swing.JCheckBox();
|
||||
javax.swing.JPanel panSymptom = new javax.swing.JPanel();
|
||||
lblSymptom = new javax.swing.JLabel();
|
||||
|
||||
setFont(new java.awt.Font("Dialog", 0, 10)); // NOI18N
|
||||
setLayout(new java.awt.BorderLayout());
|
||||
|
||||
jPanel1.setLayout(new java.awt.GridBagLayout());
|
||||
|
||||
panStatus.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Status", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Dialog", 0, 10))); // NOI18N
|
||||
panStatus.setLayout(new java.awt.GridBagLayout());
|
||||
|
||||
panMilStatus
|
||||
.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "MIL status", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Dialog", 0, 10))); // NOI18N
|
||||
panMilStatus.setEnabled(false);
|
||||
panMilStatus.setLayout(new java.awt.BorderLayout());
|
||||
|
||||
cbMilStatus.setFont(new java.awt.Font("Dialog", 0, 10)); // NOI18N
|
||||
cbMilStatus.setText("MIL on");
|
||||
cbMilStatus.setEnabled(false);
|
||||
panMilStatus.add(cbMilStatus, java.awt.BorderLayout.CENTER);
|
||||
|
||||
gridBagConstraints = new java.awt.GridBagConstraints();
|
||||
gridBagConstraints.gridx = 0;
|
||||
gridBagConstraints.gridy = 0;
|
||||
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
|
||||
gridBagConstraints.weightx = 1.0;
|
||||
panStatus.add(panMilStatus, gridBagConstraints);
|
||||
|
||||
panTestStatus.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "DTC com.fr3ts0n.test status", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Dialog", 0, 10))); // NOI18N
|
||||
panTestStatus.setEnabled(false);
|
||||
panTestStatus.setLayout(new java.awt.BorderLayout());
|
||||
|
||||
cbTestComplete.setFont(new java.awt.Font("Dialog", 0, 10)); // NOI18N
|
||||
cbTestComplete.setText("DTC com.fr3ts0n.test complete");
|
||||
cbTestComplete.setEnabled(false);
|
||||
panTestStatus.add(cbTestComplete, java.awt.BorderLayout.CENTER);
|
||||
|
||||
gridBagConstraints = new java.awt.GridBagConstraints();
|
||||
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
|
||||
gridBagConstraints.weightx = 1.0;
|
||||
panStatus.add(panTestStatus, gridBagConstraints);
|
||||
|
||||
panFaultStatus
|
||||
.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Fault status", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Dialog", 0, 10))); // NOI18N
|
||||
panFaultStatus.setEnabled(false);
|
||||
panFaultStatus.setLayout(new java.awt.GridLayout(0, 3));
|
||||
|
||||
cbSporadic.setFont(new java.awt.Font("Dialog", 0, 10));
|
||||
cbSporadic.setText("sporadic");
|
||||
cbSporadic.setEnabled(false);
|
||||
panFaultStatus.add(cbSporadic);
|
||||
|
||||
cbShortTerm.setFont(new java.awt.Font("Dialog", 0, 10));
|
||||
cbShortTerm.setText("short term");
|
||||
cbShortTerm.setEnabled(false);
|
||||
panFaultStatus.add(cbShortTerm);
|
||||
|
||||
cbStatic.setFont(new java.awt.Font("Dialog", 0, 10));
|
||||
cbStatic.setText("static");
|
||||
cbStatic.setEnabled(false);
|
||||
panFaultStatus.add(cbStatic);
|
||||
|
||||
gridBagConstraints = new java.awt.GridBagConstraints();
|
||||
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
|
||||
gridBagConstraints.weightx = 1.0;
|
||||
panStatus.add(panFaultStatus, gridBagConstraints);
|
||||
|
||||
gridBagConstraints = new java.awt.GridBagConstraints();
|
||||
gridBagConstraints.gridx = 0;
|
||||
gridBagConstraints.gridy = 0;
|
||||
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
|
||||
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTH;
|
||||
gridBagConstraints.weightx = 1.0;
|
||||
jPanel1.add(panStatus, gridBagConstraints);
|
||||
|
||||
panSymptom.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Symptom", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Dialog", 0, 10))); // NOI18N
|
||||
panSymptom.setLayout(new java.awt.BorderLayout());
|
||||
|
||||
lblSymptom.setText("Symptom");
|
||||
lblSymptom.setEnabled(false);
|
||||
panSymptom.add(lblSymptom, java.awt.BorderLayout.CENTER);
|
||||
|
||||
gridBagConstraints = new java.awt.GridBagConstraints();
|
||||
gridBagConstraints.gridx = 0;
|
||||
gridBagConstraints.gridy = 1;
|
||||
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
|
||||
gridBagConstraints.anchor = java.awt.GridBagConstraints.SOUTH;
|
||||
gridBagConstraints.weightx = 1.0;
|
||||
gridBagConstraints.weighty = 1.0;
|
||||
jPanel1.add(panSymptom, gridBagConstraints);
|
||||
|
||||
add(jPanel1, java.awt.BorderLayout.CENTER);
|
||||
}// </editor-fold>//GEN-END:initComponents
|
||||
|
||||
/**
|
||||
* set all status flags from status integer
|
||||
*
|
||||
* @param newStatus DFC status
|
||||
*/
|
||||
public void setStatusFlags(int newStatus)
|
||||
{
|
||||
int symptom = newStatus & 0x0F;
|
||||
boolean testComplete = (newStatus & 0x10) == 0x10;
|
||||
boolean sporadic = (newStatus & 0x60) == 0x20;
|
||||
boolean shortTerm = (newStatus & 0x60) == 0x40;
|
||||
boolean staticFault = (newStatus & 0x60) == 0x60;
|
||||
boolean milStatus = (newStatus & 0x80) == 0x80;
|
||||
lblSymptom.setText(Symptoms[symptom]);
|
||||
cbTestComplete.setSelected(testComplete);
|
||||
cbSporadic.setSelected(sporadic);
|
||||
cbShortTerm.setSelected(shortTerm);
|
||||
cbStatic.setSelected(staticFault);
|
||||
cbMilStatus.setSelected(milStatus);
|
||||
}
|
||||
|
||||
// Variables declaration - do not modify//GEN-BEGIN:variables
|
||||
private javax.swing.JCheckBox cbMilStatus;
|
||||
private javax.swing.JCheckBox cbShortTerm;
|
||||
private javax.swing.JCheckBox cbSporadic;
|
||||
private javax.swing.JCheckBox cbStatic;
|
||||
private javax.swing.JCheckBox cbTestComplete;
|
||||
private javax.swing.JLabel lblSymptom;
|
||||
// End of variables declaration//GEN-END:variables
|
||||
|
||||
}
|
||||
@@ -0,0 +1,599 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
|
||||
<Form version="1.2" maxVersion="1.2" type="org.netbeans.modules.form.forminfo.JFrameFormInfo">
|
||||
<NonVisualComponents>
|
||||
<Component class="javax.swing.JFileChooser" name="fChoose">
|
||||
<Properties>
|
||||
<Property name="fileFilter" type="javax.swing.filechooser.FileFilter" editor="org.netbeans.modules.form.RADConnectionPropertyEditor">
|
||||
<Connection code="new ObdFileFilter()" type="code"/>
|
||||
</Property>
|
||||
<Property name="fileSelectionMode" type="int" value="2"/>
|
||||
</Properties>
|
||||
</Component>
|
||||
<Component class="com.fr3ts0n.ecu.AboutPanel" name="panAbout">
|
||||
<Properties>
|
||||
<Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor">
|
||||
<Image iconType="0" name="null"/>
|
||||
</Property>
|
||||
</Properties>
|
||||
</Component>
|
||||
<Menu class="javax.swing.JMenuBar" name="mbMain">
|
||||
<Properties>
|
||||
<Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
|
||||
<Font name="Dialog" size="10" style="0"/>
|
||||
</Property>
|
||||
</Properties>
|
||||
<SubComponents>
|
||||
<Menu class="javax.swing.JMenu" name="mnuFile">
|
||||
<Properties>
|
||||
<Property name="mnemonic" type="int" value="70"/>
|
||||
<Property name="text" type="java.lang.String" value="File"/>
|
||||
<Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
|
||||
<Font name="Dialog" size="10" style="0"/>
|
||||
</Property>
|
||||
</Properties>
|
||||
<SubComponents>
|
||||
<MenuItem class="javax.swing.JMenuItem" name="miLoad">
|
||||
<Properties>
|
||||
<Property name="accelerator" type="javax.swing.KeyStroke" editor="org.netbeans.modules.form.editors.KeyStrokeEditor">
|
||||
<KeyStroke key="F3"/>
|
||||
</Property>
|
||||
<Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
|
||||
<Font name="Dialog" size="10" style="0"/>
|
||||
</Property>
|
||||
<Property name="mnemonic" type="int" value="76"/>
|
||||
<Property name="text" type="java.lang.String" value="Load measurement"/>
|
||||
</Properties>
|
||||
<Events>
|
||||
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="miLoadActionPerformed"/>
|
||||
</Events>
|
||||
</MenuItem>
|
||||
<MenuItem class="javax.swing.JMenuItem" name="miSave">
|
||||
<Properties>
|
||||
<Property name="accelerator" type="javax.swing.KeyStroke" editor="org.netbeans.modules.form.editors.KeyStrokeEditor">
|
||||
<KeyStroke key="F4"/>
|
||||
</Property>
|
||||
<Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
|
||||
<Font name="Dialog" size="10" style="0"/>
|
||||
</Property>
|
||||
<Property name="mnemonic" type="int" value="83"/>
|
||||
<Property name="text" type="java.lang.String" value="Save measurement"/>
|
||||
</Properties>
|
||||
<Events>
|
||||
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="miSaveActionPerformed"/>
|
||||
</Events>
|
||||
</MenuItem>
|
||||
</SubComponents>
|
||||
</Menu>
|
||||
<Menu class="javax.swing.JMenu" name="mnuComm">
|
||||
<Properties>
|
||||
<Property name="mnemonic" type="int" value="67"/>
|
||||
<Property name="text" type="java.lang.String" value="Communication"/>
|
||||
<Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
|
||||
<Font name="Dialog" size="10" style="0"/>
|
||||
</Property>
|
||||
</Properties>
|
||||
<SubComponents>
|
||||
<MenuItem class="javax.swing.JMenuItem" name="miCommConfigure">
|
||||
<Properties>
|
||||
<Property name="accelerator" type="javax.swing.KeyStroke" editor="org.netbeans.modules.form.editors.KeyStrokeEditor">
|
||||
<KeyStroke key="F8"/>
|
||||
</Property>
|
||||
<Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
|
||||
<Font name="Dialog" size="10" style="0"/>
|
||||
</Property>
|
||||
<Property name="mnemonic" type="int" value="67"/>
|
||||
<Property name="text" type="java.lang.String" value="Port Configuration..."/>
|
||||
</Properties>
|
||||
<Events>
|
||||
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="miCommConfigureActionPerformed"/>
|
||||
</Events>
|
||||
</MenuItem>
|
||||
<MenuItem class="javax.swing.JMenuItem" name="miCommInit">
|
||||
<Properties>
|
||||
<Property name="accelerator" type="javax.swing.KeyStroke" editor="org.netbeans.modules.form.editors.KeyStrokeEditor">
|
||||
<KeyStroke key="F5"/>
|
||||
</Property>
|
||||
<Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
|
||||
<Font name="Dialog" size="10" style="0"/>
|
||||
</Property>
|
||||
<Property name="mnemonic" type="int" value="73"/>
|
||||
<Property name="text" type="java.lang.String" value="Initialize"/>
|
||||
</Properties>
|
||||
<Events>
|
||||
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="connectEcu"/>
|
||||
</Events>
|
||||
</MenuItem>
|
||||
<MenuItem class="javax.swing.JMenuItem" name="miCommStop">
|
||||
<Properties>
|
||||
<Property name="accelerator" type="javax.swing.KeyStroke" editor="org.netbeans.modules.form.editors.KeyStrokeEditor">
|
||||
<KeyStroke key="F6"/>
|
||||
</Property>
|
||||
<Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
|
||||
<Font name="Dialog" size="10" style="0"/>
|
||||
</Property>
|
||||
<Property name="mnemonic" type="int" value="112"/>
|
||||
<Property name="text" type="java.lang.String" value="Stop"/>
|
||||
</Properties>
|
||||
<Events>
|
||||
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="miCommStopActionPerformed"/>
|
||||
</Events>
|
||||
</MenuItem>
|
||||
</SubComponents>
|
||||
</Menu>
|
||||
<Menu class="javax.swing.JMenu" name="mnuHelp">
|
||||
<Properties>
|
||||
<Property name="mnemonic" type="int" value="72"/>
|
||||
<Property name="text" type="java.lang.String" value="Help"/>
|
||||
<Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
|
||||
<Font name="Dialog" size="10" style="0"/>
|
||||
</Property>
|
||||
</Properties>
|
||||
<SubComponents>
|
||||
<MenuItem class="javax.swing.JMenuItem" name="miAbout">
|
||||
<Properties>
|
||||
<Property name="accelerator" type="javax.swing.KeyStroke" editor="org.netbeans.modules.form.editors.KeyStrokeEditor">
|
||||
<KeyStroke key="F1"/>
|
||||
</Property>
|
||||
<Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
|
||||
<Font name="Dialog" size="10" style="0"/>
|
||||
</Property>
|
||||
<Property name="mnemonic" type="int" value="65"/>
|
||||
<Property name="text" type="java.lang.String" value="About"/>
|
||||
</Properties>
|
||||
<Events>
|
||||
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="miAboutActionPerformed"/>
|
||||
</Events>
|
||||
</MenuItem>
|
||||
</SubComponents>
|
||||
</Menu>
|
||||
</SubComponents>
|
||||
</Menu>
|
||||
</NonVisualComponents>
|
||||
<Properties>
|
||||
<Property name="defaultCloseOperation" type="int" value="3"/>
|
||||
<Property name="title" type="java.lang.String" editor="org.netbeans.modules.form.RADConnectionPropertyEditor">
|
||||
<Connection code="product+" "+version" type="code"/>
|
||||
</Property>
|
||||
</Properties>
|
||||
<SyntheticProperties>
|
||||
<SyntheticProperty name="menuBar" type="java.lang.String" value="mbMain"/>
|
||||
<SyntheticProperty name="formSizePolicy" type="int" value="1"/>
|
||||
</SyntheticProperties>
|
||||
<AuxValues>
|
||||
<AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="0"/>
|
||||
<AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
|
||||
<AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/>
|
||||
<AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/>
|
||||
<AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="false"/>
|
||||
<AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="2"/>
|
||||
<AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="1"/>
|
||||
<AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
|
||||
<AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/>
|
||||
<AuxValue name="designerSize" type="java.awt.Dimension" value="-84,-19,0,5,115,114,0,18,106,97,118,97,46,97,119,116,46,68,105,109,101,110,115,105,111,110,65,-114,-39,-41,-84,95,68,20,2,0,2,73,0,6,104,101,105,103,104,116,73,0,5,119,105,100,116,104,120,112,0,0,1,-100,0,0,1,-54"/>
|
||||
</AuxValues>
|
||||
|
||||
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout"/>
|
||||
<SubComponents>
|
||||
<Container class="javax.swing.JTabbedPane" name="tabMain">
|
||||
<Properties>
|
||||
<Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
|
||||
<Font name="Dialog" size="10" style="0"/>
|
||||
</Property>
|
||||
<Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
|
||||
<Dimension value="[520, 350]"/>
|
||||
</Property>
|
||||
</Properties>
|
||||
<Events>
|
||||
<EventHandler event="stateChanged" listener="javax.swing.event.ChangeListener" parameters="javax.swing.event.ChangeEvent" handler="tabMainStateChanged"/>
|
||||
</Events>
|
||||
<Constraints>
|
||||
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout" value="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout$BorderConstraintsDescription">
|
||||
<BorderConstraints direction="Center"/>
|
||||
</Constraint>
|
||||
</Constraints>
|
||||
|
||||
<Layout class="org.netbeans.modules.form.compat2.layouts.support.JTabbedPaneSupportLayout"/>
|
||||
<SubComponents>
|
||||
<Container class="javax.swing.JPanel" name="panStart">
|
||||
<Properties>
|
||||
<Property name="background" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor">
|
||||
<Color blue="ff" green="ff" red="ff" type="rgb"/>
|
||||
</Property>
|
||||
</Properties>
|
||||
<Constraints>
|
||||
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.support.JTabbedPaneSupportLayout" value="org.netbeans.modules.form.compat2.layouts.support.JTabbedPaneSupportLayout$JTabbedPaneConstraintsDescription">
|
||||
<JTabbedPaneConstraints tabName="About">
|
||||
<Property name="tabTitle" type="java.lang.String" value="About"/>
|
||||
</JTabbedPaneConstraints>
|
||||
</Constraint>
|
||||
</Constraints>
|
||||
|
||||
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout"/>
|
||||
<SubComponents>
|
||||
<Component class="javax.swing.JLabel" name="lblFooter">
|
||||
<Properties>
|
||||
<Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
|
||||
<Font name="Dialog" size="10" style="0"/>
|
||||
</Property>
|
||||
<Property name="horizontalAlignment" type="int" value="0"/>
|
||||
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.form.RADConnectionPropertyEditor">
|
||||
<Connection code="copyright" type="code"/>
|
||||
</Property>
|
||||
</Properties>
|
||||
<Constraints>
|
||||
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout" value="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout$BorderConstraintsDescription">
|
||||
<BorderConstraints direction="South"/>
|
||||
</Constraint>
|
||||
</Constraints>
|
||||
</Component>
|
||||
<Container class="javax.swing.JPanel" name="jPanel1">
|
||||
<Properties>
|
||||
<Property name="background" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor">
|
||||
<Color blue="ff" green="ff" red="ff" type="rgb"/>
|
||||
</Property>
|
||||
<Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
|
||||
<Border info="org.netbeans.modules.form.compat2.border.EmptyBorderInfo">
|
||||
<EmptyBorder bottom="10" left="10" right="10" top="10"/>
|
||||
</Border>
|
||||
</Property>
|
||||
</Properties>
|
||||
<Constraints>
|
||||
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout" value="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout$BorderConstraintsDescription">
|
||||
<BorderConstraints direction="Center"/>
|
||||
</Constraint>
|
||||
</Constraints>
|
||||
|
||||
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout">
|
||||
<Property name="verticalGap" type="int" value="25"/>
|
||||
</Layout>
|
||||
<SubComponents>
|
||||
<Component class="javax.swing.JLabel" name="lblTitle">
|
||||
<Properties>
|
||||
<Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
|
||||
<Font name="Dialog" size="18" style="1"/>
|
||||
</Property>
|
||||
<Property name="horizontalAlignment" type="int" value="0"/>
|
||||
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.form.RADConnectionPropertyEditor">
|
||||
<Connection code="product" type="code"/>
|
||||
</Property>
|
||||
<Property name="verticalAlignment" type="int" value="1"/>
|
||||
</Properties>
|
||||
<Constraints>
|
||||
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout" value="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout$BorderConstraintsDescription">
|
||||
<BorderConstraints direction="North"/>
|
||||
</Constraint>
|
||||
</Constraints>
|
||||
</Component>
|
||||
<Component class="com.fr3ts0n.pvs.gui.PvTable" name="TblVehIDs">
|
||||
<Properties>
|
||||
<Property name="autoResizeMode" type="int" value="5"/>
|
||||
<Property name="focusable" type="boolean" value="false"/>
|
||||
<Property name="name" type="java.lang.String" value="TblVids" noResource="true"/>
|
||||
<Property name="opaque" type="boolean" value="false"/>
|
||||
<Property name="rowSelectionAllowed" type="boolean" value="false"/>
|
||||
<Property name="showGrid" type="boolean" value="false"/>
|
||||
</Properties>
|
||||
<AuxValues>
|
||||
<AuxValue name="JavaCodeGenerator_CreateCodeCustom" type="java.lang.String" value="new com.fr3ts0n.pvs.gui.PvTable(prt.VidPvs)"/>
|
||||
</AuxValues>
|
||||
<Constraints>
|
||||
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout" value="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout$BorderConstraintsDescription">
|
||||
<BorderConstraints direction="Center"/>
|
||||
</Constraint>
|
||||
</Constraints>
|
||||
</Component>
|
||||
<Component class="javax.swing.JLabel" name="jLabel1">
|
||||
<Properties>
|
||||
<Property name="horizontalAlignment" type="int" value="0"/>
|
||||
<Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor">
|
||||
<Image iconType="3" name="/com.fr3ts0n.ecu/res/javag.png"/>
|
||||
</Property>
|
||||
</Properties>
|
||||
<Constraints>
|
||||
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout" value="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout$BorderConstraintsDescription">
|
||||
<BorderConstraints direction="South"/>
|
||||
</Constraint>
|
||||
</Constraints>
|
||||
</Component>
|
||||
</SubComponents>
|
||||
</Container>
|
||||
</SubComponents>
|
||||
</Container>
|
||||
<Component class="com.fr3ts0n.ecu.ObdDtcPanel" name="panObdDtc">
|
||||
<Constraints>
|
||||
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.support.JTabbedPaneSupportLayout" value="org.netbeans.modules.form.compat2.layouts.support.JTabbedPaneSupportLayout$JTabbedPaneConstraintsDescription">
|
||||
<JTabbedPaneConstraints tabName="Fault Codes">
|
||||
<Property name="tabTitle" type="java.lang.String" value="Fault Codes"/>
|
||||
</JTabbedPaneConstraints>
|
||||
</Constraint>
|
||||
</Constraints>
|
||||
</Component>
|
||||
<Component class="com.fr3ts0n.ecu.ObdDataPanel" name="panObdData">
|
||||
<Constraints>
|
||||
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.support.JTabbedPaneSupportLayout" value="org.netbeans.modules.form.compat2.layouts.support.JTabbedPaneSupportLayout$JTabbedPaneConstraintsDescription">
|
||||
<JTabbedPaneConstraints tabName="Data">
|
||||
<Property name="tabTitle" type="java.lang.String" value="Data"/>
|
||||
</JTabbedPaneConstraints>
|
||||
</Constraint>
|
||||
</Constraints>
|
||||
</Component>
|
||||
</SubComponents>
|
||||
</Container>
|
||||
<Container class="javax.swing.JPanel" name="panFooter">
|
||||
<Constraints>
|
||||
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout" value="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout$BorderConstraintsDescription">
|
||||
<BorderConstraints direction="South"/>
|
||||
</Constraint>
|
||||
</Constraints>
|
||||
|
||||
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout"/>
|
||||
<SubComponents>
|
||||
<Component class="javax.swing.JLabel" name="lblMessage">
|
||||
<Properties>
|
||||
<Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
|
||||
<Font name="Dialog" size="10" style="0"/>
|
||||
</Property>
|
||||
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.form.RADConnectionPropertyEditor">
|
||||
<Connection code="String.format("%s %s", product,version)" type="code"/>
|
||||
</Property>
|
||||
<Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
|
||||
<Border info="org.netbeans.modules.form.compat2.border.BevelBorderInfo">
|
||||
<BevelBorder bevelType="1"/>
|
||||
</Border>
|
||||
</Property>
|
||||
</Properties>
|
||||
<Constraints>
|
||||
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
|
||||
<GridBagConstraints gridX="-1" gridY="-1" gridWidth="1" gridHeight="1" fill="1" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="1.0" weightY="0.0"/>
|
||||
</Constraint>
|
||||
</Constraints>
|
||||
</Component>
|
||||
<Component class="javax.swing.JLabel" name="lblStatus">
|
||||
<Properties>
|
||||
<Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
|
||||
<Font name="Dialog" size="10" style="0"/>
|
||||
</Property>
|
||||
<Property name="horizontalAlignment" type="int" value="0"/>
|
||||
<Property name="text" type="java.lang.String" value="Status"/>
|
||||
<Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
|
||||
<Border info="org.netbeans.modules.form.compat2.border.CompoundBorderInfo">
|
||||
<CompoundBorder>
|
||||
<Border PropertyName="outside" info="org.netbeans.modules.form.compat2.border.BevelBorderInfo">
|
||||
<BevelBorder bevelType="1"/>
|
||||
</Border>
|
||||
<Border PropertyName="inside" info="org.netbeans.modules.form.compat2.border.EmptyBorderInfo">
|
||||
<EmptyBorder bottom="1" left="3" right="3" top="1"/>
|
||||
</Border>
|
||||
</CompoundBorder>
|
||||
</Border>
|
||||
</Property>
|
||||
<Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
|
||||
<Dimension value="[90, 18]"/>
|
||||
</Property>
|
||||
<Property name="opaque" type="boolean" value="true"/>
|
||||
<Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
|
||||
<Dimension value="[90, 18]"/>
|
||||
</Property>
|
||||
</Properties>
|
||||
<Constraints>
|
||||
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
|
||||
<GridBagConstraints gridX="-1" gridY="-1" gridWidth="1" gridHeight="1" fill="1" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.0"/>
|
||||
</Constraint>
|
||||
</Constraints>
|
||||
</Component>
|
||||
<Component class="javax.swing.JLabel" name="lblBaud">
|
||||
<Properties>
|
||||
<Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
|
||||
<Font name="Dialog" size="10" style="0"/>
|
||||
</Property>
|
||||
<Property name="horizontalAlignment" type="int" value="11"/>
|
||||
<Property name="text" type="java.lang.String" value="BaudRate"/>
|
||||
<Property name="toolTipText" type="java.lang.String" value="Baud rate"/>
|
||||
<Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
|
||||
<Border info="org.netbeans.modules.form.compat2.border.BevelBorderInfo">
|
||||
<BevelBorder bevelType="1"/>
|
||||
</Border>
|
||||
</Property>
|
||||
<Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
|
||||
<Dimension value="[54, 16]"/>
|
||||
</Property>
|
||||
<Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
|
||||
<Dimension value="[54, 16]"/>
|
||||
</Property>
|
||||
</Properties>
|
||||
<Constraints>
|
||||
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
|
||||
<GridBagConstraints gridX="-1" gridY="-1" gridWidth="1" gridHeight="1" fill="1" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.0"/>
|
||||
</Constraint>
|
||||
</Constraints>
|
||||
</Component>
|
||||
<Component class="javax.swing.JComboBox" name="cbCnvSystem">
|
||||
<Properties>
|
||||
<Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
|
||||
<Font name="Dialog" size="10" style="0"/>
|
||||
</Property>
|
||||
<Property name="model" type="javax.swing.ComboBoxModel" editor="org.netbeans.modules.form.editors2.ComboBoxModelEditor">
|
||||
<StringArray count="2">
|
||||
<StringItem index="0" value="Metric"/>
|
||||
<StringItem index="1" value="Imperial"/>
|
||||
</StringArray>
|
||||
</Property>
|
||||
<Property name="toolTipText" type="java.lang.String" value="Select conversion system"/>
|
||||
<Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
|
||||
<Border info="org.netbeans.modules.form.compat2.border.BevelBorderInfo">
|
||||
<BevelBorder bevelType="1"/>
|
||||
</Border>
|
||||
</Property>
|
||||
<Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
|
||||
<Dimension value="[71, 23]"/>
|
||||
</Property>
|
||||
</Properties>
|
||||
<Events>
|
||||
<EventHandler event="itemStateChanged" listener="java.awt.event.ItemListener" parameters="java.awt.event.ItemEvent" handler="cbCnvSystemItemStateChanged"/>
|
||||
</Events>
|
||||
<Constraints>
|
||||
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
|
||||
<GridBagConstraints gridX="-1" gridY="-1" gridWidth="1" gridHeight="1" fill="1" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.0"/>
|
||||
</Constraint>
|
||||
</Constraints>
|
||||
</Component>
|
||||
</SubComponents>
|
||||
</Container>
|
||||
<Container class="javax.swing.JPanel" name="panHeader">
|
||||
<Constraints>
|
||||
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout" value="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout$BorderConstraintsDescription">
|
||||
<BorderConstraints direction="North"/>
|
||||
</Constraint>
|
||||
</Constraints>
|
||||
|
||||
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout"/>
|
||||
<SubComponents>
|
||||
<Container class="javax.swing.JToolBar" name="tbMain">
|
||||
<Properties>
|
||||
<Property name="floatable" type="boolean" value="false"/>
|
||||
<Property name="rollover" type="boolean" value="true"/>
|
||||
<Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
|
||||
<Font name="Dialog" size="10" style="0"/>
|
||||
</Property>
|
||||
</Properties>
|
||||
<Constraints>
|
||||
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout" value="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout$BorderConstraintsDescription">
|
||||
<BorderConstraints direction="North"/>
|
||||
</Constraint>
|
||||
</Constraints>
|
||||
|
||||
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignBoxLayout"/>
|
||||
<SubComponents>
|
||||
<Component class="javax.swing.JButton" name="btnLoad">
|
||||
<Properties>
|
||||
<Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
|
||||
<Font name="Dialog" size="10" style="0"/>
|
||||
</Property>
|
||||
<Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor">
|
||||
<Image iconType="3" name="/com.fr3ts0n.ois/fileopen.png"/>
|
||||
</Property>
|
||||
<Property name="toolTipText" type="java.lang.String" value="Load measurements"/>
|
||||
<Property name="borderPainted" type="boolean" value="false"/>
|
||||
<Property name="focusable" type="boolean" value="false"/>
|
||||
<Property name="horizontalTextPosition" type="int" value="0"/>
|
||||
<Property name="verticalTextPosition" type="int" value="3"/>
|
||||
</Properties>
|
||||
<Events>
|
||||
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="miLoadActionPerformed"/>
|
||||
</Events>
|
||||
</Component>
|
||||
<Component class="javax.swing.JButton" name="btnSave">
|
||||
<Properties>
|
||||
<Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
|
||||
<Font name="Dialog" size="10" style="0"/>
|
||||
</Property>
|
||||
<Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor">
|
||||
<Image iconType="3" name="/com.fr3ts0n.ois/filesaveas.png"/>
|
||||
</Property>
|
||||
<Property name="toolTipText" type="java.lang.String" value="Save measurements"/>
|
||||
<Property name="borderPainted" type="boolean" value="false"/>
|
||||
<Property name="focusable" type="boolean" value="false"/>
|
||||
<Property name="horizontalTextPosition" type="int" value="0"/>
|
||||
<Property name="verticalTextPosition" type="int" value="3"/>
|
||||
</Properties>
|
||||
<Events>
|
||||
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="miSaveActionPerformed"/>
|
||||
</Events>
|
||||
</Component>
|
||||
<Component class="javax.swing.JToolBar$Separator" name="jSeparator1">
|
||||
</Component>
|
||||
<Component class="javax.swing.JButton" name="btnConnect">
|
||||
<Properties>
|
||||
<Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
|
||||
<Font name="Dialog" size="10" style="0"/>
|
||||
</Property>
|
||||
<Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor">
|
||||
<Image iconType="3" name="/com.fr3ts0n.ois/connect_established.png"/>
|
||||
</Property>
|
||||
<Property name="toolTipText" type="java.lang.String" value="Start communication"/>
|
||||
<Property name="borderPainted" type="boolean" value="false"/>
|
||||
<Property name="focusable" type="boolean" value="false"/>
|
||||
<Property name="horizontalTextPosition" type="int" value="0"/>
|
||||
<Property name="verticalTextPosition" type="int" value="3"/>
|
||||
</Properties>
|
||||
<Events>
|
||||
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="connectEcu"/>
|
||||
</Events>
|
||||
</Component>
|
||||
<Component class="javax.swing.JButton" name="btnStop">
|
||||
<Properties>
|
||||
<Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
|
||||
<Font name="Dialog" size="10" style="0"/>
|
||||
</Property>
|
||||
<Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor">
|
||||
<Image iconType="3" name="/com.fr3ts0n.ois/no.png"/>
|
||||
</Property>
|
||||
<Property name="toolTipText" type="java.lang.String" value="Stop communication"/>
|
||||
<Property name="borderPainted" type="boolean" value="false"/>
|
||||
<Property name="focusable" type="boolean" value="false"/>
|
||||
<Property name="horizontalTextPosition" type="int" value="0"/>
|
||||
<Property name="verticalTextPosition" type="int" value="3"/>
|
||||
</Properties>
|
||||
<Events>
|
||||
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="miCommStopActionPerformed"/>
|
||||
</Events>
|
||||
</Component>
|
||||
<Component class="javax.swing.JButton" name="btnConfig">
|
||||
<Properties>
|
||||
<Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
|
||||
<Font name="Dialog" size="10" style="0"/>
|
||||
</Property>
|
||||
<Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor">
|
||||
<Image iconType="3" name="/com.fr3ts0n.ois/fileexport.png"/>
|
||||
</Property>
|
||||
<Property name="toolTipText" type="java.lang.String" value="Serial port configuratopn"/>
|
||||
<Property name="borderPainted" type="boolean" value="false"/>
|
||||
<Property name="focusable" type="boolean" value="false"/>
|
||||
<Property name="horizontalTextPosition" type="int" value="0"/>
|
||||
<Property name="verticalTextPosition" type="int" value="3"/>
|
||||
</Properties>
|
||||
<Events>
|
||||
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="miCommConfigureActionPerformed"/>
|
||||
</Events>
|
||||
</Component>
|
||||
<Component class="javax.swing.JToolBar$Separator" name="jSeparator2">
|
||||
</Component>
|
||||
<Component class="javax.swing.JComboBox" name="cbAddress">
|
||||
<Properties>
|
||||
<Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
|
||||
<Font name="Dialog" size="10" style="0"/>
|
||||
</Property>
|
||||
<Property name="toolTipText" type="java.lang.String" value="Select device/address"/>
|
||||
</Properties>
|
||||
<Events>
|
||||
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="cbAddressActionPerformed"/>
|
||||
</Events>
|
||||
</Component>
|
||||
<Component class="javax.swing.JToolBar$Separator" name="jSeparator3">
|
||||
</Component>
|
||||
<Component class="javax.swing.JComboBox" name="cbFrameNum">
|
||||
<Properties>
|
||||
<Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
|
||||
<Font name="Dialog" size="10" style="0"/>
|
||||
</Property>
|
||||
<Property name="model" type="javax.swing.ComboBoxModel" editor="org.netbeans.modules.form.editors2.ComboBoxModelEditor">
|
||||
<StringArray count="4">
|
||||
<StringItem index="0" value="Item 1"/>
|
||||
<StringItem index="1" value="Item 2"/>
|
||||
<StringItem index="2" value="Item 3"/>
|
||||
<StringItem index="3" value="Item 4"/>
|
||||
</StringArray>
|
||||
</Property>
|
||||
<Property name="toolTipText" type="java.lang.String" value="select Frame number to display"/>
|
||||
</Properties>
|
||||
<Events>
|
||||
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="cbFrameNumActionPerformed"/>
|
||||
</Events>
|
||||
</Component>
|
||||
</SubComponents>
|
||||
</Container>
|
||||
</SubComponents>
|
||||
</Container>
|
||||
</SubComponents>
|
||||
</Form>
|
||||
@@ -0,0 +1,862 @@
|
||||
/*
|
||||
* (C) Copyright 2015 by fr3ts0n <erwin.scheuch-heilig@gmx.at>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of
|
||||
* the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
||||
* MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
package com.fr3ts0n.ecu.gui.application;
|
||||
|
||||
import com.fr3ts0n.common.UTF8Bundle;
|
||||
import com.fr3ts0n.common.UTF8Control;
|
||||
import com.fr3ts0n.ecu.EcuCodeItem;
|
||||
import com.fr3ts0n.ecu.EcuCodeList;
|
||||
import com.fr3ts0n.ecu.EcuDataItem;
|
||||
import com.fr3ts0n.ecu.EcuDataPv;
|
||||
import com.fr3ts0n.ecu.prot.vag.Kw1281Prot;
|
||||
import com.fr3ts0n.prot.gui.KLHandlerGeneric;
|
||||
import com.fr3ts0n.pvs.PvList;
|
||||
|
||||
import org.jfree.data.time.TimeSeries;
|
||||
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
import java.beans.PropertyChangeEvent;
|
||||
import java.beans.PropertyChangeListener;
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.ObjectInputStream;
|
||||
import java.io.ObjectOutputStream;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
import java.util.logging.Handler;
|
||||
import java.util.logging.LogRecord;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import javax.swing.DefaultComboBoxModel;
|
||||
import javax.swing.ImageIcon;
|
||||
import javax.swing.JFileChooser;
|
||||
import javax.swing.JOptionPane;
|
||||
|
||||
|
||||
/**
|
||||
* Main application frame for OBD com.fr3ts0n.test application
|
||||
*
|
||||
* @author erwin
|
||||
*/
|
||||
public class VagTestFrame extends javax.swing.JFrame
|
||||
implements PropertyChangeListener
|
||||
{
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private static final long serialVersionUID = 3393967156524083211L;
|
||||
|
||||
/**
|
||||
* Program version information
|
||||
*/
|
||||
|
||||
/** prduct name string */
|
||||
private static final String product = "JaVAG Diagnose";
|
||||
/** product version string */
|
||||
private static final String version = "V0.8.0";
|
||||
/** copyright string */
|
||||
private static final String copyright = "Copyright (C) 2009-2010 Erwin Scheuch-Heilig";
|
||||
/** Initialize UTF8 resource bundle */
|
||||
static UTF8Bundle res = new UTF8Bundle(new UTF8Control());
|
||||
/** application icon */
|
||||
private static final ImageIcon appIcon = new ImageIcon(VagTestFrame.class.getResource("/com/fr3ts0n/ecu/gui/res/JaVAG_Logo.png"));
|
||||
/** Application Logger */
|
||||
private static final Logger log = Logger.getLogger("app");
|
||||
|
||||
/** protocol handler */
|
||||
private static final Kw1281Prot prt = new Kw1281Prot();
|
||||
/** Serial communication handler */
|
||||
// static KLHandler ser = new KLHandler();
|
||||
private static final KLHandlerGeneric ser = new KLHandlerGeneric();
|
||||
|
||||
/** is this a simulation, or the real world? */
|
||||
static boolean isSimulation = false;
|
||||
/** ECU addresses */
|
||||
private static final EcuCodeList AddressList = new EcuCodeList("com.fr3ts0n.ecu.prot.vag.res.ecuadr", 16);
|
||||
/**
|
||||
* Action listener to handle read/clear code actions
|
||||
*/
|
||||
private final ActionListener hdlrCodeButtons = new ActionListener()
|
||||
{
|
||||
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e)
|
||||
{
|
||||
// if source is not defined, ignore event
|
||||
if (e.getSource() == null) return;
|
||||
|
||||
if (e.getActionCommand().equals("ReadCodes"))
|
||||
{
|
||||
prt.setService(Kw1281Prot.SVC_READ_DFCS);
|
||||
} else if (e.getActionCommand().equals("ClearCodes"))
|
||||
{
|
||||
prt.setService(Kw1281Prot.SVC_CLEAR_DFCS);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Property change listener to ELM-Protocol
|
||||
*
|
||||
* @param evt the property change event to be handled
|
||||
*/
|
||||
@Override
|
||||
public void propertyChange(PropertyChangeEvent evt)
|
||||
{
|
||||
Object val = evt.getNewValue();
|
||||
/* handle protocol status changes */
|
||||
if ("status".equals(evt.getPropertyName()))
|
||||
{
|
||||
log.fine("Com status:" + val.toString());
|
||||
lblStatus.setText(val.toString());
|
||||
lblStatus.setBackground(KLHandlerGeneric.statColor[((KLHandlerGeneric.ProtStatus) val).ordinal()]);
|
||||
|
||||
// re-connect ECU if no shutdown service has been selected
|
||||
if (prt.getService() != Kw1281Prot.SVC_FINISHED)
|
||||
{
|
||||
// on connection error, set service to finished
|
||||
if (KLHandlerGeneric.ProtStatus.ERROR.equals(val))
|
||||
prt.setService(Kw1281Prot.SVC_FINISHED);
|
||||
|
||||
// on timeout w/o shutdown try to re-connect
|
||||
if (KLHandlerGeneric.ProtStatus.TIMEOUT.equals(val))
|
||||
connectEcu();
|
||||
}
|
||||
} else if ("baud".equals(evt.getPropertyName()))
|
||||
{
|
||||
if (val != null) lblBaud.setText(val.toString());
|
||||
} else if ("preset".equals(evt.getPropertyName()))
|
||||
{
|
||||
/* update group selector only if preset value has changed
|
||||
* This is because update group selector changes selected data
|
||||
* group to ALL (since list items get cleared once)
|
||||
*/
|
||||
if (evt.getOldValue() == null
|
||||
|| !evt.getNewValue().equals(evt.getOldValue()))
|
||||
{
|
||||
updateGroupSelector();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/** Creates new form VagTestFrame */
|
||||
@SuppressWarnings({"unchecked", "rawtypes"})
|
||||
private VagTestFrame()
|
||||
{
|
||||
// set up serial handler and protocol drivers
|
||||
ser.setMessageHandler(prt);
|
||||
prt.addTelegramWriter(ser);
|
||||
initComponents();
|
||||
setIconImage(appIcon.getImage());
|
||||
|
||||
// initialize About-Dialog
|
||||
panAbout.setApplicationName(product);
|
||||
panAbout.setApplicationVersion(version);
|
||||
panAbout.setCopyrightString(copyright);
|
||||
panAbout.setIcon(appIcon);
|
||||
|
||||
// initialize other dialogs
|
||||
panObdData.setPidPvs(Kw1281Prot.PidPvs);
|
||||
panObdData.setTitle("Data Graph");
|
||||
|
||||
// initialize DTC list
|
||||
panObdDtc.setTcList(Kw1281Prot.tCodes);
|
||||
panObdDtc.btnReadPending.setVisible(false);
|
||||
panObdDtc.btnReadPermanent.setVisible(false);
|
||||
panObdDtc.addActionListener(hdlrCodeButtons);
|
||||
|
||||
/* handle number of DTC changes */
|
||||
prt.addPropertyChangeListener(panObdDtc);
|
||||
|
||||
/* handle protocol status changes */
|
||||
ser.addPropertyChangeListener(this);
|
||||
prt.addPropertyChangeListener(this);
|
||||
|
||||
Object[] adresses = AddressList.values().toArray();
|
||||
Arrays.sort(adresses);
|
||||
cbAddress.setModel(new DefaultComboBoxModel(adresses));
|
||||
|
||||
// put logging messages of root logger to the status bar
|
||||
Logger.getLogger("").addHandler(new Handler(){
|
||||
|
||||
@Override
|
||||
public void close() throws SecurityException {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void flush() {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void publish(LogRecord arg0) {
|
||||
lblMessage.setText(arg0.getMessage());
|
||||
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
// initially update group selector
|
||||
updateGroupSelector();
|
||||
}
|
||||
|
||||
/**
|
||||
* Update ComboBox for group selection
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
private void updateGroupSelector()
|
||||
{
|
||||
cbFrameNum.removeAllItems();
|
||||
cbFrameNum.addItem("All Groups");
|
||||
Object[] frames = prt.knownGrpItems.keySet().toArray();
|
||||
Arrays.sort(frames);
|
||||
for (int i = 0; i < frames.length; i++)
|
||||
{
|
||||
cbFrameNum.addItem(String.format("Group %s", frames[i]));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* This method is called from within the constructor to
|
||||
* initialize the form.
|
||||
* WARNING: Do NOT modify this code. The content of this method is
|
||||
* always regenerated by the Form Editor.
|
||||
*/
|
||||
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
|
||||
@SuppressWarnings({"rawtypes", "unchecked"})
|
||||
private void initComponents()
|
||||
{
|
||||
java.awt.GridBagConstraints gridBagConstraints;
|
||||
|
||||
fChoose = new javax.swing.JFileChooser();
|
||||
panAbout = new com.fr3ts0n.ecu.gui.application.AboutPanel();
|
||||
tabMain = new javax.swing.JTabbedPane();
|
||||
javax.swing.JPanel panStart = new javax.swing.JPanel();
|
||||
javax.swing.JLabel lblFooter = new javax.swing.JLabel();
|
||||
javax.swing.JPanel jPanel1 = new javax.swing.JPanel();
|
||||
javax.swing.JLabel lblTitle = new javax.swing.JLabel();
|
||||
TblVehIDs = new com.fr3ts0n.pvs.gui.PvTable(Kw1281Prot.VidPvs);
|
||||
javax.swing.JLabel jLabel1 = new javax.swing.JLabel();
|
||||
panObdDtc = new com.fr3ts0n.ecu.gui.application.ObdDtcPanel();
|
||||
panObdData = new com.fr3ts0n.ecu.gui.application.ObdDataPanel();
|
||||
javax.swing.JPanel panFooter = new javax.swing.JPanel();
|
||||
lblMessage = new javax.swing.JLabel();
|
||||
lblStatus = new javax.swing.JLabel();
|
||||
lblBaud = new javax.swing.JLabel();
|
||||
cbCnvSystem = new javax.swing.JComboBox();
|
||||
javax.swing.JPanel panHeader = new javax.swing.JPanel();
|
||||
javax.swing.JToolBar tbMain = new javax.swing.JToolBar();
|
||||
btnLoad = new javax.swing.JButton();
|
||||
btnSave = new javax.swing.JButton();
|
||||
javax.swing.JToolBar.Separator jSeparator1 = new javax.swing.JToolBar.Separator();
|
||||
btnConnect = new javax.swing.JButton();
|
||||
btnStop = new javax.swing.JButton();
|
||||
btnConfig = new javax.swing.JButton();
|
||||
javax.swing.JToolBar.Separator jSeparator2 = new javax.swing.JToolBar.Separator();
|
||||
cbAddress = new javax.swing.JComboBox();
|
||||
javax.swing.JToolBar.Separator jSeparator3 = new javax.swing.JToolBar.Separator();
|
||||
cbFrameNum = new javax.swing.JComboBox();
|
||||
javax.swing.JMenuBar mbMain = new javax.swing.JMenuBar();
|
||||
javax.swing.JMenu mnuFile = new javax.swing.JMenu();
|
||||
miLoad = new javax.swing.JMenuItem();
|
||||
miSave = new javax.swing.JMenuItem();
|
||||
javax.swing.JMenu mnuComm = new javax.swing.JMenu();
|
||||
miCommConfigure = new javax.swing.JMenuItem();
|
||||
miCommInit = new javax.swing.JMenuItem();
|
||||
miCommStop = new javax.swing.JMenuItem();
|
||||
javax.swing.JMenu mnuHelp = new javax.swing.JMenu();
|
||||
miAbout = new javax.swing.JMenuItem();
|
||||
|
||||
FormListener formListener = new FormListener();
|
||||
|
||||
fChoose.setFileFilter(new ObdFileFilter());
|
||||
fChoose.setFileSelectionMode(javax.swing.JFileChooser.FILES_AND_DIRECTORIES);
|
||||
|
||||
panAbout.setIcon(null);
|
||||
|
||||
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
|
||||
setTitle(product + " " + version);
|
||||
|
||||
tabMain.setFont(new java.awt.Font("Dialog", 0, 10));
|
||||
tabMain.setPreferredSize(new java.awt.Dimension(520, 350));
|
||||
tabMain.addChangeListener(formListener);
|
||||
|
||||
panStart.setBackground(new java.awt.Color(255, 255, 255));
|
||||
panStart.setLayout(new java.awt.BorderLayout());
|
||||
|
||||
lblFooter.setFont(new java.awt.Font("Dialog", 0, 10));
|
||||
lblFooter.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
|
||||
lblFooter.setText(copyright);
|
||||
panStart.add(lblFooter, java.awt.BorderLayout.SOUTH);
|
||||
|
||||
jPanel1.setBackground(new java.awt.Color(255, 255, 255));
|
||||
jPanel1.setBorder(javax.swing.BorderFactory.createEmptyBorder(10, 10, 10, 10));
|
||||
jPanel1.setLayout(new java.awt.BorderLayout(0, 25));
|
||||
|
||||
lblTitle.setFont(new java.awt.Font("Dialog", 1, 18));
|
||||
lblTitle.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
|
||||
lblTitle.setText(product);
|
||||
lblTitle.setVerticalAlignment(javax.swing.SwingConstants.TOP);
|
||||
jPanel1.add(lblTitle, java.awt.BorderLayout.NORTH);
|
||||
|
||||
TblVehIDs.setAutoResizeMode(5);
|
||||
TblVehIDs.setFocusable(false);
|
||||
TblVehIDs.setName("TblVids"); // NOI18N
|
||||
TblVehIDs.setOpaque(false);
|
||||
TblVehIDs.setRowSelectionAllowed(false);
|
||||
TblVehIDs.setShowGrid(false);
|
||||
jPanel1.add(TblVehIDs, java.awt.BorderLayout.CENTER);
|
||||
|
||||
jLabel1.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
|
||||
jLabel1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/fr3ts0n/ecu/gui/res/javag.png"))); // NOI18N
|
||||
jPanel1.add(jLabel1, java.awt.BorderLayout.SOUTH);
|
||||
|
||||
panStart.add(jPanel1, java.awt.BorderLayout.CENTER);
|
||||
|
||||
tabMain.addTab("About", panStart);
|
||||
tabMain.addTab("Fault Codes", panObdDtc);
|
||||
tabMain.addTab("Data", panObdData);
|
||||
|
||||
getContentPane().add(tabMain, java.awt.BorderLayout.CENTER);
|
||||
|
||||
panFooter.setLayout(new java.awt.GridBagLayout());
|
||||
|
||||
lblMessage.setFont(new java.awt.Font("Dialog", 0, 10));
|
||||
lblMessage.setText(String.format("%s %s", product, version));
|
||||
lblMessage.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.LOWERED));
|
||||
gridBagConstraints = new java.awt.GridBagConstraints();
|
||||
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
|
||||
gridBagConstraints.weightx = 1.0;
|
||||
panFooter.add(lblMessage, gridBagConstraints);
|
||||
|
||||
lblStatus.setFont(new java.awt.Font("Dialog", 0, 10));
|
||||
lblStatus.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
|
||||
lblStatus.setText("Status");
|
||||
lblStatus.setBorder(javax.swing.BorderFactory.createCompoundBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.LOWERED), javax.swing.BorderFactory.createEmptyBorder(1, 3, 1, 3)));
|
||||
lblStatus.setMinimumSize(new java.awt.Dimension(90, 18));
|
||||
lblStatus.setOpaque(true);
|
||||
lblStatus.setPreferredSize(new java.awt.Dimension(90, 18));
|
||||
gridBagConstraints = new java.awt.GridBagConstraints();
|
||||
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
|
||||
panFooter.add(lblStatus, gridBagConstraints);
|
||||
|
||||
lblBaud.setFont(new java.awt.Font("Dialog", 0, 10));
|
||||
lblBaud.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING);
|
||||
lblBaud.setText("BaudRate");
|
||||
lblBaud.setToolTipText("Baud rate");
|
||||
lblBaud.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.LOWERED));
|
||||
lblBaud.setMinimumSize(new java.awt.Dimension(54, 16));
|
||||
lblBaud.setPreferredSize(new java.awt.Dimension(54, 16));
|
||||
gridBagConstraints = new java.awt.GridBagConstraints();
|
||||
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
|
||||
panFooter.add(lblBaud, gridBagConstraints);
|
||||
|
||||
cbCnvSystem.setFont(new java.awt.Font("Dialog", 0, 10));
|
||||
cbCnvSystem.setModel(new javax.swing.DefaultComboBoxModel(new String[]{"Metric", "Imperial"}));
|
||||
cbCnvSystem.setToolTipText("Select conversion system");
|
||||
cbCnvSystem.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.LOWERED));
|
||||
cbCnvSystem.setPreferredSize(new java.awt.Dimension(71, 23));
|
||||
cbCnvSystem.addItemListener(formListener);
|
||||
gridBagConstraints = new java.awt.GridBagConstraints();
|
||||
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
|
||||
panFooter.add(cbCnvSystem, gridBagConstraints);
|
||||
|
||||
getContentPane().add(panFooter, java.awt.BorderLayout.SOUTH);
|
||||
|
||||
panHeader.setLayout(new java.awt.BorderLayout());
|
||||
|
||||
tbMain.setFloatable(false);
|
||||
tbMain.setRollover(true);
|
||||
tbMain.setFont(new java.awt.Font("Dialog", 0, 10));
|
||||
|
||||
btnLoad.setFont(new java.awt.Font("Dialog", 0, 10));
|
||||
btnLoad.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/fr3ts0n/common/res/fileopen.png"))); // NOI18N
|
||||
btnLoad.setToolTipText("Load measurements");
|
||||
btnLoad.setBorderPainted(false);
|
||||
btnLoad.setFocusable(false);
|
||||
btnLoad.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
|
||||
btnLoad.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
|
||||
btnLoad.addActionListener(formListener);
|
||||
tbMain.add(btnLoad);
|
||||
|
||||
btnSave.setFont(new java.awt.Font("Dialog", 0, 10));
|
||||
btnSave.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/fr3ts0n/common/res/filesaveas.png"))); // NOI18N
|
||||
btnSave.setToolTipText("Save measurements");
|
||||
btnSave.setBorderPainted(false);
|
||||
btnSave.setFocusable(false);
|
||||
btnSave.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
|
||||
btnSave.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
|
||||
btnSave.addActionListener(formListener);
|
||||
tbMain.add(btnSave);
|
||||
tbMain.add(jSeparator1);
|
||||
|
||||
btnConnect.setFont(new java.awt.Font("Dialog", 0, 10));
|
||||
btnConnect.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/fr3ts0n/common/res/connect_established.png"))); // NOI18N
|
||||
btnConnect.setToolTipText("Start communication");
|
||||
btnConnect.setBorderPainted(false);
|
||||
btnConnect.setFocusable(false);
|
||||
btnConnect.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
|
||||
btnConnect.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
|
||||
btnConnect.addActionListener(formListener);
|
||||
tbMain.add(btnConnect);
|
||||
|
||||
btnStop.setFont(new java.awt.Font("Dialog", 0, 10));
|
||||
btnStop.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/fr3ts0n/common/res/no.png"))); // NOI18N
|
||||
btnStop.setToolTipText("Stop communication");
|
||||
btnStop.setBorderPainted(false);
|
||||
btnStop.setFocusable(false);
|
||||
btnStop.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
|
||||
btnStop.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
|
||||
btnStop.addActionListener(formListener);
|
||||
tbMain.add(btnStop);
|
||||
|
||||
btnConfig.setFont(new java.awt.Font("Dialog", 0, 10));
|
||||
btnConfig.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/fr3ts0n/common/res/fileexport.png"))); // NOI18N
|
||||
btnConfig.setToolTipText("Serial port configuratopn");
|
||||
btnConfig.setBorderPainted(false);
|
||||
btnConfig.setFocusable(false);
|
||||
btnConfig.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
|
||||
btnConfig.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
|
||||
btnConfig.addActionListener(formListener);
|
||||
tbMain.add(btnConfig);
|
||||
tbMain.add(jSeparator2);
|
||||
|
||||
cbAddress.setFont(new java.awt.Font("Dialog", 0, 10));
|
||||
cbAddress.setToolTipText("Select device/address");
|
||||
cbAddress.addActionListener(formListener);
|
||||
tbMain.add(cbAddress);
|
||||
tbMain.add(jSeparator3);
|
||||
|
||||
cbFrameNum.setFont(new java.awt.Font("Dialog", 0, 10));
|
||||
cbFrameNum.setModel(new javax.swing.DefaultComboBoxModel(new String[]{"Item 1", "Item 2", "Item 3", "Item 4"}));
|
||||
cbFrameNum.setToolTipText("select Frame number to display");
|
||||
cbFrameNum.addActionListener(formListener);
|
||||
tbMain.add(cbFrameNum);
|
||||
|
||||
panHeader.add(tbMain, java.awt.BorderLayout.NORTH);
|
||||
|
||||
getContentPane().add(panHeader, java.awt.BorderLayout.NORTH);
|
||||
|
||||
mbMain.setFont(new java.awt.Font("Dialog", 0, 10)); // NOI18N
|
||||
|
||||
mnuFile.setMnemonic('F');
|
||||
mnuFile.setText("File");
|
||||
mnuFile.setFont(new java.awt.Font("Dialog", 0, 10)); // NOI18N
|
||||
|
||||
miLoad.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_F3, 0));
|
||||
miLoad.setFont(new java.awt.Font("Dialog", 0, 10));
|
||||
miLoad.setMnemonic('L');
|
||||
miLoad.setText("Load measurement");
|
||||
miLoad.addActionListener(formListener);
|
||||
mnuFile.add(miLoad);
|
||||
|
||||
miSave.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_F4, 0));
|
||||
miSave.setFont(new java.awt.Font("Dialog", 0, 10));
|
||||
miSave.setMnemonic('S');
|
||||
miSave.setText("Save measurement");
|
||||
miSave.addActionListener(formListener);
|
||||
mnuFile.add(miSave);
|
||||
|
||||
mbMain.add(mnuFile);
|
||||
|
||||
mnuComm.setMnemonic('C');
|
||||
mnuComm.setText("Communication");
|
||||
mnuComm.setFont(new java.awt.Font("Dialog", 0, 10)); // NOI18N
|
||||
|
||||
miCommConfigure.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_F8, 0));
|
||||
miCommConfigure.setFont(new java.awt.Font("Dialog", 0, 10));
|
||||
miCommConfigure.setMnemonic('C');
|
||||
miCommConfigure.setText("Port Configuration...");
|
||||
miCommConfigure.addActionListener(formListener);
|
||||
mnuComm.add(miCommConfigure);
|
||||
|
||||
miCommInit.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_F5, 0));
|
||||
miCommInit.setFont(new java.awt.Font("Dialog", 0, 10));
|
||||
miCommInit.setMnemonic('I');
|
||||
miCommInit.setText("Initialize");
|
||||
miCommInit.addActionListener(formListener);
|
||||
mnuComm.add(miCommInit);
|
||||
|
||||
miCommStop.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_F6, 0));
|
||||
miCommStop.setFont(new java.awt.Font("Dialog", 0, 10));
|
||||
miCommStop.setMnemonic('p');
|
||||
miCommStop.setText("Stop");
|
||||
miCommStop.addActionListener(formListener);
|
||||
mnuComm.add(miCommStop);
|
||||
|
||||
mbMain.add(mnuComm);
|
||||
|
||||
mnuHelp.setMnemonic('H');
|
||||
mnuHelp.setText("Help");
|
||||
mnuHelp.setFont(new java.awt.Font("Dialog", 0, 10)); // NOI18N
|
||||
|
||||
miAbout.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_F1, 0));
|
||||
miAbout.setFont(new java.awt.Font("Dialog", 0, 10));
|
||||
miAbout.setMnemonic('A');
|
||||
miAbout.setText("About");
|
||||
miAbout.addActionListener(formListener);
|
||||
mnuHelp.add(miAbout);
|
||||
|
||||
mbMain.add(mnuHelp);
|
||||
|
||||
setJMenuBar(mbMain);
|
||||
|
||||
pack();
|
||||
}
|
||||
|
||||
// Code for dispatching events from components to event handlers.
|
||||
|
||||
private class FormListener implements java.awt.event.ActionListener, java.awt.event.ItemListener, javax.swing.event.ChangeListener
|
||||
{
|
||||
FormListener()
|
||||
{
|
||||
}
|
||||
|
||||
public void actionPerformed(java.awt.event.ActionEvent evt)
|
||||
{
|
||||
if (evt.getSource() == btnLoad)
|
||||
{
|
||||
VagTestFrame.this.miLoadActionPerformed();
|
||||
} else if (evt.getSource() == btnSave)
|
||||
{
|
||||
VagTestFrame.this.miSaveActionPerformed();
|
||||
} else if (evt.getSource() == btnConnect)
|
||||
{
|
||||
VagTestFrame.this.connectEcu();
|
||||
} else if (evt.getSource() == btnStop)
|
||||
{
|
||||
VagTestFrame.this.miCommStopActionPerformed();
|
||||
} else if (evt.getSource() == btnConfig)
|
||||
{
|
||||
VagTestFrame.this.miCommConfigureActionPerformed();
|
||||
} else if (evt.getSource() == cbAddress)
|
||||
{
|
||||
VagTestFrame.this.cbAddressActionPerformed();
|
||||
} else if (evt.getSource() == cbFrameNum)
|
||||
{
|
||||
VagTestFrame.this.cbFrameNumActionPerformed();
|
||||
} else if (evt.getSource() == miLoad)
|
||||
{
|
||||
VagTestFrame.this.miLoadActionPerformed();
|
||||
} else if (evt.getSource() == miSave)
|
||||
{
|
||||
VagTestFrame.this.miSaveActionPerformed();
|
||||
} else if (evt.getSource() == miCommConfigure)
|
||||
{
|
||||
VagTestFrame.this.miCommConfigureActionPerformed();
|
||||
} else if (evt.getSource() == miCommInit)
|
||||
{
|
||||
VagTestFrame.this.connectEcu();
|
||||
} else if (evt.getSource() == miCommStop)
|
||||
{
|
||||
VagTestFrame.this.miCommStopActionPerformed();
|
||||
} else if (evt.getSource() == miAbout)
|
||||
{
|
||||
VagTestFrame.this.miAboutActionPerformed();
|
||||
}
|
||||
}
|
||||
|
||||
public void itemStateChanged(java.awt.event.ItemEvent evt)
|
||||
{
|
||||
if (evt.getSource() == cbCnvSystem)
|
||||
{
|
||||
VagTestFrame.this.cbCnvSystemItemStateChanged();
|
||||
}
|
||||
}
|
||||
|
||||
public void stateChanged(javax.swing.event.ChangeEvent evt)
|
||||
{
|
||||
if (evt.getSource() == tabMain)
|
||||
{
|
||||
VagTestFrame.this.tabMainStateChanged();
|
||||
}
|
||||
}
|
||||
}// </editor-fold>//GEN-END:initComponents
|
||||
|
||||
private void miCommConfigureActionPerformed()//GEN-FIRST:event_miCommConfigureActionPerformed
|
||||
{//GEN-HEADEREND:event_miCommConfigureActionPerformed
|
||||
ser.configure();
|
||||
}//GEN-LAST:event_miCommConfigureActionPerformed
|
||||
|
||||
private void miCommStopActionPerformed()//GEN-FIRST:event_miCommStopActionPerformed
|
||||
{//GEN-HEADEREND:event_miCommStopActionPerformed
|
||||
// switch off PID's supported'
|
||||
prt.setService(Kw1281Prot.SVC_SHUTDOWN);
|
||||
}//GEN-LAST:event_miCommStopActionPerformed
|
||||
|
||||
private void miSaveActionPerformed()//GEN-FIRST:event_miSaveActionPerformed
|
||||
{//GEN-HEADEREND:event_miSaveActionPerformed
|
||||
if (fChoose.showSaveDialog(this) == JFileChooser.APPROVE_OPTION)
|
||||
{
|
||||
File file = fChoose.getSelectedFile();
|
||||
// ask for overwrite existing file
|
||||
if (!file.exists()
|
||||
|| JOptionPane.showConfirmDialog(this,
|
||||
"Really want to overwrite " + file.getPath(),
|
||||
"File overwrite",
|
||||
JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION)
|
||||
try
|
||||
{
|
||||
|
||||
FileOutputStream out = new FileOutputStream(file);
|
||||
ObjectOutputStream oOut = new ObjectOutputStream(out);
|
||||
/* remember current measurement page for loading again */
|
||||
Integer currPage = Integer.valueOf(tabMain.getSelectedIndex());
|
||||
oOut.writeObject(currPage);
|
||||
/* save the data */
|
||||
oOut.writeObject(Kw1281Prot.VidPvs);
|
||||
oOut.writeObject(Kw1281Prot.PidPvs);
|
||||
oOut.writeObject(Kw1281Prot.tCodes);
|
||||
oOut.writeObject(panObdData.selPids);
|
||||
oOut.close();
|
||||
} catch (IOException ex)
|
||||
{
|
||||
ex.printStackTrace();
|
||||
JOptionPane.showMessageDialog(this,
|
||||
ex.getLocalizedMessage(),
|
||||
"Save ERROR",
|
||||
JOptionPane.ERROR_MESSAGE);
|
||||
}
|
||||
}
|
||||
}//GEN-LAST:event_miSaveActionPerformed
|
||||
|
||||
@SuppressWarnings({"unchecked"})
|
||||
private void miLoadActionPerformed()//GEN-FIRST:event_miLoadActionPerformed
|
||||
{//GEN-HEADEREND:event_miLoadActionPerformed
|
||||
if (fChoose.showOpenDialog(this) == JFileChooser.APPROVE_OPTION)
|
||||
{
|
||||
File file = fChoose.getSelectedFile();
|
||||
try
|
||||
{
|
||||
FileInputStream in = new FileInputStream(file);
|
||||
ObjectInputStream oIn = new ObjectInputStream(in);
|
||||
/* ensure that measurement page is activated
|
||||
to avoid deletion of loaded data afterwards */
|
||||
Integer currPage = (Integer) oIn.readObject();
|
||||
tabMain.setSelectedIndex(currPage);
|
||||
/* read in the data */
|
||||
Kw1281Prot.VidPvs = (PvList) oIn.readObject();
|
||||
Kw1281Prot.PidPvs = (PvList) oIn.readObject();
|
||||
Kw1281Prot.tCodes = (PvList) oIn.readObject();
|
||||
// re-setup data connection
|
||||
panObdData.setPidPvs(Kw1281Prot.PidPvs);
|
||||
panObdDtc.setTcList(Kw1281Prot.tCodes);
|
||||
TblVehIDs.setProcessVar(Kw1281Prot.VidPvs);
|
||||
// read measurement history
|
||||
panObdData.selPids = (HashMap<Object, TimeSeries>) oIn.readObject();
|
||||
oIn.close();
|
||||
} catch (Exception ex)
|
||||
{
|
||||
ex.printStackTrace();
|
||||
JOptionPane.showMessageDialog(this,
|
||||
ex.getMessage(),
|
||||
"Load ERROR",
|
||||
JOptionPane.ERROR_MESSAGE);
|
||||
}
|
||||
}
|
||||
}//GEN-LAST:event_miLoadActionPerformed
|
||||
|
||||
/**
|
||||
* handle change of conversion system
|
||||
*/
|
||||
private void cbCnvSystemItemStateChanged()//GEN-FIRST:event_cbCnvSystemItemStateChanged
|
||||
{//GEN-HEADEREND:event_cbCnvSystemItemStateChanged
|
||||
// set new conversion system
|
||||
EcuDataItem.cnvSystem = cbCnvSystem.getSelectedIndex();
|
||||
|
||||
// update currently selected display
|
||||
switch (tabMain.getSelectedIndex())
|
||||
{
|
||||
case 2:
|
||||
panObdData.updateAllTableRows(EcuDataPv.FID_UNITS);
|
||||
break;
|
||||
|
||||
default:
|
||||
// intentionally do nothing ...
|
||||
}
|
||||
}//GEN-LAST:event_cbCnvSystemItemStateChanged
|
||||
|
||||
/**
|
||||
* update form/tab selection
|
||||
*/
|
||||
private void tabMainStateChanged()//GEN-FIRST:event_tabMainStateChanged
|
||||
{//GEN-HEADEREND:event_tabMainStateChanged
|
||||
// request OBD service for selected Tab
|
||||
requestServiceForSelectedTab();
|
||||
}//GEN-LAST:event_tabMainStateChanged
|
||||
|
||||
private void cbAddressActionPerformed()//GEN-FIRST:event_cbAddressActionPerformed
|
||||
{//GEN-HEADEREND:event_cbAddressActionPerformed
|
||||
EcuCodeItem itm = (EcuCodeItem) cbAddress.getSelectedItem();
|
||||
int newAddress = Integer.parseInt(itm.get(EcuCodeItem.FID_CODE).toString(), 16);
|
||||
if (newAddress > 0)
|
||||
{
|
||||
setControllerAddress(newAddress);
|
||||
}
|
||||
}//GEN-LAST:event_cbAddressActionPerformed
|
||||
|
||||
private void cbFrameNumActionPerformed()//GEN-FIRST:event_cbFrameNumActionPerformed
|
||||
{//GEN-HEADEREND:event_cbFrameNumActionPerformed
|
||||
int sel = cbFrameNum.getSelectedIndex();
|
||||
// single selection
|
||||
if (sel > 0 && sel < prt.knownGrpItems.size())
|
||||
{
|
||||
String selStr = cbFrameNum.getSelectedItem().toString();
|
||||
int frmNum = Integer.parseInt(selStr.replaceAll("Group ", "").trim());
|
||||
prt.setSelectedDataGroup((char) frmNum);
|
||||
}
|
||||
// request corresponding service
|
||||
requestServiceForSelectedTab();
|
||||
}//GEN-LAST:event_cbFrameNumActionPerformed
|
||||
|
||||
private void connectEcu()//GEN-FIRST:event_connectEcu
|
||||
{//GEN-HEADEREND:event_connectEcu
|
||||
Kw1281Prot.VidPvs.clear();
|
||||
ser.start();
|
||||
}//GEN-LAST:event_connectEcu
|
||||
|
||||
private void miAboutActionPerformed()//GEN-FIRST:event_miAboutActionPerformed
|
||||
{//GEN-HEADEREND:event_miAboutActionPerformed
|
||||
JOptionPane.showMessageDialog(this, panAbout, "About ...", JOptionPane.PLAIN_MESSAGE);
|
||||
}//GEN-LAST:event_miAboutActionPerformed
|
||||
|
||||
/**
|
||||
* request corresponding OBD service for selected Tab
|
||||
*/
|
||||
private void requestServiceForSelectedTab()
|
||||
{
|
||||
// handle page change ...
|
||||
switch (tabMain.getSelectedIndex())
|
||||
{
|
||||
case 0: // About panel
|
||||
// switch off PID's supported'
|
||||
prt.setService(Kw1281Prot.SVC_NONE);
|
||||
break;
|
||||
|
||||
case 1: // Trouble code panel
|
||||
// we don't set any service here
|
||||
// since service is selected by buttons
|
||||
prt.setService(Kw1281Prot.SVC_NONE);
|
||||
break;
|
||||
|
||||
case 2: // data item panel
|
||||
// set service depending on ALL / SINGLE Selection
|
||||
prt.setService(cbFrameNum.getSelectedIndex() == 0
|
||||
? Kw1281Prot.SVC_READ_DATA_ALL
|
||||
: Kw1281Prot.SVC_READ_DATA_GRP);
|
||||
break;
|
||||
|
||||
default:
|
||||
// switch off PID's supported'
|
||||
prt.setService(Kw1281Prot.SVC_NONE);
|
||||
// do nothing
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* set controller address and re-start communication with new address
|
||||
*
|
||||
* @param newAddress new controller to be accessed
|
||||
*/
|
||||
private void setControllerAddress(int newAddress)
|
||||
{
|
||||
cbAddress.setSelectedItem(AddressList.get(newAddress));
|
||||
if (newAddress != ser.getCurrAddress())
|
||||
{
|
||||
prt.initialize();
|
||||
ser.setCurrAddress(newAddress);
|
||||
ser.start();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* The main routine
|
||||
*
|
||||
* @param args the command line arguments
|
||||
*/
|
||||
public static void main(String args[])
|
||||
{
|
||||
VagTestFrame frm = new VagTestFrame();
|
||||
frm.setVisible(true);
|
||||
// command line argument is the com port
|
||||
if (args.length > 0)
|
||||
{
|
||||
try
|
||||
{
|
||||
/** set up serial port to be used */
|
||||
ser.setDeviceName(args[0]);
|
||||
/**
|
||||
* only auto-connect to vehicle system if address is
|
||||
* specified (in HEX)
|
||||
*/
|
||||
if (args.length > 1)
|
||||
{
|
||||
frm.setControllerAddress(Integer.parseInt(args[1], 16));
|
||||
}
|
||||
} catch (Exception ex)
|
||||
{
|
||||
JOptionPane.showMessageDialog(frm,
|
||||
args[0],
|
||||
ex.toString(),
|
||||
JOptionPane.ERROR_MESSAGE);
|
||||
}
|
||||
} else
|
||||
{
|
||||
// without parameter we do internal telegram simulation ...
|
||||
prt.simulation.start();
|
||||
}
|
||||
}
|
||||
|
||||
// Variables declaration - do not modify//GEN-BEGIN:variables
|
||||
private com.fr3ts0n.pvs.gui.PvTable TblVehIDs;
|
||||
private javax.swing.JButton btnConfig;
|
||||
private javax.swing.JButton btnConnect;
|
||||
private javax.swing.JButton btnLoad;
|
||||
private javax.swing.JButton btnSave;
|
||||
private javax.swing.JButton btnStop;
|
||||
@SuppressWarnings("rawtypes")
|
||||
private javax.swing.JComboBox cbAddress;
|
||||
@SuppressWarnings("rawtypes")
|
||||
private javax.swing.JComboBox cbCnvSystem;
|
||||
@SuppressWarnings("rawtypes")
|
||||
private javax.swing.JComboBox cbFrameNum;
|
||||
private javax.swing.JFileChooser fChoose;
|
||||
private javax.swing.JLabel lblBaud;
|
||||
private javax.swing.JLabel lblMessage;
|
||||
private javax.swing.JLabel lblStatus;
|
||||
private javax.swing.JMenuItem miAbout;
|
||||
private javax.swing.JMenuItem miCommConfigure;
|
||||
private javax.swing.JMenuItem miCommInit;
|
||||
private javax.swing.JMenuItem miCommStop;
|
||||
private javax.swing.JMenuItem miLoad;
|
||||
private javax.swing.JMenuItem miSave;
|
||||
private com.fr3ts0n.ecu.gui.application.AboutPanel panAbout;
|
||||
private com.fr3ts0n.ecu.gui.application.ObdDataPanel panObdData;
|
||||
private com.fr3ts0n.ecu.gui.application.ObdDtcPanel panObdDtc;
|
||||
private javax.swing.JTabbedPane tabMain;
|
||||
// End of variables declaration//GEN-END:variables
|
||||
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
||||
<html>
|
||||
<body>
|
||||
Java/Swing applications for ECU/OBD diagnostic
|
||||
</body>
|
||||
</html>
|
||||
|
After Width: | Height: | Size: 29 KiB |
|
After Width: | Height: | Size: 9.4 KiB |
|
After Width: | Height: | Size: 61 KiB |
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 1.2 KiB |
@@ -0,0 +1,6 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
||||
<html>
|
||||
<body>
|
||||
Resources for ECU/OBD diagnostic applications
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,6 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
||||
<html>
|
||||
<body>
|
||||
ECU/OBD diagnostic related classes
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,235 @@
|
||||
/*
|
||||
* (C) Copyright 2015 by fr3ts0n <erwin.scheuch-heilig@gmx.at>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of
|
||||
* the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
||||
* MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
package com.fr3ts0n.ecu.prot.obd;
|
||||
|
||||
import com.fr3ts0n.ecu.Conversions;
|
||||
import com.fr3ts0n.ecu.EcuDataPv;
|
||||
import com.fr3ts0n.prot.ProtoHeader;
|
||||
import com.fr3ts0n.pvs.PvList;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.Vector;
|
||||
import java.util.logging.Level;
|
||||
|
||||
|
||||
/**
|
||||
* Base class for all CAN protocol implementations
|
||||
*
|
||||
* @author erwin
|
||||
*/
|
||||
public abstract class CanProt extends ProtoHeader
|
||||
{
|
||||
|
||||
private static final int ID_CAN_SVC = 0;
|
||||
/**
|
||||
* additional field indices (extending message parameters)
|
||||
* to table below
|
||||
*/
|
||||
private static final int FLD_ID_CONV = 3;
|
||||
private static final int FLD_ID_DECIMALS = 4;
|
||||
private static final int FLD_ID_CANID = 5;
|
||||
|
||||
/**
|
||||
* List of telegram parameters in order of appearance
|
||||
*/
|
||||
private static final int[][] CAN_PARAMETERS =
|
||||
/* START, LEN, PARAM-TYPE // REMARKS */
|
||||
/* ------------------------------------------- */
|
||||
{{0, 2, PT_HEX}, // ID_CAN_SVC
|
||||
};
|
||||
|
||||
private static final String[] CAN_DESCRIPTORS =
|
||||
{
|
||||
"CAN Service",
|
||||
};
|
||||
|
||||
/** process variable list which holds all parameters */
|
||||
public PvList CanPvs = new PvList();
|
||||
|
||||
/** internal Map for CAN messages to parameters */
|
||||
private final HashMap<Integer, Vector<Integer>> canMsgMap = new HashMap<Integer, Vector<Integer>>();
|
||||
|
||||
/** Creates a new instance of CanProt */
|
||||
CanProt()
|
||||
{
|
||||
for (int i = 0; i < getMsgParameters().length; i++)
|
||||
{
|
||||
int convId = getMsgParameters()[i][FLD_ID_CONV];
|
||||
Integer paramId = Integer.valueOf(i);
|
||||
Integer canId = getMsgParameters()[i][FLD_ID_CANID];
|
||||
|
||||
// enter all parameters per CAN message
|
||||
Vector<Integer> paramList = canMsgMap.get(canId);
|
||||
if (paramList == null)
|
||||
paramList = new Vector<Integer>();
|
||||
paramList.add(paramId);
|
||||
canMsgMap.put(canId, paramList);
|
||||
|
||||
/** enter process variables for each parameter */
|
||||
EcuDataPv pidData = new EcuDataPv();
|
||||
|
||||
pidData.put(EcuDataPv.FID_PID, paramId);
|
||||
pidData.put(EcuDataPv.FID_DESCRIPT, getMsgDescriptors()[i]);
|
||||
pidData.put(EcuDataPv.FID_UNITS, Conversions.getUnits(convId));
|
||||
pidData.put(EcuDataPv.FID_VALUE, Float.valueOf(0));
|
||||
pidData.put(EcuDataPv.FID_FORMAT, "%."+getMsgParameters()[i][FLD_ID_DECIMALS]+"d");
|
||||
pidData.put(EcuDataPv.FID_CNVID, Integer.valueOf(getMsgParameters()[i][FLD_ID_CONV]));
|
||||
|
||||
CanPvs.put(paramId, pidData);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* prepare process variables for each PID
|
||||
*
|
||||
*/
|
||||
public void preparePidPvs()
|
||||
{
|
||||
for (int i = 0; i < getMsgParameters().length; i++)
|
||||
{
|
||||
Integer paramId = i;
|
||||
/** enter process variables for each parameter */
|
||||
EcuDataPv pidData = (EcuDataPv) CanPvs.get(paramId);
|
||||
if (pidData != null)
|
||||
{
|
||||
int convId = getMsgParameters()[i][FLD_ID_CONV];
|
||||
pidData.put(EcuDataPv.FID_UNITS, Conversions.getUnits(convId));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* get List of message dependent telegram parameters in order of appearance
|
||||
* Each parameter set contains following elements<br>
|
||||
* <pre>START, LEN, TYPE, CONVERSION_ID, , ID // REMARKS </pre>
|
||||
* <pre>---------------------------------------------------------------------------------</pre>
|
||||
*/
|
||||
protected abstract int[][] getMsgParameters();
|
||||
|
||||
/**
|
||||
* get list of message parameter descriptions
|
||||
*
|
||||
* @return list of messag parameter descriptors
|
||||
*/
|
||||
protected abstract String[] getMsgDescriptors();
|
||||
|
||||
/**
|
||||
* get physical parameter value from message buffer
|
||||
*/
|
||||
private float getMsgValue(int ID, char[] buffer)
|
||||
{
|
||||
int memVal = ((Integer) getParamValue(ID, getMsgParameters(), buffer)).intValue();
|
||||
return (Conversions.memToPhys(memVal, getMsgParameters()[ID][FLD_ID_CONV]));
|
||||
}
|
||||
|
||||
/**
|
||||
* create a new telegram header for selected payload data buffer
|
||||
* inclunding setting all ID's, sizes and validity issues
|
||||
*
|
||||
* @param buffer buffer of payload data
|
||||
* @return buffer of new telegram header
|
||||
*/
|
||||
protected char[] getNewHeader(char[] buffer)
|
||||
{
|
||||
return (emptyBuffer);
|
||||
}
|
||||
|
||||
/**
|
||||
* return message footer for protocol payload
|
||||
*
|
||||
* @return buffer of message footer
|
||||
*/
|
||||
public char[] getFooter()
|
||||
{
|
||||
return (emptyBuffer);
|
||||
}
|
||||
|
||||
/**
|
||||
* create a new telegram header inclunding setting all ID's, sizes and
|
||||
* validity issues
|
||||
*
|
||||
* @return buffer of new telegram header
|
||||
*/
|
||||
protected char[] getNewHeader(char[] buffer, int type, Object id)
|
||||
{
|
||||
return (emptyBuffer);
|
||||
}
|
||||
|
||||
/**
|
||||
* list of parameters for specific protocol
|
||||
*
|
||||
* @return complete set of protocol parameters
|
||||
*/
|
||||
public int[][] getTelegramParams()
|
||||
{
|
||||
return (CAN_PARAMETERS);
|
||||
}
|
||||
|
||||
/**
|
||||
* list of parameter descriptions for specific protocol
|
||||
*
|
||||
* @return complete set of protocol parameter description strings
|
||||
*/
|
||||
protected String[] getParamDescriptors()
|
||||
{
|
||||
return (CAN_DESCRIPTORS);
|
||||
}
|
||||
|
||||
/**
|
||||
* handle incoming protocol telegram
|
||||
* default implementaion only checks telegram and notifies listeners with
|
||||
* protocol payload
|
||||
*
|
||||
* @param buffer - telegram buffer
|
||||
* @return number of listeners notified
|
||||
*/
|
||||
@SuppressWarnings("rawtypes")
|
||||
@Override
|
||||
public int handleTelegram(char[] buffer)
|
||||
{
|
||||
int retValue = 0;
|
||||
try
|
||||
{
|
||||
Integer msgId = (Integer) getParamValue(ID_CAN_SVC, buffer);
|
||||
Vector params = canMsgMap.get(msgId);
|
||||
if (params != null)
|
||||
{
|
||||
Iterator it = params.iterator();
|
||||
while (it.hasNext())
|
||||
{
|
||||
Integer parId = (Integer) it.next();
|
||||
float value = getMsgValue(parId.intValue(), buffer);
|
||||
EcuDataPv pv = (EcuDataPv) CanPvs.get(parId);
|
||||
if (pv != null)
|
||||
{
|
||||
// now store all changes to PV
|
||||
pv.put(EcuDataPv.FIELDS[EcuDataPv.FID_VALUE], Float.valueOf(value));
|
||||
}
|
||||
}
|
||||
retValue = params.size();
|
||||
}
|
||||
} catch (Exception e)
|
||||
{
|
||||
log.log(Level.SEVERE, e.toString(), e);
|
||||
}
|
||||
return retValue;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,91 @@
|
||||
/*
|
||||
* (C) Copyright 2015 by fr3ts0n <erwin.scheuch-heilig@gmx.at>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of
|
||||
* the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
||||
* MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
package com.fr3ts0n.ecu.prot.obd;
|
||||
|
||||
import com.fr3ts0n.ecu.Conversions;
|
||||
|
||||
/**
|
||||
* CAN protocol definition for Ford Focus 1.8 TDI (Experimental)
|
||||
*
|
||||
* @author erwin
|
||||
*/
|
||||
public class CanProtFord extends CanProt
|
||||
{
|
||||
|
||||
/**
|
||||
* List of message dependent telegram parameters in order of appearance
|
||||
*/
|
||||
private static final int[][] MSG_PARAMETERS =
|
||||
/* START, LEN, PARAM-TYPE CONVERSION , DEC, MSG_ID // REMARKS */
|
||||
/* ----------------------------------------------------------------------------------------------------------- */
|
||||
{
|
||||
/* MSG 25 (Engine) */
|
||||
{2, 4, PT_HEX, Conversions.CNV_ID_RPM, 0, 0x25}, // Engine RPM [/min]
|
||||
{6, 4, PT_HEX_S16, Conversions.CNV_ID_RATIO, 1, 0x25}, // Engine speed regulator [%]
|
||||
{10, 2, PT_HEX, Conversions.CNV_ID_PERCENT, 1, 0x25}, // AccPed Position [%]
|
||||
/* MSG 2 (Speed) */
|
||||
{2, 4, PT_HEX, Conversions.CNV_ID_SPEED_HIGHRES, 1, 0x02}, // Vehicle speed [km/h]
|
||||
/* MSG 10 (ECT) */
|
||||
{2, 2, PT_HEX, Conversions.CNV_ID_TEMPERATURE, 1, 0x10}, // Engine coolant temp [°C]
|
||||
/* MSG 14 (ASR/ESP?) */
|
||||
{2, 2, PT_HEX, Conversions.CNV_ID_ONETOONE, 0, 0x14}, // ESP-Status [-]
|
||||
{4, 2, PT_HEX, Conversions.CNV_ID_TORQUE, 1, 0x14}, // ESP ratio2? [%]
|
||||
/* MSG 12 (Engine Warmup?) */
|
||||
{2, 2, PT_HEX, Conversions.CNV_ID_TORQUE, 1, 0x12}, // Warmup counter [-]
|
||||
/* MSG 30 (T15?) */
|
||||
{2, 2, PT_HEX, Conversions.CNV_ID_ONETOONE, 0, 0x30}, // T15 Status? [-]
|
||||
};
|
||||
|
||||
/**
|
||||
* list of message parameter descriptions
|
||||
*/
|
||||
private static final String[] MSG_DESCRIPTORS =
|
||||
{
|
||||
"Engine RPM",
|
||||
"Engine regulator",
|
||||
"Accelerator pedal",
|
||||
"Vehicle speed",
|
||||
"Engine coolant temparature",
|
||||
"ASR/ESP Status",
|
||||
"ASR/ESP Torque Limit",
|
||||
"Max. Engine torque",
|
||||
"T15 status",
|
||||
};
|
||||
|
||||
/**
|
||||
* get List of message dependent telegram parameters in order of appearance
|
||||
* Each parameter set contains following elements<br>
|
||||
* <pre>START, LEN, TYPE, CONVERSION_ID, , ID // REMARKS </pre>
|
||||
* <pre>---------------------------------------------------------------------------------</pre>
|
||||
*/
|
||||
public int[][] getMsgParameters()
|
||||
{
|
||||
return (MSG_PARAMETERS);
|
||||
}
|
||||
|
||||
/**
|
||||
* get list of message parameter descriptions
|
||||
*
|
||||
* @return list of messag parameter descriptors
|
||||
*/
|
||||
public String[] getMsgDescriptors()
|
||||
{
|
||||
return (MSG_DESCRIPTORS);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
package com.fr3ts0n.ecu.prot.obd;
|
||||
|
||||
import com.fr3ts0n.common.UTF8Bundle;
|
||||
|
||||
import java.util.MissingResourceException;
|
||||
import java.util.ResourceBundle;
|
||||
|
||||
public class Messages
|
||||
{
|
||||
private static final String BUNDLE_NAME = "com.fr3ts0n.ecu.prot.obd.res.messages"; //$NON-NLS-1$
|
||||
private static ResourceBundle RESOURCE_BUNDLE;
|
||||
|
||||
public Messages()
|
||||
{
|
||||
init(BUNDLE_NAME);
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialize messages with a new message bundle
|
||||
*
|
||||
* @param bundleName Name of message bundle
|
||||
*/
|
||||
public static void init(String bundleName)
|
||||
{
|
||||
RESOURCE_BUNDLE = UTF8Bundle.getBundle(bundleName);
|
||||
}
|
||||
|
||||
public static String getString(String key, String defaultString)
|
||||
{
|
||||
try
|
||||
{
|
||||
return RESOURCE_BUNDLE.getString(key);
|
||||
} catch (MissingResourceException e)
|
||||
{
|
||||
return defaultString;
|
||||
}
|
||||
}
|
||||
|
||||
public static String getString(String key)
|
||||
{
|
||||
return getString(key, '!' + key + '!');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,924 @@
|
||||
/**
|
||||
* (C) Copyright 2015 by fr3ts0n <erwin.scheuch-heilig@gmx.at>
|
||||
* <p>
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of
|
||||
* the License, or (at your option) any later version.
|
||||
* <p>
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
* <p>
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
||||
* MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
package com.fr3ts0n.ecu.prot.obd;
|
||||
|
||||
import com.fr3ts0n.ecu.Conversion;
|
||||
import com.fr3ts0n.ecu.EcuCodeItem;
|
||||
import com.fr3ts0n.ecu.EcuCodeList;
|
||||
import com.fr3ts0n.ecu.EcuConversions;
|
||||
import com.fr3ts0n.ecu.EcuDataItem;
|
||||
import com.fr3ts0n.ecu.EcuDataItems;
|
||||
import com.fr3ts0n.ecu.EcuDataPv;
|
||||
import com.fr3ts0n.ecu.ObdCodeItem;
|
||||
import com.fr3ts0n.ecu.ObdPid;
|
||||
import com.fr3ts0n.prot.ProtoHeader;
|
||||
import com.fr3ts0n.prot.TelegramListener;
|
||||
import com.fr3ts0n.prot.TelegramWriter;
|
||||
import com.fr3ts0n.pvs.PvChangeEvent;
|
||||
import com.fr3ts0n.pvs.PvList;
|
||||
|
||||
import java.beans.PropertyChangeEvent;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.Vector;
|
||||
|
||||
/**
|
||||
* OBD communication protocol layer
|
||||
*
|
||||
* The OBD protocol supports services which serve multiple PID's
|
||||
* A request of PID which is a multiple of 0x20 (0x00,0x20...0xE0) for each
|
||||
* service returns a bitmask of the next 32 PIDs which are suppoted by the vehicle
|
||||
* @author erwin
|
||||
*/
|
||||
public class ObdProt extends ProtoHeader
|
||||
implements TelegramListener, TelegramWriter
|
||||
{
|
||||
public static final int OBD_SVC_NONE = 0x00;
|
||||
public static final int OBD_SVC_DATA = 0x01;
|
||||
public static final int OBD_SVC_FREEZEFRAME = 0x02;
|
||||
public static final int OBD_SVC_READ_CODES = 0x03;
|
||||
public static final int OBD_SVC_CLEAR_CODES = 0x04;
|
||||
public static final int OBD_SVC_O2_RESULT = 0x05;
|
||||
public static final int OBD_SVC_MON_RESULT = 0x06;
|
||||
public static final int OBD_SVC_PENDINGCODES = 0x07;
|
||||
public static final int OBD_SVC_CTRL_MODE = 0x08;
|
||||
public static final int OBD_SVC_VEH_INFO = 0x09;
|
||||
public static final int OBD_SVC_PERMACODES = 0x0A;
|
||||
|
||||
/** negative response ID */
|
||||
private static final int OBD_ID_NRC = 0x7F;
|
||||
|
||||
/** perform immediate reset on NRC reception? */
|
||||
private boolean isResetOnNrc()
|
||||
{
|
||||
return resetOnNrc;
|
||||
}
|
||||
|
||||
/** Set protocol parameter
|
||||
* @param resetOnNrc perform immediate reset on NRC reception?
|
||||
*/
|
||||
public void setResetOnNrc(boolean resetOnNrc)
|
||||
{
|
||||
log.info(String.format("Reset on NRC = %b", resetOnNrc));
|
||||
this.resetOnNrc = resetOnNrc;
|
||||
}
|
||||
|
||||
/** negative response codes */
|
||||
public enum NRC
|
||||
{
|
||||
GR(0x10, "General reject",DISP.ERROR, REACT.RESET),
|
||||
SNS(0x11, "Service 0x%02X not supported", DISP.ERROR, REACT.CANCEL),
|
||||
SFNS(0x12, "Sub-Function not supported (SVC:0x%02X)", DISP.NOTIFY, REACT.SKIP),
|
||||
IMLOIF(0x13, "Incorrect message length or invalid format", DISP.NOTIFY, REACT.SKIP),
|
||||
RTL(0x14, "Response too long", DISP.NOTIFY, REACT.SKIP),
|
||||
BRR(0x21, "Busy repeat request", DISP.NOTIFY, REACT.REPEAT),
|
||||
CNC(0x22, "Conditions not correct (SVC:0x%02X)", DISP.ERROR, REACT.CANCEL),
|
||||
RSE(0x24, "Request sequence error", DISP.ERROR, REACT.CANCEL),
|
||||
NRFSC(0x25, "No response from sub-net component", DISP.ERROR, REACT.RESET),
|
||||
FPEORA(0x26, "Failure prevents execution of requested action", DISP.ERROR, REACT.CANCEL),
|
||||
ROOR(0x31, "Request out of range (SVC:0x%02X)", DISP.NOTIFY, REACT.SKIP),
|
||||
SAD(0x33, "Security access denied", DISP.ERROR, REACT.CANCEL),
|
||||
IK(0x35, "Invalid key", DISP.ERROR, REACT.RESET),
|
||||
ENOA(0x36, "Exceeded number of attempts", DISP.ERROR, REACT.RESET),
|
||||
RTDNE(0x37, "Required time delay not expired", DISP.NOTIFY, REACT.REPEAT),
|
||||
UDNA(0x70, "Upload/Download not accepted", DISP.ERROR, REACT.CANCEL),
|
||||
TDS(0x71, "Transfer data suspended", DISP.NOTIFY, REACT.REPEAT),
|
||||
GPF(0x72, "General programming failure", DISP.ERROR, REACT.CANCEL),
|
||||
WBSC(0x73, "Wrong Block Sequence Counter", DISP.ERROR, REACT.CANCEL),
|
||||
RCRRP(0x78, "Request correctly received but response is pending", DISP.NOTIFY, REACT.IGNORE),
|
||||
SFNSIAS(0x7E, "Sub-Function not supported in active session (SVC:0x%02X)", DISP.NOTIFY, REACT.SKIP),
|
||||
SNSIAS(0x7F, "Service 0x%02X not supported in active session", DISP.ERROR, REACT.CANCEL);
|
||||
|
||||
/** NRC display classifiers */
|
||||
public enum DISP
|
||||
{
|
||||
HIDE, /**< Do NOT display error */
|
||||
NOTIFY, /**< Display notification (w/o confirmation) */
|
||||
WARN, /**< Display warning (w/ confirmation) */
|
||||
ERROR /**< Display error (w/ confirmation) */
|
||||
}
|
||||
|
||||
/** NRC immediate protocol reaction classifiers */
|
||||
public enum REACT
|
||||
{
|
||||
IGNORE, /**< Ignore NRC */
|
||||
SKIP, /**< Skip last command */
|
||||
REPEAT, /**< Repeat last command */
|
||||
CANCEL, /**< Cancel command sequence / loop */
|
||||
RESET /**< Reset adapter */
|
||||
}
|
||||
|
||||
public final int code;
|
||||
public final String description;
|
||||
public final DISP disp;
|
||||
public final REACT react;
|
||||
|
||||
NRC(int _code, String _description, DISP _DISPClass, REACT _REACTClass)
|
||||
{
|
||||
code = _code;
|
||||
description = _description;
|
||||
disp = _DISPClass;
|
||||
react = _REACTClass;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get NRC with specified ID (NRC-code)
|
||||
* @param id ID (NRC-code) to search
|
||||
* @return specified NRC, or null if not found
|
||||
*/
|
||||
static NRC get(int id)
|
||||
{
|
||||
NRC result = null;
|
||||
for (NRC nrc : values())
|
||||
{
|
||||
if (nrc.code == id)
|
||||
{
|
||||
result = nrc;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
/** return String representative */
|
||||
public String toString(int service)
|
||||
{
|
||||
return String.format("(NRC:0x%02X) %s", code, String.format(description, service));
|
||||
}
|
||||
}
|
||||
|
||||
/** property name "number of codes" */
|
||||
public static final String PROP_NUM_CODES = "numCodes";
|
||||
public static final String PROP_NRC = "NRC";
|
||||
|
||||
// current supported PID
|
||||
private static int currSupportedPid = 0;
|
||||
static boolean pidsWrapped = false;
|
||||
|
||||
/** content of last sent message */
|
||||
static String lastTxMsg = "";
|
||||
/** content of last received message */
|
||||
static String lastRxMsg = "";
|
||||
/** Holds value of property service. */
|
||||
int service = OBD_SVC_NONE;
|
||||
/** service of last incoming message */
|
||||
private int msgService = OBD_SVC_NONE;
|
||||
|
||||
/** List of PIDs supported by the vehicle */
|
||||
private static final Vector<ObdPid> pidSupported = new Vector<ObdPid>();
|
||||
|
||||
/** positive response fields */
|
||||
private static final int ID_OBD_SVC = 0;
|
||||
private static final int ID_OBD_PID = 1;
|
||||
private static final int ID_OBD_FRAMEID = 2;
|
||||
|
||||
/** negative response fields */
|
||||
public static final int ID_NR_ID = 0;
|
||||
private static final int ID_NR_SVC = 1;
|
||||
private static final int ID_NR_CODE = 2;
|
||||
|
||||
/**
|
||||
* Negative response parameters
|
||||
* List of telegram parameters in order of appearance
|
||||
*/
|
||||
private static final int[][] NR_PARAMETERS =
|
||||
/* START, LEN, PARAM-TYPE // REMARKS */
|
||||
/* ------------------------------------------- */
|
||||
{{0, 2, PT_HEX}, // ID_NR_ID
|
||||
{2, 2, PT_HEX}, // ID_NR_SVC
|
||||
{4, 2, PT_HEX}, // ID_NR_CODE
|
||||
};
|
||||
|
||||
/**
|
||||
* List of telegram parameters in order of appearance
|
||||
*/
|
||||
private static final int[][] SVC_PARAMETERS =
|
||||
/* START, LEN, PARAM-TYPE // REMARKS */
|
||||
/* ------------------------------------------- */
|
||||
{{0, 2, PT_HEX}, // ID_OBD_SVC
|
||||
};
|
||||
|
||||
/**
|
||||
* List of telegram parameters in order of appearance
|
||||
*/
|
||||
private static final int[][] OBD_PARAMETERS =
|
||||
/* START, LEN, PARAM-TYPE // REMARKS */
|
||||
/* ------------------------------------------- */
|
||||
{{0, 2, PT_HEX}, // ID_OBD_SVC
|
||||
{2, 2, PT_HEX}, // ID_OBD_PID
|
||||
};
|
||||
|
||||
/**
|
||||
* List of telegram parameters in order of appearance
|
||||
*/
|
||||
private static final int[][] FRZFRM_PARAMETERS =
|
||||
/* START, LEN, PARAM-TYPE // REMARKS */
|
||||
/* ------------------------------------------- */
|
||||
{{0, 2, PT_HEX}, // ID_OBD_SVC
|
||||
{2, 2, PT_HEX}, // ID_OBD_PID
|
||||
{2, 2, PT_HEX}, // ID_OBD_FRAMEID
|
||||
};
|
||||
|
||||
private static final int ID_NUM_CODES = 0;
|
||||
public static final int ID_MSK_CODES = 1;
|
||||
/**
|
||||
* List of telegram parameters in order of appearance
|
||||
*/
|
||||
private static final int[][] NUMCODE_PARAMETERS =
|
||||
/* START, LEN, PARAM-TYPE // REMARKS */
|
||||
/* ------------------------------------------- */
|
||||
{{4, 2, PT_HEX}, // ID_NUM_CODES
|
||||
{6, 6, PT_HEX}, // ID_MSK_CODES
|
||||
};
|
||||
|
||||
private static final String[] OBD_DESCRIPTORS =
|
||||
{
|
||||
"OBD Service",
|
||||
"OBD PID",
|
||||
};
|
||||
|
||||
/** new style data items */
|
||||
public static final EcuDataItems dataItems = new EcuDataItems();
|
||||
|
||||
/** OBD data items */
|
||||
public static PvList PidPvs = new PvList();
|
||||
/** OBD vehicle identification items */
|
||||
public static PvList VidPvs = new PvList();
|
||||
/** current fault codes */
|
||||
public static PvList tCodes = new PvList();
|
||||
/** list of known fault codes */
|
||||
private static final EcuCodeList knownCodes = EcuConversions.codeList;
|
||||
/** queue of ELM commands to be sent */
|
||||
static final Vector<String> cmdQueue = new Vector<String>();
|
||||
/** freeze frame ID to request */
|
||||
private int freezeFrame_Id = 0;
|
||||
/** perform reset on NRC reception */
|
||||
private boolean resetOnNrc = false;
|
||||
|
||||
/** Creates a new instance of ObdProt */
|
||||
ObdProt()
|
||||
{
|
||||
paddingChr = '0';
|
||||
// prepare PID PV list
|
||||
PidPvs.put(0, new EcuDataPv());
|
||||
VidPvs.put(0, new EcuDataPv());
|
||||
tCodes.put(0, new ObdCodeItem(0, "No trouble codes set"));
|
||||
}
|
||||
|
||||
/**
|
||||
* set Freeze frame id to be requested
|
||||
* @param freezeFrame_Id ID of freeze frame to be requested
|
||||
*/
|
||||
public void setFreezeFrame_Id(int freezeFrame_Id)
|
||||
{
|
||||
log.info(String.format("FreezeFrame ID: %d", freezeFrame_Id));
|
||||
this.freezeFrame_Id = freezeFrame_Id;
|
||||
setService(OBD_SVC_FREEZEFRAME, true);
|
||||
}
|
||||
|
||||
/**
|
||||
* list of parameters for specific protocol
|
||||
* @return complete set of protocol parameters
|
||||
*/
|
||||
public int[][] getTelegramParams()
|
||||
{
|
||||
return (getTelegramParams(msgService));
|
||||
}
|
||||
|
||||
/**
|
||||
* list of parameters for specific protocol
|
||||
* @param service Service which this header is requested for
|
||||
* @return complete set of protocol parameters
|
||||
*/
|
||||
private int[][] getTelegramParams(int service)
|
||||
{
|
||||
int fldMap[][];
|
||||
switch (service)
|
||||
{
|
||||
// negative response
|
||||
case OBD_ID_NRC:
|
||||
fldMap = NR_PARAMETERS;
|
||||
break;
|
||||
|
||||
case OBD_SVC_FREEZEFRAME:
|
||||
fldMap = FRZFRM_PARAMETERS;
|
||||
break;
|
||||
|
||||
case OBD_SVC_READ_CODES:
|
||||
case OBD_SVC_PENDINGCODES:
|
||||
case OBD_SVC_PERMACODES:
|
||||
case OBD_SVC_CLEAR_CODES:
|
||||
fldMap = SVC_PARAMETERS;
|
||||
break;
|
||||
|
||||
default:
|
||||
fldMap = OBD_PARAMETERS;
|
||||
}
|
||||
return (fldMap);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* return message footer for protocol payload
|
||||
* @return buffer of message footer
|
||||
*/
|
||||
public char[] getFooter()
|
||||
{
|
||||
return (emptyBuffer);
|
||||
}
|
||||
|
||||
/**
|
||||
* create a new telegram header for selected payload data buffer
|
||||
* inclunding setting all ID's, sizes and validity issues
|
||||
* @param buffer buffer of payload data
|
||||
* @return buffer of new telegram header
|
||||
*/
|
||||
protected char[] getNewHeader(char[] buffer)
|
||||
{
|
||||
return (getNewHeader(buffer, OBD_SVC_DATA, Integer.valueOf(0)));
|
||||
}
|
||||
|
||||
/**
|
||||
* create a new telegram header inclunding setting all ID's, sizes and
|
||||
* validity issues
|
||||
* @param buffer buffer of payload data
|
||||
* @param type type of telegram content
|
||||
* @param id identifier for telegram (may be null)
|
||||
* @return buffer of new telegram header
|
||||
*/
|
||||
@SuppressWarnings("fallthrough")
|
||||
protected char[] getNewHeader(char[] buffer, int type, Object id)
|
||||
{
|
||||
int[][] fldMap = getTelegramParams(type);
|
||||
char[] header = createEmptyBuffer(fldMap, '0');
|
||||
setParamValue(ID_OBD_SVC, fldMap, header, Integer.valueOf(type));
|
||||
switch (type)
|
||||
{
|
||||
// these commands do not require parametrs
|
||||
case OBD_SVC_READ_CODES:
|
||||
case OBD_SVC_PENDINGCODES:
|
||||
case OBD_SVC_PERMACODES:
|
||||
case OBD_SVC_CLEAR_CODES:
|
||||
break;
|
||||
|
||||
// freezeframes require additional frame id
|
||||
case OBD_SVC_FREEZEFRAME:
|
||||
setParamValue(ID_OBD_FRAMEID, fldMap, header, freezeFrame_Id);
|
||||
// NO break here
|
||||
|
||||
// all other commands require PID to be set
|
||||
default:
|
||||
setParamValue(ID_OBD_PID, fldMap, header, id);
|
||||
}
|
||||
return (header);
|
||||
}
|
||||
|
||||
/**
|
||||
* list of parameter descriptions for specific protocol
|
||||
* @return complete set of protocol parameter description strings
|
||||
*/
|
||||
protected String[] getParamDescriptors()
|
||||
{
|
||||
return (OBD_DESCRIPTORS);
|
||||
}
|
||||
|
||||
/**
|
||||
* prepare process variables for each PID
|
||||
* @param pvList list of process vars
|
||||
*/
|
||||
private void preparePidPvs(int obdService, PvList pvList)
|
||||
{
|
||||
// reset fixed PIDs
|
||||
resetFixedPid();
|
||||
|
||||
HashMap<String, EcuDataPv> newList = new HashMap<String, EcuDataPv>();
|
||||
for (ObdPid currPid : pidSupported)
|
||||
{
|
||||
Vector<EcuDataItem> items = dataItems.getPidDataItems(obdService, currPid.intValue());
|
||||
// if no items defined, create dummy item
|
||||
if (items == null)
|
||||
{
|
||||
log.warning(String.format("unknown PID %02X", currPid.intValue()));
|
||||
|
||||
// create new dummy item / OneToOne conversion
|
||||
Conversion[] dummyCnvs = {EcuConversions.dfltCnv, EcuConversions.dfltCnv};
|
||||
EcuDataItem newItem = new EcuDataItem(currPid.intValue(), 0, 0, 0, 32, 0xFFFFFFFF, dummyCnvs,
|
||||
"%#08x", null, null, 0,
|
||||
String.format("PID %02X", currPid.intValue()),
|
||||
String.format("PID_%02X", currPid.intValue())
|
||||
);
|
||||
dataItems.appendItemToService(obdService, newItem);
|
||||
|
||||
// re-load data items for this PID
|
||||
items = dataItems.getPidDataItems(obdService, currPid.intValue());
|
||||
}
|
||||
// loop through all items found ...
|
||||
for (EcuDataItem pidPv : items)
|
||||
{
|
||||
if (pidPv != null)
|
||||
{
|
||||
newList.put(pidPv.toString(), pidPv.pv);
|
||||
}
|
||||
}
|
||||
}
|
||||
pvList.putAll(newList, PvChangeEvent.PV_ADDED, false);
|
||||
}
|
||||
|
||||
/**
|
||||
* mark all PIDs supported by the vehicle
|
||||
* @param start Start PID (multiple of 0x20) to process bitmask for
|
||||
* @param bitmask 32-Bit bitmask which indicates support for the next 32 PIDs
|
||||
*/
|
||||
private synchronized void markSupportedPids(int obdService, int start, long bitmask,
|
||||
PvList pvList)
|
||||
{
|
||||
currSupportedPid = 0;
|
||||
|
||||
// Clear PID list on initial bitmask (offset 0)
|
||||
if( start == 0)
|
||||
{
|
||||
pidSupported.clear();
|
||||
}
|
||||
|
||||
// loop through bits and mark corresponding PIDs as supported
|
||||
for (int i = 0; i < 0x1F; i++)
|
||||
{
|
||||
if ((bitmask & (0x80000000L >> i)) != 0)
|
||||
{
|
||||
pidSupported.add(new ObdPid(i + start + 1));
|
||||
}
|
||||
}
|
||||
|
||||
log.fine(Long.toHexString(bitmask).toUpperCase()
|
||||
+ "(" + Long.toHexString(start) + "):"
|
||||
+ pidSupported);
|
||||
|
||||
// if next block may be requested
|
||||
if ((bitmask & 1) != 0)
|
||||
{
|
||||
// request next block
|
||||
cmdQueue.add(String.format("%02X%02X", obdService, start + 0x20));
|
||||
}
|
||||
else
|
||||
{
|
||||
// setup PID PVs
|
||||
preparePidPvs(obdService, pvList);
|
||||
}
|
||||
}
|
||||
|
||||
/** Holds value of property numCodes. */
|
||||
private int numCodes;
|
||||
|
||||
/** fixed PIDs to limit PID loop to single access */
|
||||
private static final Vector<ObdPid> fixedPids = new Vector<ObdPid>();
|
||||
|
||||
/**
|
||||
* Set fixed PID for faster data update
|
||||
* @param pidCodes the fixedPid to set
|
||||
*/
|
||||
public static synchronized void setFixedPid(int[] pidCodes)
|
||||
{
|
||||
for (ObdPid currPid : pidSupported)
|
||||
{
|
||||
if (Arrays.binarySearch(pidCodes, currPid.intValue()) >= 0)
|
||||
{
|
||||
fixedPids.add(currPid);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static synchronized void resetFixedPid()
|
||||
{
|
||||
fixedPids.clear();
|
||||
}
|
||||
|
||||
/**
|
||||
* get the next available supported PID
|
||||
* @return next available supported PID
|
||||
*/
|
||||
synchronized Integer getNextSupportedPid()
|
||||
{
|
||||
Integer result = 0;
|
||||
/* get corresponding PID list */
|
||||
Vector<ObdPid> pidsToCheck = (fixedPids.size() > 0) ? fixedPids : pidSupported;
|
||||
try
|
||||
{
|
||||
/* sort by next expected request */
|
||||
Collections.sort(pidsToCheck, ObdPid.requestSorter);
|
||||
ObdPid pid = pidsToCheck.firstElement();
|
||||
/* detect wrap around in PID list */
|
||||
pidsWrapped = pid.getNextRequest() != 0;
|
||||
/* mark PID as handled */
|
||||
pid.setNextRequest(System.currentTimeMillis());
|
||||
/* and return first list element */
|
||||
result = pid.intValue();
|
||||
}
|
||||
catch(Exception e)
|
||||
{
|
||||
/* ignore */
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* handle OBD response telegram
|
||||
* @param buffer - telegram buffer
|
||||
* @return number of listeners notified
|
||||
*/
|
||||
@Override
|
||||
@SuppressWarnings("fallthrough")
|
||||
public synchronized int handleTelegram(char[] buffer)
|
||||
{
|
||||
int result = 0;
|
||||
int msgPid;
|
||||
|
||||
if (checkTelegram(buffer))
|
||||
{
|
||||
try
|
||||
{
|
||||
msgService = (Integer) getParamValue(ID_OBD_SVC, buffer);
|
||||
// check for negative result
|
||||
if (msgService == OBD_ID_NRC)
|
||||
{
|
||||
// get NR service
|
||||
int svc = (Integer) getParamValue(ID_NR_SVC, buffer);
|
||||
// get NRC code
|
||||
int nrcCode = (Integer) getParamValue(ID_NR_CODE, buffer);
|
||||
// get NRC object
|
||||
NRC nrc = NRC.get(nrcCode);
|
||||
// create NRC error message
|
||||
String error = nrc.toString(svc);
|
||||
// log error
|
||||
log.severe(error);
|
||||
// notify change listeners
|
||||
firePropertyChange(new PropertyChangeEvent(this, PROP_NRC, nrc, error));
|
||||
// handle NRC reaction
|
||||
switch(nrc.react)
|
||||
{
|
||||
case RESET:
|
||||
if (isResetOnNrc())
|
||||
{
|
||||
// perform immediate reset because NRC reception
|
||||
reset();
|
||||
} else
|
||||
{
|
||||
// otherwise just switch off any active service
|
||||
setService(OBD_SVC_NONE, true);
|
||||
}
|
||||
break;
|
||||
|
||||
case CANCEL:
|
||||
// switch off any active service
|
||||
setService(OBD_SVC_NONE, true);
|
||||
break;
|
||||
|
||||
case REPEAT:
|
||||
// Repeat last TX message
|
||||
sendTelegram(lastTxMsg.toCharArray());
|
||||
break;
|
||||
|
||||
case SKIP:
|
||||
case IGNORE:
|
||||
default:
|
||||
// Intentionally do noting
|
||||
}
|
||||
// handling finished
|
||||
return result;
|
||||
}
|
||||
|
||||
// positive response -> mask service ID
|
||||
msgService &= ~0x40;
|
||||
// check service of message
|
||||
switch (msgService)
|
||||
{
|
||||
// OBD Data frame
|
||||
case OBD_SVC_FREEZEFRAME:
|
||||
case OBD_SVC_DATA:
|
||||
msgPid = (Integer) getParamValue(ID_OBD_PID, buffer);
|
||||
switch (msgPid)
|
||||
{
|
||||
case 0x00:
|
||||
case 0x20:
|
||||
case 0x40:
|
||||
case 0x60:
|
||||
case 0x80:
|
||||
case 0xA0:
|
||||
case 0xC0:
|
||||
case 0xE0:
|
||||
// Check for optional message count byte, find offset to payload
|
||||
int offset = (buffer.length % 4 == 0) ? 4 : 6;
|
||||
// get payload data and mark the indicated supported PIDs
|
||||
long msgPayload = Long.valueOf(new String(buffer, offset, 8), 16);
|
||||
markSupportedPids(msgService, msgPid, msgPayload, PidPvs);
|
||||
break;
|
||||
|
||||
// OBD number of fault codes
|
||||
case 1:
|
||||
msgPayload = ((Integer) getParamValue(ID_NUM_CODES,
|
||||
NUMCODE_PARAMETERS,
|
||||
buffer)).longValue();
|
||||
setNumCodes(Long.valueOf(msgPayload).intValue());
|
||||
// no break here ...
|
||||
default:
|
||||
long updatePeriod =
|
||||
dataItems.updateDataItems(msgService,
|
||||
msgPid,
|
||||
hexToBytes(String.valueOf(
|
||||
getPayLoad(buffer))));
|
||||
/* Update expected request timestamp for PID */
|
||||
for( ObdPid pid : pidSupported)
|
||||
{
|
||||
if(pid.intValue()==msgPid)
|
||||
{
|
||||
pid.setNextRequest(System.currentTimeMillis()+updatePeriod);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
case OBD_SVC_CTRL_MODE: // Test control mode
|
||||
case OBD_SVC_VEH_INFO: // get vehicle information (mode 9)
|
||||
msgPid = (Integer) getParamValue(ID_OBD_PID, buffer);
|
||||
switch (msgPid)
|
||||
{
|
||||
case 0x00:
|
||||
case 0x20:
|
||||
case 0x40:
|
||||
case 0x60:
|
||||
case 0x80:
|
||||
case 0xA0:
|
||||
case 0xC0:
|
||||
case 0xE0:
|
||||
// Check for optional message count byte, find offset to payload
|
||||
int offset = (buffer.length % 4 == 0) ? 4 : 6;
|
||||
// get payload data and mark the indicated supported PIDs
|
||||
long msgPayload = Long.valueOf(new String(buffer, offset, 8), 16);
|
||||
markSupportedPids(msgService, msgPid, msgPayload, VidPvs);
|
||||
break;
|
||||
|
||||
default:
|
||||
long updatePeriod =
|
||||
dataItems.updateDataItems(msgService,
|
||||
msgPid,
|
||||
hexToBytes(String.valueOf(
|
||||
getPayLoad(buffer))));
|
||||
/* Update expected request timestamp for PID */
|
||||
for( ObdPid pid : pidSupported)
|
||||
{
|
||||
if(pid.intValue()==msgPid)
|
||||
{
|
||||
pid.setNextRequest(System.currentTimeMillis()+updatePeriod);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
// fault code response
|
||||
case OBD_SVC_READ_CODES:
|
||||
case OBD_SVC_PENDINGCODES:
|
||||
case OBD_SVC_PERMACODES:
|
||||
int currCode;
|
||||
Integer key;
|
||||
EcuCodeItem code;
|
||||
int nCodes = 0;
|
||||
// default DTC data to start at offset 2 (Byte 1)
|
||||
int DTCOffs = 2;
|
||||
|
||||
// If message contains optional number of codes (1 Byte) then set it ...
|
||||
boolean hasNumCodes = ((buffer.length % 4) == 0);
|
||||
if (hasNumCodes)
|
||||
{
|
||||
nCodes = Integer.valueOf(new String(buffer, 2, 2), 16);
|
||||
setNumCodes(nCodes);
|
||||
// DTC data starts at offset 4 (byte 2)
|
||||
DTCOffs = 4;
|
||||
}
|
||||
|
||||
// read in all trouble codes
|
||||
for (int i = DTCOffs; i < buffer.length; i += 4)
|
||||
{
|
||||
key = Integer.valueOf(new String(buffer, i, 4), 16);
|
||||
currCode = key.intValue();
|
||||
if (currCode != 0)
|
||||
{
|
||||
if ((code = knownCodes.get(key)) == null)
|
||||
{
|
||||
code = new ObdCodeItem(key.intValue(),
|
||||
Messages.getString(
|
||||
"customer.specific.trouble.code.see.manual"));
|
||||
}
|
||||
log.fine(String.format("+DFC: %04x: %s", key, code.toString()));
|
||||
// Remember received message service to know code status
|
||||
code.put(EcuCodeItem.FID_STATUS, Integer.valueOf(msgService));
|
||||
tCodes.put(key, code);
|
||||
// if number of codes hasn't been delivered yet ...
|
||||
if(!hasNumCodes)
|
||||
{
|
||||
// increment number of detected codes
|
||||
nCodes++;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (nCodes == 0)
|
||||
{
|
||||
tCodes.put(0, new ObdCodeItem(0, Messages.getString(
|
||||
"no.trouble.codes.set")));
|
||||
}
|
||||
break;
|
||||
|
||||
// clear code response
|
||||
case OBD_SVC_CLEAR_CODES:
|
||||
break;
|
||||
|
||||
default:
|
||||
log.warning("Service not (yet) supported: " + msgService);
|
||||
}
|
||||
} catch (Exception e)
|
||||
{
|
||||
log.warning("'" + Arrays.toString(buffer) + "':" + e.getMessage());
|
||||
}
|
||||
}
|
||||
return (result);
|
||||
}
|
||||
|
||||
/**
|
||||
* Notify all telegram Writers about new telegram
|
||||
* @param buffer - telegram buffer
|
||||
*/
|
||||
@Override
|
||||
public void sendTelegram(char[] buffer)
|
||||
{
|
||||
// remember last sent message
|
||||
lastTxMsg = new String(buffer);
|
||||
super.sendTelegram(buffer);
|
||||
}
|
||||
|
||||
/**
|
||||
* Getter for property numCodes.
|
||||
* @return Value of property numCodes.
|
||||
*/
|
||||
public int getNumCodes()
|
||||
{
|
||||
return this.numCodes;
|
||||
}
|
||||
|
||||
/**
|
||||
* Setter for property numCodes.
|
||||
* @param numCodes New value of property numCodes.
|
||||
*/
|
||||
private void setNumCodes(int numCodes)
|
||||
{
|
||||
int old = this.numCodes;
|
||||
this.numCodes = numCodes;
|
||||
firePropertyChange(new PropertyChangeEvent(this,
|
||||
PROP_NUM_CODES,
|
||||
Integer.valueOf(old),
|
||||
Integer.valueOf(numCodes)));
|
||||
}
|
||||
|
||||
/**
|
||||
* Getter for property service.
|
||||
* @return Value of property service.
|
||||
*/
|
||||
public int getService()
|
||||
{
|
||||
return this.service;
|
||||
}
|
||||
|
||||
/**
|
||||
* reset all protocol settings
|
||||
*/
|
||||
public void reset()
|
||||
{
|
||||
// switch off any active service
|
||||
setService(OBD_SVC_NONE, true);
|
||||
// clear command queue
|
||||
cmdQueue.clear();
|
||||
// clear supported PIDs
|
||||
pidSupported.clear();
|
||||
// reset fixed PIDs
|
||||
resetFixedPid();
|
||||
// Clear data items
|
||||
PidPvs.clear();
|
||||
tCodes.clear();
|
||||
VidPvs.clear();
|
||||
}
|
||||
|
||||
/**
|
||||
* clear data lists for selected service
|
||||
* @param obdService OBD service to clear lists for
|
||||
*/
|
||||
private void clearDataLists(int obdService)
|
||||
{
|
||||
// clean up data lists
|
||||
switch (obdService)
|
||||
{
|
||||
case OBD_SVC_DATA:
|
||||
case OBD_SVC_FREEZEFRAME:
|
||||
// Clear data items
|
||||
pidSupported.clear();
|
||||
PidPvs.clear();
|
||||
break;
|
||||
|
||||
case OBD_SVC_READ_CODES:
|
||||
case OBD_SVC_PENDINGCODES:
|
||||
case OBD_SVC_PERMACODES:
|
||||
tCodes.clear();
|
||||
break;
|
||||
|
||||
case OBD_SVC_VEH_INFO:
|
||||
case OBD_SVC_CTRL_MODE:
|
||||
// Clear data items
|
||||
pidSupported.clear();
|
||||
VidPvs.clear();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Setter for property service.
|
||||
* This includes initialisation of the requested service to the vehicle
|
||||
* @param obdService New OBD service to be requested.
|
||||
* @param clearLists clear data list for this service
|
||||
*/
|
||||
public void setService(int obdService, boolean clearLists)
|
||||
{
|
||||
this.service = obdService;
|
||||
pidsWrapped = false;
|
||||
// if lists shall be cleared
|
||||
if (clearLists)
|
||||
{
|
||||
// then do it
|
||||
clearDataLists(obdService);
|
||||
}
|
||||
|
||||
// set specified OBD service
|
||||
switch (obdService)
|
||||
{
|
||||
case OBD_SVC_NONE:
|
||||
// sendCommand(CMD_RESET,0);
|
||||
break;
|
||||
|
||||
case OBD_SVC_DATA:
|
||||
case OBD_SVC_FREEZEFRAME:
|
||||
case OBD_SVC_CTRL_MODE:
|
||||
case OBD_SVC_VEH_INFO:
|
||||
// read vehicle information
|
||||
// request for PID/TID's supported
|
||||
writeTelegram(emptyBuffer, obdService, 0);
|
||||
break;
|
||||
|
||||
case OBD_SVC_READ_CODES:
|
||||
case OBD_SVC_PENDINGCODES:
|
||||
case OBD_SVC_PERMACODES:
|
||||
numCodes = 0;
|
||||
// Queue requests for reading all trouble codes
|
||||
cmdQueue.add(String.format("%02X", OBD_SVC_READ_CODES, 0));
|
||||
cmdQueue.add(String.format("%02X", OBD_SVC_PENDINGCODES, 0));
|
||||
cmdQueue.add(String.format("%02X", OBD_SVC_PERMACODES, 0));
|
||||
// read PID number of codes ...
|
||||
writeTelegram(emptyBuffer, OBD_SVC_DATA, 1);
|
||||
break;
|
||||
|
||||
case OBD_SVC_CLEAR_CODES:
|
||||
// clear trouble codes
|
||||
writeTelegram(emptyBuffer, obdService, 0);
|
||||
// wait for codes to be cleared
|
||||
try
|
||||
{
|
||||
Thread.sleep(500);
|
||||
} catch (InterruptedException e)
|
||||
{
|
||||
// Intentionally do nothing
|
||||
}
|
||||
break;
|
||||
|
||||
case OBD_SVC_O2_RESULT:
|
||||
case OBD_SVC_MON_RESULT:
|
||||
default:
|
||||
log.warning("Service not supported: " + obdService);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
/*
|
||||
* (C) Copyright 2016 by fr3ts0n <erwin.scheuch-heilig@gmx.at>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of
|
||||
* the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
||||
* MA 02111-1307 USA
|
||||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
* OBD specific protocol stuff
|
||||
*
|
||||
* @author Erwin Scheuch-Heilig
|
||||
*/
|
||||
package com.fr3ts0n.ecu.prot.obd;
|
||||
@@ -0,0 +1,15 @@
|
||||
P0002=دائرة التحكم في منظم حجم الوقود المدى/الأداء
|
||||
P0001=دائرة التحكم في منظم حجم الوقود/مفتوحة
|
||||
P0003=دائرة التحكم في منظم حجم الوقود منخفضة
|
||||
P0004=دائرة التحكم في منظم حجم الوقود عالية
|
||||
P0005=دائرة التحكم في صمام إغلاق الوقود A / مفتوحة
|
||||
P0006=دائرة التحكم في صمام إغلاق الوقود A منخفضة
|
||||
P0007=دائرة التحكم في صمام إغلاق الوقود A عالية
|
||||
U0169=فقد الاتصال بوحدة التحكم في فتحة السقف
|
||||
U0165=فقد الاتصال بوحدة التحكم في التدفئة والتهوية وتكييف الهواء
|
||||
U0418=تم استلام بيانات غير صالحة من وحدة التحكم في نظام الفرامل
|
||||
U0420=تم استلام بيانات غير صالحة من وحدة التحكم في التوجيه المعزز
|
||||
U0424=تم استلام بيانات غير صالحة من وحدة التحكم في التدفئة والتهوية وتكييف الهواء
|
||||
U0428=تم استلام بيانات غير صالحة من وحدة مستشعر زاوية التوجيه
|
||||
U0427=تم استلام بيانات غير صالحة من وحدة التحكم في أمن السيارة
|
||||
U0426=تم استلام بيانات غير صالحة من وحدة التحكم في نظام منع تشغيل السيارة
|
||||
@@ -0,0 +1 @@
|
||||
P0001=Regulador del circuit de control del volum de carburant/obert
|
||||
@@ -0,0 +1 @@
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
P0001=Řídicí obvod regulátoru objemu paliva - přerušen
|
||||
@@ -0,0 +1,177 @@
|
||||
P0001=Κύκλωμα Ελέγχου Ρυθμιστή Καυσίμων/Ανοιχτό
|
||||
P0002=Σειρά Κυκλώματος Ελέγχου Ρυθμιστή Όγκου Καυσίμων/Απόδοση
|
||||
P0003=Χαμηλό Κύκλωμα Ελέγχου Ρυθμιστή Καυσίμων
|
||||
P0004=Υψηλό Κύκλωμα Ελέγχου Ρυθμιστή Καυσίμων
|
||||
P0005=Κύκλωμα Ελέγχου Καυσίμων με Κλειστή Βαλβίδα/Ανοικτό
|
||||
P0006=Χαμηλό Κύκλωμα Κυκλώματος Ελέγχου Καυσίμων με Κλειστή Βαλβίδα
|
||||
P0007=Υψηλό Κύκλωμα Ελέγχου Καυσίμων με Κλειστή Βαλβίδα
|
||||
P0008=Τράπεζα 1 Απόδοσης Συστήματος Θέσης Μηχανής
|
||||
P0009=Τράπεζα 2 Απόδοσης Συστήματος Θέσης Μηχανής
|
||||
P000A=Τράπεζα 1 Χαμηλής Απόδοσης Θέσης Camshaft
|
||||
P000B=Τράπεζα 1 Χαμηλής Απόδοσης Θέσης Camshaft B
|
||||
P000C=Τράπεζα 2 Χαμηλής Απόδοσης Θέσης Camshaft A
|
||||
P000D=Τράπεζα 2 Χαμηλής Απόδοσης Θέσης Camshaft B
|
||||
P000E=ISO/SAE αποθηκεύτηκε
|
||||
P000F=ISO/SAE κρατήθηκε
|
||||
P0010=Ενεργό Κύκλωμα Θέσης Camshaft A/Ανοικτή Τράπεζα 1
|
||||
P0011=Θέση Camshaft A-Τράπεζα 1 Προχωρημένου Συστήματος ή Απόδοσης
|
||||
P0012=Θέση Camshaft A-Ο Χρόνος Τελείωσε-Καθυστερημένη Τράπεζα 1
|
||||
P0013=Θέση Camshaft B-Ενεργό Κύκλωμα/Ανοικτή Τράπεζα 1
|
||||
P0014=Θέση Camshaft B-O Χρόνος Τελείωσε-Τράπεζα 1 Προχωρημένου Συστήματος ή Απόδοσης
|
||||
P0015=Θέση Camshaft B-Ο Χρόνος Τελείωσε-Καθυστερημένη Τράπεζα 1
|
||||
P0016=Θέση Crankshaft -Ανιχνευτής Α Τράπεζα 1 Θέση Camshaft
|
||||
P0017=Θέση Crankshaft -Ανιχνευτής Β Σχέση Τράπεζας 1 με την Θέση Camshaft
|
||||
P0018=Θέση Crankshaft -Θέση Camshaft Σχέση Τράπεζας 2 Ανιχνευτής Α
|
||||
P0019=Θέση Crankshaft -Θέση Camshaft Ανιχνευτή Β Σχέση Τράπεζας 2
|
||||
P0020=Ενεργό Κύκλωμα Θέσης Camshaft A/Ανοικτή Τράπεζα 2
|
||||
P0021=Θέση Α Camshaft -Τέλος Χρόνου-Προχωρημένο Σύστημα ή Απόδοσης Τράπεζας 2
|
||||
P0022=Θέση Camshaft Α-Τέλος Χρόνου-Καθυστέρηση Τράπεζας 2
|
||||
P0023=Θέση Β Camshaft -Ενεργό Κύκλωμα/Ανοικτή Τράπεζα 2
|
||||
P0024=Θέση Camshaft B-Τέλος Χρόνου-Προχωρημένο Σύστημα ή Απόδοσης Τράπεζας 2
|
||||
P0025=Θέση Camshaft Β-Τέλος Χρόνου-Καθυστερημένη Τράπεζα 2
|
||||
P0026=Σειρά Κυκλώματος Ελέγχου Ηλιακής Ενέργειας με Βαλβίδα Απορρόφησης/Απόδοση Τράπεζας 1
|
||||
P0027=Σειρά Κυκλώματος Ελέγχου Ηλιακής Ενέργειας με Βαλβίδα Εξάτμισης/Απόδοση Τράπεζας 1
|
||||
P0028=Σειρά Κυκλώματος Ελέγχου Ηλιακής Ενέργειας με Βαλβίδα Απορρόφησης/Απόδοση Τράπεζας 2
|
||||
P0029=Σειρά Κυκλώματος Ελέγχου Ηλιακής Ενέργειας με Βαλβίδα Εξάτμισης/Απόδοση Τράπεζας 2
|
||||
P0030=Ανιχνευτής 1 Ελέγχου Κυκλώματος Τράπεζας 1 με Θερμαστή HO2S
|
||||
P0031=Θερμαστής HO2S Ελέγχου Κυκλώματος Χαμηλής Τάσης Τράπεζας 1 Ανιχνευτής 1
|
||||
P0032=Θερμαστής HO2S Ελέγχου Κυκλώματος Υψηλής Τάσης Τράπεζας 1 Ανιχνευτής 1
|
||||
P0033=Φορτιστής Turbo/Κύκλωμα Ελέγχου Σούπερ Φορτιστή με Βαλβίδα Bypass
|
||||
P0034=Φορτιστής Turbo/Σούπερ φορτιστής Ελέγχου Κυκλώματος Χαμηλής Τάσης με Βαλβίδα Bypass
|
||||
P0036=Ανιχνευτής 2 Ελέγχου Κυκλώματος Τράπεζας 1 με Θερμαστή HO2S
|
||||
P0038=Θερμαστής HO2S Ελέγχου Κυκλώματος Υψηλής Τάσης Τράπεζα 1 Ανιχνευτής 2
|
||||
P0039=Φορτιστής Turbo/Σούπερ φορτιστής Σειράς Κυκλώματος Ελέγχου Βαλβίδας Bypass/Απόδοση
|
||||
P0042=Ανιχνευτής 3 με Θερμαστή HO2S Κυκλώματος Ελέγχου Τράπεζα 1
|
||||
P0043=Θερμαστής HO2S Ανιχνευτής 3 Κυκλώματος Ελέγχου Χαμηλής Τάσης Τράπεζας 1
|
||||
P0044=Θερμαστής HO2S Ανιχνευτής 3 Κυκλώματος Ελέγχου Υψηλής Τάσης Τράπεζα 1
|
||||
P0045=Φορτιστής Turbo/Σούπερ φορτιστής Βελτίωσης Ελέγχου Κυκλώματος Ηλιακής Ενέργειας Α/Ανοικτό
|
||||
P0046=Φορτιστής Turbo/Σούπερ φορτιστής Βελτίωσης Σειράς Κυκλώματος Ηλιακής Ενέργειας Α/Απόδοση
|
||||
P0047=Φορτιστής Turbo/Σούπερ φορτιστής Βελτίωσης Ελέγχου Κυκλώματος Ηλιακής Ενέργειας Α Χαμηλής Τάσης
|
||||
P0048=Φορτιστής Turbo/Σούπερ φορτιστής Βελτίωσης Ελέγχου Κυκλώματος Ηλιακής Ενέργειας Α Υψηλής Τάσης
|
||||
P0049=Φορτιστής Turbo/Σούπερ φορτιστής Τουρμπίνας Μεγίστης Ταχύτητας
|
||||
P004A=Φορτιστής Turbo/Σούπερ φορτιστής Βελτίωσης Ελέγχου Κυκλώματος Ηλιακής Ενέργειας Β/Ανοικτός
|
||||
P004B=Φορτιστής Turbo/Σούπερ φορτιστής Βελτίωσης Ελέγχου Σειράς Κυκλώματος Ηλιακής Ενέργειας Β/Απόδοση
|
||||
P004C=Φορτιστής Turbo/Σούπερ φορτιστής Βελτίωσης Ελέγχου Σειράς Κυκλώματος Χαμηλής Τάσης Ηλιακής Ενέργειας Β
|
||||
P004D=Φορτιστής Turbo/Σούπερ φορτιστής Βελτίωσης Ελέγχου Κυκλώματος Ηλιακής Ενέργειας Β Υψηλής Τάσης
|
||||
P0035=Δυνατός φορτιστής/Έλεγχος Κυκλώματος Φορτιστή Υψηλής Τάσης με Βαλβίδα Bypass
|
||||
P0037=Έλεγχος Κυκλώματος ΘερμαστήHO2S υψηλής Τάσης Τράπεζα 1 Ανιχνευτής
|
||||
P0040=Σήματα Ανιχνευτή Q2 Ανιχνευτής 1 Τράπεζα 1/Ανιχνευτής 1 Τράπεζας 2
|
||||
P0041=Ανιχνευτής Σημάτων Q2 Τράπεζα 1 Ανιχνευτής 2/Τράπεζα 2 Ανιχνευτής 2
|
||||
P004E=Δυνατός Φορτιστής/Ενίσχυση Ελέγχου ΚυκλώματοςSolenoid Α Ενδιάμεσου Φορτιστή υψηλής Τάσης/Ελεύθερος
|
||||
P004F=Ισχυρός φορτιστής/Φορτιστής πολύ ισχυρός Βελτίωσης Ελέγχου Ενδιάμεσου Κυκλώματος Β Solenoid/Ελεύθερος
|
||||
P0050=HO2S Έλεγχος Κυκλώματος με Θερμαστή Τράπεζα 1 Ανιχνευτής 1
|
||||
P0051=HO2S Έλεγχος Θερμαστή Χαμηλού Κυκλώματος Τράπεζα 2 Ανιχνευτής 1
|
||||
P0052=HO2S Θερμαστής Ελέγχου Κυκλώματος Υψηλής Τάσης Τράπεζα 2 Ανιχνευτής 1
|
||||
P0053=HO2S Αντίσταση Θερμαστή Τράπεζα 1 Ανιχνευτής 1
|
||||
P0054=HO2S Αντίσταση Θερμαστή Τράπεζα 1 Ανιχνευτής 2
|
||||
P0055=HO2S Αντίσταση Θερμαστή Τράπεζα 1 Ανιχνευτής 3
|
||||
P0056=HO2S Έλεγχος Κυκλώματος Θερμαστή Τράπεζα 2 Ανιχνευτής 2
|
||||
P0057=HO2S Έλεγχος Θερμαστή Κυκλώματος Χαμηλής Τάσης Τράπεζα 2 Ανιχνευτής 2
|
||||
P0058=HO2S Θερμαστής Ελέγχου Κυκλώματος Υψηλής Τάσης Τράπεζα 2 Ανιχνευτής 2
|
||||
P0059=HO2S Αντίσταση Θερμαστή Τράπεζα 2 Ανιχνευτής 1
|
||||
P0060=HO2S Αντίσταση Θερμαστή Τράπεζα 2 Ανιχνευτής 2
|
||||
P0061=HO2S Αντίσταση Θερμαστή Τράπεζα 2 Ανιχνευτής 3
|
||||
P0062=HO2S Έλεγχος Θερμαστή Κύκλωμα Τράπεζα 2 Ανιχνευτής 3
|
||||
P0063=HO2S Θερμαστής Ελέγχου Κυκλώματος Χαμηλής Τάσης Τράπεζα 2 Ανιχνευτής 3
|
||||
P0064=HO2S Έλεγχος Κυκλώματος Υψηλής Τάσης με Θερμαστή Τράπεζα 2 Ανιχνευτής 3
|
||||
P0065=Σειρά Ελέγχου Σωλήνα που Τροφοδοτείται με Αέρα/Απόδοση
|
||||
P0066=Έλεγχος Κυκλώματος με Σωλήνα που Τροφοδοτείται με Αέρα ή Κύκλωμα Χαμηλής Τάσης
|
||||
P0067=Έλεγχος Κυκλώματος Υψηλής Τάσης με Σωλήνα που Τροφοδοτείται με Αέρα
|
||||
P0068=MAP/MAF – Θέση Σύνδεσης Σωλήνα
|
||||
P0069=Κύρια Πίεση Μετρητή-Μέτρηση Βαρομετρικής Πίεσης
|
||||
P006A=ΜΑΡ- Μέτρηση Εισόδου Αέρα
|
||||
P006B=ΜΑΡ-Μέτρηση Πίεσης Εξάτμισης
|
||||
P006C=MAP-Δυνατός φορτιστής/Μέτρηση Πίεσης Σούπερ φορτιστή
|
||||
P006D=Βαρομετρική Πίεση- Ισχυρότατος φορτιστής/Μέτρηση Πίεσης Εισόδου Σούπερ φορτιστή
|
||||
P006E=To ISO/SAE κρατήθηκαν
|
||||
P006F=Τα ISO/SAE κρατήθηκαν
|
||||
P0070=Κύκλωμα με Ανιχνευτή Μέτρησης Ατμοσφαιρικής Πίεσης
|
||||
P0071=Εύρος Ανιχνευτή Εξωτερικού Αέρα/Απόδοση
|
||||
P0072=Κύκλωμα Χαμηλής Τάσης με Ανιχνευτή Μέτρησης Θερμοκρασίας Εξωτερικού Αέρα
|
||||
P0073=Κύκλωμα Υψηλής Τάσης με Ανιχνευτή Μέτρησης Θερμοκρασίας Εξωτερικού Αέρα
|
||||
P0074=Ενδιάμεσο Κύκλωμα με Ανιχνευτή Μέτρησης Θερμοκρασίας Εξωτερικού Αέρα
|
||||
P0075=Έλεγχος Κυκλώματος Απορρόφησης Solenoid με Βαλβίδα Τράπεζα 1
|
||||
P0076=Έλεγχος Κυκλώματος Απορρόφησης Χαμηλής Τάσης Solenoid με Βαλβίδα Τράπεζα 1
|
||||
P0077=Έλεγχος Κυκλώματος Απορρόφησης Υψηλής Τάσης Solenoid με Βαλβίδα Τράπεζα 1
|
||||
P0078=Έλεγχος Κυκλώματος Solenoid με Βαλβίδα Εξάτμισης Τράπεζα 1
|
||||
P0079=Έλεγχος Κυκλώματος Solenoid Χαμηλής Τάσης με Βαλβίδα Εξάτμισης Τράπεζα 1
|
||||
P0080=Έλεγχος Κυκλώματος Solenoid Υψηλής Τάσης με Βαλβίδα Εξάτμισης Τράπεζα 1
|
||||
P0081=Έλεγχος Κυκλώματος Solenoid με Βαλβίδα Απορρόφησης Τράπεζα 2
|
||||
P0082=Έλεγχος Κυκλώματος Solenoid Χαμηλής Τάσης με Βαλβίδα Απορρόφησης Τράπεζα 2
|
||||
P0083=Έλεγχος Κυκλώματος Solenoid Υψηλής Τάσης με Βαλβίδα Απορρόφησης Τράπεζα 2
|
||||
P0084=Έλεγχος Κυκλώματος Solenoid με Βαλβίδα Εξάτμισης Τράπεζα 2
|
||||
P0085=Έλεγχος Κυκλώματος Χαμηλής Τάσης με Βαλβίδα Εξάτμισης Τράπεζα 2
|
||||
P0086=Έλεγχος Κυκλώματος Solenoid Υψηλής Τάσης με Βαλβίδα Εξάτμισης Τράπεζα 2
|
||||
P0087=Ροή Καυσίμων/Η Πίεση Συστήματος-Πολύ Χαμηλή
|
||||
P0088=Ροή Καυσίμων/Η Πίεση Συστήματος είναι Πολύ Υψηλή
|
||||
P0089=Ρυθμιστής Πίεσης Καυσίμων 1 Απόδοση
|
||||
P0090=Ρυθμιστής Πίεσης Καυσίμων 1 για Έλεγχο Κυκλώματος
|
||||
P0091=Ρυθμιστής 1 Πίεσης Καυσίμων για Έλεγχο Κυκλώματος Χαμηλής Τάσης
|
||||
P0092=Ρυθμιστής 1 Πίεσης Καυσίμων για Έλεγχο Κυκλώματος Υψηλής Τάσης
|
||||
P0093=Εντοπίστηκε Διαρροή στα Καύσιμα-Μεγάλη Διαρροή
|
||||
P0094=Εντοπίστηκε Διαρροή στα Καύσιμα-Μικρή Διαρροή
|
||||
P0095=Κύκλωμα με Ανιχνευτή 2 Απορρόφησης Θερμοκρασίας Αέρα
|
||||
P0096=Εύρος Κυκλώματος με Ανιχνευτή 2 Απορρόφησης Αέρα/Απόδοση
|
||||
P0097=Κύκλωμα Χαμηλής Τάσης με Ανιχνευτή 2 Απορρόφησης Θερμοκρασίας Αέρα
|
||||
P0098=Κύκλωμα Υψηλής Τάσης με Ανιχνευτή 2 για Απορρόφηση Θερμοκρασίας Αέρα
|
||||
P0099=Ενδιάμεσο Κύκλωμα με Ανιχνευτή 2 Απορρόφησης Θερμοκρασίας Αέρα/Ελεύθερο
|
||||
P009A=Απορρόφηση Θερμοκρασίας Αέρα/Μέτρηση Εξωτερικής Θερμοκρασίας
|
||||
P0100=Κύκλωμα Εισόδου Α Αέρα
|
||||
P0101=Εύρος Κυκλώματος Εισόδου Α Αέρα/Απόδοση
|
||||
P0102=Κύκλωμα Χαμηλής Τάσης για Είσοδο Α Αέρα
|
||||
P0103=Κύκλωμα Υψηλής Τάσης Εισόδου Α Αέρα
|
||||
P0104=Ενδιάμεσο Κύκλωμα Εισόδου Α Αέρα
|
||||
P0105=Μέτρηση Κεντρικής Πίεσης/Κύκλωμα Βαρομετρικής Πίεσης
|
||||
P0106=Μέτρηση Κεντρικής Πίεσης/Εύρος Κυκλώματος Βαρομετρικής Πίεσης/Απόδοση
|
||||
P0107=Μέτρηση Συνολικής Πίεσης/Κύκλωμα Χαμηλής Τάσης Βαρομετρικής Πίεσης
|
||||
P0108=Μέτρηση Συνολικής Πίεσης/Κύκλωμα Υψηλής Τάσης Βαρομετρικής Πίεσης
|
||||
P0109=Μέτρηση Συνολικής Πίεσης/Ενδιάμεσο Κύκλωμα Βαρομετρικής Πίεσης
|
||||
P010A=Κύκλωμα Εισόδου Α Αέρα
|
||||
P010B=Εύρος Κυκλώματος Εισόδου Β Αέρα/Απόδοση
|
||||
P010C=Χαμηλό Κύκλωμα Εισόδου Β Αέρα
|
||||
P010D=Κύκλωμα Υψηλής Τάσης Εισόδου Β Αέρα
|
||||
P010E=Ενδιάμεσο Κύκλωμα Εισόδου Β Αέρα/Ελεύθερο
|
||||
P010F=Μέτρηση Ανιχνευτή Α/Β Εισόδου Αέρα
|
||||
P0110=Κύκλωμα Ανιχνευτή Α που Ρυθμίζει την Θερμοκρασία Εισόδου Αέρα
|
||||
P0111=Εύρος Κυκλώματος με Ανιχνευτή 1 Θερμοκρασίας Απορρόφησης Αέρα/Απόδοση
|
||||
P0112=Κύκλωμα Χαμηλής Τάσης με Ανιχνευτή Θερμοκρασίας Αέρα Εισόδου
|
||||
P0113=Κύκλωμα Υψηλής Τάσης με Ανιχνευτή Θερμοκρασίας Αέρα Εισόδου
|
||||
P0114=Ενδιάμεσο Κύκλωμα με Ανιχνευτή 1 που Ρυθμίζει την Θερμοκρασία Απορρόφησης Αέρα
|
||||
P0115=Κύκλωμα με Ανιχνευτή Θερμοκρασίας Μηχανής Ψύξης
|
||||
P0116=Εύρος Κυκλώματος με Ανιχνευτή 1 Θερμοκρασίας Ψύξης Μηχανής/Απόδοση
|
||||
P0117=Κύκλωμα Χαμηλής Τάσης με Ανιχνευτή 1 Θερμοκρασίας Ψύξης Μηχανής
|
||||
P0118=Κύκλωμα Υψηλής Τάσης με Ανιχνευτή 1 που Ρυθμίζει την Θερμοκρασία Ψύξης Μηχανής
|
||||
P0119=Ενδιάμεσο Κύκλωμα με Ανιχνευτή 1 Θερμοκρασίας Ψύξης της Μηχανής
|
||||
P011A=Σύνδεση Ανιχνευτή 1/2 Θερμοκρασίας Ψύξης της Μηχανής
|
||||
P0120=Βραχυκύκλωμα/Ανιχνευτής Θέσης Πηδαλίου/Κύκλωμα Διακόπτη Α
|
||||
P0121=Βραχυκύκλωμα/Ανιχνευτής Θέσης Πηδαλίου/Εύρος Κυκλώματος Διακόπτη Α/Απόδοση
|
||||
P0122=Βραχυκύκλωμα/Ανιχνευτής Θέσης Πηδαλίου/Κύκλωμα Χαμηλής Τάσης Διακόπτη Α
|
||||
P0123=Βραχυκύκλωμα/Ανιχνευτής Θέσης Πηδαλίου/Κύκλωμα Υψηλής Τάσης Διακόπτη Α
|
||||
P0124=Βραχυκύκλωμα/Ανιχνευτής Θέσης Πηδαλίου/Ενδιάμεσο Κύκλωμα Διακόπτη Α
|
||||
P0125=Ανεπαρκής Θερμοκρασία Ψύξης για Έλεγχο Κλειστού Κυκλώματος Καυσίμων
|
||||
P0126=Ανεπαρκής Θερμοκρασία Ψύξης για Σταθερή Λειτουργία
|
||||
P0127=Θερμοκρασία Αέρα που Απορροφάται Πολύ Υψηλή
|
||||
P0128=Ψύξη Θερμοστάτη (Θερμοκρασία Ψύξης πιο Χαμηλή από την Θερμοκρασία που Ρυθμίζει ο Θερμοστάτης)
|
||||
P0129=Η Βαρομετρική Πίεση είναι Πολύ Χαμηλή
|
||||
P012A=Πολύ δυνατός Φορτιστής/ Φορτιστής πολύ Ισχυρής Τάσης Κυκλώματος Ανιχνευτή Πίεσης Αέρα Εισόδου
|
||||
P012B=Πολύ Ισχυρός Φορτιστής/Φορτιστής πολύ Ισχυρής Τάσης Εύρους Κυκλώματος Ανιχνευτή Πίεσης Αέρα Εισόδου/Απόδοση
|
||||
P012C=Πολύ Ισχυρός Φορτιστής/ Φορτιστής Πολύ Ισχυρής Τάσης Κυκλώματος Χαμηλής Τάσης με Ανιχνευτή Πίεσης Αέρα Εισόδου
|
||||
P012D=Πολύ Ισχυρός Φορτιστής/Φορτιστής Πολύ Ισχυρής Τάσης Κυκλώματος Υψηλής Τάσης με Ανιχνευτή Πίεσης Αέρα Εισόδου
|
||||
P012E=Πολύ Ισχυρός Φορτιστής/Φορτιστής με Πολύ Ισχυρή Τάση Ενδιάμεσου Κυκλώματος με Ανιχνευτή Πίεσης Αέρα Εισόδου/Ελεύθερος
|
||||
P012F=Με επιφύλαξη των ISO/SAE
|
||||
P0131=Κύκλωμα Χαμηλής Τάσης Ανιχνευτή O2 Τράπεζα 1 Ανιχνευτής 1
|
||||
P0149=Σφάλμα Συγχρονισμού Καυσίμων
|
||||
P0150=Κύκλωμα Ανιχνευτή Q2 Τράπεζα 2 Ανιχνευτής 1
|
||||
P0151=Κύκλωμα Χαμηλής Τάσης με Ανιχνευτή Q2 Τράπεζα 2 Ανιχνευτής 1
|
||||
P0152=Κύκλωμα Υψηλής Τάσης με Ανιχνευτή O2 Τράπεζα 2 Ανιχνευτής 1
|
||||
P0153=Κύκλωμα Χαμηλής Απόκρισης με Ανιχνευτή O2 Τράπεζα 2 Ανιχνευτής 1
|
||||
P0154=Κύκλωμα Ανιχνευτή O2 Ανενεργό Τράπεζα 2 Ανιχνευτής 1
|
||||
P0155=Κύκλωμα Θερμαστή με Ανιχνευτή O2 Τράπεζα 2 Ανιχνευτής 1
|
||||
P0156=Κύκλωμα Ανιχνευτή O2 Τράπεζα 2 Ανιχνευτής 2
|
||||
P0157=Κύκλωμα Χαμηλής Τάσης με Ανιχνευτή O2 Τράπεζα 2 Ανιχνευτής 2
|
||||
P0158=Κύκλωμα Υψηλής Τάσης με Ανιχνευτή O2 Τράπεζα 2 Ανιχνευτής 2
|
||||
P0159=Κύκλωμα Αργής Απόκρισης με Ανιχνευτή O2 Τράπεζα 2 Ανιχνευτής 2
|
||||
P0160=Κύκλωμα Ανιχνευτή O2 Ανενεργό Τράπεζα 2 Ανιχνευτής 2
|
||||
P0161=Κύκλωμα Θέρμανσης Ανιχνευτή O2 Τράπεζα 2 Ανιχνευτής 2
|
||||
P0162=Κύκλωμα Ανιχνευτή O2 Τράπεζα 2 Ανιχνευτής 3
|
||||
P0163=Κύκλωμα Χαμηλής Τάσης Ανιχνευτή O2 Τράπεζα 2 Ανιχνευτής 3
|
||||
@@ -0,0 +1,25 @@
|
||||
|
||||
|
||||
P0004=Regulador de volumen de combustible Circuito alto
|
||||
P0005=Válvula A de control de cierre de combustible Circuito/Abierto
|
||||
P0006=Válvula A de control de cierre de combustible Circuito bajo
|
||||
P0007=Válvula A de control de cierre de combustible Circuito alto
|
||||
P000B=Posición lenta B del árbol de levas repuesta banco 1
|
||||
P0008=Sistema de posición del motor banco de rendimiento 1
|
||||
P0009=Sistema de posición del motor banco de rendimiento 2
|
||||
P000A=Posición lenta A del árbol de levas repuesta banco 1
|
||||
P000C=Posición lenta A del árbol de levas repuesta banco 2
|
||||
P000D=Posición lenta B del árbol de levas repuesta banco 2
|
||||
P000E=Reservado a ISO/SAE
|
||||
P000F=Reservado a ISO/SAE
|
||||
P0010=Posición actuador A del árbol de levas Circuito / Abierto banco 1
|
||||
P0011=Posición actuador A del árbol de levas - Sincronización por encima de lo normal o Banco de rendiminto Banco 1
|
||||
P0012=Posición actuador A del árbol de levas - Sincronización por debajode lo normal Banco 1 retrasado
|
||||
P0013=Posición actuador B del árbol de levas - Actuador de circuito / Banco abierto 1
|
||||
P0014=Posición actuador B del árbol de levas - Sincronización por encima de lo normal o Banco de rendiminto Banco 1
|
||||
P0015=Posición actuador B del árbol de levas - Sincronización por debajo de lo normal o Banco de rendiminto Banco 1
|
||||
P0001=Regulador de volumen de combustible Circuito de control/abierto
|
||||
P0002=Regulador de volumen de combustible Alcance/Rendimiento
|
||||
P0003=Regulador de volumen de combustible Circuito bajo
|
||||
U0416=Datos inválidos recibidos desde el modúlo de control de dinámica del vehiculo
|
||||
U0402=Datos inválidos recibidos desde el modúlo de control de transmisión
|
||||
@@ -0,0 +1,8 @@
|
||||
P0001=Circuito de control del regulador de volumen de combustible/abierto
|
||||
P0002=Rango / rendimiento del circuito de control del regulador de volumen de combustible
|
||||
P0003=Circuito de control del regulador de volumen de combustible bajo
|
||||
P0004=Circuito de control del regulador de volumen de combustible alto
|
||||
P0005=Circuito de control de cierre de combustible de la válvula a/abierto
|
||||
P0006=Circuito de control bajo de la válvula A de cierre de combustible
|
||||
P0007=Circuito de control alto de cierre de combustible de la válvula A
|
||||
P0008=Comportamiento del detector 1 de la posición del cigüeñal
|
||||
@@ -0,0 +1,17 @@
|
||||
P0005=Polttoaineen sulkuventtiilin A ohjauspiiri / avoin
|
||||
P0001=Polttoainemäärän säätimen ohjauspiiri / avoin
|
||||
P0003=Polttoainemäärän säätimen ohjauspiiri alhainen
|
||||
P0004=Polttoainemäärän säätimen ohjauspiiri korkea
|
||||
P0006=Polttoaineen sulkuventtiilin A ohjauspiiri alhainen
|
||||
P0007=Polttoaineen sulkuventtiilin A ohjauspiiri korkea
|
||||
P0070=Ympäristön lämpötilan anturin piiri
|
||||
P0127=Imuilman lämpötila liian korkea
|
||||
P0129=Ilmakehän paine liian alhainen
|
||||
P0148=Polttoaineensyöttövirhe
|
||||
P0149=Polttoaineen ajoitusvirhe
|
||||
P0185=Polttoaineen lämpöanturin B piiri
|
||||
P0195=Moottoriöljyn lämpöanturi
|
||||
P0200=Ruiskutussuuttimen piiri / avoin
|
||||
P0002=Polttoainemäärän sääntelyn hallintapiirin alue/suorituskyky
|
||||
P000E=Varattu ISO-/SAE-tiedoille
|
||||
P000F=Varattu ISO-/SAE-tiedoille
|
||||
@@ -0,0 +1,727 @@
|
||||
P0001=Commande de régulateur de volume de carburant - circuit ouvert
|
||||
P0002=Commande de régulateur de volume de carburant - plage de mesure/performance du circuit
|
||||
P0003=Commande de régulateur de volume de carburant - tension trop basse
|
||||
P0004=Commande de régulateur de volume de carburant - tension trop haute
|
||||
P000E=réservé ISO/SAE
|
||||
P000F=réservé ISO/SAE
|
||||
P006E=réservé ISO/SAE
|
||||
P006F=réservé ISO/SAE
|
||||
P0127=Température trop élevée de l'air dans l'admission
|
||||
P012F=réservé ISO/SAE
|
||||
P0148=Erreur d'alimentation en carburant
|
||||
P0168=Température du carburant trop élevée
|
||||
P0005=Vanne d'arrêt de carburant Circuit de commande A/Ouvert
|
||||
P0006=Vanne A d'arrêt de carburant Un circuit de commande bas
|
||||
P0007=Vanne A d'arrêt de carburant circuit de commande Élevé
|
||||
P0008=Phasage arbre à cames - vilebrequin performance Banc 1
|
||||
P0009=Phasage arbre à cames - vilebrequin performance Banc 2
|
||||
P000A=Position A de l'arbre à cames réponse lente Banc 1
|
||||
P000B=Position B de l'arbre à cames réponse lente Banc 1
|
||||
P000C=Position A de l'arbre à cames réponse lente Banc 2
|
||||
P000D=Position B de l'arbre à cames réponse lente Banc 2
|
||||
P0010=Circuit d'actionneur de position de l'arbre à cames A / Ouvert Banc 1
|
||||
P0011=Position de l'arbre à cames A - Distribution trop avancée ou performance système Banc 1
|
||||
P0012=Position de l'arbre à cames A - Distribution trop retardée Banc 1
|
||||
P0013=Position de l'arbre à cames B - Circuit de déclenchement / Ouvert Banc 1
|
||||
P0014=Position de l'arbre à cames B - Distribution trop avancée ou performance système Banc 1
|
||||
P0015=Position de l'arbre à cames B - Distribution retardée Banc 1
|
||||
P0016=Position Vilebrequin - Position Arbre à cames (rapport direct) Capteur A Banc 1
|
||||
P0017=Position Vilebrequin - Position Arbre à cames (rapport direct) Capteur B Banc 1
|
||||
P0018=Position Vilebrequin - Position Arbre à cames (rapport direct) Capteur A Banc 2
|
||||
P0019=Position Vilebrequin - Position Arbre à cames (rapport direct) Capteur B Banc 2
|
||||
P0020=Position Arbre à cames A Circuit Déclencheur / Ouvert Banc 2
|
||||
P0021=Position Arbre à cames A - Distribution avancée ou performance système Banc 2
|
||||
P0022=Position Arbre à cames A - Distribution retardée Banc 2
|
||||
P0023=Position Arbre à cames B - Circuit Déclencheur/ Ouvert Banc 2
|
||||
P0024=Position Arbre à cames B - Distribution Avancée ou performance système Banc 2
|
||||
P0025=Position Camshaft B-Temps Passé-Banque 2 Retardée Banc 2
|
||||
P0026=Rang de Circuit Solenoid B de Controle à Valve Absorbant/Performance de Banque 1
|
||||
P0027=Rang de Circuit Solenoid de Controle à Valve d'Exhaustion/Performance de Banque 1
|
||||
P0028=Rang de Circuit Solenoid de Controle a Valve Absorbant/Performance de Banque 2
|
||||
P0029=Rang de Controle de Circuit Solenoid a Valve d'Exhaustion/Performance de Banque 2
|
||||
P0030=Chauffeur HQ2S Senseur 1 de la Banque 1 pour Controle de Circuit
|
||||
P0031=Chauffeur HQ2S Senseur1 de la Banque 1 pour Controle de Circuit
|
||||
P0032=Chauffeur HQ2S Capteur 1 de la Banque 1 pour Controle de Haut Circuit
|
||||
P0033=Chargeur Turbo/Superchargeur de Controle du Circuit à Valve Bypass
|
||||
P0034=Turbochargeur/Superchargeur de Controle de Circuit Bas a Valve Bypass
|
||||
P0035=Turbochargeur/Superchargeur de Controle de Haut Circuit à Valve Bypass
|
||||
P0036=Chauffeur HQ2S Capteur 2 de la Banque 1 pour Controle du Circuit
|
||||
P0037=HQ2S Chauffeur Capteur 2 de la Banque 1 Pour Controle de Circuit Bas
|
||||
P0038=HQ2S Chauffeur Capteur 2 de la Banque 1 pour Controle de Haut Circuit
|
||||
P0039=Turbochargeur/Superchargeur pour Controle du Rang des Circuits à Valve Bypass/Performance
|
||||
P0040=O2 Capteur 1 des Signaux Swapped de la Banque Capteur 1/Capteur 1 de la Banque 2
|
||||
P0041=O2 Capteur des Signaux de la Banque Swapped 1 Capteur 2/Capteur 2 de la Banque 2
|
||||
P0042=HO2S Chauffeur Capteur 3 de Controle du Circuit de la Banque 1
|
||||
P0043=HO2S Chauffeur Capteur 1 pour Controle de Circuit Bas de la Banque 1
|
||||
P0044=HO2S Chauffeur Capteur 3 pour Controle de Haut Circuit de la Banque 1
|
||||
P0045=Turbochargeur/Superchargeur pour Renforcer le Controle du Circuit Solenoide A/Ouvert
|
||||
P0046=Turbochargeur/Superchargeur pour Renforcer le Controle du Rang du Circuit Solenoide A/Performance
|
||||
P0047=Turbochargeur/Superchargeur pour Renforcer le Controle du Circuit Bas Solenoide A
|
||||
P0048=Turbochargeur/Superchargeur pour Renforcer le Controle du Haut Circuit Solenoide A
|
||||
P0049=Turbochargeur/Superchargeur de Turbine a Vitesse Maximum
|
||||
P004A=Turbochargeur/Superchargeur pour Renforcer le Controle du Circuit Solenoide B/Ouvert
|
||||
P004B=Turbochargeur/Superchargeur pour Renforcer le Controle du Rang du Circuit Solenoide B/Performance
|
||||
P004C=Turbochargeur/Superchargeur pour Renforcer le Controle du Circuit Solenoide B Bas
|
||||
P004D=Turbichargeur/Superchargeur pour Renforcer le Controle du Haut Circuit Solenoide B
|
||||
P004E=Turbochargeur/Superchargeur pour Renforcer le Controle du Circuit Solenoide A Intermittent/Erratique
|
||||
P004F=Turbochargeur/Superchargeur pour Renforcer le Controle du Circuit Solenoide B Intermittent/Erratique
|
||||
P0050=HO2S Chauffeur Capteur 1 pour Controle du Circuit de la Banque 2
|
||||
P0051=HO2S Chauffeur Capteur 1 pour Controle du Circuit Bas de la Banque 2
|
||||
P0052=HO2S Chauffeur Capteur 2 pour Controle du Circuit Haut de la Banque 2
|
||||
P0053=HO2S Chauffeur Capteur 1 de Resistance de la Banque 1
|
||||
P0054=HO2S Chauffeur Capteur 2 de Resistance de la Banque 1
|
||||
P0055=HO2S Chauffeur Capteur 3 de Resistance de la Banque 1
|
||||
P0056=HO2S Circuit de Contrôle Radiateur Rangée 2 Capteur 2
|
||||
P0057=Chauffeur HO2S Capteur 2 pour Controle du Circuit Bas de la Banque 2
|
||||
P0058=HO2S Chauffeur Capteur 2 pour Controle du Circuit Haut de la Banque 2
|
||||
P0059=HO2S Chauffeur Capteur 2 Resistant de la Banque 2
|
||||
P0060=HO2S Chauffeur Capteur 2 Resistant de la Banque 2
|
||||
P0061=HO2S Chauffeur Capteur 2 Resistant de la Banque 2
|
||||
P0062=HO2S Chauffeur Capteur 2 pour Controle du Circuit de la Banque 2
|
||||
P0063=HO2S Chauffeur Capteur 2 pour Controle de Circuit Bas de la Banque 2
|
||||
P0064=HO2S Chauffeur Capteur 2 pour Controle du Circuit Haut de la Banque 2
|
||||
P0065=Rang de Controle d'Injecteur à Aire/Performance
|
||||
P0066=Injecteur à Aire pour Controle du Circuit ou Circuit Bas
|
||||
P0067=Injecteur à Aire pour Controle du Circuit Haut
|
||||
P0068=MAP.MAF-Correlation de Position Loop
|
||||
P0069=Pression Absolue du Manifold-Correlation de Pression Barométrique
|
||||
P006A=MAP-Correlation de Flux d'Aire de Masse ou de Volume
|
||||
P006B=MAPPE-Correlation de Pression d'Exhaustion
|
||||
P006C=MAPPE-Chargeur Turbo/Superchargeur de Correlation de Pression d'Entrée
|
||||
P006D=Pression Barométrique-Chargeur Turbo/Superchargeur de Correlation de Pression d'Entrée
|
||||
P0070=Capteur du Circuit de Temperature d'Aire d'Ambience
|
||||
P0071=Rang du Capteur de Temperature d'Aire/Performance
|
||||
P0072=Capteur du Circuit Bas de Temperature d'Aire d'Ambience
|
||||
P0073=Capteur du Haut Circuit de Temperature d'Aire d'Ambience
|
||||
P0074=Capteur du Circuit de Temperature d'Aire Intermittent d'Ambience
|
||||
P0075=Banque 1 de Circuit Solenoide à Valve Absorbant
|
||||
P0076=Banque 1 pour Controle du Circuit Bas Solenoide à Valve Absorbant
|
||||
P0077=Banque 1 pour Controle du Haut Circuit Solenoide à Valve Absorbant
|
||||
P0078=Banque 1- pour Controle du Circuit Solenoide à Valve Absorbant
|
||||
P0079=Banque 1 pour Controle de Circuit Bas Solenoide à Valve Absorbant
|
||||
P0080=Banque 1 pour Controle du Haut Circuit à Valve Absorbant
|
||||
P0081=Banque 2 pour Controle de Circuit Solenoide à Valve Absorbant
|
||||
P0082=Banque 2 pour Controle du Bas Circuit Solenoide à Valve d'Absorption
|
||||
P0083=Banque 2 de pour Controle du Haut Circuit Solenoide à Valve Absorbant
|
||||
P0084=Banque 2 pour Controle de Circuit Solenoide à Valve Absorbant
|
||||
P0085=Banque 2 pour Controle du Circuit Bas Solenoide à Valve Absorbant
|
||||
P0086=Banque 2 pour Controle du Haut Circuit Solenoide à Valve Absorbant
|
||||
P0087=Pression de Système de Raille Carburant-Très Basse
|
||||
P0088=Pression de Système/Raille Carburant-Trés Haute
|
||||
P0089=Performance du Régleur 1 de Pression Carburant
|
||||
P0090=Circuit de Controle du Régleur 1 de Pression Carburant
|
||||
P0091=Circuit Bas de Controle du Régleur 1 de Pression Carburant
|
||||
P0092=Haut Circuit pour Controle du Régleur de Pression Carburant
|
||||
P0093=Fuite du Système Carburant Detectee-Fuite Large
|
||||
P010B=Rang du Circuit B de Flux d'Aire de Masse ou de Volume/Performance
|
||||
P010C=Circuit Bas B de Flux d'Aire de Masse ou de Volume
|
||||
P010D=Haut Circuit B de Flux d'Aire de Masse ou Volume
|
||||
P010E=Air Flux du Circuit B Intermittent de Masse ou de Volume/Erratique
|
||||
P010F=Correlation du Capteur A/B de Flux d'Aire de Masse ou Volume
|
||||
P0110=Circuit du Capteur 1 de Température d'Aire Absorbée
|
||||
P0111=Rang du Circuit 1 de Capteur de Température d'Aire Absorbée
|
||||
P0112=Circuit Bas du Capteur 1 de Température d'Aire Absorbée
|
||||
P0113=Haut Circuit du Capteur 1 de Température d'Aire Absorbée
|
||||
P0114=Capteur 1 du Circuit Intermittent de Température d'Aire Absorbée
|
||||
P0124=Loop/Capteur de Position du Pédale/Ouvrez un Circuit Intermittent
|
||||
P0125=La Température du Coolant est Insuffisante pour Controler le Carburant du Loop Fermé
|
||||
P0129=Pression Barométrique Très Basse
|
||||
P012A=Chargeur Turbo/Circuit de Capteur de Pression d'Entrée Superchargeur
|
||||
P012B=Chargeur Turbo/Rang de Pression du Circuit du Capteur d'Entrèe Superchargeur/Performance
|
||||
P012C=Turbochargeur/Superchargeur Circuit Bas du Capteur de la Pression d'Entrée Superchargeur
|
||||
P012D=Turbochargeur/Haut Circuit du Capteur de Pression d'Entrée Superchargeur
|
||||
P012E=Turbochargeur/Circuit Intermittent du Capteur de Pression d'Entrée Superchargeur/Erratique
|
||||
P0130=Capteur Q2 Circuit Banque 1 Capteur 1
|
||||
P0131=Capteur Q2 Banque 1 de Circuit de Voltage Bas Capteur 1
|
||||
P0132=Q2 Capteur Circuit de Haut Voltage Banque 1 Capteur 1
|
||||
P0133=Q2 Capteur Circuit de Réponse Lente Banque 1 Capteur 1
|
||||
P0134=Q2 Capteur Circuit Banque 1 Detectée Non Active Capteur 1
|
||||
P0135=Q2 Capteur Circuit de Chauffeur Banque 1 Capteur 1
|
||||
P0150=Capteur Q2 Circuit Banque 2 Capteur 1
|
||||
P0153=Capteur Q2 Circuit de Réponse Lente Banque 2 Capteur 1
|
||||
P0154=Capteur Q2 Circuit de Banque 2 Non actif Capteur 1
|
||||
P0155=Capteur Q2 Circuit de Chauffage de Banque 2 Capteur 1
|
||||
P0156=Capteur Q2 Circuit Banque 2 Capteur 2
|
||||
P0157=Capteur Q2 Circuit de Voltage Bas Banque 2 Capteur 2
|
||||
P0158=Capteur Q2 Circuit de Haut Voltage Banque 2 Capteur 2
|
||||
P0159=Capteur Q2 Circuit de Reponse Lente Banque 2 Capteur 2
|
||||
P0160=Capteur Q2 Circuit Sans Activité de Banque Detectée 2 Capteur 2
|
||||
P0161=Capteur Q2 Circuit de Chauffeur de la Banque 2 Capteur 2
|
||||
P0162=Capteur Q2 Circuit Banque 2 Capteur 2
|
||||
P0163=Capteur Q2 Circuit de Voltage Bas Banque 2 Capteur 3
|
||||
P0164=Capteur Q2 Circuit de Haut Voltage Banque 2 Capteur 3
|
||||
P0165=Capteur Q2 Circuit de Reponse Lente Banque 2 Capteur 3
|
||||
P0166=Capteur Q2 Circuit Non Actif de Banque Detectée 2 Capteur 3
|
||||
P0167=Cqpteur A2 Circuit de Chauffeur Banque 2 Capteur 3
|
||||
P0169=Composition du Carburante Incorrecte
|
||||
P0170=Trim Combustibles Banque 1
|
||||
P0171=Système Trop Leger Banque 1
|
||||
P0172=Syste,e Trop Riche Banque 1
|
||||
P0173=Trim Combustible Banque 2
|
||||
P0174=Système Trop Leger Banque 2
|
||||
P0175=Système Trop riche Banque 2
|
||||
P0176=Circuit de Capteur de Composition de Combustibles
|
||||
P0177=Rang de Circuit de Capteur de Composition de Carburant/Performance
|
||||
P0178=Circuit Bas de Capteur de Composition de Carburant
|
||||
P0179=Haut Circuit de Capteur de Composition de Carburant
|
||||
P0180=Circuit de Capteur A de Température des Combustibles
|
||||
P0181=Rang de Capteur A de Temperature de Combustibles/Performance
|
||||
P0182=Circuit Bas de Capteur A de Température des Combustibles
|
||||
P0183=Haut Circuit de Capteur A de Température des Combustibles
|
||||
P0184=Circuit de Capteur A Intermittent de Température de Combustibles
|
||||
P0185=Circuit de Capteur A de Température des Combustibles
|
||||
P0186=Rang de Circuit de Capteur B de Température des Combustibles/Performance
|
||||
P0187=Circuit Bas de Capteur B de Température des Combustibles
|
||||
P0188=Circuit Haut de Capteur B de Température des Combustibles
|
||||
P0189=Circuit B de Capteur Intermittent de Température de Combustibles
|
||||
P018A=Circuit de Capteur B de Pression des Combustibles
|
||||
P018B=Rang de Circuit de Capteur B de Pression des Combustibles/Performance
|
||||
P018C=Circuit Bas de Capteur B de Pression des Combustibles
|
||||
P018D=Circuit Haut de Capteur B de Pression des Combustibles
|
||||
P018E=Circuit de Capteur B Intermittent de Pression des Combustibles/Erratique
|
||||
P018F=ISO/SAE reservé
|
||||
P0190=Circuit de Capteur A de Pression de Railles des Combustibles
|
||||
P0191=Rang de Circuit de Capteur A de Railles des Combustibles/Performance
|
||||
P0192=Circuit Bas de Capteur A de Railles de Combustibles
|
||||
P0193=Circuit Haut de Capteur A de Railles des Combustibles
|
||||
P0194=Circuit de Capteur A Intermittent de Railles des Combustibles/Erratique
|
||||
P0195=Capteur de Température de Huile de Voiture
|
||||
P0196=Rang de Capteur de Température de Huile de Voiture/Performance
|
||||
P0197=Capteur Bas de Température de Huile de Voiture
|
||||
P0198=Capteur Haut de Température de Huile de Voiture
|
||||
P0199=Capteur Intermittent de Température de Huile de Voiture
|
||||
P0200=Circuit d'Injecteur/Ouvert
|
||||
P0201=Circuit d'Injecteur/Ouvert-Cylindre 1
|
||||
P0202=Circuit d'Injecteur/Ouvert-Cylindre 2
|
||||
P0203=Circuit d'Injecteur/Ouvert-Cylindre 3
|
||||
P0204=Circuit d'injecteur/Ouvert-Cylindre 4
|
||||
P0205=Circuit d'Injecteur/Ouvert-Cylindre 5
|
||||
P0206=Circuit d'Injecteur/Ouvert-Cylindre 6
|
||||
P0207=Circuit d'Injecteur/Ouvert-Cylindre 7
|
||||
P0208=Circuit d'Injecteur/Ouvert-Cylindre 8
|
||||
P0209=Circuit d'Injecteur/Ouvert-Cylindre 9
|
||||
P020A=Temps d'Injection du Cylindre 1
|
||||
P020B=Temps d'Injection du Cylindre 2
|
||||
P020C=Temps d'Injection du Cylindre 3
|
||||
P020D=Temps d'Injection du Cylindre 4
|
||||
P020E=Temps d'Injection du Cylindre 5
|
||||
P020F=Temps d'Injection du Cylindre 6
|
||||
P0210=Circuit d'Injecteur/Ouvert-Cylindre 10
|
||||
P0211=Circuit d'Injecteur/Ouvert-Cylindre 11
|
||||
P0212=Circuit d'Injecteur/Ouvert-Cylindre 12
|
||||
P0213=Debut Injecteur 1 Froid
|
||||
P0214=Début Injecteur 2 Froid
|
||||
P0215=Cloture de Machine Solenoide
|
||||
P0216=Injecteur/Temps de Controle du Temps d'Injection
|
||||
P0217=Condition de Temperature du Refraicheur de la Machine
|
||||
P0218=Condition de Temperature de Transmission de Fuite
|
||||
P0219=Condition de Machine a Vitesse Maximum
|
||||
P021A=Temps d'Injection du Cylindre 7
|
||||
P021B=Temps d'Injection du Cylindre 8
|
||||
P021C=Temps d'Injection du Cylindre 9
|
||||
P021D=Temps d'Injection du Cylindre 10
|
||||
P021E=Temps d'Injection du Cylindre 11
|
||||
P021F=Temps d'Injection du Cylindre 12
|
||||
P0220=Loop/Capteur de Position du Pedale/Fiche B Circuit
|
||||
P0221=Loop/Capteur de Position du Pedale/Rang de Circuit Fiche B/Performance
|
||||
P0222=Loop/Capteur de Position du Pédale/Circuit Bas de Fiche B
|
||||
P0223=Loop/Capteur de Position du Pédale/Circuit Haut Fiche B
|
||||
P0224=Loop/Capteur de Position du Pédale/ Circuit Intermittent du Fiche B
|
||||
P0225=Loop/Capteur de Position du Pédale/Circuit du Fiche C
|
||||
P0273=Circuit Bas d'Injecteur du Cylindre 5
|
||||
P0274=Haut Circuit d'Injecteur du Cylindre 5
|
||||
P0275=Contribution au Cylindre 5/Equilibre
|
||||
P0276=Circuit Bas d'Injecteur du Cylindre 6
|
||||
P0277=Haut Circuit d'Injecteur du Cylindre 6
|
||||
P0278=Contribution au Cylindre 6/Equilibre
|
||||
P0279=Circuit Bas d'Injecteur du Cylindre 7
|
||||
P0280=Haut Circuit d'Injecteur du Cylindre 7
|
||||
P0281=Contribution au Cylindre 7/Equilibre
|
||||
P0282=Circuit Bas d'Injecteur du Cylindre 8
|
||||
P0283=Haut Circuit d'Injecteur du Cylindre 8
|
||||
P0284=Contribution au Cylindre 8/Equilibre
|
||||
P0285=Circuit Bas d'Injecteur du Cylindre 9
|
||||
P0286=Haut Circuit d'Injecteur du Cylindre 9
|
||||
P0287=Contribution au Cylindre 9/Equilibre
|
||||
P0288=Circuit Bas d'Injecteur du Cylindre 10
|
||||
P0289=Haut Circuit d'Injecteur du Cylindre 10
|
||||
P0290=Contribution au Cylindre 10/Equilibre
|
||||
P0291=Circuit Bas d'Injecteur du Cylindre 11
|
||||
P0292=Haut Circuit d'Injecteur du Cylindre 11
|
||||
P0293=Contribution au Cylindre 11/Equilibre
|
||||
P0294=Circuit Bas d'Injecteur du Cylindre 12
|
||||
P0295=Haut Circuit d'Injecteur du Cylindre 12
|
||||
P0296=Contribution au Cylindre 12/Equilibre
|
||||
P0297=Condition de Voiture à Vitesse Maximale
|
||||
P0298=Température Super de l'Huile de Voiture
|
||||
P0299=Chargeur Turbo/Superchargeur Lent
|
||||
P0300=Hazard/Nombre de Cylindres pour Eteindre le Feu Detectes
|
||||
P0301=Cylindre 1 pour Eteindre le Feu Détecté
|
||||
P0302=Cylindre 2 pour Eteindre le Feu Détecté
|
||||
P0303=Cylindre 3 Eteint Detecté
|
||||
P0304=Cylindre 4 a Feu Eteint Detecte
|
||||
P0305=Cylindre 5 a Feu Eteint Detecté
|
||||
P0306=Cylindre 6 à Feu Eteint Detecté
|
||||
P0307=Cylindre 7 à Feu Eteint Detecté
|
||||
P0308=Cylindre 8 à Feu Eteint Detecté
|
||||
P0309=Cylindre 9 à Feu Eteint Detecté
|
||||
P0310=Cylindre 10 à Feu Eteint Detecté
|
||||
P0311=Cylindre 10 à Feu Eteint Detecté
|
||||
P0312=Cylindre 12 à Feu Eteint Detecté
|
||||
P0313=Feu Eteint à Carburant Bas Detecté
|
||||
P0314=Cylindre Eteint (Cylindre non Determiné)
|
||||
P0315=Variation du Système des Positions Crankshaft Non Pratiqué
|
||||
P0316=Machine Eteinte Detectee au Bout (Les 1000 Premieres Revolutions)
|
||||
P0317=Aucun Hardware de Construction de Rues
|
||||
P0318=Circuit de Signaux du Capteur A de Rues Dures
|
||||
P0319=Circuit de Signaux du Capteur B des Rues Dures
|
||||
P0320=Combustion/Circuit Distributeur d'Introduction de Vitesse dans la Machine
|
||||
P0369=Position Camshaft du Circuit du Capteur B Intermittent Banque 1
|
||||
P0371=Signal A de Temps de Reference de Haute Resolution Beaucoup de Pulses
|
||||
P0372=Signe A de Temps de Référence de Haute Performance Très Peu de Pulses
|
||||
P0373=Signe A Intermittent de Reference au Temps de Haute Resolution/ Pulses Erratiques
|
||||
P0374=Signe A de Temps de Référence de Haute Résolution Sans Pulse
|
||||
P0375=Signe B de Temps de Référence de Haute Résolution
|
||||
P0376=Signe B de Temps de Référence de Haute Résolution Trop de Pulses
|
||||
P0377=Signe B de Temps de Référence de Haute Résolution Tres Peu de Pulses
|
||||
P0378=Signe B Intermittent de Temps de Référence de Haute Résolution/Pulses Erratiques
|
||||
P0379=Signe B de Temps de Référence de Haute Résolution Sans Pulses
|
||||
P0380=Fiche de Charbon/Circuit de Chauffeur A
|
||||
P0390=Capteur B de Position Camshaft Circuit Banque 2
|
||||
P0391=Rang de Circuit de Capteur B de Position Camshaft/Performance Banque 2
|
||||
P0392=Circuit Bas de Capteur B de Position Camshaft Banque 2
|
||||
P0393=Haut Circuit de Capteur B de Position Camshaft Banque 2
|
||||
P0394=Circuit de Capteur B de Position Camshaft Banque 2
|
||||
P0400=Flux de Rirculation du Gas de Combustion
|
||||
P0401=Flux de Recirculation Insuffisante du Gas d'Exhaustion Detecte
|
||||
P0402=Flux Excessif de Recirculation du Gas d'Exhaustion Detecte
|
||||
P0403=Circuit de Controle de Recirculation du Gas de Controle
|
||||
P0404=Rang du Circuit de Controle de Recirculation du Gas d'Exhaustion/Performance
|
||||
P0405=Circuit Bas du Capteur A de Recirculation du Gas d'Exhaustion
|
||||
P0406=Haut Circuit du Capteur A de Recirculation du Gas d'Exhaustion
|
||||
P0408=Haut Circuit du Capteur B de Recirculation du Gas d'Exhaustion
|
||||
P0409=Circuit du Capteur A de Recirculation du Gas d'Exhaustion
|
||||
P040A=Temperature du Circuit du Capteur A de Recirculation du Gas d'Exhaustion
|
||||
P040B=Rang du Circuit de Temperature du Capteur A du Gas d'Exhaustion/Performance
|
||||
P040C=Circuit Bas du Capteur A de Température de Recirculation du Gas d'Exhaustion
|
||||
P040D=Haut Circuit du Capteur A de Température de Recirculation du Gas d'Exhaustion
|
||||
P040E=Circuit du Capteur A Intermittent de Température de Recirculation du Gas d'Exhaustion/Erratique
|
||||
P040F=Capteur A/B Connecte de Température de Recirculation du Gas d'Exhaustion
|
||||
P0410=Système Secondaire d'Injection d'Aire
|
||||
P0411=Flux du Système d'Aire Secondaire Incorrecte Detecté
|
||||
P0412=Circuit de Fiche de Valve A du Systeme Secondaire d'Injection d'Aire
|
||||
P0413=Circuit Ouvert de Fiche de la Valve A du Systeme d'Injection d'Aire Secondaire
|
||||
P0414=Circuit Court du Systeme Secondaire de Valve A d'Injection d'Aire
|
||||
P041D=Haut Circuit du Capteur B de Temperature de Recirculation du Gas d'Exhaustion
|
||||
P041E=Circuit Intermittent du Capteur B de Temperature de Recirculation du Gas d'Exhaustion/Erratique
|
||||
P041F=ISO/SAE reserve
|
||||
P0420=Efficacité du Système des Catalystes Sous Seuil Banque 1
|
||||
P0421=Efficacit de Chaffage des Catalystes Sous Seuil Banque 1
|
||||
P0422=Efficacite Principale des Catalystes Sous Seuil Banque 1
|
||||
P0423=Efficacité des Catalystes Chauffes Sous Seuil Banque 1
|
||||
P0424=Catalystes Chauffés de Température Sous Seuil Banque 1
|
||||
P0425=Circuit du Capteur de Température des Catalystes Banque 1 Capteur 1
|
||||
P0426=Rang du Circuit du Capteur de Température des Catalystes/Performance Banque 1 Capteur 1
|
||||
P0427=Circuit Bas du Capteur de Température des Catalystes Banque 1 Capteur 1
|
||||
P0428=Haut Circuit du Capteur de Température des Catalystes Banque 1 Capteur 1
|
||||
P0429=Circuit de Controle du Chauffeur des Catalystes Banque 1
|
||||
P042A=Circuit du Capteur de Température des Catalystes Banque 1 Capteur 2
|
||||
P042B=Rang du Circuit du Capteur de Température des Catalystes/Performance Banque 1 Capteur 2
|
||||
P042C=Circuit Bas du Capteur de Température Banque 1 Capteur 2
|
||||
P042D=Haut Circuit du Capteur de Température Banque 1 Capteur 2
|
||||
P042E=ISO/SAE reserve
|
||||
P042F=ISO/SAE reserve
|
||||
P0430=Efficacité du Système des Catalystes Sous Seuil Banque 2
|
||||
P0431=Efficacite du Chauffage des Catalystes Sous Seuil Banque 2
|
||||
P0432=Efficacité Principale des Catalystes Sous Seuil Banque 2
|
||||
P0433=Efficacité des Catalystes Chauffes Sous Seuil Banque 2
|
||||
P0434=Température des Catalystes Chauffes Sous Seuil Banque 2
|
||||
P0435=Circuit du Capteur de Température des Catalystes Banque 2 Capteur 1
|
||||
P0436=Rang du Circuit du Capteur de Temperature des Catalystes/Performance Banque 2 Capteur 1
|
||||
P0437=Circuit Bas du Capteur de Temperature des Catalystes Banque 2 Capteur 1
|
||||
P0438=Haut Circuit du Capteur de Temperature Banque 2 Capteur 1
|
||||
P0439=Circuit de Controle du Chauffeur des Catalystes Banque 2
|
||||
P043A=Circuit du Capteur de Température Banque 2 Capteur 2
|
||||
P043B=Rang du Circuit de Température des Catalystes/Performance Banque 2 Capteur 2
|
||||
P043C=Circuit Bas du Capteur de Température des Catalystes Banque 2 Capteur 2
|
||||
P043D=Haut Circuit du Capteur de Température des Catalystes Banque 2 Capteur 2
|
||||
P043E=Flux Bas de Référence d'Orifice Detectée du Système d'Emissions de Fuite Evapore
|
||||
P043F=Haut Flux d'Orifice de Référence du Système de Fuit Detecté d'Emissions Evapore
|
||||
P0440=Système d'Emissions Evapore
|
||||
P0441=Flux Purge du Système d'Emissions Evapore
|
||||
P0454=Capteur de Pression du Systeme d'Emission Evaporatif/Intermittent de Fiche
|
||||
P0455=Fuite du Système d'Emissions Evaporatif Détecte (grande fuite)
|
||||
P0456=Systeme de Fuite d'Emissions Evaporatif (fuite petite)
|
||||
P0457=Système d'Emissions Evaporatif de Fuite Detecte (cap des combustibles lache/ferme)
|
||||
P0458=Circuit Bas de Controle d'Emissions Pure du Système Evaporatif
|
||||
P0459=Haut Circuit à Valve de Controle du Système Evaporatif
|
||||
P0460=Circuit du Capteur A de Niveau de Fuite
|
||||
P0461=Rang du Circuit du Capteur A de Niveau du Carburant/Performance
|
||||
P0462=Circuit Bas du Capteur de Niveau des Combustibles
|
||||
P0463=Haut Circuit du Capteur A de Niveau des Combustibles
|
||||
P0464=Circuit du Capteur A Intermittent au Niveau des Combustibles
|
||||
P0465=Circuit du Capteur de Flux Pur EVAP
|
||||
P0466=Rang du Circuit du Capteur de Flux Pur EVAP/Performance
|
||||
P0467=Circuit Bas du Capteur de Flux Pur EVAP
|
||||
P0468=Haut Circuit du Capteur de Flux Pur EVAP
|
||||
P0469=Circuit du Capteur Intermittent de Flux Pur EVAP
|
||||
P0470=Circuit du Capteur A de Pression d'Exhaustion
|
||||
P0471=Rang du Circuit du Capteur A de Pression Evapore/Performance
|
||||
P0472=Circuit Bas du Capteur A de Pression Evapore
|
||||
P0473=Haut Circuit du Capteur A de Pression Evapore
|
||||
P0474=Circuit du Capteur A de Pression Evapore Intermittent/Erratique
|
||||
P0475=Valve de Controle de Pression Evaporée
|
||||
P0476=Rang de Valve de Controle de Pression Evaporée/Performance
|
||||
P0477=Valve de Controle de Pression Evaporee Basse
|
||||
P0478=Valve Haute de Controle de Pression Evaporée
|
||||
P0479=Valve de Controle Intermittente de Pression Evaporée
|
||||
P047A=Circuit du Capteur B de Pression Evapore
|
||||
P047B=Rang du Circuit du Capteur B de Pression Evaporée/Performance
|
||||
P047C=Circuit Bas du Capteur B de Pression Evaporée
|
||||
P047D=Haut Circuit du Capteur B de Pression Exhaustée
|
||||
P047E=Circuit B du Capteur B Intermittent de Pression Exhaustee/Erratique
|
||||
P047F=ISO/SAE reservés
|
||||
P0480=Circuit de Controle du Fan 1
|
||||
P0481=Circuit de Controle du Fan 2
|
||||
P0483=Circuit de Controle Rationnel du Fan
|
||||
P0484=Circuit d'Electricite Super du Fan
|
||||
P0485=Fan Puissant/Circuit du Sol
|
||||
P0486=Circuit du Capteur B de Recirculation de Gas Exhauste
|
||||
P0487=Circuit A de Controle du Loop de Gas Exhausté/Ouvert
|
||||
P0488=Rang de Circuit de Controle A du Loop de Recircultion de Gas Exhauste!Performance
|
||||
P0489=Circuit A Bas de Controle de Recirculation du Gas Exhausté
|
||||
P0551=Capteur de Pression du Volant Puissant/Rang de Fiches du Circuit/Performance
|
||||
P0552=Capteur de Pression du Volant Puissant/Circuit Bas de Fiches
|
||||
P0553=Capteur de Pression du Volant Puissant/Circuit Haut des Fiches
|
||||
P0554=Capteur de Pression du Volant Puissant/Circuit des Fiches Intermittent
|
||||
P0555=Circuit du Capteur de Pression pour Renforcer les Freins
|
||||
P0556=Rang de Circuit du Capteur de Pression pour Renforcer les Freins/Performance
|
||||
P0557=Circuit Bas du Capteur de Pression pour Renforcer les Freins
|
||||
P0558=Haut Circuit du Capteur de Pression pour Renforcer les Freins
|
||||
P0559=Circuit du Capteur Intermittent de Pression pour Renforcer les Freins
|
||||
P0560=Voltage du Système
|
||||
P0561=Voltage du Système inconstant
|
||||
P0562=Voltage Bas du Système
|
||||
P0563=Voltage Haut du Système
|
||||
P0564=Circuit d'Entree A de Plusieurs Fonctions pour Controler la Tour
|
||||
P0565=Controle du Signal de la Tour
|
||||
P0566=Controle du Signal Ferme de la Tour
|
||||
P0567=Controle du Signal Resume de la Tour
|
||||
P0568=Set de Controle du Signal de la Tour
|
||||
P0569=Controle du Signal du Bout de la Tour
|
||||
P056A=Controle Augmente du Signal de Distance de la Tour
|
||||
P056B=Controle Reduit du Signal de Distance de la Tour
|
||||
P0570=Controle Rapide du Signal de la Tour
|
||||
P0571=Circuit du Fiche A des Freins
|
||||
P0572=Circuit Bas du Fiche A des Freins
|
||||
P0573=Circuit Haut du Fiche A des Freins
|
||||
P0574=Controle du Systeme de la Tour-Vitesse Tres Haute du Vehicule
|
||||
P0575=Controle d'Entree du Circuit de la Tour
|
||||
P0576=Controle du Circuit Bas d'Entree de la Tour
|
||||
P0577=Contrle du Circuit Haut d'Entree de la Tour
|
||||
P0578=Controle Stable du Circuit d'Entree A de Plusieurs Fonctions de la Tour
|
||||
P0579=Controle de la Tour du Range du Circuit d'Entree A de Plusieurs Fonctions/Performance
|
||||
P0580=Controle de la Tour du Circuit Bas A d'Entree de Plusieurs Fonctions
|
||||
P0581=Controle du Circuit Haut A de l'Entree de la Tour de Plusieurs Fonctions
|
||||
P0582=Controle du Circuit Vacuum de la Tour/Ouvert
|
||||
P0583=Controle du Circuit Bas Vacuum de la Tour
|
||||
P0584=Controle du Circuit Haut Vacuum de la Tour
|
||||
P0585=Connexion d'Entree A/B de Controle de la Tour
|
||||
P0482=Controle du Circuit Fan 3
|
||||
P0490=Controle du Circuit Hait A de Recirculation du Gas d'Exhaustion
|
||||
P0491=Flux du Systeme d'Injection d'Aire Insuffisant Secondaire Banque 1
|
||||
P0492=Flux du Systeme d'Injection d'Aire Secoondaire Banque 2
|
||||
P0493=Vitesse Maximum du Fan
|
||||
P0494=Vitesse Lente du Fan
|
||||
P0495=Vitesse Haute du Fan
|
||||
P0496=Flux Haut du Systeme Purge d'Emissions Evapore
|
||||
P0497=Flux Bas Purge du Systeme d'Emissions Evapore
|
||||
P0498=Circuit Bas du Systeme de Controle du Vent d'Emissions Evapore
|
||||
P0499=Circuit Haut de Controle du Systeme de Vent a Valve d'Emissions Evapore
|
||||
P0500=Capteur Rapide A du Vehicule
|
||||
P0501=Rang du Capteur A Rapide du Vehicule/Performance
|
||||
P0502=Circuit Bas du Capteur A Rapide de la Voiture
|
||||
P0503=Capteur A Rapide intermittent du Vehicule/Erratique/Haut
|
||||
P0504=Correlation du Fiche A/B des Freins
|
||||
P0505=Système Idéal du Controle d'Aire
|
||||
P0506=Systeme de Controle d Aire Idéal Plus Bas de Celui Attendu
|
||||
P0507=Système RPM de Controle d Aire Idéal Plus Haut de Ce qu on Attend
|
||||
P0508=Circuit Bas Ideal du Système de Controle d'Aire
|
||||
P0523=Capteur de Pression de la Machine a Huile/Fiche haut
|
||||
P0524=Pression de la Machine a Huile Tres Basse
|
||||
P0525=Rang du Circuit de Controle de la Tour/Performance
|
||||
P0526=Circuit du Capteur de Vitesse Fan
|
||||
P0527=Rang du Circuit du Capteur Rapide Fan/Performance
|
||||
P0528=Aucun Signe du Circuit du Capteur Rapide Fan
|
||||
P0529=Circuit du Capteur Rapide Fan Intermittent
|
||||
P0530=Circuit du Capteur A de Pression Refrigerant A/C
|
||||
P0531=Rang du Circuit du Capteur de Pression du Refrigerant A/C/Performance
|
||||
P0532=Circuit du Capteur A de Pression Refrigerant A/C Bas
|
||||
P0533=Circuit Haut du Capteur A de Pression du Refrigerant A/C
|
||||
P0534=Perte du Charge du Refrigerant A/C
|
||||
P0535=Circuit du Capteur de Temperature Evaporateur A/C
|
||||
P0536=Rang du Circuit du Capteur Chaud Evaporatereur A/C/Performance
|
||||
P0537=Circuit Bas du Capteur Chaud Evaporateur A/C
|
||||
P0538=Circuit Haut du Capteur Chaud Evaporateur A/C
|
||||
P0539=Circuit du Capteur Chaud Evaporateur A/C Intermittent
|
||||
P0589=Controle d'Entree du Circuit B de la Tour de Plusieurs Fonctions
|
||||
P0590=Controle du Circuit d'Entree B de la Tour de Plusieurs Fonctions
|
||||
P0591=Rang du Circuit d'Entree B du Controle de la Tour/Performance
|
||||
P0592=Circuit Bas d'Entree B pour Controle de la Tour de Plusieurs Fonctions
|
||||
P0593=Haut Circuit d'Entree B pour Controle de la Tour de Plusieurs Fonctions
|
||||
P0594=Circuit de Controle Servo de la Tour/Ouvert
|
||||
P0595=Circuit Bas de Controle Servo pour Controle de la Tour
|
||||
P0596=Circuit Haut de Controle Servo pour Controle de la Tour
|
||||
P0597=Circuit de Controle du Thermostate du Chauffeur/Ouvert
|
||||
P0598=Circuit Bas de Controle du Thermostate du Chauffeur
|
||||
P0599=Controle du Circuit du Chauffeur de la Tour
|
||||
P0600=Lien Serial de Communication
|
||||
P0601=Controle Interne d'Erreurs du Module de Memoire
|
||||
P0602=Erreur du Programme pour Controle du Module
|
||||
P0603=Controle Interne d'Erreurs du Module pour Maintenir la Memoire (KAM)
|
||||
P0604=Controle Interne pour Erreurs pour Accès au Hazard de la Mémoire (RAM)
|
||||
P0605=Controle Interne pour Erreur du Module pour Lire la Mémoire
|
||||
P0606=ECM/PCM Processeur
|
||||
P0607=Performance du Controle du Module
|
||||
P0608=Controle de Sortie A du Module VSS
|
||||
P0609=Sortie A du Module de Controle VSS
|
||||
P060A=Performance du Processeur pour Controle Interne du Module
|
||||
P060B=Performance du Proces du Controle Interne du Module A/D
|
||||
P060C=Performance du Processeur Principale pour Controle Interne du Module
|
||||
P060D=Performance de Position du Pedal d'Accelerateur pour Controle Interne du Module
|
||||
P060E=Performance de Postion Loop pour Controle Interne du Module
|
||||
P060F=Performance de Temperature du Rafraicheur pour Controle Interne du Module
|
||||
P0610=Erreur d'Options pour Controle du Module du Vehicule
|
||||
P0611=Performance d'Injecteur des Combustibles pour Controle du Module
|
||||
P0612=Controle du Relai d'Injecteur des Combustibles pour Tester le Module
|
||||
P0613=Processeur TCM
|
||||
P0614=ECM/TCM Incompatible
|
||||
P0615=Circuit du Relai d'Initiateur
|
||||
P0616=Circuit Bas du Relai d'Initiateur
|
||||
P0617=Circuit Haut du Relai d'initiateur
|
||||
P0618=Erreur KAM pour Controle des Combustibles Alternatif
|
||||
P0619=Controle des Combustibles du Module RAM Alternatif/Erreur ROM
|
||||
P061A=Controle Interne de Performance du Torque du Module
|
||||
P061B=Calcule de Performance du Torque du Module pour Controle Interne
|
||||
P061C=Performance de la Machine RPM du Module pour Controle Interne
|
||||
P061D=Controle Interne de Performance de la Masse d'Aire de la Machine du Module
|
||||
P061E=Controle Interne de Performance des Freins du Module
|
||||
P061F=Controle Interne de Performance du Controleur Loop Actuaire du Module
|
||||
P0620=Controle des Batteries du Circuit
|
||||
P0621=Circuit d'Ordinateur L/Lampe Génératrice
|
||||
P0622=Circuit d'Ordinateur F/Champ Génératrice
|
||||
P0623=Controle du Circuit a Lampe Génératrice
|
||||
P0624=Controle du Circuit du Cap de Lampe Génératrice
|
||||
P0628=Controle de Circuit Bas a Pompe A de Combustibles
|
||||
P0629=Controle de Circuit Haut a Pompe A de Combustibles
|
||||
P062A=Controle de Rang du Circuit a Pompe A de Combustibles/Performance
|
||||
P062B=Controle Interne de Performance du Module d'Injecteur de Combustibles
|
||||
P062C=Controle Interne de Performance du Module de Vehicule Rapide
|
||||
P062D=Performance du Circuit du Conducteur d'Injecteur de Combustibles Banque 1
|
||||
P062E=Performance du Circuit de Conducteur d'Injecteur de Combustibles Banque 2
|
||||
P062F=Controle Interne d'Erreurs de Module EEPROM
|
||||
P0630=VIN Non Programme ou Incompatible-ECM/PCM
|
||||
P0631=VIN Non Programme ou Incompatible-TCM
|
||||
P0632=Odomètre Non Programme-ECM/PCM
|
||||
P0633=Cle d'Immobiliseur Non Programme-ECM/PCM
|
||||
P0634=PCM/ECM/TCM Temperature Interne Très Haute
|
||||
P0635=Controle de Circuit de Volant Puissant
|
||||
P0636=Controle de Circuit Bas de Volant Puissant
|
||||
P0637=Controle du Circuit Haut de Volant Puissant
|
||||
P0638=Rang de Controle de Loop Actuaire/Performance Banque 1
|
||||
P0639=Rang de Controle de Loop Actuaire/Performance Banque 2
|
||||
P063A=Sens de Circuit de Voltage de Batteries
|
||||
P063B=Rang de Circuit de Sens de Voltage de Batteries/Performance
|
||||
P063C=Circuit Bas de Sens de Voltage de Batteries
|
||||
P063D=Circuit Haut de Sens de Voltage de Batteries
|
||||
P063E=Entree de Loop Auto- configure Non Existant
|
||||
P063F=Auto-configuration de la Temperature d'Entree du Rafraicheur de la Machine Non Existant
|
||||
P0640=Controle du Circuit du Chauffeur d'Absorption d'Aire
|
||||
P0641=Référence du Capteur du Circuit de Voltage A/Ouvert
|
||||
P0642=Référence du Capteur du Circuit Bas de Voltage A
|
||||
P0643=Référence du Capteur du Circuit Haut de Voltage A
|
||||
P0644=Ecran du Conducteur du Circuit de Communication Seriale
|
||||
P0645=Controle du Circuit de Relais a Grapper A/C
|
||||
P0646=Controle du Circuit Bas de Relais a Grapper A/C
|
||||
P0647=Controle du Circuit Haut de Relais a Grapper A/C
|
||||
P0648=Controle du Circuit de Lampe d'Immobiliseur
|
||||
P0649=Controle du Circuit de Lampe de Controle Rapide
|
||||
P0650=Controle de Circuit de Lampe d'Indicateur de Malfonction (MIL)
|
||||
P0651=Reference de Capteur de Circuit de Voltage B/Ouvert
|
||||
P0652=Capteur de Référence de Circuit Bas de Voltage B
|
||||
P0653=Référence du Capteur du Circuit Haut de Voltage B
|
||||
P0654=Performance du Circuit de la Machine RPM
|
||||
P0655=Controle de Performance du Circuit de Lampe Chaude de la Machine
|
||||
P0656=Performance du Niveau de Combustibles du Circuit
|
||||
P0657=Provision d'Actuaire de Circuit de Voltage A/Ouvert
|
||||
P0658=Provision d'Actuaire du Circuit Bas de Voltage A
|
||||
P0659=Provision d'Actuaire du Circuit Haut de Voltage A
|
||||
P065A=Performance du Système des Batteries
|
||||
P065B=Rang de Controle Generateur du Circuit/Performance
|
||||
P0660=Controle du Circuit a Valve de Son d'Absorption Manifold/Banque Ouverte 1a)
|
||||
P0661=Controle du Circuit a Valve de Son d'Absorption Manifold Banque 1 a)
|
||||
P0662=Controle du Circuit Haut a Valve de Son d'Absorption Manifold Banque 1 a)
|
||||
P0663=Controle du Circuit a Valve de Son d'Absorption Manifold/Banque Ouverte 2 a)
|
||||
P0664=Controle du Circuit Bas a Valve de Son d'Absorption Manifold Banque 2 a)
|
||||
P0665=Controle du Haut Circuit a Valve de Son d'Absorption Manifold Banque 2 a)
|
||||
P0666=Circuit du Capteur de haute temperature Interne PCM/ECM/TCM
|
||||
P0667=Rang du Capteur Chaud Interne PCM/ECM/TCM/Performance
|
||||
P0668=Circuit Bas du Capteur Chaud Interne PCM/ECM/TCM
|
||||
P0669=Circuit Haut du Capteur Chaud Interne PCM/ECM/TCM
|
||||
P066A=Controle du Circuit Bas de Fiche au Charbon 1
|
||||
P066B=Controle du Haut Circuit de Fiche au Charbon 1
|
||||
P066C=Controle du Circuit Bas de Fiche au Charbon 2
|
||||
P066D=Controle du Circuit Haut de Fiche au Charbon 2
|
||||
P069F=ISO/SAE reservé
|
||||
P0700=Controle du Système de Transmission (Demande MIL)
|
||||
P0701=Rang du Système de Transmission/Performance
|
||||
P0702=Controle du Système de Transmission d'Electricite
|
||||
P0703=Circuit de Fiche B des Freins
|
||||
P0704=Circuit de Fiche d'Entree pour Grapper
|
||||
P0705=Circuit du Capteur A de Rang de Transmission (PRNDL Entree)
|
||||
P0706=Rang du Circuit de Capteur A de Transmission/Performance
|
||||
P070A=Circuit de Capteur de Transmission de Niveau de Flux
|
||||
P070B=Rang de Circuit du Capteur de Transmission du Niveau de Flux/Performance
|
||||
P070C=Circuit Bas de Capteur de Transmission du Niveau de Flux
|
||||
P070D=Circuit Haut de Capteur de Transmission du Niveau de Flux
|
||||
P070E=Circuit de Capteur Intermittent de Transmission du Niveau de Flux/Erratique
|
||||
P070F=Transmission du Niveau de Flux Très Bas
|
||||
P0710=Circuit de Capteur A de Transmission de Température du Flux
|
||||
P0711=Rang du Circuit de Capteur A de Transmission de Temperature du Flux/Performance
|
||||
P0712=Circuit Bas de Capteur A de Transmission de Temperature du Flux
|
||||
P0713=Haut Circuit du Capteur A de Transmission de Température du Flux
|
||||
P0714=Circuit Intermittent de Capteur A de Transmission de Temperature du Flux
|
||||
P0715=Entree/Circuit du Capteur A a Tourbine Rapide
|
||||
P0716=Entrée/Rang du Circuit de Capteur A a Turbine Rapide/Performance
|
||||
P0717=Entrée/Circuit de Capteur A a Turbine Rapide Sans Signal
|
||||
P0718=Entree/Circuit de Capteur A Intermittent a Turbine Rapide
|
||||
P0719=Circuit Bas B de Fiche de Freins
|
||||
P071A=Circuit A de Fiche de Transmission
|
||||
P071B=Circuit Bas A a Fiche connecte pour Transmission
|
||||
P071C=Haut Circuit a Fiche A pour Transmission
|
||||
P0509=Controle du Systeme de Haut Circuit d'Aire Potentielle
|
||||
P050A=Controle de Performance du Système d'Aire Froide Potential
|
||||
P050B=Performance en Temps du Systeme de Combustion
|
||||
P050C=Performance de Temperature du Ventilateur d'Aire Froide de la Machine
|
||||
P050D=Controle Rigide Potential de Production d'Aire Froide
|
||||
P050E=ISO/SAE reserve
|
||||
P050F=ISO/SAE reserve
|
||||
P0510=Position de Fiche de Circuit Ferme
|
||||
P0511=Controle de Circuit d'Aire Potentielle
|
||||
P0512=Demande de Démarrage du Circuit
|
||||
P0513=Cle Incorrecte d'Immobiliseur
|
||||
P0514=Rang du Circuit a Capteur de Temperature de Batterie/Performance
|
||||
P0515=Circuit de Capteur de Temperature a Batteries
|
||||
P0516=Circuit Bas a Capteur de Temperature de Batteries
|
||||
P0517=Circuit Haut a Capteur de Temperature de Batteries
|
||||
P0518=Controle de l'Aire Produite du Circuit Intermittent
|
||||
P0519=Controle de Performance du Systeme d'Aire Produite
|
||||
P0520=Capteur de la Machine a Huile/Fiche Circuit
|
||||
P0521=Capteur de Pression de la Machine a Huile/Performance
|
||||
P0522=Capteur de Pression de la Machine a Huile/Fiche Bas
|
||||
P0708=Circuit Haut A de Rang de Capteur de Transmission
|
||||
P0709=Circuit Intermittent de Rang du Capteur A pour Transmission
|
||||
P071D=Circuit de Fiche B de Transmission
|
||||
P071E=Circuit B de Fiche B de Transmission
|
||||
P071F=Circuit Haut du Capteur B pour Transmission
|
||||
P0720=Circuit de Production a Capteur Rapide
|
||||
P0721=Rang de Circuit de Production a Capteur Rapide/Performance
|
||||
P0722=Circuit de Production de Capteur Rapide sans Signe
|
||||
P0723=Circuit Intermittent de Production a Capteur Rapide
|
||||
P0724=Circuit Haut de Fiche B de Freins
|
||||
P0725=Circuit de Production a Machine Rapide
|
||||
P0726=Rang de Circuit de Production a Machine Rapide/Performance
|
||||
P0727=Circuit de Production a Machine Rapide sans Signe
|
||||
P0728=Circuit Intermittent de Production a Machine Rapide
|
||||
P0729=Ration Incorrecte de Grenage 6
|
||||
P0730=Ration Incorrecte de Grenage
|
||||
P0731=Ration Incorrecte de Grenage 1
|
||||
P0732=Ration Incorrecte de Grenage 2
|
||||
P0733=Ration Incorrecte de Grenage 3
|
||||
P0734=Ration Incorrecte de Grenage 4
|
||||
P0735=Ration Incorrecte de Grenage 5
|
||||
P0736=Ration Incorrecte Reverse
|
||||
P0737=Circuit de Production a Machine Rapide TCM
|
||||
P0738=Circuit Bas Generateur a Machine Rapide TCM
|
||||
P0739=Circuit Haut Generateur a Machine Rapide TCM
|
||||
P0740=Circuit a Convertisseur de Torque pour Grapper/Ouvert
|
||||
P0741=Performance de Circuit a Convertisseur de Torque pour Grapper/Decollage
|
||||
P0742=Circuit Colle a Convertisseur de Torque pour Grapper
|
||||
P0143=Circuit Basse Tension Capteur O2 Radiateur Rangée 1 Capteur 3
|
||||
P0142=Circuit Capteur O2 Rangée 1 Capteur 3
|
||||
P0141=Circuit Capteur O2 Radiateur Rangée 1 Capteur 2
|
||||
P0140=Circuit Pas d'Activité Détectée Capteur O2 Rangée 1 Capteur 2
|
||||
P0139=Circuit Réponse Lente Capteur O2 Rangée 1 Capteur 2
|
||||
P0138=Circuit Tension Haute Capteur O2 Rangée 1 Capteur 2
|
||||
P0137=Circuit Tension Basse Capteur O2 Rangée 1 Capteur 2
|
||||
P0136=Circuit Capteur O2 Rangée 1 Capteur 2
|
||||
P0128=Thermostat Liquide de Refroidissement (Température Liquide de Refroidissement En Dessous de Régulation Thermostat)
|
||||
P0126=Température Liquide de Refroidissement Insuffisante pour Opération Stable
|
||||
P0123=Accélérateur/Capteur Position Pédale/Circuit Haut Interrupteur A
|
||||
P0122=Accélérateur/Capteur Position Pédale/Circuit Bas Interrupteur A
|
||||
P0121=Accélérateur/Capteur Position Pédale/Circuit Interrupteur A Variation/Performance
|
||||
P0120=Accélérateur/Capteur Position Pédale/Circuit Interrupteur A
|
||||
P011A=Température Liquide de Refroidissement Capteur 1/2 Corrélation
|
||||
P0119=Circuit Intermittent Température Liquide de Refroidissement Capteur 1
|
||||
P0118=Circuit Haut Température Liquide de Refroidissement Capteur 1
|
||||
P0117=Circuit Bas Température Liquide de Refroidissement Capteur 1
|
||||
P0116=Circuit Température Liquide de Refroidissement Capteur 1 Variation/Performance
|
||||
P0115=Circuit Température Liquide de Refroidissement Capteur 1
|
||||
P010A=Masse ou Volume Flux Air Circuit B
|
||||
P0109=Pression Collecteur Absolue/Circuit Intermittent Pression Barométrique
|
||||
P0108=Pression Collecteur Absolue/Circuit Haut Pression Barométrique
|
||||
P0107=Pression Collecteur Absolue/Circuit Bas Pression Barométrique
|
||||
P0106=Pression Collecteur Absolue/Circuit Pression Barométrique Variation/Performance
|
||||
P0105=Pression Collecteur Absolue/Circuit Pression Barométrique
|
||||
P0104=Masse ou Volume Flux Air Circuit A Intermittent
|
||||
P0103=Masse ou Volume Flux Air Circuit A Haut
|
||||
P0102=Masse ou Volume Flux Air Circuit A Bas
|
||||
P0101=Masse ou Volume Flux Air Circuit A Variation/Performance
|
||||
P0100=Masse ou Volume Flux Air Circuit A
|
||||
P009A=Température Entrée d'Air / Température Air Ambiant Corrélation
|
||||
P0099=Température d'Entrée d'Air Capteur 2 Circuit Intermittent/Incohérent
|
||||
P0098=Température d'Entrée d'Air Capteur 2 Circuit Haut
|
||||
P0097=Température d'Entrée d'Air Capteur 2 Circuit Bas
|
||||
P0096=Température Circuit d'Entrée d'Air Capteur 2 Variation/Performance
|
||||
P0095=Température Circuit d'Entrée d'Air Capteur 2
|
||||
P0094=Fuite Circuit Carburant Détectée - Petite Fuite
|
||||
P0229=Accélérateur/Capteur de Position de la Pédale/ Commutateur de Position C Circuit Intermittent
|
||||
P0228=Accélérateur/Capteur de Position de la Pédale/ Commutateur de Position C Circuit Haut
|
||||
P0227=Accélérateur/Capteur de Position de la Pédale/ Commutateur de Position C Circuit Bas
|
||||
P0226=Accélérateur/Capteur de Position de la Pédale/Commutateur de Position C Circuit/Performance
|
||||
P0152=Bloque 2 Capteur 1 Capteur de O2 Circuit Haute Tension
|
||||
P0151=Bloque 2 Capteur 1 Capteur de O2 Circuit basse tension
|
||||
P0149=Erreur de Timing du Carburant
|
||||
P0147=Bloque 1 Capteur 3 Capteur de O2 Circuit du radiateur
|
||||
P0144=Bloque 1 Capteur 3 Circuit du Capteur de O2 à haute tension
|
||||
P0145=Bloque 1 Capteur 3 Circuit du Capteur de O2 à réponse lente
|
||||
P0146=Bloque 1 Capteur 3 Circuit du Capteur de O2 aucune activité détectée
|
||||
P0242=Circuit B du capteur de suralimentation du chargeur turbo/super chargeur élevé
|
||||
P0241=Circuit B du capteur de suralimentation du chargeur turbo/super chargeur faible
|
||||
P0240=Étendue/Performance du circuit B du capteur de suralimentation du chargeur turbo/super chargeur
|
||||
P023E=Pression absolue du collecteur - Corrélation du capteur B de suralimentation du chargeur turbo/super chargeur
|
||||
P023D=Pression absolue du collecteur - Corrélation du capteur A de suralimentation du chargeur turbo/super chargeur
|
||||
P023C=Circuit de commande de la pompe à liquide de refroidissement du refroidisseur d'air de charge élevé
|
||||
P023B=Circuit de commande de la pompe à liquide de refroidissement du refroidisseur d'air de charge faible
|
||||
P023A=Circuit de commande de la pompe à liquide de refroidissement du refroidisseur d'air de charge /Ouvrir
|
||||
P0239=Circuit B du capteur de suralimentation du chargeur turbo/super chargeur
|
||||
P0238=Circuit A du capteur de suralimentation du chargeur turbo/super chargeur élevé
|
||||
P0237=Circuit A du capteur de suralimentation du chargeur turbo/super chargeur faible
|
||||
P0236=Étendue/Performance du circuit A du capteur de suralimentation du chargeur turbo/super chargeur
|
||||
P0234=Condition de suralimentation du chargeur turbo/super chargeur
|
||||
P0235=Circuit A du capteur de suralimentation du chargeur turbo/super chargeur
|
||||
P0233=Circuit secondaire de pompe à carburant intermittent
|
||||
P0232=Circuit secondaire de pompe à carburant élevé
|
||||
P0231=Circuit secondaire de pompe à carburant faible
|
||||
P022A=Circuit A de commande de dérivation du refroidisseur d’air de charge /Ouvrir
|
||||
P0230=Circuit primaire de pompe à carburant
|
||||
P022F=Circuit B de commande de dérivation du refroidisseur d’air de charge élevé
|
||||
P022E=Circuit B de commande de dérivation du refroidisseur d’air de charge faible
|
||||
P022D=Circuit B de commande de dérivation du refroidisseur d’air de charge /Ouvrir
|
||||
P022C=Circuit de commande A de dérivation du refroidisseur d’air de charge élevé
|
||||
P022B=Circuit A de commande Ade dérivation du refroidisseur d’air de charge faible
|
||||
U3FFF=Aucun code d’anomalie défini
|
||||
U0301=Incompatibilité logicielle avec ECM/PCM
|
||||
U0302=Incompatibilité logicielle avec module de contrôle de transmission
|
||||
U0304=Incompatibilité logicielle avec module de commande de changement de vitesse
|
||||
U0305=Incompatibilité logicielle avec module de régulateur de vitesse
|
||||
@@ -0,0 +1,144 @@
|
||||
|
||||
|
||||
|
||||
U0207=אבדה התקשורת מול מודול בקרת הגג הנפתח
|
||||
U0229=אבדה התקשורת מול מודול חימום ההגה
|
||||
U0231=אבדה התקשורת מול מודול חישת הגשם
|
||||
U0320=חוסר תאימות תכנתי עם מודול בקרת היגוי כוח
|
||||
U0318=חוסר תאימות תכנתי עם מודול בקרת מערכת הבלימה
|
||||
U0400=התקבלו נתונים שגויים
|
||||
U0328=חוסר תאימות תכנתי עם מודול חיישן זווית ההיגוי
|
||||
U0405=התקבלו נתונים שגויים ממודול בקרת השיוט
|
||||
U0410=התקבלו נתונים שגויים ממודול בקרת משאבת הדלק
|
||||
U0418=התקבלו נתונים שגויים ממודול בקרת מערכת הבלימה
|
||||
U0420=התקבלו נתונים שגויים ממודול בקרת היגוי כוח
|
||||
U0427=התקבלו נתונים שגויים ממודול בקרת אבטחת כלי רכב
|
||||
U0428=התקבלו נתונים שגויים ממודול חיישן זווית היגוי
|
||||
U0429=התקבלו נתונים שגויים ממודול בקרת עמוד היגוי
|
||||
U0430=התקבלו נתונים שגויים ממודול מעקב לחץ האוויר בצמיג
|
||||
U3FFF=לא הוגדר קוד בעיה
|
||||
U0120=נשמר על ידי המסמך
|
||||
U0119=נשמר על ידי המסמך
|
||||
U0118=נשמר על ידי המסמך
|
||||
U0117=נשמר על ידי המסמך
|
||||
U0116=נשמר על ידי המסמך
|
||||
P256F=שמור ל־ISO/SAE
|
||||
P240F=שמור ל־ISO/SAE
|
||||
P240E=שמור ל־ISO/SAE
|
||||
P240D=שמור ל־ISO/SAE
|
||||
P207F=שמור ל־ISO/SAE
|
||||
P206D=שמור ל־ISO/SAE
|
||||
P206C=שמור ל־ISO/SAE
|
||||
P206B=שמור ל־ISO/SAE
|
||||
P206A=שמור ל־ISO/SAE
|
||||
P205F=שמור ל־ISO/SAE
|
||||
P204F=שמור ל־ISO/SAE
|
||||
P0B0F=שמור ל־ISO/SAE
|
||||
P0B0E=שמור ל־ISO/SAE
|
||||
P075F=שמור ל־ISO/SAE
|
||||
P050F=שמור ל־ISO/SAE
|
||||
P050E=שמור ל־ISO/SAE
|
||||
P084F=שמור ל־ISO/SAE
|
||||
P023F=שמור ל־ISO/SAE
|
||||
P069F=שמור ל־ISO/SAE
|
||||
P069E=שמור ל־ISO/SAE
|
||||
P047F=שמור ל־ISO/SAE
|
||||
P080E=שמור ל־ISO/SAE
|
||||
P080F=שמור ל־ISO/SAE
|
||||
P0364=שמור ל־ISO/SAE
|
||||
P245E=שמור ל־ISO/SAE
|
||||
P245F=שמור ל־ISO/SAE
|
||||
P255F=שמור ל־ISO/SAE
|
||||
P018F=שמור ל־ISO/SAE
|
||||
P0323=קלט מהירות מנוע במעגל הצתה/מפלג לא רציף
|
||||
P0322=אין אות קלט מהירות מנוע במעגל הצתה/מפלג
|
||||
P0321=כשל בביצועי/טווח קלט מהירות מנוע במעגל הצתה/מפלג
|
||||
P0320=כשל בקלט מהירות מנוע במעגל הצתה/מפלג
|
||||
P0319=כשל באות מעגל חיישן ‚כביש משובש’ B
|
||||
P0315=סטיית מערכת מצב גל ארכובה לא נלמדה (ע״י מחשב)
|
||||
P0314=החטאת ניצוץ בצילינדר יחיד (לא צוין איזה צילינדר)
|
||||
P0313=זוהתה החטאת ניצוץ עם תערובת ענייה
|
||||
P0311=זוהתה החטאת ניצוץ צילינדר 11
|
||||
P0310=זוהתה החטאת ניצוץ צילינדר 10
|
||||
P0309=זוהתה החטאת ניצוץ צילינדר 9
|
||||
P0308=זוהתה החטאת ניצוץ צילינדר 8
|
||||
P0307=זוהתה החטאת ניצוץ צילינדר 7
|
||||
P0306=זוהתה החטאת ניצוץ צילינדר 6
|
||||
P0305=זוהתה החטאת ניצוץ צילינדר 5
|
||||
P0304=זוהתה החטאת ניצוץ צילינדר 4
|
||||
P0303=זוהתה החטאת ניצוץ צילינדר 3
|
||||
P0302=זוהתה החטאת ניצוץ צילינדר 2
|
||||
P0301=זוהתה החטאת ניצוץ צילינדר 1
|
||||
P0312=זוהתה החטאת ניצוץ צילינדר 12
|
||||
P0318=כשל באות מעגל חיישן ‚כביש משובש’ A
|
||||
P0317=חומרת ‚כביש משובש’ לא קיימת
|
||||
P0316=זוהתה החטאת ניצוץ בהנעה (1000 סיבובים ראשונים)
|
||||
P0324=שגיאה במערכת בקרת נקישות
|
||||
P0431=יעילות המערכת הקטליטית המתחממת מתחת לסף הפעולה למצבור 2 (צד ימין)
|
||||
P0430=יעילות המערכת הקטליטית מתחת לסף הפעולה למצבור 2 (צד ימין)
|
||||
P042F=שמור ל־ISO/SAE
|
||||
P042E=שמור ל־ISO/SAE
|
||||
P041F=שמור ל־ISO/SAE
|
||||
P012F=שמור ל־ISO/SAE
|
||||
P006F=שמור ל־ISO/SAE
|
||||
P006E=שמור ל־ISO/SAE
|
||||
P000F=שמור ל־ISO/SAE
|
||||
P000E=שמור ל־ISO/SAE
|
||||
P0009=ביצועי מערכת מצב מנוע מצבור 2 (צד ימין)
|
||||
P0008=ביצועי מערכת מצב מנוע מצבור 1 (צד שמאל)
|
||||
P0007=אות גבוה במעגל בקרת שסתום הפסקת דלק
|
||||
P0006=אות נמוך במעגל בקרת שסתום הפסקת דלק
|
||||
P0005=נתק/קצר במעגל בקרת שסתום הפסקת דלק
|
||||
P0004=אות גבוה במעגל בקרת וסת דלק
|
||||
P0003=אות נמוך במעגל בקרת וסת דלק
|
||||
P0002=טווח/ביצועים במעגל בקרת וסת דלק
|
||||
P0001=נתק/קצר במעגל בקרת וסת דלק
|
||||
U0105=אבדה התקשורת מול מודול בקרת הזרקת הדלק
|
||||
U0104=אבדה התקשורת מול מודול בקרת השיוט
|
||||
U0103=אבדה התקשורת מול מודול העברת ההילוכים
|
||||
U0099=נשמר על ידי המסמך
|
||||
U0098=נשמר על ידי המסמך
|
||||
U0097=נשמר על ידי המסמך
|
||||
U0096=נשמר על ידי המסמך
|
||||
U0095=נשמר על ידי המסמך
|
||||
U0094=נשמר על ידי המסמך
|
||||
U0093=נשמר על ידי המסמך
|
||||
U0092=נשמר על ידי המסמך
|
||||
U0091=נשמר על ידי המסמך
|
||||
U0090=נשמר על ידי המסמך
|
||||
U0089=נשמר על ידי המסמך
|
||||
U0088=נשמר על ידי המסמך
|
||||
U0087=נשמר על ידי המסמך
|
||||
U0086=נשמר על ידי המסמך
|
||||
U0085=נשמר על ידי המסמך
|
||||
U0084=נשמר על ידי המסמך
|
||||
U0083=נשמר על ידי המסמך
|
||||
U0082=נשמר על ידי המסמך
|
||||
U0081=נשמר על ידי המסמך
|
||||
U0080=נשמר על ידי המסמך
|
||||
U0079=נשמר על ידי המסמך
|
||||
U0078=נשמר על ידי המסמך
|
||||
U0077=נשמר על ידי המסמך
|
||||
U0076=נשמר על ידי המסמך
|
||||
U0075=נשמר על ידי המסמך
|
||||
U0074=
|
||||
U0139=נשמר על ידי המסמך
|
||||
U0138=נשמר על ידי המסמך
|
||||
U0137=נשמר על ידי המסמך
|
||||
U0136=נשמר על ידי המסמך
|
||||
U0135=נשמר על ידי המסמך
|
||||
U0134=נשמר על ידי המסמך
|
||||
U0133=נשמר על ידי המסמך
|
||||
U0163=אבדה התקשורת מול מודול בקרת הניווט
|
||||
U0162=אבדה התקשורת מול מודול תצוגת הניווט
|
||||
U0161=אבדה התקשורת מול מודול המצפן
|
||||
U0159=אבדה התקשורת מול מודול מסייע החנייה
|
||||
U0183=אבדה התקשורת מול מודול בקרת התאורה - אחורי
|
||||
U0182=אבדה התקשורת מול מודול בקרת התאורה - קדמי
|
||||
U0186=אבדה התקשורת מול מגבר השמע
|
||||
U0185=אבדה התקשורת מול מודול בקרת האנטנה
|
||||
U0184=אבדה התקשורת מול הרדיו
|
||||
U0197=אבדה התקשורת מול מודול בקרת הטלפון
|
||||
U0192=אבדה התקשורת מול המחשב האישי
|
||||
U0191=אבדה התקשורת מול הטלוויזיה
|
||||
U0198=אבדה התקשורת מול מודול בקרת הטלמטיקה
|
||||
@@ -0,0 +1,10 @@
|
||||
P0001=Regolatore del circuito di controllo del volume carburante/aperto
|
||||
P0002=Regolatore del circuito di controllo volume di carburante distanza/prestazioni
|
||||
P0003=Regolatore del circuito di controllo volume di carburante basso
|
||||
P0004=Regolatore del circuito di controllo volume di carburante Alto
|
||||
P0005=Controllo Circuito valvola a intercettazione carburante/Aperto
|
||||
P0006=Controllo circuito valvola a intercettazione carburante Basso
|
||||
P0007=Controllo circuito valvola a intercettazione carburante Alto
|
||||
U3FFF=Nessun codice di errore impostato
|
||||
P000F=Riservato a ISO/SAE
|
||||
P000E=Riservato a ISO/SAE
|
||||
@@ -0,0 +1,2 @@
|
||||
P0001=Amniniḍ n unezḍay n umlugen n tuzirt isissuɣa / yeldi
|
||||
P0002=Amniniḍ n unezḍay n umlugen n tuzirt n yidis / tarebbawt
|
||||
@@ -0,0 +1,87 @@
|
||||
P0001=연료량 조절기 제어 회로 열림
|
||||
P0002=연료량 조절기 제어 회로 범위 / 성능
|
||||
P0003=연료량 조절기 제어 회로가 낮음
|
||||
P0004=연료량 조절기 제어 회로가 높음
|
||||
P0005=연료 차단 밸브 A 제어 회로 / 열림
|
||||
P0006=연료 차단 밸브 A 제어 회로가 낮음
|
||||
P0007=연료 차단 밸브 A 제어 회로가 높음
|
||||
P000A=A 캠축 위치 저속 응답 뱅크 1
|
||||
P000B=B 캠축 위치 저속 응답 뱅크 1
|
||||
P000C=A 캠축 위치 저속 응답 뱅크 2
|
||||
P000D=B 캠축 위치 저속 응답 뱅크 2
|
||||
P000E=ISO/SAE 예약됨
|
||||
P000F=ISO/SAE 예약됨
|
||||
P0010=A 캠축 위치 액추에이터 회로 / 오픈 뱅크 1
|
||||
P0011=A 캠축 위치 - 타이밍 임계값 초과 또는 시스템 성능 뱅크 1
|
||||
P0012=A 캠축 위치 - 타이밍 초과 지연 뱅크 1
|
||||
P0009=엔진 위치 시스템 성능 뱅크 2
|
||||
P0013=B 캠축 위치 - 액추에이터 회로 / 오픈 뱅크 1
|
||||
P0008=엔진 위치 시스템 성능 뱅크 1
|
||||
P006D=기압 - 터보차저/슈퍼차저 입구 압력 상관관계
|
||||
P0044=HO2S 히터 제어 회로 높음 뱅크 1 센서 3
|
||||
P0067=공기 보조 인젝터 제어 회로 높음
|
||||
P0068=MAP/MAF – 스로틀 위치 상관 관계
|
||||
P0063=HO2S 히터 제어 회로 낮음 뱅크 2 센서 3
|
||||
P0064=HO2S 히터 제어 회로 높음 뱅크 2 센서 3
|
||||
P0062=HO2S 히터 제어 회로 뱅크 2 센서 3
|
||||
P0058=HO2S 히터 제어 회로 높음 뱅크 2 센서 2
|
||||
P0059=HO2S 히터 저항 뱅크 2 센서 1
|
||||
P0054=HO2S 히터 저항 뱅크 1 센서 2
|
||||
P0053=HO2S 히터 저항 뱅크 1 센서 1
|
||||
P0050=HO2S 히터 제어 회로 뱅크 2 센서 1
|
||||
P0051=HO2S 히터 제어 회로 낮음 뱅크 2 센서 1
|
||||
P0048=터보차저/슈퍼차저 부스트 컨트롤 솔레노이드 A 회로 높음
|
||||
P0041=O2 센서 신호 교환됨 뱅크 1 센서 2/뱅크 2 센서 2
|
||||
P0039=터보차저/슈퍼차저 우회 밸브 제어 회로 범위/성능
|
||||
P0040=O2 센서 신호 교환됨 뱅크 1 센서 1/뱅크 2 센서 1
|
||||
P0037=HO2S 히터 제어 회로 낮음 뱅크 1 센서 2
|
||||
P0031=HO2S 히터 제어 회로 낮음 뱅크 1 센서 1
|
||||
P0032=HO2S 히터 제어 회로 높음 뱅크 1 센서 1
|
||||
P0033=터보차저/슈퍼차저 우회 밸브 제어 회로
|
||||
P0030=HO2S 히터 제어 회로 뱅크 1 센서 1
|
||||
P0028=흡기 밸브 제어 솔레노이드 회로 범위/성능 뱅크 2
|
||||
P0023=B 캠축 위치 - 액추에이터 회로 / 오픈 뱅크 2
|
||||
P0019=크랭크축 위치 – 캠축 위치 상관관계 뱅크 2 센서 B
|
||||
P0014=B 캠축 위치 - 타이밍 임계값 초과 또는 시스템 성능 뱅크 1
|
||||
P0029=배기 밸브 제어 솔레노이드 회로 범위/성능 뱅크 2
|
||||
P0034=터보차저/슈퍼차저 우회 밸브 제어 회로 낮음
|
||||
P0045=터보차저/슈퍼차저 부스트 제어 솔레노이드 A 회로/오픈
|
||||
P0046=터보차저/슈퍼차저 부스트 제어 솔레노이드 A 회로 범위/성능
|
||||
P0060=HO2S 히터 저항 뱅크 2 센서 2
|
||||
P0035=터보차저/슈퍼차저 우회 밸브 제어 회로 높음
|
||||
P0036=HO2S 히터 제어 회로 뱅크 1 센서 2
|
||||
P0038=HO2S 히터 제어 회로 높음 뱅크 1 센서 2
|
||||
P0043=HO2S 히터 제어 회로 낮음 뱅크 1 센서 3
|
||||
P0047=터보차저/슈퍼차저 부스트 컨트롤 솔레노이드 A 회로 낮음
|
||||
P004C=터보차저/슈퍼차저 부스트 컨트롤 솔레노이드 B 회로 낮음
|
||||
P0055=HO2S 히터 저항 뱅크 1 센서 3
|
||||
P0066=공기 보조 인젝터 제어 회로 또는 회로 낮음
|
||||
P0016=크랭크축 위치 – 캠축 위치 상관관계 뱅크 1 센서 A
|
||||
P0018=크랭크축 위치 – 캠축 위치 상관관계 뱅크 2 센서 A
|
||||
P0021=A 캠축 위치 - 타이밍 임계값 초과 또는 시스템 성능 뱅크 2
|
||||
P0024=B 캠축 위치 - 타이밍 임계값 초과 또는 시스템 성능 뱅크 2
|
||||
P0042=HO2S 히터 제어 회로 뱅크 1 센서 3
|
||||
P0049=터보차저/슈퍼차저 터빈 과속
|
||||
P004A=터보차저/슈퍼차저 부스트 제어 솔레노이드 B 회로/오픈
|
||||
P004E=터보차저/슈퍼차저 부스트 제어 솔레노이드 A 회로 간헐 작동/불규칙
|
||||
P004F=터보차저/슈퍼차저 부스트 제어 솔레노이드 B 회로 간헐 작동/불규칙
|
||||
P0015=B 캠축 위치 - 타이밍 초과 지연 뱅크 1
|
||||
P0017=크랭크축 위치 – 캠축 위치 상관관계 뱅크 1 센서 B
|
||||
P004B=터보차저/슈퍼차저 부스트 제어 솔레노이드 B 회로 범위/성능
|
||||
P004D=터보차저/슈퍼차저 부스트 컨트롤 솔레노이드 B 회로 높음
|
||||
P0056=HO2S 히터 제어 회로 뱅크 2 센서 2
|
||||
P0065=공기 보조 인젝터 제어 범위/성능
|
||||
P006B=MAP – 배기 압력 상관 관계
|
||||
P0022=A 캠축 위치 - 타이밍 초과 지연 뱅크 2
|
||||
P0020=A 캠축 위치 액추에이터 회로 / 오픈 뱅크 2
|
||||
P0025=B 캠축 위치 - 타이밍 초과 지연 뱅크 2
|
||||
P0026=흡기 밸브 제어 솔레노이드 회로 범위/성능 뱅크 1
|
||||
P0027=배기 밸브 제어 솔레노이드 회로 범위/성능 뱅크 1
|
||||
P0052=HO2S 히터 제어 회로 높음 뱅크 2 센서 1
|
||||
P0057=HO2S 히터 제어 회로 낮음 뱅크 2 센서 2
|
||||
P0061=HO2S 히터 저항 뱅크 2 센서 3
|
||||
P006A=MAP – 질량 또는 체적 공기 흐름 상관 관계
|
||||
P006C=MAP - 터보차저/슈퍼차저 입구 압력 상관관계
|
||||
P0069=매니폴드 절대 압력 – 기압 상관 관계
|
||||
P006F=ISO/SAE 예약됨
|
||||
P006E=ISO/SAE 예약됨
|
||||
@@ -0,0 +1,17 @@
|
||||
P0001=Regulator for kontroll av drivstoffvolum/Åpen
|
||||
P0002=Regulatorkrets for kontroll av drivstoffvolum/Ytelse
|
||||
P0003=Regulatorkrets for kontroll av drivstoffvolum lav
|
||||
P0004=Regulatorkrets for kontroll av drivstoffvolum høy
|
||||
P0005=Ventil for drivstoffavstengning A Kontrollkrets/åpen
|
||||
P0006=Ventil for drivstoffavstengning A Kontrollkrets lav
|
||||
P0007=Ventil for drivstoffavstengning A Kontrollkrets høy
|
||||
P0009=Motorplassering systemytelse bank 2
|
||||
P000A=A kamakselposisjon treg reaksjon bank 1
|
||||
P0008=Motorplassering systemytelse bank 1
|
||||
P000B=B kamakselposisjon treg reaksjon bank 1
|
||||
P000C=A kamakselposisjon treg reaksjon bank 1
|
||||
P000D=B kamakselposisjon treg reaksjon bank 2
|
||||
P000E=ISO/SAE reservert
|
||||
P000F=ISO/SAE reservert
|
||||
P0010=A kamakselposisjon relée krets / åpen bank 1
|
||||
P0011=
|
||||
@@ -0,0 +1 @@
|
||||
P0001=ਫਿਊਲ ਵੋਲੀਅਮ ਰੈਗੂਲੇਟਰ ਕੰਟਰੋਲ ਸਰਕਟ/ਓਪਨ
|
||||
@@ -0,0 +1,474 @@
|
||||
P0001=Regulator ilości paliwa - Otwarty obwód sterowania
|
||||
P0002=Regulator ilości paliwa – Awaria obiegu prądu/wydajności
|
||||
P0003=Regulator ilości paliwa – Sygnał zbyt niski
|
||||
P0004=Regulator ilości paliwa – Sygnał zbyt wysoki
|
||||
P0005=Zawór odcinający paliwo A - Obwód sterowania/otwarty
|
||||
P0006=Zawór odcinający paliwo A - Sygnał zbyt niski
|
||||
P0007=Zawór odcinający paliwo A - Sygnał zbyt wysoki
|
||||
P0008=Czasy sterowania silnika - 1 rząd cylindrów
|
||||
P0009=Czasy sterowania silnika - 2 rząd cylindrów
|
||||
P000A=Wolna reakcja na położenie wałka rozrządu zaworów dolotowych (A) - rząd 1
|
||||
P000B=Wolna reakcja na położenie wałka rozrządu zaworów dolotowych (B) - rząd 1
|
||||
P000C=Wolna reakcja na położenie wałka rozrządu zaworów dolotowych (A) - rząd 2
|
||||
P000D=Wolna reakcja na położenie wałka rozrządu zaworów dolotowych (B) - rząd 2
|
||||
P000E=Zarezerwowane ISO/SAE
|
||||
P000F=Zarezerwowane ISO/SAE
|
||||
P006E=Zarezerwowane ISO/SAE
|
||||
P006F=Zarezerwowane ISO/SAE
|
||||
P012F=Zarezerwowane ISO/SAE
|
||||
P018F=Zarezerwowane ISO/SAE
|
||||
P023F=Zarezerwowane ISO/SAE
|
||||
P0364=Zarezerwowane ISO/SAE
|
||||
P041F=Zarezerwowane ISO/SAE
|
||||
P042E=Zarezerwowane ISO/SAE
|
||||
P042F=Zarezerwowane ISO/SAE
|
||||
P047F=Zarezerwowane ISO/SAE
|
||||
P050E=Zarezerwowane ISO/SAE
|
||||
P050F=Zarezerwowane ISO/SAE
|
||||
P069E=Zarezerwowane ISO/SAE
|
||||
P069F=Zarezerwowane ISO/SAE
|
||||
P075F=Zarezerwowane ISO/SAE
|
||||
P080E=Zarezerwowane ISO/SAE
|
||||
P080F=Zarezerwowane ISO/SAE
|
||||
P084F=Zarezerwowane ISO/SAE
|
||||
P0B0E=Zarezerwowane ISO/SAE
|
||||
P0B0F=Zarezerwowane ISO/SAE
|
||||
P204F=Zarezerwowane ISO/SAE
|
||||
P205F=Zarezerwowane ISO/SAE
|
||||
P206A=Zarezerwowane ISO/SAE
|
||||
P206B=Zarezerwowane ISO/SAE
|
||||
P206C=Zarezerwowane ISO/SAE
|
||||
P206D=Zarezerwowane ISO/SAE
|
||||
P207F=Zarezerwowane ISO/SAE
|
||||
P240D=Zarezerwowane ISO/SAE
|
||||
P240E=Zarezerwowane ISO/SAE
|
||||
P240F=Zarezerwowane ISO/SAE
|
||||
P245E=Zarezerwowane ISO/SAE
|
||||
P245F=Zarezerwowane ISO/SAE
|
||||
P255F=Zarezerwowane ISO/SAE
|
||||
P256F=Zarezerwowane ISO/SAE
|
||||
P0010=Nastawnik wlotu rozrządu – cylinder rzędu 1
|
||||
P0011=Nastawnik wlotu rozrządu – Nadmierne przestawienie w kierunku „wcześnie” lub wydajność systemu - cylinder rzędu 1
|
||||
P0012=Elektrozawór ustawienia wału rozrządczego wlotowego 1. Rozrząd za bardzo cofnięty
|
||||
P0013=Nastawnik wlotu rozrządu – cylinder rzędu 1
|
||||
P0014=Przestawnik rozrządu sterowania wylotu 1 rzędu cylindrów, nadmierne przestawienie w kierunku „wcześnie”
|
||||
P0015=Przestawnik rozrządu sterowania wylotu 1 rzędu cylindrów, Nadmierne przestawienie w kierunku „późno”
|
||||
P0016=Pozycja wału korbowego/rozrządu 1 rzędu cylindrów, Błąd odniesienia czujnika A Wiązka przewodów
|
||||
P0017=Pozycja wału korbowego/rozrządu 1 rzędu cylindrów, Błąd odniesienia czujnika B Wiązka przewodów
|
||||
P0018=Pozycja wału korbowego/rozrządu 2 rzędu cylindrów, Błąd odniesienia czujnika A Wiązka przewodów
|
||||
P0019=Pozycja wału korbowego/rozrządu 2 rzędu cylindrów, Błąd odniesienia czujnika B Wiązka przewodów
|
||||
P0020=Nastawnik wlotu rozrządu – cylinder rzędu 2, awaria obiegu prądu
|
||||
P0021=Nastawnik wlotu rozrządu – cylinder rzędu 2, Nadmierne przestawienie w kierunku „wcześnie”
|
||||
P0022=Nastawnik wlotu rozrządu – cylinder rzędu 2, Nadmierne przestawienie w kierunku „późno”
|
||||
P0023=Przestawnik rozrządu sterowania wylotu 2 rzędu cylindrów, awaria obiegu prądu
|
||||
P0024=Przestawnik rozrządu sterowania wylotu 2 rzędu cylindrów, Nadmierne przestawienie w kierunku „wcześnie”
|
||||
P0025=Przestawnik rozrządu sterowania wylotu 2 rzędu cylindrów , Nadmierne przestawienie w kierunku „późno”
|
||||
P0026=Obieg prądu. Zawór magnetyczny – przestawnik rozrządu wejścia 1 rzędu cylindrów, błąd funkcyjny lub zakresowy
|
||||
P0027=Obieg prądu. Zawór magnetyczny – regulator faz rozrządu wylotu 1 rzędu cylindrów, błąd funkcyjny lub zakresowy
|
||||
P0028=Obieg prądu. Zawór magnetyczny – przestawnik rozrządu wejścia 2 rzędu cylindrów, błąd funkcyjny lub zakresowy
|
||||
P0029=Obieg prądu. Zawór magnetyczny – regulator faz rozrządu wylotu 2 rzędu cylindrów błąd funkcyjny lub zakresowy
|
||||
P0030=Podgrzana sonda lambda 1, 1 rząd cylindrów, Regulacja ogrzewania – awaria obiegu prądu
|
||||
P0031=Podgrzana sonda lambda 1, 1 rząd cylindrów, Regulacja ogrzewania – Sygnał zbyt niski
|
||||
P0032=Podgrzana sonda lambda 1, 1 rząd cylindrów, Regulacja ogrzewania – Sygnał zbyt wysoki
|
||||
P0033=Zawór regulujący – ciśnienie doładowania, awaria obiegu prądu
|
||||
P0034=Zawór regulujący – ciśnienie doładowania. Sygnał zbyt niski
|
||||
P0035=Zawór regulujący – ciśnienie doładowania. Sygnał zbyt wysoki
|
||||
P0036=Podgrzana sonda lambda 2, 1 rząd cylindrów, Regulacja ogrzewania – awaria obiegu prądu
|
||||
P0037=Podgrzana sonda lambda 2, 1 rząd cylindrów, Regulacja ogrzewania – Sygnał zbyt niski
|
||||
P0038=Podgrzana sonda lambda 2, 1 rząd cylindrów, Regulacja ogrzewania – Sygnał zbyt wysoki
|
||||
P0039=Zawór bypassowy – turbosprężarka / Zawór obejściowy kompresora powietrza doładowującego
|
||||
P0040=Sonda lambda – Zamienione sygnały, 1 rząd cylindrów Czujnik 1, 2 rząd cylindrów Czujnik 1
|
||||
P0041=Sonda lambda – Zamienione sygnały, 1 rząd cylindrów Czujnik 2, 2 rząd cylindrów Czujnik 2
|
||||
P0042=Podgrzana sonda lambda 3, 1 rząd cylindrów, Regulacja ogrzewania – awaria obiegu prądu
|
||||
P0043=Podgrzana sonda lambda 3, 1 rząd cylindrów, Regulacja ogrzewania – Sygnał zbyt niski
|
||||
P0044=Podgrzana sonda lambda 3, 1 rząd cylindrów, Regulacja ogrzewania – Sygnał zbyt wysoki
|
||||
P0045=Zawór elektromagnetyczny turbosprężarki/kompresora – Otwarty obwód prądu
|
||||
P0046=Zawór elektromagnetyczny turbosprężarki/kompresora – błąd funkcyjny lub zakresowy Obieg prądu
|
||||
P0047=Zawór elektromagnetyczny turbosprężarki/kompresora – Sygnał zbyt niski
|
||||
P0048=Zawór elektromagnetyczny turbosprężarki/kompresora – Sygnał zbyt wysoki
|
||||
P0049=Koło turbiny turbosprężarki – Nadmierne obroty
|
||||
P004A=Turbosprężarka/Doładowanie Zwiększ sterowania elektromagnesu B obwód/otwarty
|
||||
P004B=Turbosprężarka/Doładowanie Zwiększ sterowania elektromagnesu B Zakres obwodu/Wydajność
|
||||
P004C=Turbosprężarka/Doładowanie Zwiększ sterowania elektromagnesu B Sygnał zbyt niski
|
||||
P004D=Turbosprężarka/Doładowanie Zwiększ sterowania elektromagnesu B Sygnał zbyt wysoki
|
||||
P004E=Turbosprężarka / Doładowanie Zwiększ sterowania elektromagnesu A Obwód przerwany/Erratic
|
||||
P004F=Turbosprężarka / Doładowanie Zwiększ sterowania elektromagnesu B Obwód przerwany/Erratic
|
||||
P0050=Podgrzana sonda lambda 1, 2 rząd cylindrów, Regulacja ogrzewania – awaria obiegu prądu
|
||||
P0051=Podgrzana sonda lambda 1, 2 rząd cylindrów, Regulacja ogrzewania – Sygnał zbyt niski
|
||||
P0052=Podgrzana sonda lambda 1, 2 rząd cylindrów, Regulacja ogrzewania – Sygnał zbyt wysoki
|
||||
P0053=Podgrzana sonda lambda, 1 rząd cylindrów, Czujnik 1
|
||||
P0054=Podgrzana sonda lambda, 1 rząd cylindrów, Czujnik 2
|
||||
P0055=Podgrzana sonda lambda, 1 rząd cylindrów, Czujnik 3
|
||||
P0056=Podgrzana sonda lambda 2, 2 rząd cylindrów, Regulacja ogrzewania – awaria obiegu prądu
|
||||
P0057=Podgrzana sonda lambda 2, 2 rząd cylindrów, Regulacja ogrzewania – Obieg prądu. Sygnał zbyt niski
|
||||
P0058=Podgrzana sonda lambda 2, 2 rząd cylindrów, Regulacja ogrzewania – Obieg prądu. Sygnał zbyt wysoki
|
||||
P0059=Podgrzana sonda lambda, 2 rząd cylindrów, Czujnik 1 – Opornik
|
||||
P0060=Podgrzana sonda lambda, 2 rząd cylindrów, Czujnik 2 – Opornik
|
||||
P0061=Podgrzana sonda lambda, 2 rząd cylindrów, Czujnik 3 – Opornik
|
||||
P0062=Podgrzana sonda lambda 3, 2 rząd cylindrów, Regulacja ogrzewania – awaria obiegu prądu
|
||||
P0063=Podgrzana sonda lambda 3, 2 rząd cylindrów, Regulacja ogrzewania – Sygnał zbyt niski
|
||||
P0064=Podgrzana sonda lambda 3, 2 rząd cylindrów, Regulacja ogrzewania – Sygnał zbyt wysoki
|
||||
P0065=Zawór wtryskowy wspomagany zasysanym powietrzem, błąd funkcyjny lub zakresowy
|
||||
P0066=Zawór wtryskowy wspomagany zasysanym powietrzem, awaria obiegu prądu – Sygnał zbyt niski
|
||||
P0067=Zawór wtryskowy wspomagany zasysanym powietrzem, Sygnał zbyt wysoki
|
||||
P0068=Błąd odniesienia – Czujnik ciśnienia rury ssącej / Przepływomierz powietrza / Położenie przepustnic
|
||||
P0069=Błąd odniesienia – Czujnik ciśnienia rury ssącej / Czujnik ciśnienia atmosferycznego
|
||||
P006A=Korelacja pomiędzy MAP a przepływomierzem masowym lub objętościowym powietrza
|
||||
P006B=Korelacja pomiędzy MAP a ciśnieniem spalin
|
||||
P006C=Korelacja pomiędzy MAP a ciśnieniem wlotowym doładowania
|
||||
P006D=Korelacja pomiędzy ciśnieniem atmosferycznym a Turbosprężarką/Ciśnienie wlotowe doładowania
|
||||
P0070=Czujnik temperatury zewnętrznej, awaria obiegu prądu
|
||||
P0071=Czujnik temperatury zewnętrznej, błąd funkcyjny lub zakresowy
|
||||
P0072=Czujnik temperatury zewnętrznej, Sygnał wejściowy zbyt niski
|
||||
P0073=Czujnik temperatury zewnętrznej, Sygnał wejściowy zbyt wysoki
|
||||
P0074=Czujnik temperatury zewnętrznej, Czasowe przerwanie obiegu prądu
|
||||
P0075=Zawór magnetyczny – przestawnik rozrządu wejścia 1 rzędu cylindrów, awaria obiegu prądu
|
||||
P0076=Zawór magnetyczny – przestawnik rozrządu wejścia 1 rzędu cylindrów, Sygnał zbyt niski
|
||||
P0077=Zawór magnetyczny – przestawnik rozrządu wejścia 1 rzędu cylindrów, Sygnał zbyt wysoki
|
||||
P0078=Zawór magnetyczny – regulator faz rozrządu wylotu 1 rzędu cylindrów, awaria obiegu prądu
|
||||
P0079=Zawór magnetyczny – regulator faz rozrządu wylotu 1 rzędu cylindrów, Sygnał zbyt niski
|
||||
P0080=Zawór magnetyczny – regulator faz rozrządu wylotu 1 rzędu cylindrów, Sygnał zbyt wysoki
|
||||
P0081=Zawór magnetyczny – przestawnik rozrządu wejścia 2 rzędu cylindrów, awaria obiegu prądu
|
||||
P0082=Zawór magnetyczny – przestawnik rozrządu wejścia 2 rzędu cylindrów, Sygnał zbyt niski
|
||||
P0083=Wysoki poziom obwodu elektromagnetycznego zaworu dolotowego 2
|
||||
P0084=Zespół obwodu elektromagnetycznego sterującego zaworem wydechowym 2
|
||||
P0085=Obwód cewki sterującej zaworu wydechowego w stanie niskim Bank 2
|
||||
P0086=Obwód cewki sterującej zaworu wydechowego wysoki Bank 2
|
||||
P0087=Listwa rozdzielacza paliwa, Ciśnienie systemowe zbyt niskie
|
||||
P0088=Listwa rozdzielacza paliwa, Ciśnienie systemowe zbyt wysokie
|
||||
P0089=Kontroler ciśnienia paliwa 1, Wydajność
|
||||
P0090=Kontroler ciśnienia paliwa 1, Otwarty obwód prądu
|
||||
P0091=Kontroler ciśnienia paliwa 1, Sygnał zbyt niski
|
||||
P0092=Kontroler ciśnienia paliwa 1, Sygnał zbyt wysoki
|
||||
P0093=Układ paliwowy nieszczelny - Wykryta duża nieszczelność
|
||||
P0094=Układ paliwowy nieszczelny - Wykryta mała nieszczelność
|
||||
P0095=Czujnik temperatury pobieranej 2, awaria obiegu prądu
|
||||
P0096=Czujnik temperatury pobieranej 2, błąd funkcyjny lub zakresowy
|
||||
P0097=Czujnik temperatury pobieranej 2, Sygnał wejściowy zbyt niski
|
||||
P0098=Czujnik temperatury pobieranej 2, Sygnał wejściowy zbyt wysoki
|
||||
P0099=Czujnik temperatury pobieranej 2, Czasowe przerwanie obiegu prądu
|
||||
P009A=Korelacja pomiędzy temperaturą powietrza dolotowego a temperaturą powietrza otoczenia
|
||||
P0100=Przepływomierz powietrza/miernik ilości powietrza, awaria obiegu prądu
|
||||
P0101=Przepływomierz powietrza/miernik ilości powietrza, błąd funkcyjny lub zakresowy
|
||||
P0102=Przepływomierz powietrza/miernik ilości powietrza, Sygnał wejściowy zbyt niski
|
||||
P0103=Przepływomierz powietrza/miernik ilości powietrza, Sygnał wejściowy zbyt wysoki
|
||||
P0104=Przepływomierz powietrza/miernik ilości powietrza, Czasowe przerwanie obiegu prądu
|
||||
P0105=Czujnik ciśnienia pompy pobierającej powietrze/Czujnik ciśnienia atmosferycznego, awaria obiegu prądu
|
||||
P0106=Czujnik ciśnienia pompy pobierającej powietrze/Czujnik ciśnienia atmosferycznego, błąd funkcyjny lub zakresowy
|
||||
P0107=Czujnik ciśnienia pompy pobierającej powietrze/Czujnik ciśnienia atmosferycznego, Sygnał wejściowy zbyt niski
|
||||
P0108=Czujnik ciśnienia pompy pobierającej powietrze/Czujnik ciśnienia atmosferycznego, Sygnał wejściowy zbyt wysoki
|
||||
P0109=Czujnik ciśnienia pompy pobierającej powietrze/Czujnik ciśnienia atmosferycznego, Czasowe przerwanie obiegu prądu
|
||||
P010A=Masa lub objętość przepływu powietrza, B, Obieg
|
||||
P010B=Masa lub objętość przepływu powietrza, B, Zakres obwodu/Wydajność
|
||||
P010C=Masa lub objętość przepływu powietrza, B, Sygnał zbyt niski
|
||||
P010D=Masa lub objętość przepływu powietrza, B, Sygnał zbyt wysoki
|
||||
P010E=Masa lub objętość przepływu powietrza, B, Obwód przerwany/Erratic
|
||||
P010F=Korelacja pomiędzy masą lub objętością przepływu powietrza sensorów A/B
|
||||
P0110=Czujnik temperatury pobieranej 1, awaria obiegu prądu
|
||||
P0111=Czujnik temperatury pobieranej 1, błąd funkcyjny lub zakresowy
|
||||
P0112=Czujnik temperatury pobieranej 1, Sygnał wejściowy zbyt niski
|
||||
P0113=Czujnik temperatury pobieranej 1, Sygnał wejściowy zbyt wysoki
|
||||
P0114=Czujnik temperatury pobieranej 1, Czasowe przerwanie obiegu prądu
|
||||
P0115=Czujnik temperatury cieczy chłodzącej 1, awaria obiegu prądu
|
||||
P0116=Czujnik temperatury cieczy chłodzącej 1, błąd funkcyjny lub zakresowy
|
||||
P0117=Czujnik temperatury cieczy chłodzącej 1, Sygnał wejściowy zbyt niski
|
||||
P0118=Czujnik temperatury cieczy chłodzącej 1, Sygnał wejściowy zbyt wysoki
|
||||
P0119=Czujnik temperatury cieczy chłodzącej 1, Czasowe przerwanie obiegu prądu
|
||||
P011A=Temperatura płynu chłodzącego silnika - Sensor 1/2 korelacja
|
||||
P0120=Przepustnica/Pozycja pedału gazu/ Nieprawidłowe napięcie obwodu A
|
||||
P0121=Potenciometr przepustnicy klapowej A/Czujnik – pedał jezdny A, błąd funkcyjny lub zakresowy
|
||||
P0122=Przepustnica/Pozycja pedału gazu/ Zbyt niskie napięcie obwodu A
|
||||
P0123=Przepustnica/Pozycja pedału gazu/ Zbyt wysokie napięcie obwodu A
|
||||
P0124=Potenciometr przepustnicy klapowej A/Czujnik – pedał jezdny A, Czasowe przerwanie obiegu prądu
|
||||
P0125=Temperatura środka chłodzącego Zbyt niski, Niezamknięty obieg regulacyjny pomiaru paliwa
|
||||
P0126=Niewystarczająca temperatury płynu chłodzącego dla stabilnej pracy
|
||||
P0127=Temperatura zasysania powietrza zbyt wysoka
|
||||
P0128=Termostat cieczy chłodzącej (Temperatura czynnika chłodniczego poniżej temperatury regulacji termostatu)
|
||||
P0129=Ciśnienie atmosferyczne zbyt niskie
|
||||
P012A=Obwód czujnika ciśnienia wlotowego turbosprężarki/sprężarki
|
||||
P012B=Zakres/wydajność czujnika ciśnienia wlotowego turbosprężarki/sprężarki
|
||||
P012C=Obwód czujnika ciśnienia dolotowego turbosprężarki/sprężarki
|
||||
P0148=Błąd dostarczania paliwa
|
||||
P0149=Błąd pomiaru czasu paliwa
|
||||
P012D=Obwód czujnika ciśnienia wlotowego turbosprężarki/sprężarki doładowującej wysoki
|
||||
P0477=Niski zawór sterujący ciśnieniem spalin
|
||||
U3FFF=Nie ustawiono kodów problemów
|
||||
P070F=Zbyt niski poziom płynu przekładniowego
|
||||
P021A=Czas wtrysku cylindra 7
|
||||
P0219=Stan nadmiernej prędkości obrotowej silnika
|
||||
P0180=Czujnik temperatury paliwa Obwód A
|
||||
P0138=O2 Obwód czujnika Bank wysokiego napięcia 1 Czujnik 2
|
||||
P0136=O2 Bank obwodu czujnika 1 Czujnik 2
|
||||
P0134=Obwód czujnika O2 Brak wykrytej aktywności Bank 1 Czujnik 1
|
||||
P0132=O2 Obwód czujnika Bank wysokiego napięcia 1 Czujnik 1
|
||||
P0130=O2 Bank obwodu czujnika 1 Czujnik 1
|
||||
P012E=Turbosprężarka/ Doładowanie Obwód czujnika ciśnienia wlotowego przerywany / nieregularny
|
||||
P018E=Czujnik ciśnienia paliwa B Obwód przerywany / nieregularny
|
||||
P018D=Czujnik ciśnienia paliwa B Obwód wysoki
|
||||
P018C=Czujnik Ciśnienia Paliwa B, Obwód niski
|
||||
P0200=Obwód wtryskiwacza / otwarty
|
||||
P0962=Elektrozawór regulacji ciśnienia A Obwód sterowania niski
|
||||
P0959=Automatyczna zmiana biegów Tryb ręczny Obwód przerwany
|
||||
P0784=Awaria zmiany biegów 4-5
|
||||
P0782=Awaria zmiany biegów 2-3
|
||||
P0780=Usterka systemu zmiany biegów
|
||||
P0781=Awaria zmiany biegów 1-2
|
||||
P0783=Awaria zmiany biegów 3-4
|
||||
P0785=Awaria elektromagnesu zmiany biegów / rozrządu
|
||||
P0786=Elektromagnes (cewka przesuwu) ustawiania rozrządu – sygnał poza zakresem/wydajność
|
||||
U0090=Zarezerwowane przez dokument
|
||||
U0097=Zarezerwowane przez dokument
|
||||
U0405=Otrzymano nieprawidłowe dane z modułu tempomatu
|
||||
U0401=Otrzymano nieprawidłowe dane z ECM/PCM
|
||||
U0400=Otrzymano nieprawidłowe dane
|
||||
U0417=Otrzymano nieprawidłowe dane z modułu sterującego hamulcem postojowym
|
||||
U0410=Otrzymano nieprawidłowe dane z modułu sterowania pompą paliwa
|
||||
U0430=Otrzymano nieprawidłowe dane z modułu monitorowania ciśnienia w oponach
|
||||
U0407=Otrzymano nieprawidłowe dane z modułu sterowania świecami żarowymi
|
||||
U0428=Otrzymano nieprawidłowe dane z modułu czujnika kąta skrętu
|
||||
U0412=Otrzymano nieprawidłowe dane z modułu kontroli energii akumulatora A
|
||||
U0402=Otrzymano nieprawidłowe dane z modułu kontroli skrzyni biegów
|
||||
U0403=Otrzymano nieprawidłowe dane z modułu sterowania skrzynią rozdzielczą
|
||||
U0404=Otrzymano nieprawidłowe dane z modułu sterującego zmianą biegów
|
||||
U0408=Otrzymano nieprawidłowe dane z modułu sterowania siłownikiem przepustnicy
|
||||
U0409=Otrzymano nieprawidłowe dane z modułu sterującego paliwem alternatywnym
|
||||
U0413=Otrzymano nieprawidłowe dane z modułu kontroli energii akumulatora B
|
||||
U0415=Otrzymano nieprawidłowe dane z modułu sterującego układem ABS
|
||||
U0423=Otrzymano nieprawidłowe dane z modułu sterującego deski rozdzielczej
|
||||
U0431=Otrzymano nieprawidłowe dane z modułu kontroli nadwozia A
|
||||
U0421=Otrzymano nieprawidłowe dane z modułu kontroli poziomu jazdy
|
||||
U0137=Zarezerwowane przez dokument
|
||||
U0418=Otrzymano nieprawidłowe dane z modułu sterowania układem hamulcowym
|
||||
U0419=Otrzymano nieprawidłowe dane z modułu kontroli siły kierowania
|
||||
U0420=Otrzymano nieprawidłowe dane z modułu sterowania układem wspomagania kierownicy
|
||||
U0135=Zarezerwowane przez dokument
|
||||
U0126=Utracono komunikację z modułem czujnika kąta skrętu
|
||||
U0422=Otrzymano nieprawidłowe dane z modułu kontroli nadwozia
|
||||
U0425=Otrzymano nieprawidłowe dane z modułu sterowania ogrzewaniem dodatkowym
|
||||
U0426=Otrzymano nieprawidłowe dane z modułu sterującego immobilizera pojazdu
|
||||
U0427=Otrzymano nieprawidłowe dane z modułu kontroli bezpieczeństwa pojazdu
|
||||
U0083=Zarezerwowane przez dokument
|
||||
U0094=Zarezerwowane przez dokument
|
||||
U0130=Utracono komunikację z modułem kontroli siły kierowania
|
||||
U0140=Utracono komunikację z modułem kontroli nadwozia
|
||||
U0145=Utracono komunikację z modułem kontroli nadwozia E
|
||||
U0424=Otrzymano nieprawidłowe dane z modułu sterowania ogrzewaniem, wentylacją i klimatyzacją
|
||||
U0074=Zarezerwowane przez dokument
|
||||
U0085=Zarezerwowane przez dokument
|
||||
U0089=Zarezerwowane przez dokument
|
||||
U0093=Zarezerwowane przez dokument
|
||||
U0076=Zarezerwowane przez dokument
|
||||
U0081=Zarezerwowane przez dokument
|
||||
U0087=Zarezerwowane przez dokument
|
||||
U0091=Zarezerwowane przez dokument
|
||||
U0092=Zarezerwowane przez dokument
|
||||
U0098=Zarezerwowane przez dokument
|
||||
U0077=Zarezerwowane przez dokument
|
||||
U0078=Zarezerwowane przez dokument
|
||||
U0080=Zarezerwowane przez dokument
|
||||
U0082=Zarezerwowane przez dokument
|
||||
U0079=Zarezerwowane przez dokument
|
||||
U0084=Zarezerwowane przez dokument
|
||||
U0086=Zarezerwowane przez dokument
|
||||
U0088=Zarezerwowane przez dokument
|
||||
U0095=Zarezerwowane przez dokument
|
||||
U0096=Zarezerwowane przez dokument
|
||||
U0099=Zarezerwowane przez dokument
|
||||
U0100=Utracono komunikację z ECM/PCM A
|
||||
U0102=Utracono komunikację z modułem sterowania skrzynią rozdzielczą
|
||||
U0104=Utracono komunikację z modułem tempomatu
|
||||
U0105=Utracono komunikację z modułem sterowania wtryskiwaczami paliwa
|
||||
U0106=Utracono komunikację z modułem sterującym świecami żarowymi
|
||||
U0107=Utracono komunikację z modułem sterowania siłownikiem przepustnicy
|
||||
U0114=Utracono komunikację z modułem sterowania sprzęgłem napędu na cztery koła
|
||||
U0115=Utracono komunikację z ECM/PCM A
|
||||
U0120=Zarezerwowane przez dokument
|
||||
U0109=Utracono komunikację z modułem kontroli pompy paliwa
|
||||
U0111=Utracono komunikację z modułem kontroli energii akumulatora A
|
||||
U0113=Utracono komunikację z krytyczną informacją o kontroli emisji
|
||||
U0112=Utracono komunikację z modułem kontroli energii akumulatora B
|
||||
U0118=Zarezerwowane przez dokument
|
||||
U0117=Zarezerwowane przez dokument
|
||||
U0119=Zarezerwowane przez dokument
|
||||
U0121=Utracono komunikację z modułem sterującym systemu ABS
|
||||
U0122=Utracono komunikację z modułem kontroli dynamiki pojazdu
|
||||
U0124=Utracono komunikację z modułem czujnika przyspieszenia bocznego
|
||||
U0125=Utracono komunikację z modułem wieloosiowego czujnika przyspieszenia
|
||||
U0136=Zarezerwowane przez dokument
|
||||
U0138=Zarezerwowane przez dokument
|
||||
U0133=Zarezerwowane przez dokument
|
||||
U0134=Zarezerwowane przez dokument
|
||||
U0128=Utracono komunikację z modułem kontroli hamulca postojowego
|
||||
U0131=Utracono komunikację z modułem sterowania układem wspomagania kierownicy
|
||||
U0305=Niezgodność oprogramowania z modułem tempomatu
|
||||
U0129=Utracono komunikację z modułem sterowania układu hamulcowego
|
||||
U0306=Niezgodność oprogramowania z modułem sterowania wtryskiwaczami paliwa
|
||||
U0132=Utracono komunikację z modułem kontroli poziomu jazdy
|
||||
U0141=Utracono komunikację z modułem kontroli nadwozia A
|
||||
U0149=Utracono komunikację z bramką D
|
||||
U0150=Utracono komunikację z bramką E
|
||||
U0142=Utracono komunikację z modułem kontroli nadwozia B
|
||||
U0143=Utracono komunikację z modułem kontroli nadwozia C
|
||||
U0144=Utracono komunikację z modułem kontroli nadwozia D
|
||||
U0147=Utracono komunikację z bramką B
|
||||
U0148=Utracono komunikację z bramką C
|
||||
U0146=Utracono komunikację z bramką A
|
||||
U0155=Utracono komunikację z modułem sterującym tablicy rozdzielczej
|
||||
U0156=Utracono komunikację z centrum informacyjnym A
|
||||
U0157=Utracono komunikację z centrum informacyjnym B
|
||||
U0158=Utracono komunikację z projektorem informacji na szybie przedniej
|
||||
U0160=Utracono komunikację z modułem sterowania alarmem dźwiękowym
|
||||
U0162=Utracono komunikację z modułem wyświetlacza nawigacji
|
||||
U0161=Utracono komunikację z modułem kompasu
|
||||
U0152=Utracono komunikację z modułem kontroli bocznych urządzeń przytrzymujących
|
||||
U0153=Utracono komunikację z modułem kontroli bocznych urządzeń przytrzymujących
|
||||
U0165=Utracono komunikację z modułem sterowania ogrzewaniem, wentylacją i klimatyzacją
|
||||
U0154=Utrata łączności z modułem wykrywania zajętości fotela pasażera
|
||||
U0175=Utracono komunikację z czujnikiem systemu przytrzymującego F
|
||||
U0166=Utracono komunikację z modułem sterowania ogrzewaniem dodatkowym
|
||||
U0167=Utracono komunikację z modułem sterującym immobilizera pojazdu
|
||||
U0164=Utracono komunikację z modułem sterowania ogrzewaniem, wentylacją i klimatyzacją
|
||||
U0168=Utracono komunikację z modułem kontroli bezpieczeństwa pojazdu
|
||||
U0169=Utracono komunikację z modułem sterującym szyberdachu
|
||||
U0170=Utracono komunikację z czujnikiem systemu przytrzymującego A
|
||||
U0171=Utracono komunikację z czujnikiem systemu przytrzymującego B
|
||||
U0172=Utracono komunikację z czujnikiem systemu przytrzymującego C
|
||||
U0173=Utracono komunikację z czujnikiem systemu przytrzymującego D
|
||||
U0174=Utracono komunikację z czujnikiem systemu przytrzymującego E
|
||||
U0176=Utracono komunikację z czujnikiem systemu przytrzymującego G
|
||||
U0177=Utracono komunikację z czujnikiem systemu przytrzymującego H
|
||||
U0178=Utracono komunikację z czujnikiem systemu przytrzymującego I
|
||||
U0210=Utracono komunikację z modułem sterującym siedzenia C
|
||||
U0179=Utracono komunikację z czujnikiem systemu przytrzymującego J
|
||||
U0181=Utracono komunikację z modułem kontroli poziomowania reflektorów
|
||||
U0186=Utracono komunikację ze wzmacniaczem audio
|
||||
U0189=Utracono komunikację z modułem odtwarzacza/zmiennika płyt C
|
||||
U0192=Utracono komunikację z komputerem osobistym
|
||||
U0180=Utracono komunikację z modułem automatycznego sterowania oświetleniem
|
||||
U0182=Utracono komunikację z modułem sterowania oświetleniem
|
||||
U0183=Utracono komunikację z modułem sterowania oświetleniem
|
||||
U0185=Utracono komunikację z modułem sterowania anteną
|
||||
U0184=Utracono komunikację z radiem
|
||||
U0187=Utracono komunikację z modułem odtwarzacza/zmiennika płyt A
|
||||
U0190=Utracono komunikację z modułem odtwarzacza/zmiennika płyt D
|
||||
U0191=Utracono komunikację z telewizją
|
||||
U0188=Utracono komunikację z modułem odtwarzacza/zmiennika płyt B
|
||||
U0193=Utracono komunikację z cyfrowym modułem sterowania dźwiękiem A
|
||||
U0194=Utracono komunikację z cyfrowym modułem sterowania dźwiękiem B
|
||||
U0206=Utracono komunikację z modułem sterowania składanym dachem
|
||||
U0196=Utracono komunikację z modułem sterowania rozrywką dla tylnych siedzeń
|
||||
U0197=Utracono komunikację z modułem sterowania telefonem
|
||||
U0198=Utracono komunikację z modułem sterowania telematycznego
|
||||
U0207=Utracono komunikację z modułem sterowania dachem ruchomym
|
||||
U0208=Utracono komunikację z modułem sterującym siedzenia A
|
||||
U0200=Utracono komunikację z modułem sterowania drzwiami B
|
||||
U0205=Utracono komunikację z modułem sterowania drzwiami G
|
||||
U0201=Utracono komunikację z modułem sterowania drzwiami C
|
||||
U0203=Utracono komunikację z modułem sterowania drzwiami E
|
||||
U0223=Utracono komunikację z silnikiem szyby drzwiowej B
|
||||
U0202=Utracono komunikację z modułem sterowania drzwiami D
|
||||
U0204=Utracono komunikację z modułem sterowania drzwiami F
|
||||
U0304=Niezgodność oprogramowania z modułem sterującym zmianą biegów
|
||||
U0226=Utracono komunikację z silnikiem szyby drzwiowej E
|
||||
U0227=Utracono komunikację z silnikiem szyby drzwiowej F
|
||||
U0230=Utracono komunikację z modułem tylnej bramy
|
||||
U0303=Niezgodność oprogramowania z modułem sterowania skrzynią rozdzielczą
|
||||
U0209=Utracono komunikację z modułem sterującym siedzenia B
|
||||
U0211=Utracono komunikację z modułem sterującym siedzenia D
|
||||
U0221=Utracono komunikację z przełącznikiem drzwi G
|
||||
U0224=Utracono komunikację z silnikiem szyby drzwiowej C
|
||||
U0225=Utracono komunikację z silnikiem szyby drzwiowej D
|
||||
U0217=Utracono komunikację z przełącznikiem drzwi C
|
||||
U0219=Utracono komunikację z przełącznikiem drzwi E
|
||||
U0220=Utracono komunikację z przełącznikiem drzwi F
|
||||
U0212=Utracono komunikację z modułem sterowania kolumny kierowniczej
|
||||
U0213=Utracono komunikację z modułem kontroli lusterek
|
||||
U0215=Utracono komunikację z przełącznikiem drzwi A
|
||||
U0216=Utracono komunikację z przełącznikiem drzwi B
|
||||
U0218=Utracono komunikację z przełącznikiem drzwi D
|
||||
U0222=Utracono komunikację z silnikiem szyby drzwiowej A
|
||||
U0228=Utracono komunikację z silnikiem szyby drzwiowej G
|
||||
U0229=Utracono komunikację z modułem podgrzewania kierownicy
|
||||
U0231=Utracono komunikację z modułem wykrywania deszczu
|
||||
U0232=Utracono komunikację z modułem sterującym wykrywania przeszkód bocznych
|
||||
U0233=Utracono komunikację z modułem sterującym wykrywania przeszkód bocznych
|
||||
U0235=Utracono komunikację z przednim czujnikiem odległości tempomatu
|
||||
U0300=Niezgodność oprogramowania wewnętrznego modułu sterującego
|
||||
U0302=Niezgodność oprogramowania z modułem sterowania skrzynią biegów
|
||||
U0301=Niezgodność oprogramowania z ECM/PCM
|
||||
U0310=Niezgodność oprogramowania z modułem sterownia pompą paliwa
|
||||
U0307=Niezgodność oprogramowania z modułem sterującym świecami żarowymi
|
||||
U0308=Niezgodność oprogramowania z modułem sterowania siłownikiem przepustnicy
|
||||
U0309=Niezgodność oprogramowania z modułem sterującym paliwem alternatywnym
|
||||
U0317=Niezgodność oprogramowania z modułem sterującym hamulca postojowego
|
||||
U0311=Niezgodność oprogramowania z modułem sterowania silnikiem napędowym
|
||||
U0312=Niezgodność oprogramowania z modułem kontroli energii akumulatora A
|
||||
U0313=Niezgodność oprogramowania z modułem kontroli energii akumulatora B
|
||||
U0314=Niezgodność oprogramowania z modułem sterowania sprzęgłem napędu na cztery koła
|
||||
U0315=Niezgodność oprogramowania z modułem sterującym układu ABS
|
||||
U0316=Niezgodność oprogramowania z modułem sterowania dynamiką pojazdu
|
||||
U0318=Niezgodność oprogramowania z modułem sterowania układu hamulcowego
|
||||
U0321=Niezgodność oprogramowania z modułem kontroli poziomu jazdy
|
||||
U0319=Niezgodność oprogramowania z modułem kontroli siły kierowania
|
||||
U0320=Niezgodność oprogramowania z modułem sterowania wspomaganiem kierownicy
|
||||
U0322=Niezgodność oprogramowania z modułem kontroli nadwozia
|
||||
U0323=Niezgodność oprogramowania z modułem sterującym deski rozdzielczej
|
||||
U0324=Niezgodność oprogramowania z modułem sterowania ogrzewaniem, wentylacją i klimatyzacją
|
||||
U0326=Niezgodność oprogramowania z modułem sterowania immobilizera pojazdu
|
||||
U0327=Niezgodność oprogramowania z modułem kontroli bezpieczeństwa pojazdu
|
||||
U0328=Niezgodność oprogramowania z modułem czujnika kąta skrętu
|
||||
U0329=Niezgodność oprogramowania z modułem sterowania kolumną kierownicy
|
||||
U0330=Niezgodność oprogramowania z modułem monitorowania ciśnienia w oponach
|
||||
U0127=Utracono komunikację z modułem monitorowania ciśnienia w oponach
|
||||
U0234=Utracono komunikację z modułem Convenience Recall
|
||||
U0331=Niezgodność oprogramowania z modułem kontroli nadwozia A
|
||||
U0429=Otrzymano nieprawidłowe dane z modułu sterowania kolumny kierowniczej
|
||||
U0416=Otrzymano nieprawidłowe dane z modułu sterowania dynamiką pojazdu
|
||||
U0414=Otrzymano nieprawidłowe dane z modułu sterowania sprzęgłem napędu na cztery koła
|
||||
U0411=Otrzymano nieprawidłowe dane z modułu sterowania silnikiem napędowym
|
||||
U0406=Otrzymano nieprawidłowe dane z modułu sterowania wtryskiwaczami paliwa
|
||||
U0325=Niezgodność oprogramowania z modułem sterowania ogrzewaniem dodatkowym
|
||||
U0214=Utracono komunikację ze zdalnym uruchamianiem funkcji
|
||||
U0199=Utracono komunikację z modułem sterowania drzwiami A
|
||||
U0195=Utracono komunikację z modułem odbiornika rozrywki na abonament
|
||||
U0163=Utracono komunikację z modułem sterowania nawigacją
|
||||
U0159=Utracono komunikację z modułem kontroli wspomagania parkowania
|
||||
U0151=Utracono komunikację z modułem kontroli urządzeń przytrzymujących
|
||||
U0139=Zarezerwowane przez dokument
|
||||
U0116=Zarezerwowane przez dokument
|
||||
U0110=Utracono komunikację z modułem sterowania silnikiem napędowym
|
||||
U0108=Utracono komunikację z modułem sterowania paliwen alternatywnym
|
||||
U0103=Utracono komunikację z modułem zmiany biegów
|
||||
U0101=Utracono komunikację z TCM
|
||||
U0075=Zarezerwowane przez dokument
|
||||
P0195=Czujnik temperatury oleju silnikowego
|
||||
P0169=Nieprawidłowy skład paliwa
|
||||
P0287=Cylinder 9 Wkład/bilans
|
||||
P0278=Cylinder 6 Wkład/bilans
|
||||
P0281=Cylinder 7 Wkład/bilans
|
||||
P0440=Układ emisji par paliwa
|
||||
P0284=Cylinder 8 Wkład/bilans
|
||||
P0297=Stan nadmiernej prędkości pojazdu
|
||||
P0494=Niska prędkość wentylatora
|
||||
P0495=Wysoka prędkość wentylatora
|
||||
P0770=Cewka zmiany biegów E
|
||||
P0613=Procesor TCM
|
||||
P0563=Wysokie napięcie systemowe
|
||||
P0560=Napięcie systemu
|
||||
P0513=Nieprawidłowy klucz do immobilizera
|
||||
P0600=Szeregowe łącze komunikacyjne
|
||||
P0730=Nieprawidłowe przełożenie skrzyni biegów
|
||||
P0750=Cewka zmiany biegów A
|
||||
P0562=Niskie napięcie systemu
|
||||
P075A=Cewka zmiany biegów G
|
||||
P0561=Niestabilne napięcie systemowe
|
||||
P0607=Wydajność modułu sterującego
|
||||
P065A=Wydajność systemu generatora
|
||||
P0760=Cewka zmiany biegów C
|
||||
P0755=Cewka zmiany biegów B
|
||||
P0765=Cewka zmiany biegów D
|
||||
P076A=Cewka zmiany biegów H
|
||||
P0493=Nadmierna prędkość wentylatora
|
||||
P0606=Procesor ECM/PCM
|
||||
P0829=Zmiana 5-6
|
||||
P0215=Cewka wyłączająca silnik
|
||||
@@ -0,0 +1,24 @@
|
||||
|
||||
|
||||
P0001=Обрыв цепи управления регулятора объема топлива
|
||||
P0002=Несоответствие диапазона рабочих характеристик цепи управления регулятора объема топлива
|
||||
P0003=Низкий уровень сигнала в цепи управления регулятора объема топлива
|
||||
P0004=Высокий уровень сигнала в цепи управления регулятора объема топлива
|
||||
P0005=Топливный Запорный Клапан A Схема Управления/Открыть
|
||||
P0006=Низкий уровень сигнала в цепи управления клапана отсечки топлива «A»
|
||||
P0007=Высокий уровень сигнала в цепи управления клапана отсечки топлива «A»
|
||||
P0008=Производительность системы позиционирования двигателя 1
|
||||
P000C=A Положение Распределительного Вала С Медленной Реакцией 2
|
||||
P000D=B Положение Распределительного Вала С Медленной Реакцией, Ряд 2
|
||||
P0011=Положение распределительного вала - Превышение времени или Производительность системы 1
|
||||
P0012=Положение Распределительного Вала - Опрокинутый Газораспределительный Механизм 1
|
||||
P000A=A Положение Распределительного Вала С Медленной Реакцией, Ряд 1
|
||||
P0009=Производительность системы позиционирования двигателя Банк 2
|
||||
P000B=B Положение Распределительного Вала С Медленной Реакцией, Ряд 1
|
||||
P0010=Схема Привода Положения Распределительного Вала / Открытый Блок 1
|
||||
P0013=B Положение Распределительного Вала - Схема Привода / Разомкнутый Блок 1
|
||||
P000E=ISO/SAE зарезервировано
|
||||
P000F=ISO/SAE зарезервировано
|
||||
P0014=B Положение распределительного вала - Превышение времени или Производительность системы 1
|
||||
P0015=B Положение распределительного вала - превышение времени срабатывания банка 1
|
||||
P0016=Корреляция положения коленчатого вала - положения распределительного вала Датчик Банка 1 A
|
||||
@@ -0,0 +1,993 @@
|
||||
P0001=Krmilno vezje količine goriva odprt
|
||||
P0002=Krmilno vezje količine goriva razpon/zmogljivost
|
||||
P0003=Krmilno vezje količine goriva nizko
|
||||
P0004=Krmilno vezje količine goriva visoko
|
||||
P0005=Zaporni ventil za gorivo. Krmilno vezje odprto
|
||||
P0006=Zaporni ventil za gorivo. A krmilno vezje nizko
|
||||
P0007=Zaporni ventil za gorivo. Krmilno vezje visoko
|
||||
P0008=Sistemska zmogljivost položaja motorja (Blok 1)
|
||||
P0009=Sistemska zmogljivost položaja motorja (Blok 2)
|
||||
P0010=Aktuator odmične gredi A -Blok 1 okvara vezja
|
||||
P0011=Aktuator odmične gredi A -Blok 1 čas prehiteva
|
||||
P0012=Aktuator odmične gredi A -Blok 1 čas zamuja
|
||||
P0013=Aktuator odmične gredi B -Blok 1 okvara vezja
|
||||
P0014=Aktuator odmične gredi B -Blok 1 čas prehiteva
|
||||
P0015=Aktuator odmične gredi B -Blok 1 čas zamuja
|
||||
P0016=Cam/kolenčasta gred pozicija Korelacijsko tipalo A - Blok 1
|
||||
P0017=Cam/kolenčasta gred pozicija Korelacijsko tipalo B - Blok 1
|
||||
P0018=Cam/kolenčasta gred pozicija Korelacijsko tipalo A - Blok 2
|
||||
P0019=Cam/kolenčasta gred pozicija Korelacijsko tipalo B - Blok 2
|
||||
P0020=Aktuator odmične gredi A -Blok 2 okvara vezja
|
||||
P0021=Aktuator odmične gredi A -Blok 2 čas prehiteva
|
||||
P0022=Aktuator odmične gredi A -Blok 2 čas zamuja
|
||||
P0023=Aktuator odmične gredi B -Blok 2 okvara vezja
|
||||
P0024=Aktuator položaja odmične gredi B Blok 2 čas prehiteva
|
||||
P0025=Aktuator odmične gredi B -Blok 2 čas zamuja
|
||||
P0026=Dovod ventilski blok 1 nadzorni solenoid vezje razpon/učinkovitost
|
||||
P0027=Izpušni ventilski blok 1 nadzorni solenoid vezje razpon/učinkovitost
|
||||
P0028=Dovod ventilski blok 2 nadzorni solenoid vezje razpon/učinkovitost
|
||||
P0029=Izpušni ventilski blok 2 nadzorni solenoid vezje razpon/učinkovitost
|
||||
P0030=HO2S Blok 1 Tipalo 1 Vezje grelnika
|
||||
P0031=HO2S Blok 1 Tipalo 1 Vezje grelnika nizko
|
||||
P0032=HO2S Blok 1 Tipalo 1 Vezje grelnika visoko
|
||||
P0033=Krmilno vezje izpušne lopute Turbo/Sup
|
||||
P0034=Krmilno vezje vrat za odpadke Turbo/Sup nizko
|
||||
P0035=Krmilno vezje vrat za odpadke Turbo/Sup visoko
|
||||
P0036=HO2S Blok 1 Tipalo 2 Vezje grelnika
|
||||
P0037=HO2S Blok 1 Tipalo 2 Vezje grelnika nizko
|
||||
P0038=HO2S Blok 1 Tipalo 2 Vezje grelnika visoko
|
||||
P0039=Turbo/Super polnilnik bypass nadzor učinkovitost vezje
|
||||
P0040=02 Blok 1 Tipalo 1 Signali odeti v w/ 02 blok 2 Tipalo 1
|
||||
P0041=02 Blok 1 Tipalo 2 Signali odeti v w/ 02 blok 2 Tipalo 2
|
||||
P0042=HO2S Blok 1 Tipalo 3 Vezje grelnika
|
||||
P0043=HO2S Blok 1 Tipalo 3 Vezje grelnika nizko
|
||||
P0044=HO2S Blok 1 Tipalo 3 Vezje grelnika visoko
|
||||
P0045=Turbo/Super povečanje moči polnilnika kontrolnik Solenoid A vezje odprt
|
||||
P0046=Turbo/Super povečanje moči polnilnika kontrolnik Solenoid A vezje razpon/zmogljivost
|
||||
P0047=Turbo/Super povečanje moči polnilnika kontrolnik Solenoid A vezje nizko
|
||||
P0048=Turbo/Super povečanje moči polnilnika kontrolnik Solenoid A vezje visoko
|
||||
P0049=Turbo/Super povečanje moči polnilnika vhodna/turbinska hitrost prehitro
|
||||
P0050=HO2S Blok 2 Tipalo 1 Vezje grelnika
|
||||
P0051=HO2S Blok 2 Tipalo 1 Vezje grelnika nizko
|
||||
P0052=HO2S Blok 2 Tipalo 1 Vezje grelnika visoko
|
||||
P0053=HO2S Blok 1 tipalo 1 upornost grelnika
|
||||
P0054=HO2S Blok 1 tipalo 2 upornost grelnika
|
||||
P0055=HO2S Blok 1 tipalo 3 upornost grelnika
|
||||
P0056=HO2S Blok 2 Tipalo 2 Vezje grelnika
|
||||
P0057=H02S Blok 2 Tipalo 2 Vezje grelnika nizko
|
||||
P0058=HO2S Blok 2 Tipalo 2 Vezje grelnika visoko
|
||||
P0059=HO2S Blok 2 tipalo 1 upornost grelnika
|
||||
P0060=HO2S Blok 2 tipalo 2 upornost grelnika
|
||||
P0061=HO2S Blok 2 tipalo 3 upornost grelnika
|
||||
P0062=HO2S Blok 2 Tipalo 3 Vezje grelnika
|
||||
P0063=H02S Blok 2 Tipalo 3 Vezje grelnika nizko
|
||||
P0064=H02S Blok 2 Tipalo 3 Vezje grelnika visoko
|
||||
P0065=Vbrizgalnik z zračno asistenco. Območje nadzora/učinkovitost
|
||||
P0066=Vbrizgalnik z zračno asistenco. Krmilno vezje nizko
|
||||
P0067=Vbrizgalnik z zračno asistenco. Krmilno vezje visoko
|
||||
P0068=MAF/MAP koprelacija tipala dušilne pozicije
|
||||
P0069=MAP/BARO korelacija
|
||||
P0070=Temperatura zraka v okolici Tipalo vezja
|
||||
P0071=Temperatura zraka v okolici Območje tipala/učinkovitost
|
||||
P0072=Temperatura zraka v okolici Tipalo vezja nizko
|
||||
P0073=Temperatura zraka v okolici Tipalo vezje visoko
|
||||
P0074=Temperatura zraka v okolici Tipalo vezje prekinjeno
|
||||
P0075=Dovod ventilski blok 1 krmilno vezje
|
||||
P0076=Dovod ventilski blok 1 krmilno vezje nizko
|
||||
P0077=Dovod ventilski blok 1 krmilno vezje visoko
|
||||
P0078=Izpust ventilski blok 1 krmilno vezje
|
||||
P0079=Izpust ventilski blok 1 krmilno vezje nizko
|
||||
P0080=Izpust ventilski blok 1 krmilno vezje visoko
|
||||
P0081=Dovod ventilski blok 2 krmilno vezje
|
||||
P0082=Dovod ventilski blok 2 krmilno vezje nizko
|
||||
P0083=Dovod ventilski blok 2 krmilno vezje visoko
|
||||
P0084=Izpust ventilski blok 2 krmilno vezje
|
||||
P0085=Izpust ventilski blok 2 krmilno vezje nizko
|
||||
P0086=Izpust ventilski blok 2 krmilno vezje visoko
|
||||
P0087=Tlak vodila goriva prenizek
|
||||
P0088=Tlak vodila goriva previsok
|
||||
P0089=Regulator tlaka goriva 1 učinkovitost
|
||||
P0090=Regulator tlaka goriva 1 kontrola vezja
|
||||
P0091=Regulator tlaka goriva 1 kontrola vezja nizko
|
||||
P0092=Regulator tlaka goriva 1 kontrola vezja visoko
|
||||
P0093=Puščanje sistema za gorivo (veliko)
|
||||
P0094=Puščanje sistema za gorivo (malo)
|
||||
P0095=IAT tipalo 2 vezje
|
||||
P0096=IAT tipalo 2 vezje razpon/učinkovitost
|
||||
P0097=IAT tipalo 2 vezje nizko
|
||||
P0098=IAT tipalo 2 vezje visoko
|
||||
P0099=IAT tipalo 2 vezje prekinjeno
|
||||
P0100=MAF ali VAF A vezje okvara
|
||||
P0101=MAF ali VAF A vezje razpon/učinkovitost
|
||||
P0102=MAF ali VAF A vezje nizek vnos
|
||||
P0103=MAF ali VAF A vezje visok vnos
|
||||
P0104=MAF ali VAF A vezje prekinjeno
|
||||
P0105=MAP/BARO okvara vezja
|
||||
P0106=MAP/BARO vezje razpon/učinkovitost
|
||||
P0107=MAP/BARO vezje nizek vnos
|
||||
P0108=MAP/BARO vezje visok vnos
|
||||
P0109=MAP/BARO vezje prekinjeno
|
||||
P0110=Tipalo IAT okvara vezja
|
||||
P0111=IAT tipalo 1 vezje razpon/učinkovitost
|
||||
P0112=IAT tipalo 1 vezje nizek vnos
|
||||
P0113=IAT tipalo 1 vezje visok vnos
|
||||
P0114=IAT tipalo 1 vezje prekinjeno
|
||||
P0115=Vezje temperature hladilne tekočine motorja okvara
|
||||
P0116=Temp hladilne tekočine v motorju vezje razpon/učinkovitost
|
||||
P0117=Temp hladilne tekočine v motorju vezje nizek vnos
|
||||
P0118=Temp hladilne tekočine v motorju vezje visok vnos
|
||||
P0119=Temp hladilne tekočine v motorju vezje prekinjeno
|
||||
P0120=Tipalo TPS/položaj stopalke A vezje okvara
|
||||
P0121=Tipalo položaja stopalke/TPS A vezje razpon/učinkovitost
|
||||
P0122=Tipalo TPS/položaj stopalke A vezje nizek vnos
|
||||
P0123=Tipalo TPS/položaj stopalke A vezje visok vnos
|
||||
P0124=Tipalo položaja stopalke/TPS A vezje prekinjeno
|
||||
P0125=Nezadostna temperatura hladilne tekočine za uravnavanje goriva v zaprtem krogu
|
||||
P0126=Nezadostna temperatura hladilne tekočine stabilno delovanje
|
||||
P0127=IAT tipalo previsoko
|
||||
P0128=Temperatura hladilne tekočine pod regulirano temperaturo termostata
|
||||
P0129=Barometrski tlak prenizek
|
||||
P0130=02 vezje tipala okvara (Blok 1 Tipalo 1)
|
||||
P0131=02 vezje tipala nizka napetost (Blok 1 Tipalo 1)
|
||||
P0132=02 vezje tipala visoka napetost (Blok 1 Tipalo 1)
|
||||
P0133=02 tipalo vezje počasen odziv (Blok 1 Tipalo 1)
|
||||
P0134=02 tipalo vezje Ni aktivnosti (Blok 1 Tipalo 1)
|
||||
P0135=02 vezje tipala grelnika okvara (Blok 1 Tipalo 1)
|
||||
P0136=02 vezje tipala okvara (Blok 1 Tipalo 2)
|
||||
P0137=02 vezje tipala nizka napetost (Blok 1 Tipalo 2)
|
||||
P0138=02 vezje tipala visoka napetost (Blok 1 Tipalo 2)
|
||||
P0139=02 tipalo vezje počasen odziv (Blok 1 Tipalo 2)
|
||||
P0140=02 tipalo vezje Ni aktivnosti (Blok 1 Tipalo 2)
|
||||
P0141=02 vezje tipala grelnika okvara (Blok 1 Tipalo 2)
|
||||
P0142=02 vezje tipala okvara (Blok 1 Tipalo 3)
|
||||
P0143=02 vezje tipala nizka napetost (Blok 1 Tipalo 3)
|
||||
P0144=02 vezje tipala visoka napetost (Blok 1 Tipalo 3)
|
||||
P0145=02 tipalo vezje počasen odziv (Blok 1 Tipalo 3)
|
||||
P0146=02 tipalo vezje Ni aktivnosti (Blok 1 Tipalo 3)
|
||||
P0147=02 vezje tipala grelnika okvara (Blok 1 Tipalo 3)
|
||||
P0148=Okvara dobave goriva
|
||||
P0149=Okvara časa goriva
|
||||
P0150=02 vezje tipala okvara (Blok 2 Tipalo 1)
|
||||
P0151=02 vezje tipala nizka napetost (Blok 2 Tipalo 1)
|
||||
P0152=02 vezje tipala visoka napetost (Blok 2 Tipalo 1)
|
||||
P0153=02 tipalo vezje počasen odziv (Blok 2 Tipalo 1)
|
||||
P0154=02 tipalo vezje Ni aktivnosti (Blok 2 Tipalo 1)
|
||||
P0155=02 vezje tipala grelnika okvara (Blok 2 Tipalo 1)
|
||||
P0156=02 vezje tipala okvara (Blok 2 Tipalo 2)
|
||||
P0157=02 vezje tipala nizka napetost (Blok 2 Tipalo 2)
|
||||
P0158=02 vezje tipala visoka napetost (Blok 2 Tipalo 2)
|
||||
P0159=02 tipalo vezje počasen odziv (Blok 2 Tipalo 2)
|
||||
P0160=02 tipalo vezje Ni aktivnosti (Blok 2 Tipalo 2)
|
||||
P0161=02 vezje tipala grelnika okvara (Blok 2 Tipalo 2)
|
||||
P0162=02 vezje tipala okvara (Blok 2 Tipalo 3)
|
||||
P0163=02 vezje tipala nizka napetost (Blok 2 Tipalo 3)
|
||||
P0164=02 vezje tipala visoka napetost (Blok 2 Tipalo 3)
|
||||
P0165=02 tipalo vezje počasen odziv (Blok 2 Tipalo 3)
|
||||
P0166=02 tipalo vezje Ni aktivnosti (Blok 2 Tipalo 3)
|
||||
P0167=02 vezje tipala grelnika okvara (Blok 2 Tipalo 3)
|
||||
P0168=Previsoka temperatura goriva v motorju
|
||||
P0169=Kompozicija goriva nepravilna
|
||||
P0170=Okvara regulacije goriva (Blok 1)
|
||||
P0171=Sistem preveč vitek (Blok 1)
|
||||
P0172=Sistem preveč bogat (Blok 1)
|
||||
P0173=Okvara regulacije goriva (Blok 2)
|
||||
P0174=Sistem preveč vitek (Blok 2)
|
||||
P0175=Sistem preveč bogat (Blok 2)
|
||||
P0176=Vezje tipala kompenzacije goriva okvara
|
||||
P0177=Tipalo kompenzacije goriva vezje razpon/učinkovitost
|
||||
P0178=Vezje tipala kompenzacije goriva nizek vnos
|
||||
P0179=Vezje tipala kompenzacije goriva visok vnos
|
||||
P0180=Tipalo temperature goriva A vezje okvara
|
||||
P0181=Tipalo temperature goriva A vezje razpon/učinkovitost
|
||||
P0182=Tipalo temperature goriva A vezje nizek vnos
|
||||
P0183=Tipalo temperature goriva A vezje visok vnos
|
||||
P0184=Tipalo temperature goriva A vezje prekinjeno
|
||||
P0185=Tipalo temperature goriva B vezje okvara
|
||||
P0186=Tipalo temperature goriva B vezje razpon/učinkovitost
|
||||
P0187=Tipalo temperature goriva B vezje nizek vnos
|
||||
P0188=Tipalo temperature goriva B vezje visok vnos
|
||||
P0189=Tipalo temperature goriva B vezje prekinjeno
|
||||
P0190=Vezje tipala tlaka izpuha okvara
|
||||
P0191=Tipalo tlaka vodila za gorivo vezje razpon/učinkovitost
|
||||
P0192=Vezje tipala tlaka gorivnega voda nizek vnos
|
||||
P0193=Vezje tipala tlaka izpuha visok vnos
|
||||
P0194=Tipalo tlaka vodila za gorivo vezje prekinjeno
|
||||
P0195=Vezje tipala temperature olja v motorju okvara
|
||||
P0196=Tipalo temperature olja v motorju vezje razpon/učinkovitost
|
||||
P0197=Vezje tipala temperature olja v motorju nizek vnos
|
||||
P0198=Vezje tipala temperature olja v motorju visok vnos
|
||||
P0199=Tipalo temperature olja v motorju vezje prekinjeno
|
||||
P0200=Vezje vbrizgalnika odprto
|
||||
P0201=Vezje vbrizgalnika odprt valj 1
|
||||
P0202=Vezje vbrizgalnika odprt valj 2
|
||||
P0203=Vezje vbrizgalnika odprt valj 3
|
||||
P0204=Vezje vbrizgalnika odprt valj 4
|
||||
P0205=Vezje vbrizgalnika odprt valj 5
|
||||
P0206=Vezje vbrizgalnika odprt valj 6
|
||||
P0207=Vezje vbrizgalnika odprt valj 7
|
||||
P0208=Vezje vbrizgalnika odprt valj 8
|
||||
P0209=Vezje vbrizgalnika odprt valj 9
|
||||
P0210=Vezje vbrizgalnika odprt valj 10
|
||||
P0211=Vezje vbrizgalnika odprt valj 11
|
||||
P0212=Vezje vbrizgalnika odprt valj 12
|
||||
P0213=Vbrizgalnik za hladen zagon 1 okvara
|
||||
P0214=Vbrizgalnik za hladen zagon 2 okvara
|
||||
P0215=Izklop motorja solenoid okvara
|
||||
P0216=Vezje časa vbrizga okvara
|
||||
P0217=Stanje prekomerne temperature motorja
|
||||
P0218=Stanje prekomerne temperature menjalnika
|
||||
P0219=Stanje prekomerne hitrosti motorja
|
||||
P0220=Tipalo/stikalo položaja TPS/stopalke B vezje okvara
|
||||
P0221=Tipalo/stikalo položaja TPS/stopalke B vezje razpon/učinkovitost
|
||||
P0222=Tipalo/stikalo položaja TPS/stopalke B vezje nizek vnos
|
||||
P0223=Tipalo/stikalo položaja TPS/stopalke B vezje visok vnos
|
||||
P0224=Tipalo/stikalo položaja TPS/stopalke B vezje prekinjeno
|
||||
P0225=Tipalo/stikalo položaja TPS/stopalke C vezje okvara
|
||||
P0226=Tipalo/stikalo položaja TPS/stopalke C vezje razpon/učinkovitost
|
||||
P0227=Tipalo/stikalo položaja TPS/stopalke C vezje nizek vnos
|
||||
P0228=Tipalo/stikalo položaja TPS/stopalke C vezje visok vnos
|
||||
P0229=Tipalo/stikalo položaja TPS/stopalke C vezje prekinjeno
|
||||
P0230=Vezje primarne črpalke za gorivo okvara
|
||||
P0231=Črpalka za gorivo sekundarni vezje nizko
|
||||
P0232=Črpalka za gorivo sekundarni vezje visoko
|
||||
P0233=Črpalka za gorivo sekundarni vezje prekinjeno
|
||||
P0234=Stanje prekomernega polnjenja motorja
|
||||
P0235=Tipalo povečanja Turbo/Super A vezje okvara
|
||||
P0236=Tipalo povečanja Turbo/Super A vezje razpon/učinkovitost
|
||||
P0237=Tipalo povečanja Turbo/Super A vezje nizek vnos
|
||||
P0238=Tipalo povečanja Turbo/Super A vezje visok vnos
|
||||
P0239=Tipalo povečanja Turbo/Super B vezje okvara
|
||||
P0240=Tipalo povečanja Turbo/Super B vezje razpon/učinkovitost
|
||||
P0241=Tipalo povečanja Turbo/Super B vezje nizek vnos
|
||||
P0242=Tipalo povečanja Turbo/Super B vezje visok vnos
|
||||
P0243=Izpušna loputa Turbo/Sup solenoid A okvara
|
||||
P0244=Nadzorni tokokrog izpušne lopute Turbo/Sup solenoid A razpon/učinkovitost
|
||||
P0245=Nadzorni tokokrog izpušne lopute solenoid A nizko
|
||||
P0246=Nadzorni tokokrog izpušne lopute Turbo/Sup solenoid A visoko
|
||||
P0247=Izpušna loputa Turbo/Sup solenoid B okvara
|
||||
P0248=Izpušna loputa Turbo/Sup solenoid B razpon/učinkovitost
|
||||
P0249=Nadzorni tokokrog izpušne lopute solenoid B nizko
|
||||
P0250=Nadzorni tokokrog izpušne lopute Turbo/Sup solenoid B visoko
|
||||
P0251=Krmiljenje odmerjanja vbrizgalne črpalke A
|
||||
P0252=Krmiljenje odmerjanja vbrizgalne črpalke A razpon/učinkovitost
|
||||
P0253=Krmiljenje odmerjanja vbrizgalne črpalke A nizko
|
||||
P0254=Krmiljenje odmerjanja vbrizgalne črpalke A visoko
|
||||
P0255=Krmiljenje odmerjanja vbrizgalne črpalke A prekinjeno (Cam/rotor/vbrizgalnik)
|
||||
P0256=Krmiljenje odmerjanja vbrizgalne črpalke B okvara (Cam/rotor/vbrizgalnik)
|
||||
P0257=Krmiljenje odmerjanja vbrizgalne črpalke B razpon/učinkovitost (Cam/rotor/vbrizgalnik)
|
||||
P0258=Krmiljenje odmerjanja vbrizgalne črpalke B nizko (Cam/rotor/vbrizgalnik)
|
||||
P0259=Krmiljenje odmerjanja vbrizgalne črpalke B visoko (Cam/rotor/vbrizgalnik)
|
||||
P0260=Krmiljenje odmerjanja vbrizgalne črpalke B prekinjeno (Cam/rotor/vbrizgalnik)
|
||||
P0261=Valj 1 krmilno vezje vbrizgalnika nizko
|
||||
P0262=Valj 1 krmilno vezje vbrizgalnika visoko
|
||||
P0263=Prispevek valja 1 napaka ravnovesja
|
||||
P0264=Valj 2 krmilno vezje vbrizgalnika nizko
|
||||
P0265=Valj 2 krmilno vezje vbrizgalnika visoko
|
||||
P0266=Prispevek valja 2 napaka ravnovesja
|
||||
P0267=Valj 3 krmilno vezje vbrizgalnika nizko
|
||||
P0268=Valj 3 krmilno vezje vbrizgalnika visoko
|
||||
P0269=Prispevek valja 3 napaka ravnovesja
|
||||
P0270=Valj 4 krmilno vezje vbrizgalnika nizko
|
||||
P0271=Valj 4 krmilno vezje vbrizgalnika visoko
|
||||
P0272=Prispevek valja 4 napaka ravnovesja
|
||||
P0273=Valj 5 krmilno vezje vbrizgalnika nizko
|
||||
P0274=Valj 5 krmilno vezje vbrizgalnika visoko
|
||||
P0275=Prispevek valja 5 napaka ravnovesja
|
||||
P0276=Valj 6 krmilno vezje vbrizgalnika nizko
|
||||
P0277=Valj 6 krmilno vezje vbrizgalnika visoko
|
||||
P0278=Prispevek valja 6 napaka ravnovesja
|
||||
P0279=Valj 7 krmilno vezje vbrizgalnika nizko
|
||||
P0280=Valj 7 krmilno vezje vbrizgalnika visoko
|
||||
P0281=Prispevek valja 7 napaka ravnovesja
|
||||
P0282=Valj 8 krmilno vezje vbrizgalnika nizko
|
||||
P0283=Valj 8 krmilno vezje vbrizgalnika visoko
|
||||
P0284=Prispevek valja 8 napaka ravnovesja
|
||||
P0285=Valj 9 krmilno vezje vbrizgalnika nizko
|
||||
P0286=Valj 9 krmilno vezje vbrizgalnika visoko
|
||||
P0287=Prispevek valja 9 napaka ravnovesja
|
||||
P0288=Valj 10 krmilno vezje vbrizgalnika nizko
|
||||
P0289=Valj 10 krmilno vezje vbrizgalnika visoko
|
||||
P0290=Prispevek valja 10 napaka ravnovesja
|
||||
P0291=Valj 11 krmilno vezje vbrizgalnika nizko
|
||||
P0292=Valj 11 krmilno vezje vbrizgalnika visoko
|
||||
P0293=Prispevek valja 11 napaka ravnovesja
|
||||
P0294=Valj 12 krmilno vezje vbrizgalnika nizko
|
||||
P0295=Valj 12 krmilno vezje vbrizgalnika visoko
|
||||
P0296=Prispevek valja 12 napaka ravnovesja
|
||||
P0297=Napaka prehitro vozečega vozila
|
||||
P0298=Previsoka temperatura olja v motorju
|
||||
P0299=Turbo/Super polnilnik UnderBoost
|
||||
P0300=Zaznan izpušni udar naključnega/več valjev
|
||||
P0301=Valj 1 zaznan izpušni udar
|
||||
P0302=Valj 2 zaznan izpušni udar
|
||||
P0303=Valj 3 zaznan izpušni udar
|
||||
P0304=Valj 4 zaznan izpušni udar
|
||||
P0305=Valj 5 zaznan izpušni udar
|
||||
P0306=Valj 6 zaznan izpušni udar
|
||||
P0307=Valj 7 zaznan izpušni udar
|
||||
P0308=Valj 8 zaznan izpušni udar
|
||||
P0309=Valj 9 zaznan izpušni udar
|
||||
P0310=Valj 10 zaznan izpušni udar
|
||||
P0311=Valj 11 zaznan izpušni udar
|
||||
P0312=Valj 12 zaznan izpušni udar
|
||||
P0313=Zaznan izpušni udar nizka raven goriva
|
||||
P0314=Zaznan izpušni udar valj ni specifičen
|
||||
P0315=Variacija sistema zaznavanje položaja ročične gredi ni naučeno
|
||||
P0316=Zaznan izpušni udar 1. 1000 vrt.
|
||||
P0317=Oprema za razrito cesto ni prisotna
|
||||
P0318=Tipalo A za razrito cesto vezje signala
|
||||
P0319=Tipalo B za razrito cesto
|
||||
P0320=Vhodna hitrost vžiga/porazdelilnika motorja vezje okvara
|
||||
P0321=Vhodna hitrost vžiga/porazdelilnika motorja vezje razpon/učinkovitost
|
||||
P0322=Vhodna hitrost vžiga/porazdelilnika motorja vezje ni signala
|
||||
P0323=Vhodna hitrost vžiga/porazdelilnika motorja vezje prekinjeno
|
||||
P0324=Sistem nadzora trka okvara
|
||||
P0325=Tipalo trka 1 vezje okvara Blok 1 ali Tipalo 1
|
||||
P0326=Tipalo trka 1 vezje razpon/učinkovitost Blok 1 ali 1 tipalo
|
||||
P0327=Tipalo trka 1 vezje nizek vnos Blok 1 ali Tipalo 1
|
||||
P0328=Tipalo trka 1 vezje visok vnos Blok 1 ali Tipalo 1
|
||||
P0329=Tipalo trka 1 vezje prekinjeno Blok 1 ali Tipalo 1
|
||||
P0330=Tipalo trka 2 vezje okvara (Blok 2)
|
||||
P0331=Tipalo trka 2 vezje razpon/učinkovitost (Blok 2)
|
||||
P0332=Tipalo trka 2 vezje nizek vnos (Blok 2)
|
||||
P0333=Tipalo trka 2 vezje visok vnos (Blok 2)
|
||||
P0334=Tipalo trka 2 vezje prekinjeno (Blok 2)
|
||||
P0335=Tipalo položaj ročične gredi A vezje okvara
|
||||
P0336=Tipalo položaja kolenčaste gredi A vezje razpon/učinkovitost
|
||||
P0337=Tipalo položaj ročične gredi A vezje nizek vnos
|
||||
P0338=Tipalo položaja ročične gredi A vezje visok vnos
|
||||
P0339=Tipalo položaja ročične gredi A vezje prekinjeno
|
||||
P0340=Položaj odmične gredi tipalo A - Blok 1 vezje okvara
|
||||
P0341=Položaj odmične gredi tipalo A - Blok 1 vezje razpon/učinkovitost
|
||||
P0342=Položaj odmične gredi tipalo A - Blok 1 vezje nizek vnos
|
||||
P0343=Položaj odmične gredi tipalo A - Blok 1 vezje visok vnos
|
||||
P0344=Položaj odmične gredi tipalo A Blok 1 vezje prekinjeno
|
||||
P0345=Položaj odmične gredi tipalo A - Blok 2 vezje okvara
|
||||
P0346=Položaj odmične gredi tipalo A - Blok 2 vezje razpon/učinkovitost
|
||||
P0347=Položaj odmične gredi tipalo A - Blok 2 vezje nizek vnos
|
||||
P0348=Položaj odmične gredi tipalo A - Blok 2 vezje visok vnos
|
||||
P0349=Položaj odmične gredi tipalo A - Blok 2 vezje prekinjeno
|
||||
P0350=Vžigalna tuljava primarno/sekundarno vezje okvara
|
||||
P0351=Vžigalna tuljava A primarno/sekundarno vezje okvara
|
||||
P0352=Vžigalna tuljava B primarno/sekundarno vezje okvara
|
||||
P0353=Vžigalna tuljava C primarno/sekundarno vezje okvara
|
||||
P0354=Vžigalna tuljava D primarno/sekundarno vezje okvara
|
||||
P0355=Vžigalna tuljava E primarno/sekundarno vezje okvara
|
||||
P0356=Vžigalna tuljava F primarno/sekundarno vezje okvara
|
||||
P0357=Vžigalna tuljava G primarno/sekundarno vezje okvara
|
||||
P0358=Vžigalna tuljava H primarno/sekundarno vezje okvara
|
||||
P0359=Vžigalna tuljava I primarno/sekundarno vezje okvara
|
||||
P0360=Vžigalna tuljava J primarno/sekundarno vezje okvara
|
||||
P0361=Vžigalna tuljava K primarno/sekundarno vezje okvara
|
||||
P0362=Vžigalna tuljava L primarno/sekundarno vezje okvara
|
||||
P0363=Zaznan izpušni udar nemogočeno dovajanje goriva
|
||||
P0365=Položaj odmične gredi tipalo B - Blok 1 vezje okvara
|
||||
P0366=Položaj odmične gredi tipalo B - Blok 1 vezje razpon/učinkovitost
|
||||
P0367=Položaj odmične gredi tipalo B - Blok 1 vezje nizek vnos
|
||||
P0368=Položaj odmične gredi tipalo B - Blok 1 vezje visok vnos
|
||||
P0369=Položaj odmične gredi tipalo B - Blok 1 vezje prekinjeno
|
||||
P0370=Referenca za časovni zamik visoka ločljivost signal A okvara
|
||||
P0371=Referenca za časovni zamik visoka ločljivost signal A preveč pulzov
|
||||
P0372=Referenca za časovni zamik visoka ločljivost signal A premalo pulzov
|
||||
P0373=Referenca za časovni zamik visoka ločljivost signal A nepredvidljivi pulzi
|
||||
P0374=Referenca za časovni zamik visoka ločljivost signal A ni pulzov
|
||||
P0375=Referenca za časovni zamik visoka ločljivost signal B okvara
|
||||
P0376=Referenca za časovni zamik visoka ločljivost signal B preveč pulzov
|
||||
P0377=Referenca za časovni zamik visoka ločljivost signal B premalo pulzov
|
||||
P0378=Referenca za časovni zamik visoka ločljivost signal B nepredvidljivi pulzi
|
||||
P0379=Referenca za časovni zamik visoka ločljivost signal B ni pulzov
|
||||
P0380=Vžigalna svečka/grelnik vezje A okvara
|
||||
P0381=Vžigalna svečka/grelnik indikator vezje okvara
|
||||
P0382=Vžigalna svečka/grelnik vezje B okvara
|
||||
P0383=Modul vžigalne svečke krmilno vezje nizko
|
||||
P0384=Modul vžigalne svečke krmilno vezje visoko
|
||||
P0385=Tipalo položaj ročične gredi B vezje okvara
|
||||
P0386=Tipalo položaja kolenčaste gredi B vezje razpon/učinkovitost
|
||||
P0387=Tipalo položaj ročične gredi B vezje nizek vnos
|
||||
P0388=Tipalo položaja ročične gredi B vezje visok vnos
|
||||
P0389=Tipalo položaja kolenčaste gredi B vezje prekinjeno
|
||||
P0390=Položaj odmične gredi tipalo B - Blok 2 vezje okvara
|
||||
P0391=Položaj odmične gredi tipalo B - Blok 2 vezje razpon/učinkovitost
|
||||
P0392=Položaj odmične gredi tipalo B - Blok 2 vezje nizek vnos
|
||||
P0393=Položaj odmične gredi tipalo B - Blok 2 vezje visok vnos
|
||||
P0394=Položaj odmične gredi tipalo B - Blok 2 vezje prekinjeno
|
||||
P0400=EGR okvara pretoka
|
||||
P0401=EGR pretok nezadosten
|
||||
P0402=EGR tok prekomeren
|
||||
P0403=EGR pretok okvara vezja
|
||||
P0404=EGR tok vezje razpon/učinkovitost
|
||||
P0405=EGR tipalo pretoka A vezje nizek vnos
|
||||
P0406=EGR tipalo pretoka A vezje visok vnos
|
||||
P0407=EGR tipalo pretoka B vezje nizek vnos
|
||||
P0408=EGR tipalo pretoka B vezje visok vnos
|
||||
P0409=EGR tipalo pretoka A vezje
|
||||
P0410=Sistem sekundarnega vnosa zraka okvara
|
||||
P0411=Sistem sekundarnega vnosa zraka nepravilen tok
|
||||
P0412=Sistem sekundarnega vnosa zraka A okvara
|
||||
P0413=Sistem sekundarnega vnosa zraka A vezje odprto
|
||||
P0414=Sistem sekundarnega vnosa zraka A vezje kratko
|
||||
P0415=Sistem sekundarnega vnosa zraka B okvara
|
||||
P0416=Ventil sistema za sekundarno vbrizgavanje zraka B vezje odprto
|
||||
P0417=Sistem sekundarnega vnosa zraka B vezje kratko
|
||||
P0418=Sistem sekundarnega vnosa zraka Rele A okvara
|
||||
P0419=Sistem sekundarnega vnosa zraka Rele B okvara
|
||||
P0420=Učinkovitost katalizatorja pod pragom (Blok 1)
|
||||
P0421=Ogrevalni katalizator pod pragom (Blok 1)
|
||||
P0422=Glavni katalizator pod pragom (Blok 1)
|
||||
P0423=Ogreti katalizator pod pragom (Blok 1)
|
||||
P0424=Temp ogretega katalizatorja pod pragom (Blok 1)
|
||||
P0425=Temp. katalizatorja Tipalo (Blok 1 Tipalo 1)
|
||||
P0426=Temp. katalizatorja Učinkovitost tipala (Blok 1 Tipalo 1)
|
||||
P0427=Temp. katalizatorja Vezje tipala nizko (Blok 1 Tipalo 1)
|
||||
P0428=Temp. katalizatorja Vezje tipala visoko (Blok 1 Tipalo 1)
|
||||
P0429=Nadzor katalizatorja grelnika (Blok 1)
|
||||
P0430=Učinkovitost katalizatorja pod pragom (Blok 2)
|
||||
P0431=Ogrevalni katalizator pod pragom (Blok 2)
|
||||
P0432=Glavni katalizator pod pragom (Blok 2)
|
||||
P0433=Ogreti katalizator pod pragom (Blok 2)
|
||||
P0434=Temp ogretega katalizatorja pod pragom (Blok 2)
|
||||
P0435=Temp. katalizatorja Tipalo (Blok 2 Tipalo 1)
|
||||
P0436=Temp. katalizatorja Učinkovitost tipala (Blok 2 Tipalo 1)
|
||||
P0437=Temp. katalizatorja Vezje tipala nizko (Blok 2 Tipalo 1)
|
||||
P0438=Temp. katalizatorja Vezje tipala visoko (Blok 2 Tipalo 1)
|
||||
P0439=Nadzor katalizatorja grelnika (Blok 2)
|
||||
P0440=Sistem nadzora EVAP emisij okvara
|
||||
P0441=Sistem nadzora EVAP emisij prečiščevalni pretok napaka
|
||||
P0442=Sistem nadzora EVAP emisij puščanje (malo)
|
||||
P0443=Sistem nadzora EVAP emisij prečiščevalni ventil C napaka
|
||||
P0444=Sistem nadzora EVAP emisij prečiščevalni ventil C odprt
|
||||
P0445=Sistem nadzora EVAP emisij prečiščevalni ventil C kratko
|
||||
P0446=Sistem nadzora EVAP emisij prezračevalni vezje okvara
|
||||
P0447=Sistem nadzora EVAP emisij prezračevalni vezje odprto
|
||||
P0448=Sistem nadzora EVAP emisij prezračevalni vezje kratek
|
||||
P0449=Sistem nadzora EVAP emisij ventilska/solenoidna enota okvara
|
||||
P0450=Sistem nadzora EVAP emisij tipalo tlaka napaka
|
||||
P0451=Sistem nadzora EVAP emisij tipalo tlaka razpon
|
||||
P0452=Sistem nadzora EVAP emisij tipalo tlaka nizko
|
||||
P0453=Sistem nadzora EVAP emisij tipalo tlaka visoko
|
||||
P0454=Sistem nadzora EVAP emisij tipalo tlaka nepredvidljivo
|
||||
P0455=Sistem nadzora EVAP emisij puščanje (veliko)
|
||||
P0456=Sistem nadzora EVAP emisij puščanje zelo malo
|
||||
P0457=Sistem nadzora EVAP emisij puščanje odvit/snet pokrovček
|
||||
P0458=Vezje EVAP sistema za prečiščevanje kanistra nizko
|
||||
P0459=Vezje EVAP sistema za prečiščevanje kanistra visoko
|
||||
P0460=Tipalo ravni goriva A vezje okvara
|
||||
P0461=Tipalo ravni goriva A vezje razpon/učinkovitost
|
||||
P0462=Tipalo ravni goriva A vezje nizek vnos
|
||||
P0463=Tipalo ravni goriva A vezje visok vnos
|
||||
P0464=Tipalo ravni goriva A vezje prekinjeno
|
||||
P0465=EVAP tipalo pretoka izpušnih hlapov za odstranjevanje emisij vezje okvara
|
||||
P0466=EVAP tipalo pretoka izpušnih hlapov za odstranjevanje emisij vezje razpon/učinkovitost
|
||||
P0467=EVAP tipalo pretoka izpušnih hlapov za odstranjevanje emisij vezje nizek vnos
|
||||
P0468=EVAP tipalo pretoka izpušnih hlapov za odstranjevanje emisij vezje visok vnos
|
||||
P0469=EVAP tipalo pretoka izpušnih hlapov za odstranjevanje emisij vezje prekinjeno
|
||||
P0470=Vezje tipala tlaka izpuha okvara
|
||||
P0471=Tipalo tlaka izpuha vezje razpon/učinkovitost
|
||||
P0472=Vezje tipala tlaka izpuha nizek vnos
|
||||
P0473=Vezje tipala tlaka izpuha visok vnos
|
||||
P0474=Tipalo tlaka izpuha vezje prekinjeno
|
||||
P0475=Ventil za regulacijo tlaka izpuha vezje okvara
|
||||
P0476=Ventil za regulacijo tlaka izpuha vezje razpon/učinkovitost
|
||||
P0477=Ventil za regulacijo tlaka izpuha vezje nizek vnos
|
||||
P0478=Ventil za regulacijo tlaka izpuha vezje visok vnos
|
||||
P0479=Ventil za regulacijo tlaka izpuha vezje prekinjeno
|
||||
P0480=Krmilno vezje hladilnega ventilatorja 1
|
||||
P0481=Krmilno vezje hladilnega ventilatorja 2
|
||||
P0482=Krmilno vezje hladilnega ventilatorja 3
|
||||
P0483=Preverjanje racionalnosti krmiljenja ventilatorja okvara
|
||||
P0484=Nadzor ventilatorja vezje preobremenitev
|
||||
P0485=Krmilni vezni vod napajanja/ozemljitve ventilatorja okvara
|
||||
P0486=EGR sistem tipalo B vezje
|
||||
P0487=EGR TPS krmilno vezje
|
||||
P0488=EGR TPS nadzor toka vezje razpon/učinkovitost
|
||||
P0489=A krmilno vezje nizko
|
||||
P0490=EGR krmilno vezje visoko
|
||||
P0491=Sekundarni prezračevalni sistem (Blok 1)
|
||||
P0492=Sekundarni prezračevalni sistem (Blok 2)
|
||||
P0493=Hitrost ventilatorja prehitra
|
||||
P0494=Hitrost ventilatorja nizka
|
||||
P0495=Hitrost ventilatorja visoka
|
||||
P0496=EVAP emisije napaka visokega čistilnega toka
|
||||
P0497=EVAP emisije napaka nizkega čistilnega toka
|
||||
P0498=EVAP ventilska/solenoidna enota za izpušne pline okvara vezja nizko
|
||||
P0499=EVAP ventilska/solenoidna enota za izpušne pline okvara vezja visoko
|
||||
P0500=Hitrost vozila tipalo A okvara
|
||||
P0501=Hitrost vozila tipalo A razpon/učinkovitost
|
||||
P0502=Tipalo hitrosti vozila A vezje nizek vnos
|
||||
P0503=Hitrost vozila tipalo A nepredvidljivo/visoko
|
||||
P0504=Korelacija stikalo zavore A stikalo zavore B
|
||||
P0505=Sistem nadzora prostega teka okvara
|
||||
P0506=Sistem nadzora prostega teka RPM nizko
|
||||
P0507=Sistem nadzora prostega teka RPM visoko
|
||||
P0508=Sistem nadzora prostega teka vezje nizko
|
||||
P0509=Sistem nadzora prostega teka vezje visoko
|
||||
P0510=Stikalo zaprtega položaja plina
|
||||
P0511=Krmilno vezje zrak v prostem teku
|
||||
P0512=Zaganjalnik signal vezje
|
||||
P0513=Imobilizator nepravilen
|
||||
P0514=Tipalo temperature baterije vezje razpon/učinkovitost
|
||||
P0515=Tipalo temperature v bateriji vezje
|
||||
P0516=Temperatura v bateriji vezje nizko
|
||||
P0517=Temperatura v bateriji vezje visoko
|
||||
P0518=Nadzorni tokokrog vezje zrak v prostem teku prekinjeno
|
||||
P0519=Učinkovitost sistema nadzora zraka v prostem teku
|
||||
P0520=Tipalo/stikalo tlaka olja v motorju vezje okvara
|
||||
P0521=Tipalo/stikalo tlaka olja v motorju razpon/učinkovitost
|
||||
P0522=Tipalo/stikalo tlaka olja v motorju nizka napetost
|
||||
P0523=Tipalo/stikalo tlaka olja v motorju visoka napetost
|
||||
P0524=Tlak olja v motorju prenizek
|
||||
P0525=Servo križarjenje vezje razpon/učinkovitost
|
||||
P0526=Vezje tipal hitrost ventilatorja
|
||||
P0527=Tipalo hitrosti ventilatorja vezje razpon/učinkovitost
|
||||
P0528=Vezje tipal hitrost ventilatorja ni signala
|
||||
P0529=Tipalo hitrosti ventilatorja vezje prekinjeno
|
||||
P0530=Tipalo tlaka hladila klimatske naprave A vezje okvara
|
||||
P0531=Tipalo tlaka hladila klimatske naprave A vezje razpon/učinkovitost
|
||||
P0532=Tipalo tlaka hladila klimatske naprave A vezje nizek vnos
|
||||
P0533=Tipalo tlaka hladila klimatske naprave A vezje visok vnos
|
||||
P0534=Izguba polnjenja hladila za klimatsko napravo
|
||||
P0535=Tipalo temperature v izparilniku klimatske naprave vezje
|
||||
P0536=Tipalo temperature naprave za evaporacijo klimatske naprave vezje razpon/učinkovitost
|
||||
P0537=Tipalo temperature v izparilniku klimatske naprave vezje nizko
|
||||
P0538=Tipalo temperature v izparilniku klimatske naprave vezje
|
||||
P0539=Tipalo temperature naprave za evaporacijo klimatske naprave vezje prekinjeno
|
||||
P0540=Grelnik vhodnega zraka A vezje
|
||||
P0541=Grelnik vhodnega zraka A vezje nizko
|
||||
P0542=Grelnik vhodnega zraka A vezje visoko
|
||||
P0543=Grelnik vhodnega zraka A vezje odprto
|
||||
P0544=Temp. izpušnega plina Vezje tipala (Blok 1 Tipalo 1)
|
||||
P0545=Temp. izpušnega plina Vezje tipala nizko (Blok 1 Tipalo 1)
|
||||
P0546=Temp. izpušnega plina Vezje tipala visoko (Blok 1 Tipalo 1)
|
||||
P0547=Temp. izpušnega plina Vezje tipala (Blok 2 Tipalo 1)
|
||||
P0548=Temp. izpušnega plina Vezje tipala nizko (Blok 2 Tipalo 1)
|
||||
P0549=Temp. izpušnega plina Vezje tipala visoko (Blok 2 Tipalo 1)
|
||||
P0550=Tipalo tlaka pnevmatskega krmiljenja vezje okvara
|
||||
P0551=Tipalo tlaka pnevmatskega krmiljenja vezje razpon/učinkovitost
|
||||
P0552=Tipalo tlaka pnevmatskega krmiljenja vezje nizek vnos
|
||||
P0553=Tipalo tlaka pnevmatskega krmiljenja vezje visok vnos
|
||||
P0554=Tipalo tlaka pnevmatskega krmiljenja vezje prekinjeno
|
||||
P0555=Tipalo tlaka servo ojačevalca zavor vezje
|
||||
P0556=Tipalo tlaka servo ojačevalca zavor vezje razpon/učinkovitost
|
||||
P0557=Tipalo tlaka servo ojačevalca zavor vezje nizek vnos
|
||||
P0558=Tipalo tlaka servo ojačevalca zavor vezje visok vnos
|
||||
P0559=Tipalo tlaka servo ojačevalca zavor vezje prekinjeno
|
||||
P0560=Sistemska napetost okvara
|
||||
P0561=Sistemska napetost nestabilna
|
||||
P0562=Sistemska napetost nizka
|
||||
P0563=Sistemska napetost visoka
|
||||
P0564=Tempomat večfunkcijsko Napaka vnosa signala A
|
||||
P0565=Tokokrog tempomata signal vklop okvara
|
||||
P0566=Tokokrog tempomata signal izklop okvara
|
||||
P0567=Signal povzetka tempomata okvara
|
||||
P0568=Tokokrog tempomata signal nastavitve okvara
|
||||
P0569=Napaka signalnega sistema za izklop tempomata
|
||||
P0570=Signal za pospeševanje tempomata napaka
|
||||
P0571=Stikalo zavore A vezje okvara
|
||||
P0572=Stikalo zavore A vezje nizek vnos
|
||||
P0573=Stikalo zavore A vezje visok vnos
|
||||
P0574=Tokokrog tempomata hitrost vozila previsoka
|
||||
P0575=Vezje tempomata okvara
|
||||
P0576=Vezje tempomata nizek vnos
|
||||
P0577=Vezje tempomata visok vnos
|
||||
P0578=Tempomat večfunkcijsko vhod A vezje zagozdeno
|
||||
P0579=Tempomat večfunkcijsko vhod A vezje razpon/učinkovitost
|
||||
P0580=Tempomat večfunkcijsko vnos A vezje nizko
|
||||
P0581=Tempomat večfunkcijsko vnos A vezje visoko
|
||||
P0582=Vezje nadzor tempomata vakuuma odprto
|
||||
P0583=Vezje za nadzor tempomata vakuuma nizko
|
||||
P0584=Vezje nadzor tempomata vakuuma visoko
|
||||
P0585=Tempomat večfunkcijsko vhod korelacija
|
||||
P0586=Vezje za nadzor prezračevanja tempomata odprto
|
||||
P0587=Vezje za nadzor prezračevanja tempomata nizko
|
||||
P0588=Vezje za nadzor prezračevanja tempomata visoko
|
||||
P0589=Tempomat večfunkcijsko vhod B vezje
|
||||
P0590=Tempomat večfunkcijsko vhod B vezje zagozdeno
|
||||
P0591=Tempomat večfunkcijsko vhod B vezje razpon/učinkovitost
|
||||
P0592=Tempomat večfunkcijsko vnos B vezje nizko
|
||||
P0593=Tempomat večfunkcijsko vnos B vezje visoko
|
||||
P0594=Vezje servo nadzor tempomata odprto
|
||||
P0595=Vezje servo nadzor tempomata nizko
|
||||
P0596=Vezje servo nadzor tempomata visoko
|
||||
P0597=Vezje tempomata odprto
|
||||
P0598=Vezje tempomata nizko
|
||||
P0599=Vezje tempomata visoko
|
||||
P0600=Povezava serijske komunikacije okvara
|
||||
P0601=Pomnilnik notranjega krmilnega modula kontrola vsote napaka
|
||||
P0602=Programska napaka modula nadzora
|
||||
P0603=PCM spomin ohranjanja delovanja - Keep Alive Memory (KAM) napaka
|
||||
P0604=PCM pomnilnik z naključnim dostopom (RAM) napaka
|
||||
P0605=PCM spomin samo za branje (ROM) napaka
|
||||
P0606=Napaka PCM procesorja
|
||||
P0607=Učinkovitost modula nadzora
|
||||
P0608=Nadzorni modul VSS izhod A okvara
|
||||
P0609=Nadzorni modul VSS izhod B okvara
|
||||
P0610=Modul nadzora možnosti vozila okvara
|
||||
P0611=Modul kontrole vbrizgalnika učinkovitost
|
||||
P0612=Modul kontrole vbrizgalnika nadzor releja
|
||||
P0613=Napaka TCM procesorja
|
||||
P0614=ECM/TCM nekompatibilno
|
||||
P0615=Vezje rele zaganjalnik
|
||||
P0616=Zaganjalnik rele vezje nizko
|
||||
P0617=Zaganjalnik rele vezje visoko
|
||||
P0618=Alternativni modul za gorivo (KAM) napaka
|
||||
P0619=Spomin alternativnega modula za gorivo
|
||||
P0620=Nadzor generatorja okvara
|
||||
P0621=Generator L-Term. Nadzor svetilke
|
||||
P0622=Generator F-Term. Polje F kontrolnik
|
||||
P0623=Krmilno vezje lučke generatorja
|
||||
P0624=Vezje lučke pokrova za gorivo
|
||||
P0625=Generator F-Term. Vezje nizko
|
||||
P0626=Generator F-Term. Vezje visoko
|
||||
P0627=Črpalka za gorivo A krmilno vezje odprto
|
||||
P0628=Črpalka za gorivo A krmilno vezje nizko
|
||||
P0629=Črpalka za gorivo A krmilno vezje visoko
|
||||
P0630=PCM VIN ni program. Ali neujemanje
|
||||
P0631=TCM VIN ni program. Ali neujemanje
|
||||
P0632=Koda kilometrskega števca ni programirana ECM/PCM
|
||||
P0633=Koda imobilizatorja ni programirana ECM/PCM
|
||||
P0634=PCM/ECM/TCM notranja temp. Previsoko
|
||||
P0635=Krmilno vezje pnevmatskega krmiljenja
|
||||
P0636=Krmilno vezje pnevmatskega krmiljenja nizko
|
||||
P0637=Krmilno vezje pnevmatskega krmiljenja visoko
|
||||
P0638=Krmilnik plina razpon/učinkovitost (Blok 1)
|
||||
P0639=Krmilnik plina razpon/učinkovitost (Blok 2)
|
||||
P0640=Grelnik vhodnega zraka krmilno vezje
|
||||
P0641=Tipalo A vezje referenčne napetosti odprto
|
||||
P0642=Tipalo A vezje referenčne napetosti nizko
|
||||
P0643=Tipalo A vezje referenčne napetosti visoko
|
||||
P0644=Prikaz za voznika povezava serijske komunikacije
|
||||
P0645=Krmilno vezje releja sklopke klimatske naprave
|
||||
P0646=Krmilno vezje releja sklopke klimatske naprave nizko
|
||||
P0647=Krmilno vezje releja sklopke klimatske naprave visoko
|
||||
P0648=Vezje lučke imobilizatorja
|
||||
P0649=Lučka tempomata vezje
|
||||
P0650=Vezje nadzora MIL okvara
|
||||
P0651=Tipalo B vezje referenčne napetosti odprto
|
||||
P0652=Tipalo B vezje referenčne napetosti nizko
|
||||
P0653=Tipalo B vezje referenčne napetosti visoko
|
||||
P0654=Vezje motorja RPM okvara
|
||||
P0655=Izstopni tok vezja za opozorilno lučko pregretja motorja okvara
|
||||
P0656=Raven goriva izhod okvara vezja
|
||||
P0657=Napajalna napetost aktuatorja A vezje odprto
|
||||
P0658=Napajalna napetost aktuatorja A vezje nizko
|
||||
P0659=Napajalna napetost aktuatorja A vezje visoko
|
||||
P0660=Krmiljenje pretoka vbrizga v sesalni kolektor vezje odprto (Blok 1)
|
||||
P0661=Krmiljenje pretoka vbrizga v sesalni kolektor vezje nizko (Blok 1)
|
||||
P0662=Krmiljenje pretoka vbrizga v sesalni kolektor vezje visoko (Blok 1)
|
||||
P0663=Krmiljenje pretoka vbrizga v sesalni kolektor vezje odprto (Blok 2)
|
||||
P0664=Krmiljenje pretoka vbrizga v sesalni kolektor vezje nizko (Blok 2)
|
||||
P0665=Krmiljenje pretoka vbrizga v sesalni kolektor vezje visoko (Blok 2)
|
||||
P0666=PCM/ECM/TCM notranja temp. Tipalo vezja
|
||||
P0667=PCM/ECM/TCM notranja temp. Območje tipala/učinkovitost
|
||||
P0668=PCM/ECM/TCM notranja temp. Tipalo vezja nizko
|
||||
P0669=PCM/ECM/TCM notranja temp. Tipalo vezje visoko
|
||||
P0670=Vžigalna svečka/grelnik nadzor modula
|
||||
P0671=Vžigalna svečka/valj grelnika 1
|
||||
P0672=Vžigalna svečka/valj grelnika 2
|
||||
P0673=Vžigalna svečka/valj grelnika 3
|
||||
P0674=Vžigalna svečka/valj grelnika 4
|
||||
P0675=Vžigalna svečka/valj grelnika 5
|
||||
P0676=Vžigalna svečka/valj grelnika 6
|
||||
P0677=Vžigalna svečka/valj grelnika 7
|
||||
P0678=Vžigalna svečka/valj grelnika 8
|
||||
P0679=Vžigalna svečka/valj grelnika 9
|
||||
P0680=Vžigalna svečka/valj grelnika 10
|
||||
P0681=Vžigalna svečka/valj grelnika 11
|
||||
P0682=Vžigalna svečka/valj grelnika 12
|
||||
P0683=Vžigalna svečka/grelnik težava komunikacije modula
|
||||
P0684=Težava komunikacije žarilne svečke vezje razpon/učinkovitost
|
||||
P0685=Krmilno vezje releja za napajanje ECM/PCM odprto
|
||||
P0686=Krmilno vezje releja za napajanje ECM/PCM nizko
|
||||
P0687=Krmilno vezje releja za napajanje ECM/PCM visoko
|
||||
P0688=Zaznavanje releja za napajanje ECM/PCM vezje odprto
|
||||
P0689=Zaznavanje releja za napajanje ECM/PCM vezje nizko
|
||||
P0690=Zaznavanje releja za napajanje ECM/PCM vezje visoko
|
||||
P0691=Krmilno vezje ventilatorja 1 nizko
|
||||
P0692=Krmilno vezje ventilatorja 1 visoko
|
||||
P0693=Krmilno vezje ventilatorja 2 nizko
|
||||
P0694=Krmilno vezje ventilatorja 2 visoko
|
||||
P0695=Krmilno vezje ventilatorja 3 nizko
|
||||
P0696=Krmilno vezje ventilatorja 3 visoko
|
||||
P0697=Tipalo C vezje referenčne napetosti odprto
|
||||
P0698=Tipalo C vezje referenčne napetosti nizko
|
||||
P0699=Tipalo C vezje referenčne napetosti visoko
|
||||
P0700=Sistem nadzora prenosa okvara
|
||||
P0701=Trans nadzor sistem razpon/učinkovitost
|
||||
P0702=Sistem nadzora prenosa električno
|
||||
P0703=Stikalo zavore B vezje okvara
|
||||
P0704=Vhodni vezje stikala za sklopko okvara
|
||||
P0705=Tipalo razpona trans vezje okvara (PRNDL vnos)
|
||||
P0706=Tipalo razpona trans vezje razpon/učinkovitost
|
||||
P0707=Tipalo razpona trans vezje nizek vnos
|
||||
P0708=Tipalo razpona trans vezje visok vnos
|
||||
P0709=Tipalo razpona trans vezje prekinjeno
|
||||
P0710=Tipalo temperature prestavnega olja vezje okvara
|
||||
P0711=Tipalo temperature tekočine A vezje menjalnika razpon/učinkovitost
|
||||
P0712=Tipalo temperature prestavnega olja A vezje nizek vnos
|
||||
P0713=Tipalo temperature prestavnega olja A vezje visok vnos
|
||||
P0714=Tipalo temperature prestavnega olja A vezje menjalnika prekinjeno
|
||||
P0715=Vhodni/turbinski hitrostni senzor A vezje okvara
|
||||
P0716=Tipalo hitrosti vnosa/turbine A vezje razpon/učinkovitost
|
||||
P0717=Vhodni/turbinski hitrostni senzor A vezje ni signala
|
||||
P0718=Tipalo hitrosti vnosa/turbine A vezje prekinjeno
|
||||
P0719=Stikalo zavore B vezje nizek vnos
|
||||
P0720=Tipalo izhodne hitrosti okvara vezja
|
||||
P0721=Tipalo izhodne hitrosti vezje razpon/učinkovitost
|
||||
P0722=Vezje tipal izhodna hitrost ni signala
|
||||
P0723=Tipalo izhodne hitrosti vezje prekinjeno
|
||||
P0724=Stikalo zavore B vezje visok vnos
|
||||
P0725=Tipalo hitrosti motorja okvara vezja
|
||||
P0726=Tipalo hitrosti v motorju vezje razpon/učinkovitost
|
||||
P0727=Vezje tipal hitrost motorja ni signala
|
||||
P0728=Tipalo hitrosti motorja vezje prekinjeno
|
||||
P0729=Razmerje prestave 6 nepravilno
|
||||
P0730=Razmerje prestav nepravilno
|
||||
P0731=Razmerje prestave 1 nepravilno
|
||||
P0732=Razmerje prestave 2 nepravilno
|
||||
P0733=Razmerje prestave 3 nepravilno
|
||||
P0734=Razmerje prestave 4 nepravilno
|
||||
P0735=Razmerje prestave 5 nepravilno
|
||||
P0736=Vzvratno razmerje nepravilno
|
||||
P0737=TCM hitrost motorja izhodno vezje
|
||||
P0738=TCM hitrost motorja izhodno vezje nizko
|
||||
P0739=TCM hitrost motorja izhodno vezje visoko
|
||||
P0740=TCC okvara vezja
|
||||
P0741=Pretvornik navora vezje učinkovitost ali zagozdenje izklopljeno
|
||||
P0742=Pretvornik navora vezje zataknjeno na
|
||||
P0743=Pretvornik navora vezje električno
|
||||
P0744=Pretvornik navora vezje prekinjeno
|
||||
P0745=Pritisnite Control Sol. A okvara vezja
|
||||
P0746=Pritisnite Control Sol. A vezje učinkovitost ali zagozdenje izklopljeno
|
||||
P0747=Pritisnite Control Sol. A vezje zataknjeno na
|
||||
P0748=Pritisnite Control Sol. A vezje električno
|
||||
P0749=Pritisnite Control Sol. A vezje prekinjeno
|
||||
P0750=Prestava solenoid A okvara
|
||||
P0751=Prestavljanje solenoid A vezje učinkovitost ali zagozdenje izklopljeno
|
||||
P0752=Prestava solenoid A vezje zataknjeno na
|
||||
P0753=Prestava solenoid A vezje električno
|
||||
P0754=Prestava solenoid A prekinjeno
|
||||
P0755=Prestava solenoid B okvara
|
||||
P0756=Prestavljanje solenoid B vezje učinkovitost ali zagozdenje izklopljeno
|
||||
P0757=B vezje zataknjeno na
|
||||
P0758=Prestava solenoid B vezje električno
|
||||
P0759=Prestava solenoid B vezje prekinjeno
|
||||
P0760=Prestava solenoid C okvara
|
||||
P0761=Prestavljanje solenoid C vezje učinkovitost ali zagozdenje izklopljeno
|
||||
P0762=Prestava solenoid C vezje zataknjeno na
|
||||
P0763=Prestava solenoid C vezje električno
|
||||
P0764=Prestava solenoid C vezje prekinjeno
|
||||
P0765=Prestava solenoid D okvara
|
||||
P0766=Prestavljanje solenoid D vezje učinkovitost ali zagozdenje izklopljeno
|
||||
P0767=Prestava solenoid D vezje zataknjeno na
|
||||
P0768=Prestava solenoid D vezje električno
|
||||
P0769=Prestava solenoid D vezje prekinjeno
|
||||
P0770=Prestava solenoid E okvara
|
||||
P0771=Prestavljanje solenoid E vezje učinkovitost ali zagozdenje izklopljeno
|
||||
P0772=Prestava solenoid E vezje zataknjeno na
|
||||
P0773=Prestava solenoid E vezje električno
|
||||
P0774=Prestava solenoid E vezje prekinjeno
|
||||
P0775=Pritisnite Ctrl Sol. B okvara vezja
|
||||
P0776=Pritisnite Ctrl Sol. B vezje učinkovitost ali zagozdenje izklopljeno
|
||||
P0777=Pritisnite Ctrl Sol. B vezje zataknjeno na
|
||||
P0778=Pritisnite Ctrl Sol. B vezje električno
|
||||
P0779=Pritisnite Ctrl Sol. B vezje prekinjeno
|
||||
P0780=Okvara prestavne ročice
|
||||
P0781=Okvara 1-2 prestave
|
||||
P0782=Okvara 2-3 prestave
|
||||
P0783=Okvara 3-4 prestave
|
||||
P0784=Okvara 4-5 prestave
|
||||
P0785=Prestavljanje/čas solenoid okvara
|
||||
P0786=Prestavljanje/čas solenoid razpon/učinkovitost
|
||||
P0787=Prestavna ročica/čas solenoid nizko
|
||||
P0788=Prestavljanje/čas solenoid visoko
|
||||
P0789=Prestavljanje/čas solenoid tokokrog prekinjeno
|
||||
P0790=Normalno/učinkovitost stikalni krog okvara
|
||||
P0791=Tipalo hitrosti medosovine A vezje
|
||||
P0792=Tipalo hitrosti medosovine A vezje razpon/učinkovitost
|
||||
P0793=Tipalo hitrosti medosovine A vezje ni signala
|
||||
P0794=Tipalo medosovine A vezje prekinjeno
|
||||
P0795=Pritisnite Ctrl SoL C okvara
|
||||
P0796=Pritisnite Ctrl Sol. C vezje učinkovitost ali zagozdenje izklopljeno
|
||||
P0797=Pritisnite Ctrl SoL C vezje zataknjeno na
|
||||
P0798=Pritisnite Ctrl SoL C vezje električno
|
||||
P0799=Pritisnite Ctrl SoL C vezje prekinjeno
|
||||
P0800=Sistem za nadzor prenosa moči zahteva MIL
|
||||
P0801=Vezje krmiljenja zaviranja vzvratne vožnje okvara
|
||||
P0802=Sistem nadzora prenosa zahteva MIL tokokrog odprto
|
||||
P0803=Solenoid 1-4 višja prestava (preskok prestavljanja) vezje okvara
|
||||
P0804=Luč 1-4 višja prestava (preskok prestavljanja) vezje okvara
|
||||
P0805=Tipalo položaja sklopke vezje okvara
|
||||
P0806=Tipalo položaja sklopke vezje razpon/učinkovitost
|
||||
P0807=Tipalo položaja sklopke vezje nizko
|
||||
P0808=Tipalo položaja sklopke vezje visoko
|
||||
P0809=Tipalo položaja sklopke vezje prekinjeno
|
||||
P0810=Nadzor položaja sklopke okvara
|
||||
P0811=Prekomeren zdrs sklopke
|
||||
P0812=Obratni vnos okvara vezja
|
||||
P0813=Obratni izhod okvara vezja
|
||||
P0814=Vezje prikaza trans razpona okvara
|
||||
P0815=Vezje stikala za višjo prestavo okvara
|
||||
P0816=Vezje stikala za nižjo prestavo okvara
|
||||
P0817=Zaganjalnik onemogoči vezje
|
||||
P0818=Vhod za izklop pogonskega sklopa
|
||||
P0819=Stikalo za prestavljanje navzgor/navzdol korelacija z razponom prestavljanja menjalnika
|
||||
P0820=Raven prestave X-Y tipalo vezje
|
||||
P0821=Raven prestave X tipalo vezje
|
||||
P0822=Raven prestave X tipalo vezje
|
||||
P0823=Raven prestave X tipalo vezje prekinjeno vezje
|
||||
P0824=Raven prestave X tipalo vezje prekinjeno vezje
|
||||
P0825=Stikalo potiskanja/vlečenja prestavne ročice (Premikanje prestav)
|
||||
P0826=Vezje stikala za višjo prestavo stikala za nižjo prestavo
|
||||
P0827=Vezje stikala za višjo prestavo stikala za nižjo prestavo nizko
|
||||
P0828=Vezje stikala za višjo prestavo stikala za nižjo prestavo visoko
|
||||
P0829=5-6 prestav
|
||||
P0830=Stikalo položaja sklopke A vezje okvara
|
||||
P0831=Stikalo položaja sklopke A vezje nizko
|
||||
P0832=Stikalo položaja sklopke A vezje visoko
|
||||
P0833=Stikalo položaja sklopke B vezje okvara
|
||||
P0834=Stikalo položaja sklopke B vezje nizko
|
||||
P0835=Stikalo položaja sklopke B vezje visoko
|
||||
P0836=4 stikalo za štirikolesni pogon vezje okvara
|
||||
P0837=4 stikalo za štirikolesni pogon vezje razpon/učinkovitost
|
||||
P0838=4 stikalo za štirikolesni pogon vezje nizko
|
||||
P0839=4 stikalo za štirikolesni pogon vezje visoko
|
||||
P0840=Tipalo/stikalo tlaka prestavnega olja A vezje okvara
|
||||
P0841=Tipalo/stikalo tlaka prestavnega olja A vezje razpon/učinkovitost
|
||||
P0842=Tipalo/stikalo tlaka prestavnega olja A vezje nizko
|
||||
P0843=Tipalo/stikalo tlaka prestavnega olja A vezje visoko
|
||||
P0844=Tipalo/stikalo tlaka prestavnega olja A vezje prekinjeno
|
||||
P0845=Tipalo/stikalo tlaka prestavnega olja B vezje okvara
|
||||
P0846=Tipalo/stikalo tlaka prestavnega olja B vezje razpon/učinkovitost
|
||||
P0847=Tipalo/stikalo tlaka prestavnega olja B vezje nizko
|
||||
P0848=Tipalo/stikalo tlaka prestavnega olja B vezje visoko
|
||||
P0849=Tipalo/stikalo tlaka prestavnega olja B vezje prekinjeno
|
||||
P0850=Vhodni vezje stikala za parkiranje/nevtralno
|
||||
P0851=Vezje stikala za prakriranje/nevtralno nizek vnos
|
||||
P0852=Vezje stikala za parkiranje/nevtralno visok vnos
|
||||
P0853=Vhodni vezje stikala za vožnjo
|
||||
P0854=Vezje stikala za vožnjo nizek vnos
|
||||
P0855=Vezje stikala za vožnjo visok vnos
|
||||
P0856=Nadzor vleka vhodni signal
|
||||
P0857=Nadzor vleka vhodni signal razpon/učinkovitost
|
||||
P0858=Nadzor vleka vhodni signal nizko
|
||||
P0859=Nadzor vleka vhodni signal visoko
|
||||
P0860=Komunikacijski modul prestave vezje
|
||||
P0861=Komunikacijski modul prestave vezje nizko
|
||||
P0862=Komunikacijski modul prestave vezje visoko
|
||||
P0863=TCM komunikacije vezje
|
||||
P0864=TCM komunikacija vezje razpon/učinkovitost
|
||||
P0865=TCM komunikacije vezje nizko
|
||||
P0866=TCM komunikacije vezje visoko
|
||||
P0867=Tlak prestavnega olja
|
||||
P0868=Tlak prestavnega olja nizek
|
||||
P0869=Tlak prestavnega olja visok
|
||||
P0870=Tipalo/stikalo tlaka prestavnega olja C vezje
|
||||
P0871=Tipalo/stikalo tlaka prestavnega olja C vezje razpon/učinkovitost
|
||||
P0872=Tipalo/stikalo tlaka prestavnega olja C vezje nizko
|
||||
P0873=Tipalo/stikalo tlaka prestavnega olja C vezje visoko
|
||||
P0874=Tipalo/stikalo tlaka prestavnega olja C vezje prekinjeno
|
||||
P0875=Tipalo/stikalo tlaka prestavnega olja D vezje
|
||||
P0876=Tipalo/stikalo tlaka prestavnega olja D vezje razpon/učinkovitost
|
||||
P0877=Tipalo/stikalo tlaka prestavnega olja D vezje nizko
|
||||
P0878=Tipalo/stikalo tlaka prestavnega olja D vezje visoko
|
||||
P0879=Tipalo/stikalo tlaka prestavnega olja D vezje prekinjeno
|
||||
P0880=TCM vklop vhodni signal
|
||||
P0881=TCM vklop vhodni signal razpon/učinkovitost
|
||||
P0882=TCM vklop vhodni signal nizko
|
||||
P0883=TCM vklop vhodni signal visoko
|
||||
P0884=TCM vklop vhodni signal vezje prekinjeno
|
||||
P0885=Krmilno vezje releja za napajanje TCM odprto
|
||||
P0886=Krmilno vezje releja za napajanje TCM nizko
|
||||
P0887=Krmilno vezje releja za napajanje TCM visoko H
|
||||
P0888=Zaznavanje releja za napajanje TCM vezje
|
||||
P0889=Zaznavanje releja za napajanje TCM vezje razpon/učinkovitost
|
||||
P0890=Zaznavanje releja za napajanje TCM vezje nizko
|
||||
P0891=Zaznavanje releja za napajanje TCM vezje visoko
|
||||
P0892=Zaznavanje releja za napajanje TCM vezje prekinjeno
|
||||
P0893=Aktiviranih več prestav
|
||||
P0894=Prenos komp. Lezoč
|
||||
P0895=Čas prestavljanja prekratek
|
||||
P0896=Čas prestavljanja predolg
|
||||
P0897=Poslabšanje prestavnega olja
|
||||
P0898=Prenos ctrl. MIL zahtevek vezje nizko
|
||||
P0899=Nadzor prenosa MIL zahtevek vezje visoko
|
||||
P0900=Vezje prožila sklopke odprto
|
||||
P0901=Aktuator sklopke vezje razpon/učinkovitost
|
||||
P0902=Vezje prožila sklopke nizko
|
||||
P0903=Vezje prožila sklopke visoko
|
||||
P0904=Položaj izbire vhoda vezje
|
||||
P0905=Položaj izbire vrat vezje razpon/učinkovitost
|
||||
P0906=Položaj izbire vhoda vezje nizko
|
||||
P0907=Položaj izbire vhoda vezje visoko
|
||||
P0908=Položaj izbire vrat vezje prekinjeno
|
||||
P0909=Napaka kontrolnika izbire vrat
|
||||
P0910=Vezje prožila izbire vrat odprto
|
||||
P0911=Aktuator izbire vrat vezje razpon/učinkovitost
|
||||
P0912=Vezje prožila izbire vrat nizko
|
||||
P0913=Vezje prožila izbire vrat visoko
|
||||
P0914=Položaj prestave vezje
|
||||
P0915=Položaj prestavljanja prestave vezje razpon/učinkovitost
|
||||
P0916=Položaj prestave vezje nizko
|
||||
P0917=Položaj prestave vezje visoko
|
||||
P0918=Položaj prestavljanja prestave vezje prekinjeno
|
||||
P0919=Položaj prestave napaka nadzora
|
||||
P0920=Aktuator prestave naprej vezje odprto
|
||||
P0921=Aktuator prestave naprej vezje razpon/učinkovitost
|
||||
P0922=Aktuator prestave naprej vezje nizko
|
||||
P0923=Aktuator prestave naprej vezje visoko
|
||||
P0924=Aktuator prestave nazaj vezje odprto
|
||||
P0925=Aktuator prestave nazaj vezje razpon/učinkovitost
|
||||
P0926=Aktuator prestave nazaj vezje nizko
|
||||
P0927=Aktuator prestave nazaj vezje visoko
|
||||
P0928=Zaklep prestave solenoid Ctrl vezje odprto
|
||||
P0929=Zaklep prestave solenoid Ctrl vezje razpon/učinkovitost
|
||||
P0930=Zaklep prestave solenoid Ctrl vezje nizko
|
||||
P0931=Zaklep prestave solenoid Ctrl vezje visoko
|
||||
P0932=Vezje tipala tlaka hidravlike
|
||||
P0933=Tipalo tlaka hidravlike vezje razpon/učinkovitost
|
||||
P0934=Vezje tipala tlaka hidravlike nizko
|
||||
P0935=Vezje tipala tlaka hidravlike visoko
|
||||
P0936=Tipalo tlaka hidravlike vezje prekinjeno
|
||||
P0937=Vezje tipala temperature olja v hidravliki
|
||||
P0938=Tipalo temperature olja v hidravliki vezje razpon/učinkovitost
|
||||
P0939=Vezje tipala temperature olja v hidravliki nizko
|
||||
P0940=Vezje tipala temperature olja v hidravliki visoko
|
||||
P0941=Tipalo temperature olja v hidravlično vezje prekinjeno
|
||||
P0942=Hid. Tlačna enota
|
||||
P0943=Hid. Ciklus enote tlaka prekratek
|
||||
P0944=Hid. Tlačna enota izguba tlaka
|
||||
P0945=Hid. Vezje relejev črpalke odprto
|
||||
P0946=Hid. Rele črpalke vezje razpon/učinkovitost
|
||||
P0947=Hid. Vezje relejev črpalke nizko
|
||||
P0948=Hid. Vezje relejev črpalke visoko
|
||||
P0949=Prilagodljivo učenje samodejnega prestavlja ni zaključeno
|
||||
P0950=Ročni nadzor samodejno prestavljanje vezje
|
||||
P0951=Ročni nadzor samodejno prestavljanje vezje razpon/učinkovitost
|
||||
P0952=Ročni nadzor samodejno prestavljanje vezje nizko
|
||||
P0953=Ročni nadzor samodejno prestavljanje vezje visoko
|
||||
P0954=Ročni nadzor samodejno prestavljanje vezje prekinjeno
|
||||
P0955=Ročni način samodejno prestavljanje vezje
|
||||
P0956=Ročni način samodejno prestavljanje vezje razpon/učinkovitost
|
||||
P0957=Ročni način samodejno prestavljanje vezje nizko
|
||||
P0958=Ročni način samodejno prestavljanje vezje visoko
|
||||
P0959=Ročni način samodejno prestavljanje vezje prekinjeno
|
||||
P0960=Solenoid nadzora tlaka A krmilno vezje odprto
|
||||
P0961=Nadzor tlaka solenoid A kontrolnik vezje razpon/učinkovitost
|
||||
P0962=Solenoid nadzora tlaka A krmilno vezje nizko
|
||||
P0963=Solenoid nadzora tlaka A krmilno vezje visoko
|
||||
P0964=Solenoid nadzora tlaka B krmilno vezje odprto
|
||||
P0965=Nadzor tlaka solenoid B kontrolnik vezje razpon/učinkovitost
|
||||
P0966=Solenoid nadzora tlaka B krmilno vezje nizko
|
||||
P0967=Solenoid nadzora tlaka B krmilno vezje visoko
|
||||
P0968=Solenoid nadzora tlaka C krmilno vezje odprto
|
||||
P0969=Nadzor tlaka solenoid C kontrolnik vezje razpon/učinkovitost
|
||||
P0970=Solenoid nadzora tlaka C krmilno vezje nizko
|
||||
P0971=Solenoid nadzora tlaka C krmilno vezje visoko
|
||||
P0972=Prestavljanje solenoid A kontrolnik vezje učinkovitost ali zagozdenje izklopljeno
|
||||
P0973=Solenoid prestavne ročice A krmilno vezje nizko
|
||||
P0974=Solenoid prestavne ročice A krmilno vezje visoko
|
||||
P0975=Prestavljanje solenoid B kontrolnik vezje učinkovitost ali zagozdenje izklopljeno
|
||||
P0976=Solenoid prestavne ročice B krmilno vezje nizko
|
||||
P0977=Solenoid prestavne ročice B krmilno vezje visoko
|
||||
P0978=Prestavljanje solenoid C kontrolnik vezje učinkovitost ali zagozdenje izklopljeno
|
||||
P0979=Solenoid prestavne ročice C krmilno vezje nizko
|
||||
P0980=Solenoid prestavne ročice C krmilno vezje visoko
|
||||
P0981=Prestavljanje solenoid D kontrolnik vezje učinkovitost ali zagozdenje izklopljeno
|
||||
P0982=Solenoid prestavne ročice D krmilno vezje nizko
|
||||
P0983=Solenoid prestavne ročice D krmilno vezje visoko
|
||||
P0984=Prestavljanje solenoid E kontrolnik vezje učinkovitost ali zagozdenje izklopljeno
|
||||
P0985=Solenoid prestavne ročice E krmilno vezje nizko
|
||||
P0986=Solenoid prestavne ročice E krmilno vezje visoko
|
||||
P0987=Tipalo/stikalo tlaka prestavnega olja E vezje
|
||||
P0988=Tipalo/stikalo tlaka prestavnega olja E vezje razpon/učinkovitost
|
||||
P0989=Tipalo/stikalo tlaka prestavnega olja E vezje nizko
|
||||
P0990=Tipalo/stikalo tlaka prestavnega olja E vezje visoko
|
||||
P0991=Tipalo/stikalo tlaka prestavnega olja E vezje prekinjeno
|
||||
P0992=Tipalo/stikalo tlaka prestavnega olja F vezje
|
||||
P0993=Tipalo/stikalo tlaka prestavnega olja F vezje razpon/učinkovitost
|
||||
P0994=Tipalo/stikalo tlaka prestavnega olja F vezje nizko
|
||||
P0995=Tipalo/stikalo tlaka prestavnega olja F vezje visoko
|
||||
P0996=Tipalo/stikalo tlaka prestavnega olja F vezje prekinjeno
|
||||
P0997=Prestavljanje solenoid F kontrolnik vezje učinkovitost ali zagozdenje izklopljeno
|
||||
P0998=Solenoid prestavne ročice F krmilno vezje nizko
|
||||
P0999=Solenoid prestavne ročice F krmilno vezje visoko
|
||||
@@ -0,0 +1,53 @@
|
||||
P0001=Bränslevolymregulator styrkrets/öppna
|
||||
P0002=Bränslevolymregulator styrkrets intervall/prestanda
|
||||
P0003=Bränslevolymregulator styrkrets låg
|
||||
P0004=Bränslevolymregulator styrkrets hög
|
||||
P0005=Bränsleavstängningsventil en styrkrets/öppen
|
||||
P041F=ISO/SAE reserverades
|
||||
P042E=ISO/SAE reserverades
|
||||
P012F=ISO/SAE reserverades
|
||||
P000E=ISO/SAE reserverades
|
||||
P000F=ISO/SAE reserverades
|
||||
P006E=ISO/SAE reserverades
|
||||
P018F=ISO/SAE reserverades
|
||||
P0364=ISO/SAE reserverades
|
||||
P023F=ISO/SAE reserverades
|
||||
P006F=ISO/SAE reserverades
|
||||
P0600=Seriell kommunikationslänk
|
||||
P0615=Startmotorns reläkrets
|
||||
P0297=Fordonets överhastighetstillstånd
|
||||
P0148=Fel i bränsletillförseln
|
||||
P245F=ISO/SAE reserverades
|
||||
P256F=ISO/SAE reserverades
|
||||
P0169=Felaktig bränsleförbrukning
|
||||
P0606=ECM/PCM-processor
|
||||
P206A=ISO/SAE reserverades
|
||||
P047F=ISO/SAE reserverades
|
||||
P240D=ISO/SAE reserverades
|
||||
P206B=ISO/SAE reserverades
|
||||
P069E=ISO/SAE reserverades
|
||||
P0620=Generatorns kontrollkrets
|
||||
P069F=ISO/SAE reserverades
|
||||
P075F=ISO/SAE reserverades
|
||||
P084F=ISO/SAE reserverades
|
||||
P206C=ISO/SAE reserverades
|
||||
P207F=ISO/SAE reserverades
|
||||
P245E=ISO/SAE reserverades
|
||||
P0494=Låg fläkthastighet
|
||||
P0607=Kontrollera modulens prestanda
|
||||
P0495=Hög fläkthastighet
|
||||
P240E=ISO/SAE reserverades
|
||||
P240F=ISO/SAE reserverades
|
||||
P255F=ISO/SAE reserverades
|
||||
P206D=ISO/SAE reserverades
|
||||
P205F=ISO/SAE reserverades
|
||||
P204F=ISO/SAE reserverades
|
||||
P0B0E=ISO/SAE reserverades
|
||||
P0B0F=ISO/SAE reserverades
|
||||
P080F=ISO/SAE reserverades
|
||||
P080E=ISO/SAE reserverades
|
||||
P0613=TCM-processor
|
||||
P050F=ISO/SAE reserverades
|
||||
P050E=ISO/SAE reserverades
|
||||
P042F=ISO/SAE reserverades
|
||||
P0149=Fel på bränsletiming
|
||||