Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@

import java.nio.charset.Charset;
import java.util.Objects;
import java.util.concurrent.LinkedTransferQueue;
import java.util.concurrent.TransferQueue;

@Log4j2
public class SerialWebSocketService implements WebSocketServiceInterface {
Expand All @@ -22,7 +24,7 @@ public class SerialWebSocketService implements WebSocketServiceInterface {

private final Config.SerialMapping mapping;
private final SerialPort serialPort;
private byte[] writeBuffer = {};
private TransferQueue<byte[]> transferQueue = new LinkedTransferQueue<>();

private Thread readThread;
private Thread writeThread;
Expand Down Expand Up @@ -89,18 +91,19 @@ public void start() {
log.debug("Serial Read Thread stopped for {}", mapping.getName());
});

// Consumer
writeThread = new Thread(() -> {
log.debug("Serial Write Thread started for {}", mapping.getName());

while (isRunning) {
if (serialPort.isOpen()) {
if (writeBuffer.length > 0) {
log.trace("Bytes: {}", Hex.encodeHexString(writeBuffer));

serialPort.writeBytes(writeBuffer, writeBuffer.length);
writeBuffer = new byte[]{};
}
ThreadUtil.silentSleep(10);
try {
byte[] message = transferQueue.take();
log.info("Bytes: {}", Hex.encodeHexString(message));
serialPort.writeBytes(message, message.length);
} catch (InterruptedException e) {
log.error("Error writing on serial " + mapping.getName());
}
}
}

Expand Down Expand Up @@ -153,7 +156,9 @@ public void messageToService(String message) {

@Override
public void messageToService(byte[] message) {
writeBuffer = message;
// Producer
transferQueue.add(message);
//writeBuffer = message;
}

@Override
Expand Down