From 33fed5e09c28bd502513a87e971a73d675879395 Mon Sep 17 00:00:00 2001 From: xiongyi Date: Fri, 26 Apr 2019 10:03:48 +0800 Subject: [PATCH] add a setBreak interface to set the break feature, now tested on FTDI chip. --- .../felhr/usbserial/BLED112SerialDevice.java | 6 +++++ .../com/felhr/usbserial/CDCSerialDevice.java | 6 +++++ .../felhr/usbserial/CH34xSerialDevice.java | 6 +++++ .../felhr/usbserial/CP2102SerialDevice.java | 6 +++++ .../com/felhr/usbserial/FTDISerialDevice.java | 22 +++++++++++++++++++ .../felhr/usbserial/PL2303SerialDevice.java | 6 +++++ .../com/felhr/usbserial/UsbSerialDevice.java | 2 ++ .../felhr/usbserial/UsbSerialInterface.java | 1 + .../felhr/usbserial/XdcVcpSerialDevice.java | 6 +++++ 9 files changed, 61 insertions(+) diff --git a/usbserial/src/main/java/com/felhr/usbserial/BLED112SerialDevice.java b/usbserial/src/main/java/com/felhr/usbserial/BLED112SerialDevice.java index 91dbaf4..8aa1822 100644 --- a/usbserial/src/main/java/com/felhr/usbserial/BLED112SerialDevice.java +++ b/usbserial/src/main/java/com/felhr/usbserial/BLED112SerialDevice.java @@ -203,6 +203,12 @@ public class BLED112SerialDevice extends UsbSerialDevice } + @Override + public void setBreak(boolean state) + { + //TODO + } + @Override public void setRTS(boolean state) { diff --git a/usbserial/src/main/java/com/felhr/usbserial/CDCSerialDevice.java b/usbserial/src/main/java/com/felhr/usbserial/CDCSerialDevice.java index 08bbe5f..b794438 100644 --- a/usbserial/src/main/java/com/felhr/usbserial/CDCSerialDevice.java +++ b/usbserial/src/main/java/com/felhr/usbserial/CDCSerialDevice.java @@ -245,6 +245,12 @@ public class CDCSerialDevice extends UsbSerialDevice } + @Override + public void setBreak(boolean state) + { + //TODO + } + @Override public void setRTS(boolean state) { diff --git a/usbserial/src/main/java/com/felhr/usbserial/CH34xSerialDevice.java b/usbserial/src/main/java/com/felhr/usbserial/CH34xSerialDevice.java index d239b7c..8b52185 100644 --- a/usbserial/src/main/java/com/felhr/usbserial/CH34xSerialDevice.java +++ b/usbserial/src/main/java/com/felhr/usbserial/CH34xSerialDevice.java @@ -267,6 +267,12 @@ public class CH34xSerialDevice extends UsbSerialDevice } + @Override + public void setBreak(boolean state) + { + //TODO Auto-generated method stub + } + @Override public void setParity(int parity) { diff --git a/usbserial/src/main/java/com/felhr/usbserial/CP2102SerialDevice.java b/usbserial/src/main/java/com/felhr/usbserial/CP2102SerialDevice.java index 7c7fcd9..5b00b29 100644 --- a/usbserial/src/main/java/com/felhr/usbserial/CP2102SerialDevice.java +++ b/usbserial/src/main/java/com/felhr/usbserial/CP2102SerialDevice.java @@ -326,6 +326,12 @@ public class CP2102SerialDevice extends UsbSerialDevice } } + @Override + public void setBreak(boolean state) + { + //TODO Auto-generated method stub + } + @Override public void setRTS(boolean state) { diff --git a/usbserial/src/main/java/com/felhr/usbserial/FTDISerialDevice.java b/usbserial/src/main/java/com/felhr/usbserial/FTDISerialDevice.java index 7343a0d..8f66427 100644 --- a/usbserial/src/main/java/com/felhr/usbserial/FTDISerialDevice.java +++ b/usbserial/src/main/java/com/felhr/usbserial/FTDISerialDevice.java @@ -36,6 +36,13 @@ public class FTDISerialDevice extends UsbSerialDevice private static final int FTDI_SIO_SET_RTS_HIGH = (2 | (FTDI_SIO_SET_RTS_MASK << 8)); private static final int FTDI_SIO_SET_RTS_LOW = (0 | (FTDI_SIO_SET_RTS_MASK << 8)); + /** + * BREAK on/off values obtained from linux driver + * https://github.com/torvalds/linux/blob/master/drivers/usb/serial/ftdi_sio.h + */ + private static final int FTDI_SIO_SET_BREAK_ON = (1<<14); + private static final int FTDI_SIO_SET_BREAK_OFF = (0<<14); + public static final int FTDI_BAUDRATE_300 = 0x2710; public static final int FTDI_BAUDRATE_600 = 0x1388; public static final int FTDI_BAUDRATE_1200 = 0x09c4; @@ -375,6 +382,21 @@ public class FTDISerialDevice extends UsbSerialDevice } } + /** + * BREAK on/off methods obtained from linux driver + * https://github.com/torvalds/linux/blob/master/drivers/usb/serial/ftdi_sio.c + */ + @Override + public void setBreak(boolean state) + { + if(state){ + currentSioSetData |= FTDI_SIO_SET_BREAK_ON; + }else{ + currentSioSetData &= ~(FTDI_SIO_SET_BREAK_ON); + } + setControlCommand(FTDI_SIO_SET_DATA, currentSioSetData, 0); + } + @Override public void setRTS(boolean state) { diff --git a/usbserial/src/main/java/com/felhr/usbserial/PL2303SerialDevice.java b/usbserial/src/main/java/com/felhr/usbserial/PL2303SerialDevice.java index fa7b00a..521e393 100644 --- a/usbserial/src/main/java/com/felhr/usbserial/PL2303SerialDevice.java +++ b/usbserial/src/main/java/com/felhr/usbserial/PL2303SerialDevice.java @@ -264,6 +264,12 @@ public class PL2303SerialDevice extends UsbSerialDevice } + @Override + public void setBreak(boolean state) + { + //TODO + } + @Override public void setRTS(boolean state) { diff --git a/usbserial/src/main/java/com/felhr/usbserial/UsbSerialDevice.java b/usbserial/src/main/java/com/felhr/usbserial/UsbSerialDevice.java index 825f9c1..7d9f008 100644 --- a/usbserial/src/main/java/com/felhr/usbserial/UsbSerialDevice.java +++ b/usbserial/src/main/java/com/felhr/usbserial/UsbSerialDevice.java @@ -227,6 +227,8 @@ public abstract class UsbSerialDevice implements UsbSerialInterface public abstract void setParity(int parity); @Override public abstract void setFlowControl(int flowControl); + @Override + public abstract void setBreak(boolean state); public SerialInputStream getInputStream() { if(asyncMode) diff --git a/usbserial/src/main/java/com/felhr/usbserial/UsbSerialInterface.java b/usbserial/src/main/java/com/felhr/usbserial/UsbSerialInterface.java index d861507..952b184 100644 --- a/usbserial/src/main/java/com/felhr/usbserial/UsbSerialInterface.java +++ b/usbserial/src/main/java/com/felhr/usbserial/UsbSerialInterface.java @@ -46,6 +46,7 @@ public interface UsbSerialInterface void setStopBits(int stopBits); void setParity(int parity); void setFlowControl(int flowControl); + void setBreak(boolean state); // Flow control commands and interface callback void setRTS(boolean state); diff --git a/usbserial/src/main/java/com/felhr/usbserial/XdcVcpSerialDevice.java b/usbserial/src/main/java/com/felhr/usbserial/XdcVcpSerialDevice.java index e84492b..e04daaa 100644 --- a/usbserial/src/main/java/com/felhr/usbserial/XdcVcpSerialDevice.java +++ b/usbserial/src/main/java/com/felhr/usbserial/XdcVcpSerialDevice.java @@ -297,6 +297,12 @@ public class XdcVcpSerialDevice extends UsbSerialDevice } } + @Override + public void setBreak(boolean state) + { + //TODO + } + @Override public void setRTS(boolean state) {