From ff4c83958589794561a6212607bb6d54cc00b4f0 Mon Sep 17 00:00:00 2001 From: Felipe Herranz Date: Fri, 15 Apr 2016 23:32:32 +0200 Subject: [PATCH] CTS and DSR implementations added to CH340 --- .../felhr/usbserial/CH34xSerialDevice.java | 28 +++++++++++++++++-- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/usbserial/src/main/java/com/felhr/usbserial/CH34xSerialDevice.java b/usbserial/src/main/java/com/felhr/usbserial/CH34xSerialDevice.java index c44ab3a..a316572 100644 --- a/usbserial/src/main/java/com/felhr/usbserial/CH34xSerialDevice.java +++ b/usbserial/src/main/java/com/felhr/usbserial/CH34xSerialDevice.java @@ -123,6 +123,9 @@ public class CH34xSerialDevice extends UsbSerialDevice restartWorkingThread(); restartWriteThread(); + // Create Flow control thread but it will only be started if necessary + createFlowControlThread(); + // Pass references to the threads setThreadsParams(requestIN, outEndpoint); @@ -140,6 +143,7 @@ public class CH34xSerialDevice extends UsbSerialDevice { killWorkingThread(); killWriteThread(); + stopFlowControlThread(); connection.releaseInterface(mInterface); } @@ -149,6 +153,8 @@ public class CH34xSerialDevice extends UsbSerialDevice boolean ret = openCH34X(); if(ret) { + // Create Flow control thread but it will only be started if necessary + createFlowControlThread(); setSyncParams(inEndpoint, outEndpoint); asyncMode = false; return true; @@ -161,6 +167,7 @@ public class CH34xSerialDevice extends UsbSerialDevice @Override public void syncClose() { + stopFlowControlThread(); connection.releaseInterface(mInterface); } @@ -281,13 +288,23 @@ public class CH34xSerialDevice extends UsbSerialDevice switch(flowControl) { case UsbSerialInterface.FLOW_CONTROL_OFF: + rtsCtsEnabled = false; + dtrDsrEnabled = false; setCh340xFlow(CH34X_FLOW_CONTROL_NONE); break; case UsbSerialInterface.FLOW_CONTROL_RTS_CTS: + rtsCtsEnabled = true; + dtrDsrEnabled = false; setCh340xFlow(CH34X_FLOW_CONTROL_RTS_CTS); + ctsState = checkCTS(); + startFlowControlThread(); break; case UsbSerialInterface.FLOW_CONTROL_DSR_DTR: + rtsCtsEnabled = false; + dtrDsrEnabled = true; setCh340xFlow(CH34X_FLOW_CONTROL_DSR_DTR); + dsrState = checkDSR(); + startFlowControlThread(); break; default: break; @@ -311,13 +328,13 @@ public class CH34xSerialDevice extends UsbSerialDevice @Override public void getCTS(UsbCTSCallback ctsCallback) { - //TODO + this.ctsCallback = ctsCallback; } @Override public void getDSR(UsbDSRCallback dsrCallback) { - //TODO + this.dsrCallback = dsrCallback; } @Override @@ -516,7 +533,7 @@ public class CH34xSerialDevice extends UsbSerialDevice return false; } - if((buffer[1] & 0x01) == 0x00) //DSR ON + if((buffer[0] & 0x02) == 0x00) //DSR ON { return true; }else // DSR OFF @@ -559,6 +576,11 @@ public class CH34xSerialDevice extends UsbSerialDevice return response; } + private void createFlowControlThread() + { + flowControlThread = new FlowControlThread(); + } + private void startFlowControlThread() { flowControlThread.start();