Skip to content

Commit f538097

Browse files
committed
values supported by default setFlowControl() consistent with getSupportedFlowControl()
1 parent 0a32c3f commit f538097

File tree

2 files changed

+29
-22
lines changed

2 files changed

+29
-22
lines changed

usbSerialForAndroid/src/androidTest/java/com/hoho/android/usbserial/DeviceTest.java

+25-20
Original file line numberDiff line numberDiff line change
@@ -1997,6 +1997,22 @@ public void controlLines() throws Exception {
19971997
}
19981998
}
19991999

2000+
@Test
2001+
public void flowControlBase() throws Exception {
2002+
usb.open();
2003+
usb.setParameters(115200, 8, 1, UsbSerialPort.PARITY_NONE);
2004+
assertEquals(FlowControl.NONE, usb.serialPort.getFlowControl());
2005+
assertTrue(usb.serialPort.getSupportedFlowControl().contains(FlowControl.NONE));
2006+
for(FlowControl flowControl : FlowControl.values()) {
2007+
if(usb.serialPort.getSupportedFlowControl().contains(flowControl)) {
2008+
usb.serialPort.setFlowControl(flowControl);
2009+
assertEquals(flowControl, usb.serialPort.getFlowControl());
2010+
} else {
2011+
assertThrows(UnsupportedOperationException.class, () -> usb.serialPort.setFlowControl(flowControl));
2012+
}
2013+
}
2014+
}
2015+
20002016
@Test
20012017
public void flowControlXonXoff() throws Exception {
20022018
final byte[] off_on = new byte[]{'x',CommonUsbSerialPort.CHAR_XOFF,'y',CommonUsbSerialPort.CHAR_XON,'z'};
@@ -2006,12 +2022,11 @@ public void flowControlXonXoff() throws Exception {
20062022
usb.open(EnumSet.of(UsbWrapper.OpenCloseFlags.NO_IOMANAGER_THREAD, UsbWrapper.OpenCloseFlags.NO_CONTROL_LINE_INIT));
20072023
telnet.setParameters(115200, 8, 1, UsbSerialPort.PARITY_NONE);
20082024
usb.setParameters(115200, 8, 1, UsbSerialPort.PARITY_NONE);
2009-
assertEquals(FlowControl.NONE, usb.serialPort.getFlowControl());
2010-
if (!usb.serialPort.getSupportedFlowControl().contains(FlowControl.XON_XOFF_INLINE) &&
2011-
!usb.serialPort.getSupportedFlowControl().contains(FlowControl.XON_XOFF)) {
2012-
assertThrows(UnsupportedOperationException.class, () -> usb.serialPort.setFlowControl(FlowControl.XON_XOFF_INLINE));
2013-
assertThrows(UnsupportedOperationException.class, () -> usb.serialPort.setFlowControl(FlowControl.XON_XOFF));
2025+
if(!usb.serialPort.getSupportedFlowControl().contains(FlowControl.XON_XOFF)) {
20142026
assertThrows(UnsupportedOperationException.class, () -> usb.serialPort.getXON());
2027+
}
2028+
if (!usb.serialPort.getSupportedFlowControl().contains(FlowControl.XON_XOFF_INLINE) &&
2029+
!usb.serialPort.getSupportedFlowControl().contains(FlowControl.XON_XOFF)) {
20152030
Assume.assumeTrue("flow control not supported", false);
20162031
}
20172032
if (usb.serialPort.getSupportedFlowControl().contains(FlowControl.XON_XOFF_INLINE) &&
@@ -2020,11 +2035,8 @@ public void flowControlXonXoff() throws Exception {
20202035
}
20212036
if (usb.serialPort.getSupportedFlowControl().contains(FlowControl.XON_XOFF_INLINE)) {
20222037
filter = new XonXoffFilter();
2023-
assertThrows(UnsupportedOperationException.class, () -> usb.serialPort.setFlowControl(FlowControl.XON_XOFF));
20242038
usb.serialPort.setFlowControl(FlowControl.XON_XOFF_INLINE);
20252039
assertEquals(FlowControl.XON_XOFF_INLINE, usb.serialPort.getFlowControl());
2026-
assertThrows(UnsupportedOperationException.class, () -> usb.serialPort.getXON());
2027-
20282040
assertTrue(filter.getXON());
20292041
assertThat(filter.filter(off_on), equalTo(off_on_filtered));
20302042
assertTrue(filter.getXON());
@@ -2034,7 +2046,6 @@ public void flowControlXonXoff() throws Exception {
20342046
assertTrue(filter.getXON());
20352047
} else {
20362048
filter = null;
2037-
assertThrows(UnsupportedOperationException.class, () -> usb.serialPort.setFlowControl(FlowControl.XON_XOFF_INLINE));
20382049
usb.serialPort.setFlowControl(FlowControl.XON_XOFF);
20392050
assertEquals(FlowControl.XON_XOFF, usb.serialPort.getFlowControl());
20402051
assertTrue(usb.serialPort.getXON());
@@ -2203,17 +2214,10 @@ private void flowControlHw(FlowControl flowControl) throws Exception {
22032214
usb.setParameters(115200, 8, 1, UsbSerialPort.PARITY_NONE);
22042215

22052216
// early exit, if flow control not supported
2217+
if (!usb.serialPort.getSupportedFlowControl().contains(flowControl))
2218+
Assume.assumeTrue("flow control not supported", false);
22062219
assertEquals(usb.inputLinesConnected ? EnumSet.of(ControlLine.RI) : EnumSet.noneOf(ControlLine.class), usb.serialPort.getControlLines()); // [1]
2207-
assertEquals(FlowControl.NONE, usb.serialPort.getFlowControl());
2208-
try {
2209-
usb.serialPort.setFlowControl(flowControl);
2210-
} catch (UnsupportedOperationException ignored) {
2211-
if (usb.serialPort.getSupportedFlowControl().contains(flowControl)) {
2212-
assertTrue("flow control support expected", false);
2213-
} else {
2214-
Assume.assumeTrue("flow control not supported", false);
2215-
}
2216-
}
2220+
usb.serialPort.setFlowControl(flowControl);
22172221
assertEquals(flowControl, usb.serialPort.getFlowControl());
22182222
if (!usb.inputLinesConnected)
22192223
Assume.assumeTrue("flow control lines not connected", false);
@@ -2528,7 +2532,8 @@ public void commonMethods() throws Exception {
25282532
assertThrows(UnsupportedOperationException.class, wrongSerialPort::getControlLines);
25292533
assertEquals(EnumSet.of(FlowControl.NONE), wrongSerialPort.getSupportedFlowControl());
25302534
assertEquals(FlowControl.NONE, wrongSerialPort.getFlowControl());
2531-
assertThrows(UnsupportedOperationException.class, () -> wrongSerialPort.setFlowControl(FlowControl.NONE));
2535+
wrongSerialPort.setFlowControl(FlowControl.NONE);
2536+
assertThrows(UnsupportedOperationException.class, () -> wrongSerialPort.setFlowControl(FlowControl.RTS_CTS));
25322537
assertThrows(UnsupportedOperationException.class, () -> wrongSerialPort.purgeHwBuffers(true, true));
25332538
assertThrows(UnsupportedOperationException.class, () -> wrongSerialPort.setBreak(true));
25342539
}

usbSerialForAndroid/src/main/java/com/hoho/android/usbserial/driver/CommonUsbSerialPort.java

+4-2
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616

1717
import java.io.IOException;
1818
import java.nio.ByteBuffer;
19-
import java.security.InvalidParameterException;
2019
import java.util.EnumSet;
2120

2221
/**
@@ -334,7 +333,10 @@ public boolean isOpen() {
334333
public EnumSet<ControlLine> getSupportedControlLines() throws IOException { return EnumSet.noneOf(ControlLine.class); }
335334

336335
@Override
337-
public void setFlowControl(FlowControl flowcontrol) throws IOException { throw new UnsupportedOperationException(); }
336+
public void setFlowControl(FlowControl flowcontrol) throws IOException {
337+
if (flowcontrol != FlowControl.NONE)
338+
throw new UnsupportedOperationException();
339+
}
338340

339341
@Override
340342
public FlowControl getFlowControl() { return mFlowControl; }

0 commit comments

Comments
 (0)