├── eec-iv ├── .gitignore ├── resources │ ├── EECIVParameters.csv │ └── EECIVFaults.csv ├── .settings │ ├── org.eclipse.m2e.core.prefs │ └── org.eclipse.jdt.core.prefs ├── src │ └── babroval │ │ └── eec_iv │ │ ├── dao │ │ ├── Dao.java │ │ ├── FaultDaoImpl.java │ │ └── ParameterDaoImpl.java │ │ ├── service │ │ ├── Service.java │ │ ├── FaultServiceImpl.java │ │ └── ParameterServiceImpl.java │ │ ├── demo │ │ └── EecIVDemo.java │ │ ├── util │ │ ├── CsvUtil.java │ │ └── ConnectionPool.java │ │ ├── model │ │ ├── Fault.java │ │ └── Parameter.java │ │ ├── view │ │ └── StartView.java │ │ └── controller │ │ └── StartController.java ├── .project ├── .classpath └── pom.xml ├── Ford_EEC-IV_scanner.png ├── DCL_communication_map.pdf ├── Ford_EEC-IV_scanner_app.png ├── LICENSE ├── README.md ├── EEC-IV.hex └── EEC-IV_asm /eec-iv/.gitignore: -------------------------------------------------------------------------------- 1 | /bin/ 2 | /target/ 3 | -------------------------------------------------------------------------------- /Ford_EEC-IV_scanner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/babroval/ford-eec-iv-diagnostic/HEAD/Ford_EEC-IV_scanner.png -------------------------------------------------------------------------------- /DCL_communication_map.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/babroval/ford-eec-iv-diagnostic/HEAD/DCL_communication_map.pdf -------------------------------------------------------------------------------- /Ford_EEC-IV_scanner_app.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/babroval/ford-eec-iv-diagnostic/HEAD/Ford_EEC-IV_scanner_app.png -------------------------------------------------------------------------------- /eec-iv/resources/EECIVParameters.csv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/babroval/ford-eec-iv-diagnostic/HEAD/eec-iv/resources/EECIVParameters.csv -------------------------------------------------------------------------------- /eec-iv/.settings/org.eclipse.m2e.core.prefs: -------------------------------------------------------------------------------- 1 | activeProfiles= 2 | eclipse.preferences.version=1 3 | resolveWorkspaceProjects=true 4 | version=1 5 | -------------------------------------------------------------------------------- /eec-iv/src/babroval/eec_iv/dao/Dao.java: -------------------------------------------------------------------------------- 1 | package babroval.eec_iv.dao; 2 | 3 | import java.io.InputStream; 4 | import java.util.List; 5 | 6 | public interface Dao { 7 | 8 | List loadAll(InputStream csvFile); 9 | } 10 | -------------------------------------------------------------------------------- /eec-iv/src/babroval/eec_iv/service/Service.java: -------------------------------------------------------------------------------- 1 | package babroval.eec_iv.service; 2 | 3 | import java.io.InputStream; 4 | import java.util.List; 5 | 6 | public interface Service { 7 | 8 | List getAll(InputStream csvFile); 9 | 10 | List updateAll(List list, StringBuffer data); 11 | } 12 | -------------------------------------------------------------------------------- /eec-iv/.settings/org.eclipse.jdt.core.prefs: -------------------------------------------------------------------------------- 1 | eclipse.preferences.version=1 2 | org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 3 | org.eclipse.jdt.core.compiler.compliance=1.8 4 | org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning 5 | org.eclipse.jdt.core.compiler.release=disabled 6 | org.eclipse.jdt.core.compiler.source=1.8 7 | -------------------------------------------------------------------------------- /eec-iv/src/babroval/eec_iv/demo/EecIVDemo.java: -------------------------------------------------------------------------------- 1 | package babroval.eec_iv.demo; 2 | 3 | import javax.swing.SwingUtilities; 4 | 5 | import babroval.eec_iv.controller.StartController; 6 | 7 | public class EecIVDemo { 8 | 9 | public static void main(String[] args) { 10 | 11 | SwingUtilities.invokeLater(new Runnable() { 12 | public void run() { 13 | 14 | StartController controller = new StartController(); 15 | controller.initController(); 16 | } 17 | }); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /eec-iv/.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | eec-iv 4 | 5 | 6 | 7 | 8 | 9 | org.eclipse.jdt.core.javabuilder 10 | 11 | 12 | 13 | 14 | org.eclipse.m2e.core.maven2Builder 15 | 16 | 17 | 18 | 19 | 20 | org.eclipse.m2e.core.maven2Nature 21 | org.eclipse.jdt.core.javanature 22 | 23 | 24 | -------------------------------------------------------------------------------- /eec-iv/src/babroval/eec_iv/service/FaultServiceImpl.java: -------------------------------------------------------------------------------- 1 | package babroval.eec_iv.service; 2 | 3 | import java.io.InputStream; 4 | import java.util.List; 5 | 6 | import babroval.eec_iv.dao.Dao; 7 | import babroval.eec_iv.dao.FaultDaoImpl; 8 | import babroval.eec_iv.model.Fault; 9 | 10 | public class FaultServiceImpl implements Service { 11 | 12 | private Dao dao = new FaultDaoImpl(); 13 | 14 | @Override 15 | public List getAll(InputStream csvFile) { 16 | return dao.loadAll(csvFile); 17 | } 18 | 19 | @Override 20 | public List updateAll(List list, StringBuffer data) { 21 | throw new UnsupportedOperationException("Method has not implemented yet"); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /eec-iv/.classpath: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /eec-iv/src/babroval/eec_iv/util/CsvUtil.java: -------------------------------------------------------------------------------- 1 | package babroval.eec_iv.util; 2 | 3 | import java.io.BufferedReader; 4 | import java.io.InputStream; 5 | import java.io.InputStreamReader; 6 | import java.util.ArrayList; 7 | import java.util.List; 8 | 9 | public final class CsvUtil { 10 | 11 | public static List loadAllLinesFromCsvFile(InputStream csvFile) { 12 | 13 | List allLines = new ArrayList<>(); 14 | String line = ""; 15 | 16 | try (BufferedReader br = new BufferedReader(new InputStreamReader(csvFile))) { 17 | 18 | if (csvFile.available() < 0) { 19 | throw new RuntimeException("CSV file is empty"); 20 | } 21 | 22 | int id = 0; 23 | while ((line = br.readLine()) != null) { 24 | 25 | line = ++id + "," + line; 26 | allLines.add(line); 27 | } 28 | return allLines; 29 | 30 | } catch (Exception e) { 31 | throw new RuntimeException(e); 32 | } 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /eec-iv/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 4.0.0 3 | babroval.eec_iv 4 | eec-iv 5 | 0.0.1-SNAPSHOT 6 | eec-iv 7 | 8 | 9 | 10 | org.scream3r 11 | jssc 12 | 2.8.0 13 | 14 | 15 | 16 | 17 | src 18 | 19 | 20 | maven-compiler-plugin 21 | 3.7.0 22 | 23 | 1.8 24 | 1.8 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 Maksim Babrou 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /eec-iv/src/babroval/eec_iv/dao/FaultDaoImpl.java: -------------------------------------------------------------------------------- 1 | package babroval.eec_iv.dao; 2 | 3 | import java.io.InputStream; 4 | import java.util.ArrayList; 5 | import java.util.List; 6 | 7 | import babroval.eec_iv.model.Fault; 8 | import babroval.eec_iv.util.CsvUtil; 9 | 10 | public class FaultDaoImpl implements Dao { 11 | 12 | @Override 13 | public List loadAll(InputStream csvFile) { 14 | 15 | String cvsSplitBy = ","; 16 | List allLines = CsvUtil.loadAllLinesFromCsvFile(csvFile); 17 | 18 | List allEntities = new ArrayList<>(); 19 | 20 | for (String line : allLines) { 21 | 22 | String[] csvLine = line.split(cvsSplitBy); 23 | Fault entity = createEntity(csvLine); 24 | allEntities.add(entity); 25 | } 26 | return allEntities; 27 | } 28 | 29 | private static Fault createEntity(String[] csvLine) { 30 | 31 | try { 32 | Integer fault_id = Integer.valueOf(csvLine[0].trim()); 33 | String faultNumber = csvLine[1].trim(); 34 | String info = csvLine[2].trim(); 35 | 36 | Fault entity = new Fault(); 37 | 38 | entity.setFault_id(fault_id); 39 | entity.setNumber(faultNumber); 40 | entity.setInfo(info); 41 | 42 | return entity; 43 | 44 | } catch (Exception e) { 45 | throw new RuntimeException("incorrect data in CSV file", e); 46 | } 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /eec-iv/src/babroval/eec_iv/dao/ParameterDaoImpl.java: -------------------------------------------------------------------------------- 1 | package babroval.eec_iv.dao; 2 | 3 | import java.io.InputStream; 4 | import java.util.ArrayList; 5 | import java.util.List; 6 | 7 | import babroval.eec_iv.model.Parameter; 8 | import babroval.eec_iv.util.CsvUtil; 9 | 10 | public class ParameterDaoImpl implements Dao { 11 | 12 | @Override 13 | public List loadAll(InputStream csvFile) { 14 | 15 | String cvsSplitBy = ","; 16 | List allLines = CsvUtil.loadAllLinesFromCsvFile(csvFile); 17 | 18 | List allEntities = new ArrayList<>(); 19 | 20 | for (String line : allLines) { 21 | 22 | String[] csvLine = line.split(cvsSplitBy); 23 | Parameter entity = createEntity(csvLine); 24 | allEntities.add(entity); 25 | } 26 | return allEntities; 27 | } 28 | 29 | private static Parameter createEntity(String[] csvLine) { 30 | 31 | try { 32 | Integer parameter_id = Integer.valueOf(csvLine[0].trim()); 33 | String parameterNumber = csvLine[1].trim(); 34 | String parameterName = csvLine[2].trim(); 35 | String parameterValue = ""; 36 | 37 | Parameter entity = new Parameter(); 38 | 39 | entity.setParameter_id(parameter_id); 40 | entity.setNumber(parameterNumber); 41 | entity.setName(parameterName); 42 | entity.setValue(parameterValue); 43 | 44 | return entity; 45 | 46 | } catch (Exception e) { 47 | throw new RuntimeException("incorrect data in CSV file", e); 48 | } 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /eec-iv/src/babroval/eec_iv/util/ConnectionPool.java: -------------------------------------------------------------------------------- 1 | package babroval.eec_iv.util; 2 | 3 | import jssc.SerialPort; 4 | import jssc.SerialPortEvent; 5 | import jssc.SerialPortEventListener; 6 | import jssc.SerialPortList; 7 | 8 | public final class ConnectionPool { 9 | 10 | private static Boolean isPortDetected = false; 11 | private static String portName = ""; 12 | private static SerialPort serialPort = new SerialPort(portName); 13 | 14 | private ConnectionPool() { 15 | } 16 | 17 | private static class PoolHolder { 18 | private static final ConnectionPool POOL = new ConnectionPool(); 19 | } 20 | 21 | public static ConnectionPool getPool() { 22 | return PoolHolder.POOL; 23 | } 24 | 25 | public SerialPort getPort() { 26 | try { 27 | String[] portNames = SerialPortList.getPortNames(); 28 | 29 | for (int i = 0; i < portNames.length; i++) { 30 | 31 | portName = portNames[i]; 32 | // System.out.println(portName); 33 | serialPort = new SerialPort(portName); 34 | try { 35 | serialPort.openPort(); 36 | } catch (Exception e) { 37 | continue; 38 | } 39 | serialPort.setParams(SerialPort.BAUDRATE_38400, SerialPort.DATABITS_8, SerialPort.STOPBITS_2, 40 | SerialPort.PARITY_NONE); 41 | serialPort.addEventListener(new PortReader(), SerialPort.MASK_RXCHAR); 42 | Thread.sleep(100); 43 | serialPort.writeByte((byte) 7); 44 | Thread.sleep(100); 45 | if (isPortDetected) { 46 | return serialPort; 47 | } 48 | serialPort.closePort(); 49 | } 50 | throw new RuntimeException(); 51 | 52 | } catch (Exception e) { 53 | throw new RuntimeException(e); 54 | } 55 | } 56 | 57 | public SerialPort getConnection() { 58 | 59 | try { 60 | serialPort.openPort(); 61 | serialPort.setParams(SerialPort.BAUDRATE_38400, SerialPort.DATABITS_8, SerialPort.STOPBITS_2, 62 | SerialPort.PARITY_NONE); 63 | 64 | return serialPort; 65 | 66 | } catch (Exception e) { 67 | throw new RuntimeException(e); 68 | } 69 | } 70 | 71 | private static class PortReader implements SerialPortEventListener { 72 | 73 | @Override 74 | public void serialEvent(SerialPortEvent event) { 75 | if (event.isRXCHAR() && event.getEventValue() > 0) { 76 | try { 77 | String receivedData = serialPort.readHexString(event.getEventValue()); 78 | // System.out.println(receivedData); 79 | if (receivedData.equals("0C 0C")) { 80 | serialPort.writeByte((byte) 0); 81 | isPortDetected = true; 82 | } 83 | } catch (Exception e) { 84 | throw new RuntimeException(e); 85 | } 86 | } 87 | } 88 | } 89 | } 90 | -------------------------------------------------------------------------------- /eec-iv/src/babroval/eec_iv/model/Fault.java: -------------------------------------------------------------------------------- 1 | package babroval.eec_iv.model; 2 | 3 | public class Fault { 4 | 5 | private Integer fault_id = 0; 6 | private String number = ""; 7 | private String info = ""; 8 | 9 | public Fault() { 10 | } 11 | 12 | public Fault(Integer fault_id) { 13 | this.fault_id = fault_id; 14 | } 15 | 16 | public Fault(String number) { 17 | this.number = number; 18 | } 19 | 20 | public Fault(Integer fault_id, String number) { 21 | this.fault_id = fault_id; 22 | this.number = number; 23 | } 24 | 25 | public Fault(String number, String info) { 26 | this.number = number; 27 | this.info = info; 28 | } 29 | 30 | public Fault(Integer fault_id, String number, String info) { 31 | this.fault_id = fault_id; 32 | this.number = number; 33 | this.info = info; 34 | } 35 | 36 | public Integer getFault_id() { 37 | return fault_id; 38 | } 39 | 40 | public void setFault_id(Integer fault_id) { 41 | this.fault_id = fault_id; 42 | } 43 | 44 | public String getNumber() { 45 | return number; 46 | } 47 | 48 | public void setNumber(String number) { 49 | this.number = number; 50 | } 51 | 52 | public String getInfo() { 53 | return info; 54 | } 55 | 56 | public void setInfo(String info) { 57 | this.info = info; 58 | } 59 | 60 | @Override 61 | public int hashCode() { 62 | final int prime = 31; 63 | int result = 1; 64 | result = prime * result + ((fault_id == null) ? 0 : fault_id.hashCode()); 65 | result = prime * result + ((info == null) ? 0 : info.hashCode()); 66 | result = prime * result + ((number == null) ? 0 : number.hashCode()); 67 | return result; 68 | } 69 | 70 | @Override 71 | public boolean equals(Object obj) { 72 | if (this == obj) 73 | return true; 74 | if (obj == null) 75 | return false; 76 | if (!(obj instanceof Fault)) 77 | return false; 78 | Fault other = (Fault) obj; 79 | if (fault_id == null) { 80 | if (other.fault_id != null) 81 | return false; 82 | } else if (!fault_id.equals(other.fault_id)) 83 | return false; 84 | if (info == null) { 85 | if (other.info != null) 86 | return false; 87 | } else if (!info.equals(other.info)) 88 | return false; 89 | if (number == null) { 90 | if (other.number != null) 91 | return false; 92 | } else if (!number.equals(other.number)) 93 | return false; 94 | return true; 95 | } 96 | 97 | @Override 98 | public String toString() { 99 | return "Fault [fault_id=" + fault_id + ", number=" + number + ", info=" + info + "]"; 100 | } 101 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ![Alt text](Ford_EEC-IV_scanner_app.png) 2 | ![Alt text](Ford_EEC-IV_scanner.png) 3 | 4 | FORD EEC-IV diagnostic scanner 5 | ============================== 6 | This is Java desktop project for petrol engine diagnostic for cars with 7 | Ford EEC-IV ECU with DCL communication data bus which goes from ECU pins number 18 and number 19 from total 60. 8 | Please be aware that many EEC-IV ECU do not have a DCL bus line, such as mono injection, engines with mechanical ignition distributor and diesels. 9 | 10 | The principle is, that commands from USB port convert by bridge CP2101 to UART0 port of AVR controller, and instructions from other UART1 port of the controller convert by transceiver 75ALS176 for Ford EEC-IV diagnostic bus with Ford DCL communication standard which is the same as RS-485 standard with minor changes. 11 | Usual USB-RS485 converter can not synchronize with ECU because of losing time for virtual COM port emulation, so the controller, in this case, is like a "cache" or a "buffer". Most of DCL command instructions, which were found experimentally, are in [DCL_communication_map.pdf][commap] file. 12 | 13 | [![MIT licensed](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/babroval/ford-eec-iv-scanner/blob/master/LICENSE) 14 | ``` 15 | 16 | org.scream3r 17 | jssc 18 | 2.8.0 19 | 20 | ``` 21 | Table of Contents 22 | ----------------- 23 | * [Requirements](#requirements) 24 | * [Usage](#usage) 25 | * [Contributing](#contributing) 26 | * [License](#license) 27 | 28 | Requirements 29 | ------------ 30 | The FORD EEC-IV scanner interface board can be made independently or a ready module can be found, for example: 31 | * [Crumb128 V4 USB RS485 Modul][crumb128] with bootloader and quartz 16.0000MHz on chip45.com 32 |
The first part of the code for AVR controller was creating in Assembly language. The EEC-IV_asm file is a bit messy, but it works! So EEC-IV.hex for ATmega128 is included and ready to write flash memory by any cheap analog of AVR programmer: 33 | * [AVRISP][avrisp] 34 |
In this part everything can be done with: 35 | * [AVR Studio 4][avr].14.589 and 36 | * [JRE][jre] 8 37 | 38 | 39 | Usage 40 | ----- 41 | The project is easy to manage with [Eclipse IDE][eclipse]: 42 | File -> Import -> Git -> Projects From Git > URI 43 | 44 | #### Error handling 45 | All exceptions are converted into unchecked type to 46 | keep code clean as possible. 47 |
48 |
49 | 50 | Contributing 51 | ------------ 52 | To contribute to FORD EEC-IV scanner project, clone this repo locally and 53 | commit your code on a separate branch. 54 |
55 |
56 | 57 | License 58 | ------- 59 | FORD EEC-IV diagnostic scanner is licensed under the [MIT][mit] license. 60 | 61 | [commap]: https://github.com/babroval/ford-eec-iv-diagnostic/blob/master/DCL_communication_map.pdf/ 62 | [avrisp]: https://www.microchip.com/developmenttools/ProductDetails/atavrisp2 63 | [crumb128]: https://www.chip45.com/atmega128-usb-rs485-module.html 64 | [avr]: http://www.microchip.com/mplab/avr-support/avr-and-sam-downloads-archive 65 | [jre]: https://www.java.com/en/download/ 66 | [eclipse]: https://www.eclipse.org/downloads/ 67 | [video]: https://youtu.be/0mJQrj8HoHk/ 68 | [mit]: https://github.com/babroval/ford-eec-iv-scanner/blob/master/LICENSE/ 69 | 70 | -------------------------------------------------------------------------------- /eec-iv/src/babroval/eec_iv/model/Parameter.java: -------------------------------------------------------------------------------- 1 | package babroval.eec_iv.model; 2 | 3 | public class Parameter { 4 | 5 | private Integer parameter_id = 0; 6 | private String number = ""; 7 | private String name = ""; 8 | private String value = ""; 9 | 10 | public Parameter() { 11 | } 12 | 13 | public Parameter(Integer parameter_id) { 14 | this.parameter_id = parameter_id; 15 | } 16 | 17 | public Parameter(String number) { 18 | this.number = number; 19 | } 20 | 21 | public Parameter(Integer parameter_id, String number) { 22 | this.parameter_id = parameter_id; 23 | this.number = number; 24 | } 25 | 26 | public Parameter(String number, String name) { 27 | this.number = number; 28 | this.name = name; 29 | } 30 | 31 | public Parameter(Integer parameter_id, String number, String name) { 32 | this.parameter_id = parameter_id; 33 | this.number = number; 34 | this.name = name; 35 | } 36 | 37 | public Parameter(String number, String name, String value) { 38 | this.number = number; 39 | this.name = name; 40 | this.value = value; 41 | } 42 | 43 | public Parameter(Integer parameter_id, String number, String name, String value) { 44 | this.parameter_id = parameter_id; 45 | this.number = number; 46 | this.name = name; 47 | this.value = value; 48 | } 49 | 50 | public Integer getParameter_id() { 51 | return parameter_id; 52 | } 53 | 54 | public void setParameter_id(Integer parameter_id) { 55 | this.parameter_id = parameter_id; 56 | } 57 | 58 | public String getNumber() { 59 | return number; 60 | } 61 | 62 | public void setNumber(String number) { 63 | this.number = number; 64 | } 65 | 66 | public String getName() { 67 | return name; 68 | } 69 | 70 | public void setName(String name) { 71 | this.name = name; 72 | } 73 | 74 | public String getValue() { 75 | return value; 76 | } 77 | 78 | public void setValue(String value) { 79 | this.value = value; 80 | } 81 | 82 | @Override 83 | public int hashCode() { 84 | final int prime = 31; 85 | int result = 1; 86 | result = prime * result + ((name == null) ? 0 : name.hashCode()); 87 | result = prime * result + ((number == null) ? 0 : number.hashCode()); 88 | result = prime * result + ((parameter_id == null) ? 0 : parameter_id.hashCode()); 89 | result = prime * result + ((value == null) ? 0 : value.hashCode()); 90 | return result; 91 | } 92 | 93 | @Override 94 | public boolean equals(Object obj) { 95 | if (this == obj) 96 | return true; 97 | if (obj == null) 98 | return false; 99 | if (!(obj instanceof Parameter)) 100 | return false; 101 | Parameter other = (Parameter) obj; 102 | if (name == null) { 103 | if (other.name != null) 104 | return false; 105 | } else if (!name.equals(other.name)) 106 | return false; 107 | if (number == null) { 108 | if (other.number != null) 109 | return false; 110 | } else if (!number.equals(other.number)) 111 | return false; 112 | if (parameter_id == null) { 113 | if (other.parameter_id != null) 114 | return false; 115 | } else if (!parameter_id.equals(other.parameter_id)) 116 | return false; 117 | if (value == null) { 118 | if (other.value != null) 119 | return false; 120 | } else if (!value.equals(other.value)) 121 | return false; 122 | return true; 123 | } 124 | 125 | @Override 126 | public String toString() { 127 | return "Parameter [parameter_id=" + parameter_id + ", number=" + number + ", name=" + name + ", value=" + value 128 | + "]"; 129 | } 130 | } 131 | -------------------------------------------------------------------------------- /eec-iv/src/babroval/eec_iv/view/StartView.java: -------------------------------------------------------------------------------- 1 | package babroval.eec_iv.view; 2 | 3 | import javax.swing.DefaultListModel; 4 | import javax.swing.JButton; 5 | import javax.swing.JCheckBox; 6 | import javax.swing.JFrame; 7 | import javax.swing.JLabel; 8 | import javax.swing.JList; 9 | import javax.swing.JPanel; 10 | 11 | public class StartView extends JFrame { 12 | 13 | private static final long serialVersionUID = 1L; 14 | 15 | private JPanel panel; 16 | private JButton faults, koeo, koer, data, disconnect; 17 | private JCheckBox baud; 18 | private JLabel label; 19 | private JLabel labelConnect; 20 | private DefaultListModel modelParam; 21 | private JList dataList; 22 | 23 | { 24 | panel = new JPanel(null); 25 | faults = new JButton("FAULTS"); 26 | koeo = new JButton("KOEO"); 27 | koer = new JButton("KOER"); 28 | data = new JButton("DATA"); 29 | disconnect = new JButton("Disconnect"); 30 | baud = new JCheckBox("other ECU"); 31 | label = new JLabel(""); 32 | labelConnect = new JLabel(""); 33 | modelParam = new DefaultListModel<>(); 34 | dataList = new JList<>(modelParam); 35 | 36 | faults.setBounds(20, 20, 160, 40); 37 | koeo.setBounds(200, 20, 80, 40); 38 | koer.setBounds(285, 20, 80, 40); 39 | data.setBounds(385, 20, 160, 40); 40 | disconnect.setBounds(680, 20, 160, 40); 41 | baud.setBounds(860, 20, 160, 20); 42 | label.setBounds(20, 120, 900, 200); 43 | labelConnect.setBounds(20, 470, 990, 20); 44 | dataList.setBounds(240, 100, 400, 310); 45 | 46 | panel.add(faults); 47 | panel.add(koeo); 48 | panel.add(koer); 49 | panel.add(data); 50 | panel.add(disconnect); 51 | panel.add(baud); 52 | panel.add(label); 53 | panel.add(labelConnect); 54 | panel.add(dataList); 55 | add(panel); 56 | } 57 | 58 | public StartView() { 59 | setSize(995, 550); 60 | setTitle("EEC-IV Diagnostic"); 61 | setLocationRelativeTo(null); 62 | setDefaultCloseOperation(EXIT_ON_CLOSE); 63 | setResizable(false); 64 | setVisible(true); 65 | } 66 | 67 | public JPanel getPanel() { 68 | return panel; 69 | } 70 | 71 | public void setPanel(JPanel panel) { 72 | this.panel = panel; 73 | } 74 | 75 | public JButton getFaults() { 76 | return faults; 77 | } 78 | 79 | public void setFaults(JButton faults) { 80 | this.faults = faults; 81 | } 82 | 83 | public JButton getKoeo() { 84 | return koeo; 85 | } 86 | 87 | public void setKoeo(JButton koeo) { 88 | this.koeo = koeo; 89 | } 90 | 91 | public JButton getKoer() { 92 | return koer; 93 | } 94 | 95 | public void setKoer(JButton koer) { 96 | this.koer = koer; 97 | } 98 | 99 | public JButton getData() { 100 | return data; 101 | } 102 | 103 | public void setData(JButton data) { 104 | this.data = data; 105 | } 106 | 107 | public JButton getDisconnect() { 108 | return disconnect; 109 | } 110 | 111 | public void setDisconnect(JButton disconnect) { 112 | this.disconnect = disconnect; 113 | } 114 | 115 | public JCheckBox getBaud() { 116 | return baud; 117 | } 118 | 119 | public void setBaud(JCheckBox baud) { 120 | this.baud = baud; 121 | } 122 | 123 | public JLabel getLabel() { 124 | return label; 125 | } 126 | 127 | public void setLabel(JLabel label) { 128 | this.label = label; 129 | } 130 | 131 | public JLabel getLabelConnect() { 132 | return labelConnect; 133 | } 134 | 135 | public void setLabelConnect(JLabel labelConnect) { 136 | this.labelConnect = labelConnect; 137 | } 138 | 139 | public DefaultListModel getModelParam() { 140 | return modelParam; 141 | } 142 | 143 | public void setModelParam(DefaultListModel modelParam) { 144 | this.modelParam = modelParam; 145 | } 146 | 147 | public JList getDataList() { 148 | return dataList; 149 | } 150 | 151 | public void setDataList(JList dataList) { 152 | this.dataList = dataList; 153 | } 154 | } 155 | -------------------------------------------------------------------------------- /eec-iv/src/babroval/eec_iv/service/ParameterServiceImpl.java: -------------------------------------------------------------------------------- 1 | package babroval.eec_iv.service; 2 | 3 | import java.io.InputStream; 4 | import java.util.List; 5 | 6 | import babroval.eec_iv.dao.Dao; 7 | import babroval.eec_iv.dao.ParameterDaoImpl; 8 | import babroval.eec_iv.model.Parameter; 9 | 10 | public class ParameterServiceImpl implements Service { 11 | 12 | private Dao dao = new ParameterDaoImpl(); 13 | 14 | @Override 15 | public List getAll(InputStream csvFile) { 16 | return dao.loadAll(csvFile); 17 | } 18 | 19 | @Override 20 | public List updateAll(List list, StringBuffer data) { 21 | for (Parameter entity : list) { 22 | String value = setValue(entity.getNumber(), data); 23 | entity.setValue(value); 24 | } 25 | return list; 26 | } 27 | 28 | private static String setValue(String parameterNumber, StringBuffer data) { 29 | 30 | String value = ""; 31 | String temp = ""; 32 | Integer i = 0, j = 0, k = 0; 33 | 34 | switch (parameterNumber) { 35 | case "1": 36 | i = Integer.parseInt(data.substring(0, 2), 16); 37 | j = Integer.parseInt("0" + data.substring(3, 4), 16); 38 | i = i * 4 + j * 1024; 39 | i = ((i + 5) / 10) * 10; 40 | value = String.valueOf(i); 41 | break; 42 | case "2": 43 | i = Integer.parseInt("0" + data.substring(16, 17), 16); 44 | j = Integer.parseInt("0" + data.substring(19, 20), 16); 45 | i = 128 - (j * 16 + i); 46 | value = String.valueOf(i); 47 | break; 48 | case "3": 49 | i = Integer.parseInt(data.substring(8, 10), 16); 50 | j = 4 - Integer.parseInt("0" + data.substring(11, 12), 16); 51 | i = (256 * j - i) * 2675 / 1000; 52 | value = String.valueOf(i); 53 | break; 54 | case "4": 55 | temp = data.substring(48, 52); 56 | if (temp.equals("3090")) { 57 | value = "Opened"; 58 | } else { 59 | value = "Closed"; 60 | } 61 | break; 62 | case "5": 63 | i = Integer.parseInt(data.substring(32, 34), 16); 64 | i = i * 10 / 256; 65 | j = Integer.parseInt("0" + data.substring(35, 36), 16); 66 | if (j.equals(0) && i.equals(0)) { 67 | value = "0"; 68 | } else if (j.equals(0) && !i.equals(0)) { 69 | value = String.valueOf(i) + "00"; 70 | } else { 71 | value = String.valueOf(j) + String.valueOf(i) + "00"; 72 | } 73 | break; 74 | case "6": 75 | i = Integer.parseInt(data.substring(36, 38), 16); 76 | j = Integer.parseInt("0" + data.substring(39, 40), 16); 77 | i = ((256 * j + i) - (256 * j + i) / 24) * 80; 78 | value = String.valueOf(i); 79 | break; 80 | case "7": 81 | i = Integer.parseInt(data.substring(12, 14), 16); 82 | j = Integer.parseInt("0" + data.substring(15, 16), 16); 83 | k = (256 * j + i) * 5 / 200; 84 | i = ((256 * j + i) - k) * 5; 85 | value = String.valueOf(i); 86 | break; 87 | case "8": 88 | temp = data.substring(44, 46); 89 | if (temp.equals("FF")) { 90 | value = "Closed"; 91 | } else if (temp.equals("00")) { 92 | value = "Part. Opened"; 93 | } else if (temp.equals("01")) { 94 | value = "Fully Opened"; 95 | } 96 | break; 97 | case "9": 98 | i = Integer.parseInt(data.substring(40, 42), 16) / 4; 99 | value = String.valueOf(i); 100 | break; 101 | case "10": 102 | i = Integer.parseInt("0" + data.substring(4, 5), 16); 103 | j = Integer.parseInt("0" + data.substring(5, 6), 16); 104 | j = j * 10 / 16; 105 | value = String.valueOf(i) + "." + String.valueOf(j); 106 | break; 107 | case "11": 108 | i = Integer.parseInt(data.substring(20, 22), 16); 109 | i = (i - 16) / 10 + i - 15; 110 | value = String.valueOf(i); 111 | break; 112 | case "12": 113 | i = Integer.parseInt(data.substring(24, 26), 16); 114 | i = (i - 16) / 10 + i - 15; 115 | value = String.valueOf(i); 116 | break; 117 | case "13": 118 | i = Integer.parseInt("0" + data.substring(28, 29), 16); 119 | j = Integer.parseInt("0" + data.substring(31, 32), 16); 120 | i = (((15 * j) + i) * 80 + 45 * j) / 100; 121 | value = String.valueOf(i); 122 | break; 123 | case "14": 124 | temp = data.substring(52, 56); 125 | if (temp.equals("1380") | temp.equals("1290") | temp.equals("32B0")) { 126 | value = "High"; 127 | } else { 128 | value = "Low"; 129 | } 130 | break; 131 | case "15": 132 | temp = data.substring(56, 60); 133 | if (temp.equals("80EC")) { 134 | value = "Opened"; 135 | } else { 136 | value = "Closed"; 137 | } 138 | break; 139 | case "16": 140 | temp = data.substring(56, 60); 141 | if (temp.equals("0028") | temp.equals("80A8") | temp.equals("2008") | temp.equals("A088")) { 142 | value = "N or P"; 143 | } else if (temp.equals("4068") | temp.equals("C0E8") | temp.equals("6048") | temp.equals("E0C8")) { 144 | value = "D or R"; 145 | } 146 | break; 147 | case "17": 148 | temp = data.substring(56, 60); 149 | if (temp.equals("0028") | temp.equals("80A8") | temp.equals("4068") | temp.equals("C0E8")) { 150 | value = "Released"; 151 | } else if (temp.equals("2008") | temp.equals("A088") | temp.equals("6048") | temp.equals("E0C8")) { 152 | value = "Pressed"; 153 | } 154 | break; 155 | default: 156 | throw new RuntimeException("incorrect data"); 157 | } 158 | return value; 159 | } 160 | } 161 | -------------------------------------------------------------------------------- /eec-iv/resources/EECIVFaults.csv: -------------------------------------------------------------------------------- 1 | 010, Separator/command code: Briefly depress accelerator pedal fully 2 | 020, Command code: Briefly depress brake pedal fully 3 | 030, Command code: Briefly depress brake pedal fully 4 | 10, Cylinder 1, low power 5 | 20, Cylinder 2, low power 6 | 30, Cylinder 3, low power 7 | 40, Cylinder 4, low power 8 | 50, Cylinder 5, low power 9 | 60, Cylinder 6, low power 10 | 70, Cylinder 7, low power 11 | 80, Cylinder 8, low power 12 | 90, Cylinder balance test OK 13 | 111, All systems work properly 14 | 112, Intake air temperature (IAT) sensor - voltage low 15 | 113, Intake air temperature (IAT) sensor - voltage high 16 | 114, Intake air temperature (IAT) sensor - range 17 | 116, Engine coolant temperature (ECT) sensor - range 18 | 117, Engine coolant temperature (ECT) sensor - voltage low 19 | 118, Engine coolant temperature (ECT) sensor - voltage high 20 | 119, There is no connection with the engine control unit (switch on the ignition) 21 | 121, Throttle position (TP) switch/sensor - range 22 | 122, Throttle position (TP) switch/sensor - voltage low 23 | 123, Throttle position (TP) switch/sensor - voltage high 24 | 124, Throttle position (TP) switch/sensor - voltage high 25 | 125, Throttle position (TP) switch/sensor - voltage low 26 | 129, Mass air flow (MAF)sensor / manifold absolute pressure (MAP)sensor - no signal change during throttle 'blip' 27 | 136, Heated oxygen sensor (HO2S) 2, bank 2 - weak mixture 28 | 137, Heated oxygen sensor (HO2S) 2, bank 2 - rich mixture 29 | 139, Heated oxygen sensor (HO2S) 2, bank 2 - weak/rich mixture 30 | 144, Heated oxygen sensor (HO2S) 1, bank 1 - weak/rich mixture 31 | 157, Mass air flow (MAF) sensor - voltage low 32 | 158, Mass air flow (MAF) sensor - voltage high 33 | 159, Mass air flow (MAF) sensor - range 34 | 167, Throttle position (TP) switch/sensor - no signal change during throttle 'blip' 35 | 171, Heated oxygen sensor (HO2S) 1, bank 1 - adaptive limit reached 36 | 172, Heated oxygen sensor (HO2S) 1, bank 1 - weak mixture 37 | 173, Heated oxygen sensor (HO2S) 1, bank 1 - rich mixture 38 | 174, Heated oxygen sensor (HO2S) 39 | 175, Heated oxygen sensor (HO2S) 2, bank 2 - adaptive limit reached 40 | 176, Heated oxygen sensor (HO2S) 2, bank 2 - weak mixture 41 | 177, Heated oxygen sensor (HO2S) 2, bank 2 - rich mixture 42 | 178, Heated oxygen sensor (HO2S) 43 | 179, Fuel trim (part throttle) - weak mixture 44 | 181, Fuel trim (part throttle) - rich mixture 45 | 182, Fuel trim (idle) - weak mixture 46 | 183, Fuel trim (idle) - rich mixture 47 | 184, Mass air flow (MAF) sensor - air flow high 48 | 185, Mass air flow (MAF) sensor - air flow low 49 | 186, Injector pulse width - too long 50 | 187, Injector pulse width - too short 51 | 188, Heated oxygen sensor (HO2S), bank 2 - weak mixture 52 | 189, Heated oxygen sensor (HO2S), bank 2 - rich mixture 53 | 191, Heated oxygen sensor (HO2S), bank 2 - idle mixture weak 54 | 192, Heated oxygen sensor (HO2S), bank 1 - idle mixture rich 55 | 194, Heated oxygen sensor (HO2S) 56 | 195, Heated oxygen sensor (HO2S) 57 | 211, Profile ignition pick-up (PIP) signal 58 | 212, Tachometer circuit 59 | 213, Spark output (SPOUT) signal 60 | 214, Camshaft position (CMP) sensor - circuit malfunction 61 | 215, Ignition coil 1, EDIS 62 | 216, Ignition coil 2, EDIS 63 | 217, Ignition coil 3, EDIS 64 | 218, Tachometer circuit 65 | 222, Tachometer circuit 66 | 226, Ignition control (EDIS) module - pulse missing 67 | 227, Crankshaft position (CKP) sensor/engine speed (RPM) sensor 68 | 228, Ignition control (EDIS) module/ignition coil 1 69 | 229, Ignition control (EDIS) module/ignition coil 2 70 | 231, Ignition control (EDIS) module/ignition coil 3 71 | 232, Ignition coil primary circuit 72 | 233, Ignition control (EDIS) module 73 | 234, Ignition coil 74 | 235, Ignition coil 75 | 236, Ignition coil 76 | 237, Ignition coil 77 | 238, Ignition control (EDIS) module/ignition coil 78 | 239, Profile ignition pick-up (PIP) signal - PIP signal occurs when engine cranking 79 | 241, Engine control module (ECM)/ignition control (EDIS) module - false data 80 | 243, Ignition coil 81 | 311, Pulsed secondary air injection (PAIR) system 82 | 312, Pulsed secondary air injection (PAIR) system 83 | 313, Pulsed secondary air injection (PAIR) system 84 | 314, Pulsed secondary air injection (PAIR) system 85 | 315, Pulsed secondary air injection (PAIR) system 86 | 316, Pulsed secondary air injection (PAIR) system 87 | 326, Exhaust pressure (EP) sensor 88 | 327, Exhaust pressure (EP) sensor/exhaust gas recirculation (EGR) solenoid 89 | 328, Exhaust gas recirculation (EGR) solenoid 90 | 332, Exhaust gas recirculation (EGR) solenoid 91 | 334, Exhaust gas recirculation (EGR) solenoid 92 | 335, Exhaust pressure (EP) sensor 93 | 336, Exhaust pressure (EP) - high 94 | 337, Exhaust pressure (EP) sensor/exhaust gas recirculation (EGR) solenoid 95 | 338, Engine coolant temperature (ECT) sensor - temperature low 96 | 339, Engine coolant temperature (ECT) sensor - temperature high 97 | 341, Octane plug - connected to earth 98 | 411, Engine rpm too low during self-test 99 | 412, Engine rpm too high during self-test 100 | 413, Idle air control (IAC) valve 101 | 414, Idle air control (IAC) valve 102 | 415, Idle air control (IAC) valve 103 | 416, Idle air control (IAC) valve 104 | 452, Vehicle speed sensor (VSS) 105 | 511, Engine control module (ECM) - ROM error 106 | 512, Engine control module (ECM) - KAM error 107 | 513, Engine control module (ECM) - internal reference voltage 108 | 519, Power steering pressure (PSP) switch - not activated during self-test 109 | 521, Power steering pressure (PSP) switch - not activated 110 | 522, Park/neutral position (PNP) switch - circuit malfunction 111 | 523, Park/neutral position (PNP) switch - circuit malfunction 112 | 528, Clutch pedal position (CPP) switch - circuit malfunction 113 | 536, Brake pedal position (BPP) switch - not activated during self-test 114 | 538, Operator error during self-test 115 | 539, AC switched ON during self-test 116 | 542, Fuel pump - circuit malfunction 117 | 543, Fuel pump - circuit malfunction 118 | 551, Idle air control (IAC) valve - circuit malfunction 119 | 552, Pulsed secondary air injection (PAIR) system - circuit malfunction 120 | 556, Fuel pump - circuit malfunction 121 | 558, Exhaust gas recirculation (EGR) solenoid - circuit malfunction 122 | 563, Engine coolant blower motor relay - circuit malfunction 123 | 564, Engine coolant blower motor relay - circuit malfunction 124 | 565, Evaporative emission (EVAP) canister purge valve - circuit malfunction 125 | 566, 3rd/4th gear shift solenoid 126 | 573, Engine coolant blower motor relay - circuit malfunction 127 | 574, Engine coolant blower motor relay - circuit malfunction 128 | 575, Fuel pump/inertia fuel shut-off (IFS) switch - circuit 129 | 576, Kick-down switch 130 | 577, Kick-down switch - not activated during self-test 131 | 612, Transmission range(TR)switch, 4th/3th gear switch contacts - open circuit 132 | 613, Transmission range(TR)switch, 4th/3th gear switch contacts - open circuit 133 | 614, Transmission range(TR)switch, 3th/2th gear switch contacts - short circuit 134 | 615, Transmission range(TR)switch, 3th/2th gear switch contacts - open circuit 135 | 621, Shift solenoid (SS) 1 - circuit malfunction 136 | 622, Shift solenoid (SS) 2 - circuit malfunction 137 | 624, AT electronic pressure control solenoid 138 | 625, AT electronic pressure control solenoid - circut malfunction 139 | 628, Modulated torque converter clutch (TCC) solenoid 140 | 629, Torque converter clutch (TCC) solenoid 141 | 634, Park/neutral position (PNP) switch 142 | 635, Transmission fluid temperature(TFT) switch - circut malfunction 143 | 636, Transmission fluid temperature(TFT) switch - circut malfunction 144 | 637, Transmission fluid temperature(TFT) switch - circut malfunction 145 | 638, Transmission fluid temperature(TFT) switch - circut malfunction 146 | 639, Turbine shaft speed (TSS) sensor - signal low 147 | 645, 1st gear failure - incorrect ratio 148 | 646, 2nd gear failure - incorrect ratio 149 | 647, 3rd gear failure - incorrect ratio 150 | 648, 4th gear failure - incorrect ratio 151 | 649, Electronic throttle valve - failure 152 | 651, Electronic throttle valve - intermittent failure 153 | 652, Modulated torque converter clutch (TCC) solenoid - circuit malfunction 154 | 653, Transmission control switch - not activated during self-test 155 | 658, Performance/economy switch - not activated during self-test 156 | 998, ECT sensor/IAT sensor/MAF sensor/TP sensor - circuit malfunction -------------------------------------------------------------------------------- /eec-iv/src/babroval/eec_iv/controller/StartController.java: -------------------------------------------------------------------------------- 1 | package babroval.eec_iv.controller; 2 | 3 | import java.awt.event.ActionEvent; 4 | import java.awt.event.ActionListener; 5 | import java.io.InputStream; 6 | import java.util.ArrayList; 7 | import java.util.List; 8 | import java.util.Timer; 9 | import java.util.TimerTask; 10 | 11 | import javax.swing.JOptionPane; 12 | 13 | import babroval.eec_iv.model.Fault; 14 | import babroval.eec_iv.model.Parameter; 15 | import babroval.eec_iv.service.FaultServiceImpl; 16 | import babroval.eec_iv.service.ParameterServiceImpl; 17 | import babroval.eec_iv.service.Service; 18 | import babroval.eec_iv.util.ConnectionPool; 19 | import babroval.eec_iv.view.StartView; 20 | import jssc.SerialPort; 21 | import jssc.SerialPortEvent; 22 | import jssc.SerialPortEventListener; 23 | import jssc.SerialPortException; 24 | 25 | public class StartController extends Thread { 26 | 27 | private static final String FILE_FAULTS_PATH = "/EECIVFaults.csv"; 28 | private static final String FILE_PARAMETERS_PATH = "/EECIVParameters.csv"; 29 | private static SerialPort serialPort; 30 | public static StartView view = new StartView(); 31 | 32 | private static List allFaults = new ArrayList<>(); 33 | private static List allParameters = new ArrayList<>(); 34 | private static List faults = new ArrayList<>(); 35 | private static StringBuffer data = new StringBuffer(""); 36 | 37 | private static Service faultService = new FaultServiceImpl(); 38 | private static Service parameterService = new ParameterServiceImpl(); 39 | 40 | private static Timer timer = new Timer(); 41 | { 42 | try { 43 | serialPort = ConnectionPool.getPool().getPort(); 44 | } catch (Exception e) { 45 | resetFrame(); 46 | } 47 | resetFrame(); 48 | 49 | try { 50 | InputStream csvFile = getClass().getResourceAsStream(FILE_FAULTS_PATH); 51 | allFaults = faultService.getAll(csvFile); 52 | csvFile = getClass().getResourceAsStream(FILE_PARAMETERS_PATH); 53 | allParameters = parameterService.getAll(csvFile); 54 | } catch (Exception e) { 55 | resetFrame(); 56 | JOptionPane.showMessageDialog(view.getPanel(), "CSV file reading fault", "", JOptionPane.ERROR_MESSAGE); 57 | } 58 | } 59 | 60 | public StartController() { 61 | } 62 | 63 | public void initController() { 64 | 65 | view.getDisconnect().addActionListener(new ActionListener() { 66 | 67 | @Override 68 | public void actionPerformed(ActionEvent arg0) { 69 | resetFrame(); 70 | } 71 | }); 72 | 73 | view.getFaults().addActionListener(new ActionListener() { 74 | @Override 75 | public void actionPerformed(ActionEvent ae) { 76 | try { 77 | faults.clear(); 78 | faults.add("ECU faults:"); 79 | view.getFaults().setEnabled(false); 80 | view.getData().setEnabled(false); 81 | view.getDisconnect().setEnabled(false); 82 | view.getBaud().setEnabled(false); 83 | view.getLabelConnect().setText("Connection established. Reading ECU faults... Wait 30 seconds"); 84 | 85 | serialPort = ConnectionPool.getPool().getConnection(); 86 | serialPort.addEventListener(new PortReader(), SerialPort.MASK_RXCHAR); 87 | Thread.sleep(1000); 88 | 89 | if (view.getBaud().isSelected()) { 90 | serialPort.writeByte((byte) 4); 91 | } else { 92 | serialPort.writeByte((byte) 5); 93 | } 94 | Thread.sleep(500); 95 | 96 | serialPort.writeByte((byte) 1); 97 | 98 | timer = new Timer(); 99 | timer.schedule(new TimerTask() { 100 | @Override 101 | public void run() { 102 | try { 103 | serialPort.closePort(); 104 | if (view.getLabel().getText().equals("")) { 105 | 106 | resetFrame(); 107 | view.getLabelConnect().setText( 108 | "ECU connection fault (check the wiring, reconnect USB cable, select or deselect checkbox 'other ECU', switch the ignition OFF and ON"); 109 | JOptionPane.showMessageDialog(view.getPanel(), 110 | "ECU connection fault (check the wiring, reconnect USB cable, select or deselect checkbox 'other ECU', switch the ignition OFF and ON", 111 | "", JOptionPane.WARNING_MESSAGE); 112 | } else { 113 | view.getFaults().setEnabled(false); 114 | view.getKoeo().setEnabled(true); 115 | view.getDisconnect().setEnabled(true); 116 | view.getLabel().setVisible(true); 117 | view.getLabelConnect() 118 | .setText("Switch the ignition ON, if it is OFF, and press button 'KOEO'"); 119 | } 120 | } catch (SerialPortException e) { 121 | resetFrame(); 122 | } 123 | } 124 | }, 25000); 125 | } catch (Exception e) { 126 | resetFrame(); 127 | JOptionPane.showMessageDialog(view.getPanel(), "COM-port connection fault (check USB wiring)", "", 128 | JOptionPane.ERROR_MESSAGE); 129 | } 130 | } 131 | }); 132 | 133 | view.getKoeo().addActionListener(new ActionListener() { 134 | @Override 135 | public void actionPerformed(ActionEvent ae) { 136 | try { 137 | faults.clear(); 138 | faults.add("KOEO test result faults:"); 139 | view.getLabel().setText(""); 140 | view.getLabel().setVisible(false); 141 | view.getFaults().setEnabled(false); 142 | view.getKoeo().setEnabled(false); 143 | view.getDisconnect().setEnabled(false); 144 | view.getBaud().setEnabled(false); 145 | view.getLabelConnect().setText("Connection established. Performing KOEO test... Wait 1 minute"); 146 | 147 | serialPort = ConnectionPool.getPool().getConnection(); 148 | serialPort.addEventListener(new PortReader(), SerialPort.MASK_RXCHAR); 149 | Thread.sleep(1000); 150 | 151 | if (view.getBaud().isSelected()) { 152 | serialPort.writeByte((byte) 4); 153 | } else { 154 | serialPort.writeByte((byte) 5); 155 | } 156 | Thread.sleep(500); 157 | 158 | serialPort.writeByte((byte) 2); 159 | 160 | timer = new Timer(); 161 | timer.schedule(new TimerTask() { 162 | @Override 163 | public void run() { 164 | try { 165 | serialPort.closePort(); 166 | 167 | if (view.getLabel().getText().equals("")) { 168 | resetFrame(); 169 | JOptionPane.showMessageDialog(view.getPanel(), 170 | "ECU connection fault (check wiring and switch the ignition ON)", "", 171 | JOptionPane.ERROR_MESSAGE); 172 | } else { 173 | view.getKoer().setEnabled(true); 174 | view.getDisconnect().setEnabled(true); 175 | view.getLabel().setVisible(true); 176 | view.getLabelConnect().setText("Start the engine and press button 'KOER'"); 177 | } 178 | } catch (Exception e) { 179 | resetFrame(); 180 | } 181 | } 182 | }, 60000); 183 | 184 | } catch (Exception e) { 185 | resetFrame(); 186 | JOptionPane.showMessageDialog(view.getPanel(), "COM-port connection fault (check USB wiring)", "", 187 | JOptionPane.ERROR_MESSAGE); 188 | } 189 | } 190 | }); 191 | 192 | view.getKoer().addActionListener(new ActionListener() { 193 | @Override 194 | public void actionPerformed(ActionEvent ae) { 195 | try { 196 | faults.clear(); 197 | faults.add("KOER test result faults:"); 198 | view.getLabel().setText(""); 199 | view.getLabel().setVisible(false); 200 | view.getKoer().setEnabled(false); 201 | view.getDisconnect().setEnabled(false); 202 | view.getBaud().setEnabled(false); 203 | view.getLabelConnect().setText("Connection established. Performing KOER test... Wait 2 minutes"); 204 | 205 | serialPort = ConnectionPool.getPool().getConnection(); 206 | serialPort.addEventListener(new PortReader(), SerialPort.MASK_RXCHAR); 207 | Thread.sleep(1000); 208 | 209 | if (view.getBaud().isSelected()) { 210 | serialPort.writeByte((byte) 4); 211 | } else { 212 | serialPort.writeByte((byte) 5); 213 | } 214 | Thread.sleep(500); 215 | 216 | serialPort.writeByte((byte) 2); 217 | 218 | timer = new Timer(); 219 | timer.schedule(new TimerTask() { 220 | @Override 221 | public void run() { 222 | view.getLabelConnect().setText("Performing KOER test... Press and release the brake pedal," 223 | + " turn steering wheel one-half turn," 224 | + " cycle the Overdrive Cancel Switch On and Off, if equipped and wait 1 minute"); 225 | } 226 | }, 35000); 227 | 228 | timer.schedule(new TimerTask() { 229 | @Override 230 | public void run() { 231 | try { 232 | serialPort.closePort(); 233 | 234 | if (view.getLabel().getText().equals("")) { 235 | resetFrame(); 236 | JOptionPane.showMessageDialog(view.getPanel(), 237 | "ECU connection fault (check the wiring and switch the ignition ON)", "", 238 | JOptionPane.ERROR_MESSAGE); 239 | } else { 240 | view.getDisconnect().setEnabled(true); 241 | view.getData().setEnabled(true); 242 | view.getLabel().setVisible(true); 243 | view.getLabelConnect() 244 | .setText("Start the engine, if it is OFF, and press button 'DATA'"); 245 | } 246 | } catch (SerialPortException e) { 247 | resetFrame(); 248 | } 249 | } 250 | }, 110000); 251 | 252 | } catch (Exception e) { 253 | resetFrame(); 254 | JOptionPane.showMessageDialog(view.getPanel(), "COM-port connection fault (check USB wiring)", "", 255 | JOptionPane.ERROR_MESSAGE); 256 | } 257 | } 258 | }); 259 | 260 | view.getData().addActionListener(new ActionListener() { 261 | @Override 262 | public void actionPerformed(ActionEvent ae) { 263 | try { 264 | faults.clear(); 265 | data.setLength(0); 266 | view.getLabel().setText("Live Data:"); 267 | view.getLabel().setVisible(false); 268 | view.getFaults().setEnabled(false); 269 | view.getKoeo().setEnabled(false); 270 | view.getKoer().setEnabled(false); 271 | view.getData().setEnabled(false); 272 | view.getDisconnect().setEnabled(false); 273 | view.getBaud().setEnabled(false); 274 | view.getDataList().setVisible(false); 275 | view.getLabelConnect().setText("Connection established. Waiting for ECU live data..."); 276 | 277 | serialPort = ConnectionPool.getPool().getConnection(); 278 | serialPort.addEventListener(new PortReader(), SerialPort.MASK_RXCHAR); 279 | Thread.sleep(1000); 280 | 281 | if (view.getBaud().isSelected()) { 282 | serialPort.writeByte((byte) 4); 283 | } else { 284 | serialPort.writeByte((byte) 5); 285 | } 286 | Thread.sleep(500); 287 | 288 | serialPort.writeByte((byte) 3); 289 | 290 | timer = new Timer(); 291 | timer.schedule(new TimerTask() { 292 | @Override 293 | public void run() { 294 | 295 | if (0 == view.getDataList().getModel().getSize()) { 296 | resetFrame(); 297 | JOptionPane.showMessageDialog(view.getPanel(), 298 | "ECU connection fault (check the wiring and switch the ignition ON)", "", 299 | JOptionPane.ERROR_MESSAGE); 300 | } else { 301 | view.getDisconnect().setEnabled(true); 302 | view.getLabel().setVisible(true); 303 | view.getDataList().setVisible(true); 304 | view.getLabelConnect().setText("Connection established. Reading ECU live data..."); 305 | } 306 | } 307 | }, 25000); 308 | 309 | } catch (Exception e) { 310 | resetFrame(); 311 | JOptionPane.showMessageDialog(view.getPanel(), "COM-port connection fault (check USB wiring)", "", 312 | JOptionPane.ERROR_MESSAGE); 313 | } 314 | } 315 | }); 316 | } 317 | 318 | private static void resetFrame() { 319 | try { 320 | if (serialPort.isOpened()) { 321 | serialPort.closePort(); 322 | } 323 | } catch (Exception e) { 324 | view.dispose(); 325 | JOptionPane.showMessageDialog(view.getPanel(), 326 | "COM-port connection fault (check USB wiring and restart application)", "", 327 | JOptionPane.ERROR_MESSAGE); 328 | 329 | System.exit(1); 330 | } 331 | faults.clear(); 332 | data.setLength(0); 333 | view.getBaud().setEnabled(true); 334 | view.getFaults().setEnabled(true); 335 | view.getKoeo().setEnabled(false); 336 | view.getKoer().setEnabled(false); 337 | view.getData().setEnabled(true); 338 | view.getDisconnect().setEnabled(false); 339 | view.getLabel().setText(""); 340 | view.getLabel().setVisible(false); 341 | view.getDataList().setVisible(false); 342 | view.getLabelConnect().setText("Connect scanner, switch the ignition ON and press button 'FAULTS'"); 343 | } 344 | 345 | private static class PortReader implements SerialPortEventListener { 346 | @Override 347 | public void serialEvent(SerialPortEvent event) { 348 | if (event.isRXCHAR() && event.getEventValue() > 0) { 349 | try { 350 | String receivedData = serialPort.readHexString(event.getEventValue()); 351 | // System.out.println(receivedData); 352 | if (receivedData.equals("19 A1")) { 353 | timer.cancel(); 354 | resetFrame(); 355 | JOptionPane.showMessageDialog(view.getPanel(), 356 | "ECU connection fault (check the wiring and switch the ignition ON)", "", 357 | JOptionPane.ERROR_MESSAGE); 358 | } else if (faults.isEmpty()) { 359 | data.append(receivedData.replaceAll("\\s", "")); 360 | 361 | if (64 == data.length()) { 362 | allParameters = parameterService.updateAll(allParameters, data); 363 | for (Parameter parameter : allParameters) { 364 | view.getModelParam().add(parameter.getParameter_id() - 1, 365 | parameter.getName() + parameter.getValue()); 366 | } 367 | data.setLength(0); 368 | } 369 | } else { 370 | String faultNumber = receivedData.substring(4, 5) + receivedData.substring(0, 2); 371 | 372 | for (Fault fault : allFaults) { 373 | if (faultNumber.equals(fault.getNumber())) { 374 | faults.add(faultNumber + " " + fault.getInfo()); 375 | } 376 | } 377 | String str = ""; 378 | for (String fault : faults) { 379 | str = str + fault + "
"; 380 | } 381 | view.getLabel().setText(str); 382 | } 383 | } catch (Exception e) { 384 | resetFrame(); 385 | JOptionPane.showMessageDialog(view.getPanel(), "COM-port fault (check connection)" + e, "", 386 | JOptionPane.ERROR_MESSAGE); 387 | } 388 | } 389 | } 390 | } 391 | } 392 | -------------------------------------------------------------------------------- /EEC-IV.hex: -------------------------------------------------------------------------------- 1 | :020000020000FC 2 | :0200000024C01A 3 | :100048004FC500E00093900009E10093290008E9FA 4 | :1000580000932A000EE00093950008E100939A00AF 5 | :100068000EE000939D008C9A949800E000939A000B 6 | :1000780008E100939A007894ABC3949800E0009349 7 | :100088009A0008E100939A000FEF1FEF24E6015051 8 | :1000980010402040E0F701E00093980000EA009348 9 | :1000A800990000E000939A0008E100939A000FEF8E 10 | :1000B80014E601501040E8F70FEF1FEF22E33091EC 11 | :1000C8009B0037FF03C030919C005AC30150104079 12 | :1000D8002040A8F7949A00E000939C000FEF14E6E4 13 | :1000E80001501040E8F700E000939C000FEF14E681 14 | :1000F80001501040E8F700E000939C000FEF14E671 15 | :1001080001501040E8F700E000939C000FEF14E660 16 | :1001180001501040E8F700E000939C000FEF14E650 17 | :1001280001501040E8F700E000939C000FEF14E640 18 | :1001380001501040E8F700E000939C000FEF14E630 19 | :1001480001501040E8F700E000939C000FEF14E620 20 | :1001580001501040E8F700E000939C000FEF14E610 21 | :1001680001501040E8F700E000939C000FEF14E600 22 | :1001780001501040E8F700E000939C000FEF14E6F0 23 | :1001880001501040E8F700E000939C000FEF14E6E0 24 | :1001980001501040E8F701E000939C000FEF14E6CF 25 | :1001A80001501040E8F704E000939C000FEF14E6BC 26 | :1001B80001501040E8F700E000939C000FEF14E6B0 27 | :1001C80001501040E8F700E000939C000FEF14E6A0 28 | :1001D80001501040E8F700E000939C000FEF14E690 29 | :1001E80001501040E8F705E000939C000FEF14E67B 30 | :1001F80001501040E8F7949800E000939A0008E155 31 | :1002080000939A0001E00A1301C05DC100E0009369 32 | :10021800980007E60093990000E000939A0008E12F 33 | :1002280000939A000FEF1FEF01501040E8F70FEF0F 34 | :100238001FEF24E130919B0037FF09C030919C00EB 35 | :1002480000E000939A0008E100939A000BC0015067 36 | :100258001040204078F719E121EA10932C002093F0 37 | :100268002C00B6C243E030919B0037FFFCCF3091A1 38 | :100278009C00330F330F330F330F32954313F3CFF3 39 | :1002880030E000919B0007FFFCCF10919C0000918B 40 | :100298009B0007FFFCCF20919C003113F2CF321353 41 | :1002A800F0CF00919B0007FFFCCF10919C000091BC 42 | :1002B8009B0007FFFCCF10919C00110F110F110F2D 43 | :1002C800110F12953113DDCF0FEF18E001501040D8 44 | :1002D800E8F7949A31E030939C000FEF1FE001504B 45 | :1002E8001040E8F700E00093980009E100939900B6 46 | :1002F80004E60140F0F700E00093980007E6009359 47 | :10030800990030EB30939C000FEF1FE00150104034 48 | :10031800E8F7949800E000939A0008E100939A00A7 49 | :1003280000919B0007FFFCCF10919C0000919B005F 50 | :1003380007FFFCCF10919C0000919B0007FFFCCFAA 51 | :1003480010919C0000919B0007FFFCCF10919C002E 52 | :100358000FEF18E001501040E8F7949A3FEF309300 53 | :100368009C000FEF1FE001501040E8F700E00093F9 54 | :10037800980009E10093990004E60140F0F700E0D5 55 | :100388000093980007E6009399003FE530939C009E 56 | :100398000FEF1FE001501040E8F7949800E0009339 57 | :1003A8009A0008E100939A0000919B0007FFFCCF98 58 | :1003B80010919C0000919B0007FFFCCF10919C00BE 59 | :1003C80000919B0007FFFCCF10919C0000919B00BF 60 | :1003D80007FFFCCF10919C000FEF18E00150104070 61 | :1003E800E8F7949A31E830939C000FEF1FE0015032 62 | :1003F8001040E8F700E00093980009E100939900A5 63 | :1004080004E60140F0F700E00093980007E6009347 64 | :10041800990034E730939C000FEF1FE00150104023 65 | :10042800E8F7949800E000939A0008E100939A0096 66 | :1004380000919B0007FFFCCF10919C0000919B004E 67 | :1004480007FFFCCF10919C0000919B0007FFFCCF99 68 | :1004580010919C0000919B0007FFFCCF10919C001D 69 | :100468000FEF18E001501040E8F7949A30E030930D 70 | :100478009C000FEF1FE001501040E8F700E00093E8 71 | :10048800980009E10093990004E60140F0F700E0C4 72 | :100498000093980007E60093990030EA30939C0097 73 | :1004A8000FEF1FE001501040E8F7949801E0009327 74 | :1004B800980000EA0093990000E000939A0008E190 75 | :1004C80000939A005DC100E00093980003E3009355 76 | :1004D800990000E000939A0008E100939A000FEF5A 77 | :1004E8001FEF01501040E8F70FEF1FEF2AE030919F 78 | :1004F8009B0037FF09C030919C0000E000939A00F0 79 | :1005080008E100939A000BC001501040204078F792 80 | :1005180019E121EA10932C0020932C0059C143E0E3 81 | :1005280030919B0037FFFCCF30919C00330F330F85 82 | :10053800330F330F32954313F3CF30E000919B0014 83 | :1005480007FFFCCF10919C0000919B0007FFFCCF98 84 | :1005580020919C003113F2CF3213F0CF00919B0011 85 | :1005680007FFFCCF10919C0000919B0007FFFCCF78 86 | :1005780010919C00110F110F110F110F12953113CB 87 | :10058800DDCF0FEF14E001501040E8F7949A31E006 88 | :1005980030939C000FEF17E001501040E8F700E09F 89 | :1005A8000093980009E1009399000FE10140F0F7EA 90 | :1005B80000E00093980003E30093990030EB309338 91 | :1005C8009C000FEF17E001501040E8F7949800E006 92 | :1005D80000939A0008E100939A0000919B0007FF9E 93 | :1005E800FCCF10919C0000919B0007FFFCCF10915D 94 | :1005F8009C0000919B0007FFFCCF10919C0000918C 95 | :100608009B0007FFFCCF10919C000FEF14E00150F6 96 | :100618001040E8F7949A3FEF30939C000FEF17E0F3 97 | :1006280001501040E8F700E00093980009E10093BA 98 | :1006380099000FE10140F0F700E00093980003E310 99 | :10064800009399003FE530939C000FEF17E00150AD 100 | :100658001040E8F7949800E000939A0008E10093AE 101 | :100668009A0000919B0007FFFCCF10919C0000911D 102 | :100678009B0007FFFCCF10919C0000919B0007FF97 103 | :10068800FCCF10919C0000919B0007FFFCCF1091BC 104 | :100698009C000FEF14E001501040E8F7949A31E8FD 105 | :1006A80030939C000FEF17E001501040E8F700E08E 106 | :1006B8000093980009E1009399000FE10140F0F7D9 107 | :1006C80000E00093980003E30093990034E7309327 108 | :1006D8009C000FEF17E001501040E8F7949800E0F5 109 | :1006E80000939A0008E100939A0000919B0007FF8D 110 | :1006F800FCCF10919C0000919B0007FFFCCF10914C 111 | :100708009C0000919B0007FFFCCF10919C0000917A 112 | :100718009B0007FFFCCF10919C000FEF14E00150E5 113 | :100728001040E8F7949A30E030939C000FEF17E000 114 | :1007380001501040E8F700E00093980009E10093A9 115 | :1007480099000FE10140F0F700E00093980003E3FF 116 | :100758000093990030EA30939C000FEF17E00150A6 117 | :100768001040E8F7949801E00093980000EA00939D 118 | :10077800990000E000939A0008E100939A0000C0F5 119 | :1007880023E00FEF1FEF01501040E8F700919B00A6 120 | :1007980007FFFCCF10919C00110F110F110F110FC3 121 | :1007A80012952113F3CF21E0251304C066E274EA01 122 | :1007B80091E02CC022E0251304C065E274E991E0C1 123 | :1007C80025C023E0251304C061E476E991E01EC04A 124 | :1007D80024E0251305C0A1E025E0251301C0A1E010 125 | :1007E80021E0251301C049CC22E0251301C045CCE6 126 | :1007F80023E0251301C041CC27E02513E9CF1CE0F5 127 | :1008080010932C0010932C0050E0E2CF30E00091C0 128 | :100818009B0007FFFCCF10919C0000919B0007FFF5 129 | :10082800FCCF20919C003113F2CF3213F0CF00910E 130 | :100838009B0007FFFCCF10919C0000919B0007FFD5 131 | :10084800FCCF10919C00110F110F110F110F129571 132 | :100858003113DDCF21E0291332C00FEF1AE1015027 133 | :100868001040E8F7949A31E030939C000FEF1CE3B6 134 | :1008780001501040E8F700E00093980003E300936C 135 | :1008880099000FEF13E001501040E8F701E00093E2 136 | :10089800980000EA0093990030EB30939C000FEF2A 137 | :1008A8001CE301501040E8F7949800E000939A0088 138 | :1008B80008E100939A0023E0251301C029C00091A4 139 | :1008C8009B0007FFFCCF10919C0000919B0007FF45 140 | :1008D800FCCF20919C0030E0311301C025C010935B 141 | :1008E8002C0020932C0090E000919B0007FFFCCF88 142 | :1008F80010919C0000919B0007FFFCCF20919C0069 143 | :10090800311301C011C010932C0020932C0000C09B 144 | :1009180000919B0007FFFCCF10919C0000919B0069 145 | :1009280007FFFCCF10919C0000919B0007FFFCCFB4 146 | :1009380010919C0000919B0007FFFCCF10919C0038 147 | :1009480021E0291332C00FEF1AE101501040E8F7F7 148 | :10095800949A3FEF30939C000FEF1CE30150104036 149 | :10096800E8F700E00093980003E3009399000FEF85 150 | :1009780013E001501040E8F701E00093980000EA06 151 | :10098800009399003FE530939C000FEF11E401506C 152 | :100998001040E8F7949800E000939A0008E100936B 153 | :1009A8009A0023E0251301C028C000919B0007FF8F 154 | :1009B800FCCF10919C0000919B0007FFFCCF209179 155 | :1009C8009C0030E0311301C024C010932C00209308 156 | :1009D8002C0000919B0007FFFCCF10919C00009118 157 | :1009E8009B0007FFFCCF20919C00311301C011C070 158 | :1009F80010932C0020932C0000C000919B0007FF4F 159 | :100A0800FCCF10919C0000919B0007FFFCCF109138 160 | :100A18009C0000919B0007FFFCCF10919C00009167 161 | :100A28009B0007FFFCCF10919C0021E0291330C0E8 162 | :100A38000FEF1AE101501040E8F7949A60939C0078 163 | :100A48000FEF1CE301501040E8F700E00093980016 164 | :100A580003E3009399000FEF13E001501040E8F70B 165 | :100A680001E00093980000EA0093990070939C00BD 166 | :100A78000FEF1CE301501040E8F7949800E0009352 167 | :100A88009A0008E100939A0023E0251301C02AC0C8 168 | :100A980000919B0007FFFCCF10919C0000919B00E8 169 | :100AA80007FFFCCF20919C0030E0311301C026C025 170 | :100AB80010932C0020932C0000919B0007FFFCCF83 171 | :100AC80010919C0000919B0007FFFCCF20919C0097 172 | :100AD800311301C013C010932C0020932C0002C0C6 173 | :100AE8007FC5C2CA00919B0007FFFCCF10919C00F4 174 | :100AF80000919B0007FFFCCF10919C0000919B0088 175 | :100B080007FFFCCF10919C0000919B0007FFFCCFD2 176 | :100B180010919C0021E0291336C00FEF1AE1015013 177 | :100B28001040E8F7949A30E030939C000FEF1CE3F4 178 | :100B380001501040E8F700E00093980003E30093A9 179 | :100B480099000FEF13E001501040E8F701E000931F 180 | :100B5800980000EA0093990030EA30939C000FEF68 181 | :100B68001CE301501040E8F7949800E000939A00C5 182 | :100B780008E100939A0023E0251305C000C021E492 183 | :100B8800261329C02EC500919B0007FFFCCF1091AA 184 | :100B98009C0000919B0007FFFCCF20919C0030E057 185 | :100BA800311301C01EC510932C0020932C00009116 186 | :100BB8009B0007FFFCCF10919C0000919B0007FF52 187 | :100BC800FCCF20919C00311301C011C010932C0060 188 | :100BD80020932C0000C000919B0007FFFCCF1091D0 189 | :100BE8009C0000919B0007FFFCCF10919C00009196 190 | :100BF8009B0007FFFCCF10919C0000919B0007FF12 191 | :100C0800FCCF10919C0000919B0007FFFCCF109136 192 | :100C18009C0000919B0007FFFCCF10919C0021E0F5 193 | :100C2800281392C00FEF1AE101501040E8F7949A88 194 | :100C380031E030939C000FEF1CE301501040E8F7BF 195 | :100C480000E00093980003E3009399000FEF13E08E 196 | :100C580001501040E8F701E00093980000EA009383 197 | :100C6800990038E330939C000FEF1BE501501040CA 198 | :100C7800E8F731E130939C000FEF1CE3015010407E 199 | :100C8800E8F700E00093980003E3009399000FEF62 200 | :100C980013E001501040E8F701E00093980000EAE3 201 | :100CA8000093990038E230939C000FEF1BE5015048 202 | :100CB8001040E8F738E030939C000FEF1CE3015038 203 | :100CC8001040E8F700E00093980003E300939900D0 204 | :100CD8000FEF13E001501040E8F701E0009398008F 205 | :100CE80000EA0093990038EA30939C000FEF1BE567 206 | :100CF80001501040E8F739E030939C000FEF1CE3F7 207 | :100D080001501040E8F700E00093980003E30093D7 208 | :100D180099000FEF13E001501040E8F701E000934D 209 | :100D2800980000EA0093990038EB30939C000FEF8D 210 | :100D380016E401501040E8F7949800E000939A00F8 211 | :100D480008E100939A0061C000919B0007FFFCCF67 212 | :100D580010919C0000919B0007FFFCCF20919C0004 213 | :100D680033E0351335C010932C0020932C000091EC 214 | :100D78009B0007FFFCCF10919C0000919B0007FF90 215 | :100D8800FCCF20919C0010932C0020932C00009104 216 | :100D98009B0007FFFCCF10919C0000919B0007FF70 217 | :100DA800FCCF20919C0010932C0020932C000091E4 218 | :100DB8009B0007FFFCCF10919C0000919B0007FF50 219 | :100DC800FCCF20919C0010932C0020932C001DC078 220 | :100DD80030E0311301C005C410932C0020932C007F 221 | :100DE80000919B0007FFFCCF10919C0000919B0095 222 | :100DF80007FFFCCF20919C00311301C012C0109353 223 | :100E08002C0020932C0001C001CD00919B0007FF0E 224 | :100E1800FCCF10919C0000919B0007FFFCCF109124 225 | :100E28009C0000919B0007FFFCCF10919C00009153 226 | :100E38009B0007FFFCCF10919C0000919B0007FFCF 227 | :100E4800FCCF10919C0000919B0007FFFCCF1091F4 228 | :100E58009C0021E0281392C00FEF1AE101501040C6 229 | :100E6800E8F7949A3DE030939C000FEF1CE30150A3 230 | :100E78001040E8F700E00093980003E3009399001E 231 | :100E88000FEF13E001501040E8F701E000939800DD 232 | :100E980000EA0093990038EF30939C000FEF1BE5B0 233 | :100EA80001501040E8F730E130939C000FEF1CE34D 234 | :100EB80001501040E8F700E00093980003E3009326 235 | :100EC80099000FEF13E001501040E8F701E000939C 236 | :100ED800980000EA0093990038E330939C000FEFE4 237 | :100EE8001BE501501040E8F73FE030939C000FEFFE 238 | :100EF8001CE301501040E8F700E00093980003E37A 239 | :100F0800009399000FEF13E001501040E8F701E05B 240 | :100F18000093980000EA0093990038ED30939C0004 241 | :100F28000FEF1BE501501040E8F735E130939C00C6 242 | :100F38000FEF1CE301501040E8F700E00093980021 243 | :100F480003E3009399000FEF13E001501040E8F716 244 | :100F580001E00093980000EA0093990038E6309386 245 | :100F68009C000FEF16E401501040E8F7949800E059 246 | :100F780000939A0008E100939A0060C000919B00DA 247 | :100F880007FFFCCF10919C0000919B0007FFFCCF4E 248 | :100F980020919C0033E0351335C010932C0020932A 249 | :100FA8002C0000919B0007FFFCCF10919C00009142 250 | :100FB8009B0007FFFCCF20919C0010932C002093EE 251 | :100FC8002C0000919B0007FFFCCF10919C00009122 252 | :100FD8009B0007FFFCCF20919C0010932C002093CE 253 | :100FE8002C0000919B0007FFFCCF10919C00009102 254 | :100FF8009B0007FFFCCF20919C0010932C002093AE 255 | :101008002C001CC030E0311301C0EBC210932C003F 256 | :1010180020932C0000919B0007FFFCCF10919C00AF 257 | :1010280000919B0007FFFCCF20919C00311301C069 258 | :1010380011C010932C0020932C0000C000919B003D 259 | :1010480007FFFCCF10919C0000919B0007FFFCCF8D 260 | :1010580010919C0000919B0007FFFCCF10919C0011 261 | :1010680000919B0007FFFCCF10919C0000919B0012 262 | :1010780007FFFCCF10919C0000919B0007FFFCCF5D 263 | :1010880010919C0021E0281392C00FEF1AE1015043 264 | :101098001040E8F7949A36E230939C000FEF1CE377 265 | :1010A80001501040E8F700E00093980003E3009334 266 | :1010B80099000FEF13E001501040E8F701E00093AA 267 | :1010C800980000EA0093990038E630939C000FEFEF 268 | :1010D8001BE501501040E8F73CE030939C000FEF0F 269 | :1010E8001CE301501040E8F700E00093980003E388 270 | :1010F800009399000FEF13E001501040E8F701E06A 271 | :101108000093980000EA0093990038EE30939C0011 272 | :101118000FEF1BE501501040E8F734E030939C00D6 273 | :101128000FEF1CE301501040E8F700E0009398002F 274 | :1011380003E3009399000FEF13E001501040E8F724 275 | :1011480001E00093980000EA0093990038E6309394 276 | :101158009C000FEF1BE501501040E8F73EE030938C 277 | :101168009C000FEF1CE301501040E8F700E00093EB 278 | :10117800980003E3009399000FEF13E0015010402B 279 | :10118800E8F701E00093980000EA0093990038EC32 280 | :1011980030939C000FEF16E401501040E8F7949844 281 | :1011A80000E000939A0008E100939A0060C0009163 282 | :1011B8009B0007FFFCCF10919C0000919B0007FF4C 283 | :1011C800FCCF20919C0033E0351335C010932C00E0 284 | :1011D80020932C0000919B0007FFFCCF10919C00EE 285 | :1011E80000919B0007FFFCCF20919C0010932C00DE 286 | :1011F80020932C0000919B0007FFFCCF10919C00CE 287 | :1012080000919B0007FFFCCF20919C0010932C00BD 288 | :1012180020932C0000919B0007FFFCCF10919C00AD 289 | :1012280000919B0007FFFCCF20919C0010932C009D 290 | :1012380020932C001CC030E0311301C0D2C11093A0 291 | :101248002C0020932C0000919B0007FFFCCF1091ED 292 | :101258009C0000919B0007FFFCCF20919C0031135C 293 | :1012680001C011C010932C0020932C0000C00091E5 294 | :101278009B0007FFFCCF10919C0000919B0007FF8B 295 | :10128800FCCF10919C0000919B0007FFFCCF1091B0 296 | :101298009C0000919B0007FFFCCF10919C000091DF 297 | :1012A8009B0007FFFCCF10919C0000919B0007FF5B 298 | :1012B800FCCF10919C0021E0281392C00FEF1AE197 299 | :1012C80001501040E8F7949A36E130939C000FEFF4 300 | :1012D8001CE301501040E8F700E00093980003E396 301 | :1012E800009399000FEF13E001501040E8F701E078 302 | :1012F8000093980000EA0093990038E530939C0029 303 | :101308000FEF1BE501501040E8F73BE130939C00DC 304 | :101318000FEF1CE301501040E8F700E0009398003D 305 | :1013280003E3009399000FEF13E001501040E8F732 306 | :1013380001E00093980000EA0093990038E83093A0 307 | :101348009C000FEF1BE501501040E8F73AE130939D 308 | :101358009C000FEF1CE301501040E8F700E00093F9 309 | :10136800980003E3009399000FEF13E00150104039 310 | :10137800E8F701E00093980000EA0093990038E943 311 | :1013880030939C000FEF1BE501501040E8F730E266 312 | :1013980030939C000FEF1CE301501040E8F700E089 313 | :1013A8000093980003E3009399000FEF13E00150B6 314 | :1013B8001040E8F701E00093980000EA00939900D4 315 | :1013C80038E030939C000FEF16E401501040E8F726 316 | :1013D800949800E000939A0008E100939A0060C096 317 | :1013E80000919B0007FFFCCF10919C0000919B008F 318 | :1013F80007FFFCCF20919C0033E0351335C01093D4 319 | :101408002C0020932C0000919B0007FFFCCF10912B 320 | :101418009C0000919B0007FFFCCF20919C0010933B 321 | :101428002C0020932C0000919B0007FFFCCF10910B 322 | :101438009C0000919B0007FFFCCF20919C0010931B 323 | :101448002C0020932C0000919B0007FFFCCF1091EB 324 | :101458009C0000919B0007FFFCCF20919C001093FB 325 | :101468002C0020932C001CC030E0311301C0B9C0FF 326 | :1014780010932C0020932C0000919B0007FFFCCFB9 327 | :1014880010919C0000919B0007FFFCCF20919C00CD 328 | :10149800311301C011C010932C0020932C0000C000 329 | :1014A80000919B0007FFFCCF10919C0000919B00CE 330 | :1014B80007FFFCCF10919C0000919B0007FFFCCF19 331 | :1014C80010919C0000919B0007FFFCCF10919C009D 332 | :1014D80000919B0007FFFCCF10919C0000919B009E 333 | :1014E80007FFFCCF10919C0023E0251301C028C002 334 | :1014F80000919B0007FFFCCF10919C0000919B007E 335 | :1015080007FFFCCF20919C0030E0311301C069C077 336 | :1015180010932C0020932C0000919B0007FFFCCF18 337 | :1015280010919C0000919B0007FFFCCF20919C002C 338 | :10153800311301C011C010932C0020932C0000C05F 339 | :1015480000919B0007FFFCCF10919C0000919B002D 340 | :1015580007FFFCCF10919C0000919B0007FFFCCF78 341 | :1015680010919C0000919B0007FFFCCF10919C00FC 342 | :1015780000919B0007FFFCCF10919C0000919B00FD 343 | :1015880007FFFCCF10919C0023E0251301C02BC05E 344 | :1015980000919B0007FFFCCF10919C0000919B00DD 345 | :1015A80007FFFCCF20919C0030E0311301C019C027 346 | :1015B80010932C0020932C0000919B0007FFFCCF78 347 | :1015C80010919C0000919B0007FFFCCF20919C008C 348 | :1015D800311301C014C010932C0020932C0003C0B9 349 | :1015E8008AC47EC47ECA00919B0007FFFCCF10917D 350 | :1015F8009C0000919B0007FFFCCF10919C0000917C 351 | :101608009B0007FFFCCF10919C0000919B0007FFF7 352 | :10161800FCCF10919C0000919B0007FFFCCF10911C 353 | :101628009C0000919B0007FFFCCF10919C0023E0D9 354 | :10163800251301C029C000919B0007FFFCCF109122 355 | :101648009C0000919B0007FFFCCF20919C0030E09C 356 | :10165800311301C045C410932C0020932C00009135 357 | :101668009B0007FFFCCF10919C0000919B0007FF97 358 | :10167800FCCF20919C00311301C012C010932C00A4 359 | :1016880020932C0001C0C0CB00919B0007FFFCCF2A 360 | :1016980010919C0000919B0007FFFCCF10919C00CB 361 | :1016A80000919B0007FFFCCF10919C0000919B00CC 362 | :1016B80007FFFCCF10919C0000919B0007FFFCCF17 363 | :1016C80010919C0000919B0007FFFCCF10919C009B 364 | :1016D80023E0251301C028C000919B0007FFFCCF21 365 | :1016E80010919C0000919B0007FFFCCF20919C006B 366 | :1016F80030E0311301C0F4C310932C0020932C0068 367 | :1017080000919B0007FFFCCF10919C0000919B006B 368 | :1017180007FFFCCF20919C00311301C011C010932A 369 | :101728002C0020932C0000C000919B0007FFFCCFE9 370 | :1017380010919C0000919B0007FFFCCF10919C002A 371 | :1017480000919B0007FFFCCF10919C0000919B002B 372 | :1017580007FFFCCF10919C0021E0281392C00FEFE7 373 | :1017680018EB01501040E8F7949A31E030939C0050 374 | :101778000FEF1CE301501040E8F700E000939800D9 375 | :1017880003E3009399000FEF13E001501040E8F7CE 376 | :1017980001E00093980000EA0093990038E3309341 377 | :1017A8009C000FEF1BE501501040E8F731E1309342 378 | :1017B8009C000FEF1CE301501040E8F700E0009395 379 | :1017C800980003E3009399000FEF13E001501040D5 380 | :1017D800E8F701E00093980000EA0093990038E2E6 381 | :1017E80030939C000FEF1BE501501040E8F738E0FC 382 | :1017F80030939C000FEF1CE301501040E8F700E025 383 | :101808000093980003E3009399000FEF13E0015051 384 | :101818001040E8F701E00093980000EA009399006F 385 | :1018280038EA30939C000FEF1BE501501040E8F7B1 386 | :1018380039E030939C000FEF1CE301501040E8F7AB 387 | :1018480000E00093980003E3009399000FEF13E082 388 | :1018580001501040E8F701E00093980000EA009377 389 | :10186800990038EB30939C000FEF16E401501040BC 390 | :10187800E8F7949800E000939A0008E100939A0032 391 | :101888004DC000919B0007FFFCCF10919C00009178 392 | :101898009B0007FFFCCF20919C0033E0351335C037 393 | :1018A80010932C0020932C0000919B0007FFFCCF85 394 | :1018B80010919C0000919B0007FFFCCF20919C0099 395 | :1018C80010932C0020932C0000919B0007FFFCCF65 396 | :1018D80010919C0000919B0007FFFCCF20919C0079 397 | :1018E80010932C0020932C0000919B0007FFFCCF45 398 | :1018F80010919C0000919B0007FFFCCF20919C0059 399 | :1019080010932C0020932C0009C030E0311301C043 400 | :10191800E7C210932C0020932C0000C000919B007C 401 | :1019280007FFFCCF10919C0000919B0007FFFCCFA4 402 | :1019380010919C0000919B0007FFFCCF10919C0028 403 | :1019480000919B0007FFFCCF10919C0021E0281319 404 | :1019580092C00FEF18EB01501040E8F7949A3DE061 405 | :1019680030939C000FEF1CE301501040E8F700E0B3 406 | :101978000093980003E3009399000FEF13E00150E0 407 | :101988001040E8F701E00093980000EA00939900FE 408 | :1019980038EF30939C000FEF1BE501501040E8F73B 409 | :1019A80030E130939C000FEF1CE301501040E8F742 410 | :1019B80000E00093980003E3009399000FEF13E011 411 | :1019C80001501040E8F701E00093980000EA009306 412 | :1019D800990038E330939C000FEF1BE5015010404D 413 | :1019E800E8F73FE030939C000FEF1CE301501040F4 414 | :1019F800E8F700E00093980003E3009399000FEFE5 415 | :101A080013E001501040E8F701E00093980000EA65 416 | :101A18000093990038ED30939C000FEF1BE50150BF 417 | :101A28001040E8F735E130939C000FEF1CE30150BC 418 | :101A38001040E8F700E00093980003E30093990052 419 | :101A48000FEF13E001501040E8F701E00093980011 420 | :101A580000EA0093990038E630939C000FEF16E4F3 421 | :101A680001501040E8F7949800E000939A0008E1CC 422 | :101A780000939A004DC000919B0007FFFCCF109186 423 | :101A88009C0000919B0007FFFCCF20919C0033E055 424 | :101A9800351335C010932C0020932C0000919B0027 425 | :101AA80007FFFCCF10919C0000919B0007FFFCCF23 426 | :101AB80020919C0010932C0020932C0000919B00F7 427 | :101AC80007FFFCCF10919C0000919B0007FFFCCF03 428 | :101AD80020919C0010932C0020932C0000919B00D7 429 | :101AE80007FFFCCF10919C0000919B0007FFFCCFE3 430 | :101AF80020919C0010932C0020932C0009C030E00A 431 | :101B0800311301C0EDC110932C0020932C0000C0AC 432 | :101B180000919B0007FFFCCF10919C0000919B0057 433 | :101B280007FFFCCF10919C0000919B0007FFFCCFA2 434 | :101B380010919C0000919B0007FFFCCF10919C0026 435 | :101B480021E0281392C00FEF18EB01501040E8F77E 436 | :101B5800949A36E230939C000FEF1CE3015010403A 437 | :101B6800E8F700E00093980003E3009399000FEF73 438 | :101B780013E001501040E8F701E00093980000EAF4 439 | :101B88000093990038E630939C000FEF1BE5015055 440 | :101B98001040E8F73CE030939C000FEF1CE3015045 441 | :101BA8001040E8F700E00093980003E300939900E1 442 | :101BB8000FEF13E001501040E8F701E000939800A0 443 | :101BC80000EA0093990038EE30939C000FEF1BE574 444 | :101BD80001501040E8F734E030939C000FEF1CE30D 445 | :101BE80001501040E8F700E00093980003E30093E9 446 | :101BF80099000FEF13E001501040E8F701E000935F 447 | :101C0800980000EA0093990038E630939C000FEFA3 448 | :101C18001BE501501040E8F73EE030939C000FEFC1 449 | :101C28001CE301501040E8F700E00093980003E33C 450 | :101C3800009399000FEF13E001501040E8F701E01E 451 | :101C48000093980000EA0093990038EC30939C00C8 452 | :101C58000FEF16E401501040E8F7949800E0009365 453 | :101C68009A0008E100939A004DC000919B0007FF7D 454 | :101C7800FCCF10919C0000919B0007FFFCCF2091A6 455 | :101C88009C0033E0351335C010932C0020932C00B2 456 | :101C980000919B0007FFFCCF10919C0000919B00D6 457 | :101CA80007FFFCCF20919C0010932C0020932C0060 458 | :101CB80000919B0007FFFCCF10919C0000919B00B6 459 | :101CC80007FFFCCF20919C0010932C0020932C0040 460 | :101CD80000919B0007FFFCCF10919C0000919B0096 461 | :101CE80007FFFCCF20919C0010932C0020932C0020 462 | :101CF80009C030E0311301C0F3C010932C002093C9 463 | :101D08002C00EEC000919B0007FFFCCF10919C00B7 464 | :101D180000919B0007FFFCCF10919C0000919B0055 465 | :101D280007FFFCCF10919C0000919B0007FFFCCFA0 466 | :101D380010919C0021E0281392C00FEF18EB01507E 467 | :101D48001040E8F7949A36E130939C000FEF1CE3BB 468 | :101D580001501040E8F700E00093980003E3009377 469 | :101D680099000FEF13E001501040E8F701E00093ED 470 | :101D7800980000EA0093990038E530939C000FEF33 471 | :101D88001BE501501040E8F73BE130939C000FEF52 472 | :101D98001CE301501040E8F700E00093980003E3CB 473 | :101DA800009399000FEF13E001501040E8F701E0AD 474 | :101DB8000093980000EA0093990038E830939C005B 475 | :101DC8000FEF1BE501501040E8F73AE130939C0013 476 | :101DD8000FEF1CE301501040E8F700E00093980073 477 | :101DE80003E3009399000FEF13E001501040E8F768 478 | :101DF80001E00093980000EA0093990038E93093D5 479 | :101E08009C000FEF1BE501501040E8F730E23093DB 480 | :101E18009C000FEF1CE301501040E8F700E000932E 481 | :101E2800980003E3009399000FEF13E0015010406E 482 | :101E3800E8F701E00093980000EA0093990038E081 483 | :101E480030939C000FEF16E401501040E8F7949887 484 | :101E580000E000939A0008E100939A0041C00091C5 485 | :101E68009B0007FFFCCF10919C0000919B0007FF8F 486 | :101E7800FCCF20919C0010932C0020932C00009103 487 | :101E88009B0007FFFCCF10919C0000919B0007FF6F 488 | :101E9800FCCF20919C0010932C0020932C000091E3 489 | :101EA8009B0007FFFCCF10919C0000919B0007FF4F 490 | :101EB800FCCF20919C0010932C0020932C000091C3 491 | :101EC8009B0007FFFCCF10919C0000919B0007FF2F 492 | :101ED800FCCF20919C0010932C0020932C0000C074 493 | :101EE80080E023E02513CFCB21E42613CCCB61E29D 494 | :0C1EF80076EF81E0C8CB50912C0074CB39 495 | :00000001FF 496 | -------------------------------------------------------------------------------- /EEC-IV_asm: -------------------------------------------------------------------------------- 1 | ; 2 | ; EEC-IV.asm 3 | ; 4 | ; Created: 11-Sept-2012 9:00:11 PM 5 | ; Author : Maksim Babrou 6 | ; 7 | 8 | 9 | .include "m128def.inc" 10 | .org 0 ;Set start address 11 | rjmp USART0_Init ;go to label USART0_Init 12 | .org 0x24 ;Set an Interrupt address to USART0, Rx(Receive) Complete 13 | rjmp UART0_CMD ;go to label Receive_Complete 14 | 15 | 16 | USART0_Init: 17 | ; Set baud rate 18 | ldi r16,0 ; 38400 for 16 000 000 Hz Asynch Mode:((fosc/16BAUD)-1) 19 | sts UBRR0H,r16 20 | ldi r16,25 ; 38400 for 16 000 000 Hz Asynch Mode:((fosc/16BAUD)-1) 21 | sts 0x29,r16 ;UBRR0L 22 | ; Enable receiver and transmitter 23 | ldi r16,(1<