From f4649e95566e7704f010a48aa521694915023550 Mon Sep 17 00:00:00 2001 From: Matt Manowiecki Date: Sat, 29 Jun 2024 16:22:42 +0200 Subject: [PATCH] add RTS & DTR to the PL2303 driver --- .../felhr/usbserial/PL2303SerialDevice.java | 24 +++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/usbserial/src/main/java/com/felhr/usbserial/PL2303SerialDevice.java b/usbserial/src/main/java/com/felhr/usbserial/PL2303SerialDevice.java index 521e3938..82d334bf 100644 --- a/usbserial/src/main/java/com/felhr/usbserial/PL2303SerialDevice.java +++ b/usbserial/src/main/java/com/felhr/usbserial/PL2303SerialDevice.java @@ -32,6 +32,7 @@ public class PL2303SerialDevice extends UsbSerialDevice (byte) 0x08 // [6] Data Bits (5=5, 6=6, 7=7, 8=8) }; + private int rtsDtrState = 0x0000; private final UsbInterface mInterface; private UsbEndpoint inEndpoint; @@ -273,13 +274,27 @@ public void setBreak(boolean state) @Override public void setRTS(boolean state) { - //TODO + if(state) + { + rtsDtrState |= (1 << 1); + }else + { + rtsDtrState &= ~(1 << 1); + } + setControlCommand(PL2303_REQTYPE_HOST2DEVICE, PL2303_SET_CONTROL_REQUEST, rtsDtrState, 0, null); } @Override public void setDTR(boolean state) { - //TODO + if(state) + { + rtsDtrState |= (1 << 0); + }else + { + rtsDtrState &= ~(1 << 0); + } + setControlCommand(PL2303_REQTYPE_HOST2DEVICE, PL2303_SET_CONTROL_REQUEST, rtsDtrState, 0, null); } @Override @@ -368,10 +383,11 @@ else if(endpoint.getType() == UsbConstants.USB_ENDPOINT_XFER_BULK if(setControlCommand(PL2303_REQTYPE_HOST2DEVICE_VENDOR, PL2303_VENDOR_WRITE_REQUEST, 0x0002, 0x0044, null) < 0) return false; // End of specific vendor stuff - if(setControlCommand(PL2303_REQTYPE_HOST2DEVICE, PL2303_SET_CONTROL_REQUEST, 0x0003, 0,null) < 0) - return false; + //if(setControlCommand(PL2303_REQTYPE_HOST2DEVICE, PL2303_SET_CONTROL_REQUEST, 0x0000, 0, null) < 0) if(setControlCommand(PL2303_REQTYPE_HOST2DEVICE, PL2303_SET_LINE_CODING, 0x0000, 0, defaultSetLine) < 0) return false; + if(setControlCommand(PL2303_REQTYPE_HOST2DEVICE, PL2303_SET_CONTROL_REQUEST, rtsDtrState, 0, null) < 0) + return false; if(setControlCommand(PL2303_REQTYPE_HOST2DEVICE_VENDOR, PL2303_VENDOR_WRITE_REQUEST, 0x0505, 0x1311, null) < 0) return false;