setFlowControl method implemented

pull/43/head
Felipe Herranz 2016-04-10 19:32:02 +02:00
rodzic 1d85013857
commit cc7ada0a53
1 zmienionych plików z 29 dodań i 2 usunięć

Wyświetl plik

@ -70,6 +70,12 @@ public class CH34xSerialDevice extends UsbSerialDevice
private static final int CH34X_PARITY_MARK = 0xeb;
private static final int CH34X_PARITY_SPACE = 0xfb;
//Flow control values
private static final int CH34X_FLOW_CONTROL_NONE = 0x0000;
private static final int CH34X_FLOW_CONTROL_RTS_CTS = 0x0101;
private static final int CH34X_FLOW_CONTROL_DSR_DTR = 0x0202;
// XON/XOFF doesnt appear to be supported directly from hardware
private UsbInterface mInterface;
private UsbEndpoint inEndpoint;
@ -260,8 +266,20 @@ public class CH34xSerialDevice extends UsbSerialDevice
@Override
public void setFlowControl(int flowControl)
{
// TODO Auto-generated method stub
switch(flowControl)
{
case UsbSerialInterface.FLOW_CONTROL_OFF:
setCh340xFlow(CH34X_FLOW_CONTROL_NONE);
break;
case UsbSerialInterface.FLOW_CONTROL_RTS_CTS:
setCh340xFlow(CH34X_FLOW_CONTROL_RTS_CTS);
break;
case UsbSerialInterface.FLOW_CONTROL_DSR_DTR:
setCh340xFlow(CH34X_FLOW_CONTROL_DSR_DTR);
break;
default:
break;
}
}
@Override
@ -429,6 +447,15 @@ public class CH34xSerialDevice extends UsbSerialDevice
return 0;
}
private int setCh340xFlow(int flowControl)
{
if(checkState("set_flow_control", 0x95, 0x0706, new int[]{0x9f, 0xee}) == -1)
return -1;
if(setControlCommandOut(CH341_REQ_WRITE_REG, 0x2727, flowControl, null) == -1)
return -1;
return 0;
}
private int checkState(String msg, int request, int value, int[] expected)
{
byte[] buffer = new byte[expected.length];