diff --git a/firmware/svnversion.h b/firmware/svnversion.h
index 618b13417e..6fb69043c6 100644
--- a/firmware/svnversion.h
+++ b/firmware/svnversion.h
@@ -1,5 +1,5 @@
// This file was generated by Version2Header
-// Mon Mar 09 22:03:41 EDT 2015
+// Mon Mar 09 23:25:52 EDT 2015
#ifndef VCS_VERSION
#define VCS_VERSION "7346"
#endif
diff --git a/java_console/io/src/com/rusefi/ConfigurationImage.java b/java_console/io/src/com/rusefi/ConfigurationImage.java
index bc692f911e..422f3db9f6 100644
--- a/java_console/io/src/com/rusefi/ConfigurationImage.java
+++ b/java_console/io/src/com/rusefi/ConfigurationImage.java
@@ -23,14 +23,18 @@ public class ConfigurationImage {
return content.length;
}
- public byte[] getFileContent() throws IOException {
- try (ByteArrayOutputStream baos = new ByteArrayOutputStream()) {
- byte[] bytes = BIN_HEADER.getBytes();
- if (bytes.length != BIN_HEADER.length())
- throw new IllegalStateException("Encoding issue");
- baos.write(bytes);
- baos.write(content);
- return baos.toByteArray();
+ public byte[] getFileContent() {
+ try {
+ try (ByteArrayOutputStream baos = new ByteArrayOutputStream()) {
+ byte[] bytes = BIN_HEADER.getBytes();
+ if (bytes.length != BIN_HEADER.length())
+ throw new IllegalStateException("Encoding issue");
+ baos.write(bytes);
+ baos.write(content);
+ return baos.toByteArray();
+ }
+ } catch (IOException e) {
+ throw new IllegalStateException(e);
}
}
diff --git a/java_console/io/src/com/rusefi/Logger.java b/java_console/io/src/com/rusefi/Logger.java
index 1bade5934c..d4885f0c08 100644
--- a/java_console/io/src/com/rusefi/Logger.java
+++ b/java_console/io/src/com/rusefi/Logger.java
@@ -8,7 +8,7 @@ public interface Logger {
Logger STDOUT = new Logger() {
@Override
public void trace(String msg) {
- System.out.println(msg);
+// System.out.println(msg);
}
@Override
diff --git a/java_console/io/src/com/rusefi/binaryprotocol/BinaryProtocol.java b/java_console/io/src/com/rusefi/binaryprotocol/BinaryProtocol.java
index e6ae59d59c..2f3975486f 100644
--- a/java_console/io/src/com/rusefi/binaryprotocol/BinaryProtocol.java
+++ b/java_console/io/src/com/rusefi/binaryprotocol/BinaryProtocol.java
@@ -18,6 +18,7 @@ import java.util.Arrays;
* 3/6/2015
*/
public class BinaryProtocol {
+ public static final int IMAGE_SIZE = 14008;
private static final int BLOCKING_FACTOR = 256;
private static final byte RESPONSE_OK = 0;
private static final byte RESPONSE_BURN_OK = 0x04;
@@ -169,7 +170,7 @@ public class BinaryProtocol {
}
}
- public void readImage(int size) throws SerialPortException, EOFException, InterruptedException {
+ public void readImage(int size) {
ConfigurationImage image = new ConfigurationImage(size);
int offset = 0;
diff --git a/java_console/io/src/com/rusefi/io/serial/PortHolder.java b/java_console/io/src/com/rusefi/io/serial/PortHolder.java
index 44cffd6068..b3d9b1c9b6 100644
--- a/java_console/io/src/com/rusefi/io/serial/PortHolder.java
+++ b/java_console/io/src/com/rusefi/io/serial/PortHolder.java
@@ -1,7 +1,10 @@
package com.rusefi.io.serial;
import com.rusefi.FileLog;
-import com.rusefi.core.EngineState;
+import com.rusefi.Logger;
+import com.rusefi.binaryprotocol.BinaryProtocol;
+import com.rusefi.core.MessagesCentral;
+import com.rusefi.io.CommandQueue;
import com.rusefi.io.DataListener;
import com.rusefi.io.LinkManager;
import jssc.SerialPort;
@@ -9,6 +12,8 @@ import jssc.SerialPortException;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
+import java.util.concurrent.*;
+
/**
* This class holds the reference to the actual Serial port object
*
@@ -24,7 +29,15 @@ public class PortHolder {
private static PortHolder instance = new PortHolder();
private final Object portLock = new Object();
+ private final LinkedBlockingQueue EXE_Q = new LinkedBlockingQueue<>();
+
+ private final ExecutorService PORT_QUEUE = new ThreadPoolExecutor(1, 1,
+ 0L, TimeUnit.MILLISECONDS,
+ EXE_Q);
+
public PortHolderListener portHolderListener = PortHolderListener.VOID;
+ private DataListener listener;
+ private BinaryProtocol bp;
private PortHolder() {
}
@@ -42,7 +55,8 @@ public class PortHolder {
return result;
}
- public boolean open(String port, DataListener listener) {
+ public boolean open(String port, final DataListener listener) {
+ this.listener = listener;
SerialPort serialPort = new SerialPort(port);
try {
FileLog.MAIN.logLine("Opening " + port + " @ " + BAUD_RATE);
@@ -50,7 +64,7 @@ public class PortHolder {
if (!opened)
FileLog.MAIN.logLine("not opened!");
setupPort(serialPort, BAUD_RATE);
- serialPort.addEventListener(new SerialPortReader(serialPort, listener));
+// serialPort.addEventListener(new SerialPortReader(serialPort, portHolderListener));
} catch (SerialPortException e) {
FileLog.rlog("ERROR " + e.getMessage());
return false;
@@ -68,19 +82,54 @@ public class PortHolder {
portLock.notifyAll();
}
- try {
- FileLog.rlog("PortHolder: test command");
- /**
- * Let's make sure we have not connected to Tuner Studio port?
- * @see EngineState#TS_PROTOCOL_TAG
- */
- doWriteCommand("test");
- } catch (SerialPortException e) {
- return false;
- }
+ bp = new BinaryProtocol(Logger.STDOUT, serialPort);
+
+ bp.switchToBinaryProtocol();
+// bp.readImage(BinaryProtocol.IMAGE_SIZE);
+
+ Runnable textPull = new Runnable() {
+ @Override
+ public void run() {
+ while (true) {
+ if (EXE_Q.isEmpty()) {
+ PORT_QUEUE.submit(new Runnable() {
+ @Override
+ public void run() {
+ String text = bp.requestText();
+ listener.onDataArrived((text + "\r\n").getBytes());
+ }
+ });
+ }
+ sleep();
+ }
+ }
+ };
+ Thread tr = new Thread(textPull);
+ tr.setName("text pull");
+ tr.start();
+
+//
+// try {
+// FileLog.rlog("PortHolder: test command");
+// /**
+// * Let's make sure we have not connected to Tuner Studio port?
+// * @see EngineState#TS_PROTOCOL_TAG
+// */
+// doWriteCommand("test");
+// } catch (SerialPortException e) {
+// return false;
+// }
return true;
}
+ private void sleep() {
+ try {
+ Thread.sleep(100);
+ } catch (InterruptedException e) {
+ throw new IllegalStateException(e);
+ }
+ }
+
public static void setupPort(SerialPort serialPort, int baudRate) throws SerialPortException {
serialPort.setParams(baudRate, 8, 1, 0);//Set params.
int mask = SerialPort.MASK_RXCHAR;
@@ -106,25 +155,45 @@ public class PortHolder {
/**
* this method blocks till a connection is available
*/
- public void packAndSend(String command) throws InterruptedException {
+ public void packAndSend(final String command) throws InterruptedException {
FileLog.MAIN.logLine("Sending [" + command + "]");
portHolderListener.onPortHolderMessage(PortHolder.class, "Sending [" + command + "]");
- long now = System.currentTimeMillis();
+ Future f = PORT_QUEUE.submit(new Runnable() {
+ @Override
+ public void run() {
+ bp.sendTextCommand(command);
+ }
+ });
- synchronized (portLock) {
- while (serialPort == null) {
- if (System.currentTimeMillis() - now > 3 * MINUTE)
- portHolderListener.onPortHolderMessage(PortHolder.class, "Looks like connection is gone :(");
- portLock.wait(MINUTE);
- }
- // we are here only when serialPort!=null, that means we have a connection
- try {
- doWriteCommand(command);
- } catch (SerialPortException e) {
- throw new IllegalStateException(e);
- }
+ try {
+ f.get(30, TimeUnit.SECONDS);
+ } catch (ExecutionException e) {
+ throw new IllegalStateException(e);
+ } catch (TimeoutException e) {
+ throw new IllegalStateException(e);
}
+ /**
+ * this here to make CommandQueue happy
+ */
+ MessagesCentral.getInstance().postMessage(PortHolder.class, CommandQueue.CONFIRMATION_PREFIX + command);
+
+
+// long now = System.currentTimeMillis();
+//
+// synchronized (portLock) {
+// while (serialPort == null) {
+// if (System.currentTimeMillis() - now > 3 * MINUTE)
+// portHolderListener.onPortHolderMessage(PortHolder.class, "Looks like connection is gone :(");
+// portLock.wait(MINUTE);
+// }
+// // we are here only when serialPort!=null, that means we have a connection
+// try {
+// doWriteCommand(command);
+// } catch (SerialPortException e) {
+// throw new IllegalStateException(e);
+// }
+// }
}
private void doWriteCommand(@NotNull String command) throws SerialPortException {
diff --git a/java_console/io/src/com/rusefi/io/serial/SerialConnector.java b/java_console/io/src/com/rusefi/io/serial/SerialConnector.java
index 0e636af8e2..18071d392e 100644
--- a/java_console/io/src/com/rusefi/io/serial/SerialConnector.java
+++ b/java_console/io/src/com/rusefi/io/serial/SerialConnector.java
@@ -2,6 +2,7 @@ package com.rusefi.io.serial;
import com.rusefi.FileLog;
import com.rusefi.core.EngineState;
+import com.rusefi.io.CommandQueue;
import com.rusefi.io.LinkConnector;
import com.rusefi.io.LinkManager;
import com.rusefi.io.tcp.TcpConnector;
@@ -33,17 +34,16 @@ public class SerialConnector implements LinkConnector {
@Override
public String unpack(String packet) {
- return EngineState.unpackString(packet);
+ return packet;
}
@Override
public void send(String text) throws InterruptedException {
- String command = LinkManager.encodeCommand(text);
- PortHolder.getInstance().packAndSend(command);
+ PortHolder.getInstance().packAndSend(text);
}
@Override
public String unpackConfirmation(String message) {
- return TcpConnector.doUnpackConfirmation(message);
+ return message.substring(CommandQueue.CONFIRMATION_PREFIX.length());
}
}
diff --git a/firmware/integration/rusefi.xml b/java_console/rusefi.xml
similarity index 100%
rename from firmware/integration/rusefi.xml
rename to java_console/rusefi.xml
diff --git a/java_console/ui/src/com/rusefi/Launcher.java b/java_console/ui/src/com/rusefi/Launcher.java
index c096df0ee4..89d9f3a813 100644
--- a/java_console/ui/src/com/rusefi/Launcher.java
+++ b/java_console/ui/src/com/rusefi/Launcher.java
@@ -83,7 +83,7 @@ public class Launcher extends FrameHelper {
super.onWindowOpened();
setTitle("N/A");
- LinkManager.open();
+ LinkManager.open(LinkManager.LinkStateListener.VOID);
LinkManager.engineState.registerStringValueAction(EngineState.RUS_EFI_VERSION_TAG, new EngineState.ValueCallback() {
@Override
diff --git a/java_console/ui/src/com/rusefi/RomRaiderWrapper.java b/java_console/ui/src/com/rusefi/RomRaiderWrapper.java
index 9f72661ca1..a12bf26f33 100644
--- a/java_console/ui/src/com/rusefi/RomRaiderWrapper.java
+++ b/java_console/ui/src/com/rusefi/RomRaiderWrapper.java
@@ -18,7 +18,7 @@ import static com.romraider.editor.ecu.ECUEditorManager.getECUEditor;
* 3/6/2015
*/
public class RomRaiderWrapper {
- private static final String DEFINITION_FILE = "..\\firmware\\integration\\rusefi.xml";
+ private static final String DEFINITION_FILE = "rusefi.xml";
public static void main(String[] args) {
startRomRaider();
diff --git a/java_console/ui/src/com/rusefi/UploadChanges.java b/java_console/ui/src/com/rusefi/UploadChanges.java
index 031f2477eb..e96184df3c 100644
--- a/java_console/ui/src/com/rusefi/UploadChanges.java
+++ b/java_console/ui/src/com/rusefi/UploadChanges.java
@@ -85,8 +85,8 @@ public class UploadChanges {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
- System.out.println(msg);
- wnd.appendMsg(msg);
+// System.out.println(msg);
+// wnd.appendMsg(msg);
}
});
}
diff --git a/java_console/ui/src/com/rusefi/binaryprotocol/BinaryProtocolCmd.java b/java_console/ui/src/com/rusefi/binaryprotocol/BinaryProtocolCmd.java
index 03b398311a..8c27a460aa 100644
--- a/java_console/ui/src/com/rusefi/binaryprotocol/BinaryProtocolCmd.java
+++ b/java_console/ui/src/com/rusefi/binaryprotocol/BinaryProtocolCmd.java
@@ -1,7 +1,10 @@
package com.rusefi.binaryprotocol;
+import com.romraider.editor.ecu.ECUEditor;
+import com.romraider.util.SettingsManager;
import com.rusefi.ConfigurationImage;
import com.rusefi.Logger;
+import com.rusefi.RomRaiderWrapper;
import com.rusefi.UploadChanges;
import com.rusefi.io.serial.PortHolder;
import jssc.SerialPort;
@@ -35,27 +38,14 @@ public class BinaryProtocolCmd {
logger.info("Looks good");
bp.switchToBinaryProtocol();
-
-// bp.exchange(new byte[]{'S'});
-
-
-// bp.sendTextCommand("hello");
-// bp.sendTextCommand("echo howareyou");
-
- while (true) {
- bp.requestText();
- }
-
-// bp.readImage(14008);
-// ConfigurationImage image = bp.getController();
+ bp.readImage(BinaryProtocol.IMAGE_SIZE);
+ ConfigurationImage image = bp.getController();
//
// image.saveToFile("rusefi_configuration.bin");
//
-// RomRaiderWrapper.startRomRaider();
-//
-// ECUEditor.openImage(image.getFileContent(), SettingsManager.getSettings().getEcuDefinitionFiles().elementAt(0),
-// "rusEfi");
-
+ RomRaiderWrapper.startRomRaider();
+ ECUEditor.openImage(image.getFileContent(), SettingsManager.getSettings().getEcuDefinitionFiles().elementAt(0),
+ "rusEfi");
}
public static void scheduleBurn(ConfigurationImage newVersion) {