mirror of https://github.com/rusefi/rusefi-1.git
hard requirement for console version match #4187
This commit is contained in:
parent
fc81ef9ce5
commit
a908d7bb79
|
@ -15,6 +15,7 @@ import com.rusefi.core.SensorCentral;
|
||||||
import com.rusefi.io.*;
|
import com.rusefi.io.*;
|
||||||
import com.rusefi.io.commands.GetOutputsCommand;
|
import com.rusefi.io.commands.GetOutputsCommand;
|
||||||
import com.rusefi.io.commands.HelloCommand;
|
import com.rusefi.io.commands.HelloCommand;
|
||||||
|
import com.rusefi.shared.FileUtil;
|
||||||
import com.rusefi.tune.xml.Msq;
|
import com.rusefi.tune.xml.Msq;
|
||||||
import com.rusefi.ui.livedocs.LiveDocsRegistry;
|
import com.rusefi.ui.livedocs.LiveDocsRegistry;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
@ -164,21 +165,47 @@ public class BinaryProtocol {
|
||||||
*
|
*
|
||||||
* @return true if everything fine
|
* @return true if everything fine
|
||||||
*/
|
*/
|
||||||
public boolean connectAndReadConfiguration(Arguments arguments, DataListener listener) {
|
public String connectAndReadConfiguration(Arguments arguments, DataListener listener) {
|
||||||
try {
|
try {
|
||||||
signature = getSignature(stream);
|
signature = getSignature(stream);
|
||||||
log.info("Got " + signature + " signature");
|
log.info("Got " + signature + " signature");
|
||||||
SignatureHelper.downloadIfNotAvailable(SignatureHelper.getUrl(signature));
|
SignatureHelper.downloadIfNotAvailable(SignatureHelper.getUrl(signature));
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
return false;
|
return "Failed to read signature " + e;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String errorMessage = validateConfigVersion();
|
||||||
|
if (errorMessage != null)
|
||||||
|
return errorMessage;
|
||||||
|
|
||||||
readImage(arguments, Fields.TOTAL_CONFIG_SIZE);
|
readImage(arguments, Fields.TOTAL_CONFIG_SIZE);
|
||||||
if (isClosed)
|
if (isClosed)
|
||||||
return false;
|
return "Failed to read calibration";
|
||||||
|
|
||||||
startPullThread(listener);
|
startPullThread(listener);
|
||||||
binaryProtocolLogger.start();
|
binaryProtocolLogger.start();
|
||||||
return true;
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return null if everything is good, error message otherwise
|
||||||
|
*/
|
||||||
|
private String validateConfigVersion() {
|
||||||
|
int requestSize = 4;
|
||||||
|
byte[] packet = GetOutputsCommand.createRequest(TS_FILE_VERSION_OFFSET, requestSize);
|
||||||
|
|
||||||
|
String msg = "load TS_CONFIG_VERSION";
|
||||||
|
byte[] response = executeCommand(Fields.TS_OUTPUT_COMMAND, packet, msg);
|
||||||
|
if (!checkResponseCode(response, (byte) Fields.TS_RESPONSE_OK) || response.length != requestSize + 1) {
|
||||||
|
close();
|
||||||
|
return "Failed to " + msg;
|
||||||
|
}
|
||||||
|
int actualVersion = FileUtil.littleEndianWrap(response, 1, requestSize).getInt();
|
||||||
|
if (actualVersion != TS_FILE_VERSION) {
|
||||||
|
log.error("Got TS_CONFIG_VERSION " + actualVersion);
|
||||||
|
return "Incompatible firmware format=" + actualVersion + " while format " + TS_FILE_VERSION + " expected";
|
||||||
|
}
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void startPullThread(final DataListener textListener) {
|
private void startPullThread(final DataListener textListener) {
|
||||||
|
@ -310,6 +337,7 @@ public class BinaryProtocol {
|
||||||
String code = (response == null || response.length == 0) ? "empty" : "ERROR_CODE=" + getCode(response);
|
String code = (response == null || response.length == 0) ? "empty" : "ERROR_CODE=" + getCode(response);
|
||||||
String info = response == null ? "NO RESPONSE" : (code + " length=" + response.length);
|
String info = response == null ? "NO RESPONSE" : (code + " length=" + response.length);
|
||||||
log.info("readImage: ERROR UNEXPECTED Something is wrong, retrying... " + info);
|
log.info("readImage: ERROR UNEXPECTED Something is wrong, retrying... " + info);
|
||||||
|
// todo: looks like forever retry? that's weird
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -6,6 +6,6 @@ public class AbstractConnectionStateListener implements ConnectionStateListener
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onConnectionFailed() {
|
public void onConnectionFailed(String s) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
package com.rusefi.io;
|
package com.rusefi.io;
|
||||||
|
|
||||||
public interface ConnectionFailedListener {
|
public interface ConnectionFailedListener {
|
||||||
void onConnectionFailed();
|
void onConnectionFailed(String s);
|
||||||
}
|
}
|
||||||
|
|
|
@ -95,7 +95,7 @@ public class LinkManager implements Closeable {
|
||||||
|
|
||||||
startAndConnect(port, new ConnectionStateListener() {
|
startAndConnect(port, new ConnectionStateListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onConnectionFailed() {
|
public void onConnectionFailed(String s) {
|
||||||
IoUtils.exit("CONNECTION FAILED, did you specify the right port name?", -1);
|
IoUtils.exit("CONNECTION FAILED, did you specify the right port name?", -1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -246,7 +246,7 @@ public class LinkManager implements Closeable {
|
||||||
try {
|
try {
|
||||||
return TcpIoStream.open(port);
|
return TcpIoStream.open(port);
|
||||||
} catch (Throwable e) {
|
} catch (Throwable e) {
|
||||||
stateListener.onConnectionFailed();
|
stateListener.onConnectionFailed("Error " + e);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -40,26 +40,28 @@ public class PortHolder {
|
||||||
this.ioStreamFactory = ioStreamFactory;
|
this.ioStreamFactory = ioStreamFactory;
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean connectAndReadConfiguration(BinaryProtocol.Arguments arguments) {
|
/**
|
||||||
|
* @return true if OK, false if error
|
||||||
|
*/
|
||||||
|
void connectAndReadConfiguration(BinaryProtocol.Arguments arguments) {
|
||||||
IoStream stream = ioStreamFactory.call();
|
IoStream stream = ioStreamFactory.call();
|
||||||
if (stream == null) {
|
if (stream == null) {
|
||||||
// error already reported
|
// error already reported
|
||||||
return false;
|
return;
|
||||||
}
|
}
|
||||||
synchronized (portLock) {
|
synchronized (portLock) {
|
||||||
bp = new BinaryProtocol(linkManager, stream);
|
bp = new BinaryProtocol(linkManager, stream);
|
||||||
portLock.notifyAll();
|
portLock.notifyAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean result = bp.connectAndReadConfiguration( arguments, dataListener);
|
String errorMessage = bp.connectAndReadConfiguration(arguments, dataListener);
|
||||||
if (listener != null) {
|
if (listener != null) {
|
||||||
if (result) {
|
if (errorMessage == null) {
|
||||||
listener.onConnectionEstablished();
|
listener.onConnectionEstablished();
|
||||||
} else {
|
} else {
|
||||||
listener.onConnectionFailed();
|
listener.onConnectionFailed(errorMessage);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void close() {
|
public void close() {
|
||||||
|
|
|
@ -48,7 +48,7 @@ public class SandboxCommon {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onConnectionFailed() {
|
public void onConnectionFailed(String s) {
|
||||||
log.info("onConnectionFailed");
|
log.info("onConnectionFailed");
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
@ -263,7 +263,7 @@ public class ConsoleTools {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onConnectionFailed() {
|
public void onConnectionFailed(String s) {
|
||||||
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
@ -57,7 +57,7 @@ public class MainFrame {
|
||||||
this.consoleUI = Objects.requireNonNull(consoleUI);
|
this.consoleUI = Objects.requireNonNull(consoleUI);
|
||||||
|
|
||||||
this.tabbedPane = tabbedPane;
|
this.tabbedPane = tabbedPane;
|
||||||
listener = () -> {
|
listener = (String s) -> {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -78,7 +78,11 @@ public class MainFrame {
|
||||||
final LinkManager linkManager = consoleUI.uiContext.getLinkManager();
|
final LinkManager linkManager = consoleUI.uiContext.getLinkManager();
|
||||||
linkManager.getConnector().connectAndReadConfiguration(new BinaryProtocol.Arguments(true), new ConnectionStateListener() {
|
linkManager.getConnector().connectAndReadConfiguration(new BinaryProtocol.Arguments(true), new ConnectionStateListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onConnectionFailed() {
|
public void onConnectionFailed(String errorMessage) {
|
||||||
|
log.error("onConnectionFailed " + errorMessage);
|
||||||
|
String message = "This copy of rusEFI console is not compatible with this version of firmware\r\n" +
|
||||||
|
errorMessage;
|
||||||
|
JOptionPane.showMessageDialog(frame.getFrame(), message);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -25,7 +25,6 @@ import java.io.IOException;
|
||||||
import java.net.MalformedURLException;
|
import java.net.MalformedURLException;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.concurrent.CountDownLatch;
|
import java.util.concurrent.CountDownLatch;
|
||||||
import java.util.concurrent.TimeUnit;
|
|
||||||
|
|
||||||
import static com.devexperts.logging.Logging.getLogging;
|
import static com.devexperts.logging.Logging.getLogging;
|
||||||
import static com.rusefi.TestHelper.*;
|
import static com.rusefi.TestHelper.*;
|
||||||
|
@ -141,7 +140,7 @@ public class FullServerTest {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onConnectionFailed() {
|
public void onConnectionFailed(String s) {
|
||||||
System.out.println("Failed");
|
System.out.println("Failed");
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
package com.rusefi.io;
|
package com.rusefi.io;
|
||||||
|
|
||||||
import com.opensr5.ConfigurationImage;
|
import com.opensr5.ConfigurationImage;
|
||||||
import com.opensr5.Logger;
|
|
||||||
import com.opensr5.ini.field.ScalarIniField;
|
import com.opensr5.ini.field.ScalarIniField;
|
||||||
import com.rusefi.TestHelper;
|
import com.rusefi.TestHelper;
|
||||||
import com.rusefi.binaryprotocol.BinaryProtocol;
|
import com.rusefi.binaryprotocol.BinaryProtocol;
|
||||||
|
@ -35,7 +34,7 @@ public class TcpCommunicationIntegrationTest {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onConnectionFailed() {
|
public void onConnectionFailed(String s) {
|
||||||
System.out.println("onConnectionFailed");
|
System.out.println("onConnectionFailed");
|
||||||
failedCountDownLatch.countDown();
|
failedCountDownLatch.countDown();
|
||||||
}
|
}
|
||||||
|
@ -65,7 +64,7 @@ public class TcpCommunicationIntegrationTest {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onConnectionFailed() {
|
public void onConnectionFailed(String s) {
|
||||||
System.out.println("Failed");
|
System.out.println("Failed");
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -108,7 +107,7 @@ public class TcpCommunicationIntegrationTest {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onConnectionFailed() {
|
public void onConnectionFailed(String s) {
|
||||||
System.out.println("Failed");
|
System.out.println("Failed");
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in New Issue