From 294f949bd32584a7a6c90fe3e2f9bdfe0b6a3433 Mon Sep 17 00:00:00 2001 From: rusEfi Date: Sat, 13 Feb 2016 21:02:14 -0500 Subject: [PATCH] auto-sync --- firmware/console/binary/tunerstudio.cpp | 1 + firmware/console/console_io.cpp | 8 ++++++++ firmware/console/console_io.h | 1 + firmware/console/status_loop.cpp | 6 +++++- .../src/com/rusefi/binaryprotocol/IncomingDataBuffer.java | 2 +- java_console/io/src/com/rusefi/io/serial/PortHolder.java | 3 +-- .../io/src/com/rusefi/io/serial/SerialIoStream.java | 4 +++- .../io/src/com/rusefi/io/serial/SerialPortReader.java | 5 +++++ 8 files changed, 25 insertions(+), 5 deletions(-) diff --git a/firmware/console/binary/tunerstudio.cpp b/firmware/console/binary/tunerstudio.cpp index e79aaafd8b..7d0d469dab 100644 --- a/firmware/console/binary/tunerstudio.cpp +++ b/firmware/console/binary/tunerstudio.cpp @@ -440,6 +440,7 @@ void runBinaryProtocolLoop(ts_channel_s *tsChannel, bool isConsoleRedirect) { // tunerStudioError("ERROR: no command"); continue; } + onDataArrived(); // scheduleMsg(logger, "Got first=%x=[%c]", firstByte, firstByte); if (handlePlainCommand(tsChannel, firstByte)) continue; diff --git a/firmware/console/console_io.cpp b/firmware/console/console_io.cpp index d71e08095f..61b45dcb0e 100644 --- a/firmware/console/console_io.cpp +++ b/firmware/console/console_io.cpp @@ -40,6 +40,13 @@ static bool isSerialConsoleStarted = false; static event_listener_t consoleEventListener; +bool consoleByteArrived = false; + +void onDataArrived(void) { + consoleByteArrived = true; +} + + /** * @brief Reads a whole line from the input channel. * @@ -61,6 +68,7 @@ static bool getConsoleLine(BaseSequentialStream *chp, char *line, unsigned size) } short c = (short) chSequentialStreamGet(chp); + onDataArrived(); if (isSerialOverUart()) { uint32_t flags; diff --git a/firmware/console/console_io.h b/firmware/console/console_io.h index 7855c610e2..f152b5edaf 100644 --- a/firmware/console/console_io.h +++ b/firmware/console/console_io.h @@ -26,6 +26,7 @@ void consolePutChar(int x); void consoleOutputBuffer(const uint8_t *buf, int size); void startConsole(Logging *sharedLogger, CommandHandler console_line_callback_p); bool isSerialOverUart(void); +void onDataArrived(void); #if EFI_PROD_CODE || EFI_SIMULATOR || EFI_EGT bool isConsoleReady(void); diff --git a/firmware/console/status_loop.cpp b/firmware/console/status_loop.cpp index bbd8242e70..383aeb6beb 100644 --- a/firmware/console/status_loop.cpp +++ b/firmware/console/status_loop.cpp @@ -500,6 +500,8 @@ static bool isTriggerErrorNow() { return justHadError || isTriggerDecoderError(); } +extern bool consoleByteArrived; + /** * this thread has a lower-then-usual stack size so we cannot afford *print* methods here */ @@ -524,8 +526,10 @@ static void blinkingThread(void *arg) { communicationPin.setValue(1); #if EFI_ENGINE_CONTROL || defined(__DOXYGEN__) - if (isTriggerErrorNow() || isIgnitionTimingError()) + if (isTriggerErrorNow() || isIgnitionTimingError() || consoleByteArrived) { + consoleByteArrived = false; warningPin.setValue(1); + } #endif chThdSleepMilliseconds(delayMs); diff --git a/java_console/io/src/com/rusefi/binaryprotocol/IncomingDataBuffer.java b/java_console/io/src/com/rusefi/binaryprotocol/IncomingDataBuffer.java index 30da2cc517..bd7e6884c7 100644 --- a/java_console/io/src/com/rusefi/binaryprotocol/IncomingDataBuffer.java +++ b/java_console/io/src/com/rusefi/binaryprotocol/IncomingDataBuffer.java @@ -14,7 +14,7 @@ import java.util.Arrays; */ @ThreadSafe public class IncomingDataBuffer { - private static final int BUFFER_SIZE = 10000; + private static final int BUFFER_SIZE = 32768; /** * buffer for response bytes from controller */ 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 554bf17245..7c51e32bd6 100644 --- a/java_console/io/src/com/rusefi/io/serial/PortHolder.java +++ b/java_console/io/src/com/rusefi/io/serial/PortHolder.java @@ -54,9 +54,8 @@ public class PortHolder { FileLog.MAIN.logLine("Opening " + port + " @ " + BAUD_RATE); boolean opened = serialPort.openPort();//Open serial port if (!opened) - FileLog.MAIN.logLine("not opened!"); + FileLog.MAIN.logLine(port + ": not opened!"); setupPort(serialPort, BAUD_RATE); -// serialPort.setDataListener(new SerialPortReader(serialPort, communicationLoggingListener)); } catch (SerialPortException e) { FileLog.MAIN.logLine("ERROR " + e.getMessage()); return false; diff --git a/java_console/io/src/com/rusefi/io/serial/SerialIoStream.java b/java_console/io/src/com/rusefi/io/serial/SerialIoStream.java index 52167784c5..6daf569567 100644 --- a/java_console/io/src/com/rusefi/io/serial/SerialIoStream.java +++ b/java_console/io/src/com/rusefi/io/serial/SerialIoStream.java @@ -57,7 +57,9 @@ public class SerialIoStream implements IoStream { @Override public void setDataListener(DataListener listener) { try { - serialPort.addEventListener(new SerialPortReader(serialPort, listener)); + SerialPortReader reader = new SerialPortReader(serialPort, listener); + serialPort.addEventListener(reader); + reader.readInitial(); } catch (SerialPortException e) { throw new IllegalStateException(e); } diff --git a/java_console/io/src/com/rusefi/io/serial/SerialPortReader.java b/java_console/io/src/com/rusefi/io/serial/SerialPortReader.java index d27b904f51..d6f54d04d4 100644 --- a/java_console/io/src/com/rusefi/io/serial/SerialPortReader.java +++ b/java_console/io/src/com/rusefi/io/serial/SerialPortReader.java @@ -43,5 +43,10 @@ public class SerialPortReader implements SerialPortEventListener { public void readInitial() throws SerialPortException { int input = serialPort.getInputBufferBytesCount(); FileLog.MAIN.logLine(input + " bytes in input buffer"); + while (serialPort.getInputBufferBytesCount() > 0) { + byte[] data = serialPort.readBytes(); + if (data != null) + listener.onDataArrived(data); + } } }