kopia lustrzana https://github.com/felHR85/UsbSerial
Merge pull request #101 from jzaruba/feature/initial_baud_rate
Feature/initial baud ratepull/145/head
commit
ee1f49f931
|
@ -45,6 +45,8 @@ public class CDCSerialDevice extends UsbSerialDevice
|
||||||
private UsbEndpoint outEndpoint;
|
private UsbEndpoint outEndpoint;
|
||||||
private UsbRequest requestIN;
|
private UsbRequest requestIN;
|
||||||
|
|
||||||
|
private int initialBaudRate = 0;
|
||||||
|
|
||||||
public CDCSerialDevice(UsbDevice device, UsbDeviceConnection connection)
|
public CDCSerialDevice(UsbDevice device, UsbDeviceConnection connection)
|
||||||
{
|
{
|
||||||
this(device, connection, -1);
|
this(device, connection, -1);
|
||||||
|
@ -56,6 +58,16 @@ public class CDCSerialDevice extends UsbSerialDevice
|
||||||
mInterface = device.getInterface(iface >= 0 ? iface : findFirstCDC(device));
|
mInterface = device.getInterface(iface >= 0 ? iface : findFirstCDC(device));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setInitialBaudRate(int initialBaudRate) {
|
||||||
|
this.initialBaudRate = initialBaudRate;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getInitialBaudRate() {
|
||||||
|
return initialBaudRate;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean open()
|
public boolean open()
|
||||||
{
|
{
|
||||||
|
@ -297,12 +309,29 @@ public class CDCSerialDevice extends UsbSerialDevice
|
||||||
}
|
}
|
||||||
|
|
||||||
// Default Setup
|
// 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);
|
setControlCommand(CDC_SET_CONTROL_LINE_STATE, CDC_CONTROL_LINE_ON, null);
|
||||||
|
|
||||||
return true;
|
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)
|
private int setControlCommand(int request, int value, byte[] data)
|
||||||
{
|
{
|
||||||
int dataLength = 0;
|
int dataLength = 0;
|
||||||
|
|
|
@ -112,6 +112,30 @@ public abstract class UsbSerialDevice implements UsbSerialInterface
|
||||||
serialBuffer.putWriteBuffer(buffer);
|
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
|
@Override
|
||||||
public int read(UsbReadCallback mCallback)
|
public int read(UsbReadCallback mCallback)
|
||||||
{
|
{
|
||||||
|
|
Ładowanie…
Reference in New Issue