Merge pull request #101 from jzaruba/feature/initial_baud_rate

Feature/initial baud rate
pull/145/head
Henry Addo 2018-01-16 03:52:39 +01:00 zatwierdzone przez GitHub
commit ee1f49f931
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: 4AEE18F83AFDEB23
2 zmienionych plików z 54 dodań i 1 usunięć

Wyświetl plik

@ -45,6 +45,8 @@ public class CDCSerialDevice extends UsbSerialDevice
private UsbEndpoint outEndpoint;
private UsbRequest requestIN;
private int initialBaudRate = 0;
public CDCSerialDevice(UsbDevice device, UsbDeviceConnection connection)
{
this(device, connection, -1);
@ -56,6 +58,16 @@ public class CDCSerialDevice extends UsbSerialDevice
mInterface = device.getInterface(iface >= 0 ? iface : findFirstCDC(device));
}
@Override
public void setInitialBaudRate(int initialBaudRate) {
this.initialBaudRate = initialBaudRate;
}
@Override
public int getInitialBaudRate() {
return initialBaudRate;
}
@Override
public boolean open()
{
@ -297,12 +309,29 @@ public class CDCSerialDevice extends UsbSerialDevice
}
// Default Setup
setControlCommand(CDC_SET_LINE_CODING, 0, CDC_DEFAULT_LINE_CODING);
setControlCommand(CDC_SET_LINE_CODING, 0, getInitialLineCoding());
setControlCommand(CDC_SET_CONTROL_LINE_STATE, CDC_CONTROL_LINE_ON, null);
return true;
}
protected byte[] getInitialLineCoding() {
byte[] lineCoding;
int initialBaudRate = getInitialBaudRate();
if(initialBaudRate > 0) {
lineCoding = CDC_DEFAULT_LINE_CODING.clone();
for (int i = 0; i < 4; i++) {
lineCoding[i] = (byte) (initialBaudRate >> i*8 & 0xFF);
}
} else {
lineCoding = CDC_DEFAULT_LINE_CODING;
}
return lineCoding;
}
private int setControlCommand(int request, int value, byte[] data)
{
int dataLength = 0;

Wyświetl plik

@ -112,6 +112,30 @@ public abstract class UsbSerialDevice implements UsbSerialInterface
serialBuffer.putWriteBuffer(buffer);
}
/**
* <p>
* Use this setter <strong>before</strong> calling {@link #open()} to override the default baud rate defined in this particular class.
* </p>
*
* <p>
* This is a workaround for devices where calling {@link #setBaudRate(int)} has no effect once {@link #open()} has been called.
* </p>
*
* @param initialBaudRate baud rate to be used when initializing the serial connection
*/
public void setInitialBaudRate(int initialBaudRate) {
// this class does not implement initialBaudRate
}
/**
* Classes that do not implement {@link #setInitialBaudRate(int)} should always return -1
*
* @return initial baud rate used when initializing the serial connection
*/
public int getInitialBaudRate() {
return -1;
}
@Override
public int read(UsbReadCallback mCallback)
{