- reopenOnTimeout moved to write/read method
- UART read/write corrected git-svn-id: https://svn.code.sf.net/p/libusbjava/code/trunk@137 94ad28fe-ef68-46b1-9651-e7ae4fcf1c4c
This commit is contained in:
@@ -32,7 +32,6 @@ public class USBDevice {
|
||||
|
||||
static {
|
||||
dev = USB.getDevice(IdVendor, IdProduct);
|
||||
dev.setReopenOnTimeout(true);
|
||||
dev.setResetOnFirstOpen(true);
|
||||
}
|
||||
|
||||
@@ -49,19 +48,19 @@ public class USBDevice {
|
||||
}
|
||||
|
||||
public static void write_BDI(byte[] data, int length) throws USBException {
|
||||
dev.bulkwrite(OUT_Endpoint_BDI, data, length, BDI_Timeout);
|
||||
dev.bulkwrite(OUT_Endpoint_BDI, data, length, BDI_Timeout, true);
|
||||
}
|
||||
|
||||
public static int read_BDI(byte[] data, int size) throws USBException {
|
||||
return dev.bulkread(IN_Endpoint_BDI, data, size, BDI_Timeout);
|
||||
return dev.bulkread(IN_Endpoint_BDI, data, size, BDI_Timeout, true);
|
||||
}
|
||||
|
||||
public static void write_UART(byte[] data, int length) throws USBException {
|
||||
dev.bulkwrite(OUT_Endpoint_UART, data, length, UART_Timeout);
|
||||
dev.bulkwrite(OUT_Endpoint_UART, data, length, UART_Timeout, false);
|
||||
}
|
||||
|
||||
public static int read_UART(byte[] data, int size) throws USBException {
|
||||
return dev.bulkread(IN_Endpoint_UART, data, size, UART_Timeout);
|
||||
return dev.bulkread(IN_Endpoint_UART, data, size, UART_Timeout, false);
|
||||
}
|
||||
|
||||
public static int getMaxPacketSize() {
|
||||
|
||||
@@ -24,11 +24,9 @@ public class Device {
|
||||
|
||||
private int usb_dev_handle;
|
||||
|
||||
private boolean reopenOnTimeout, reopenDone, resetOnFirstOpen, resetDone;
|
||||
private boolean resetOnFirstOpen, resetDone;
|
||||
|
||||
protected Device(short idVendor, short idProduct) {
|
||||
reopenOnTimeout = false;
|
||||
reopenDone = false;
|
||||
resetOnFirstOpen = false;
|
||||
resetDone = false;
|
||||
maxPacketSize = -1;
|
||||
@@ -172,7 +170,6 @@ public class Device {
|
||||
|
||||
/**
|
||||
* Write data to the device using a bulk transfer.<br>
|
||||
* If reopenOnTimeout is set to true, it may take
|
||||
*
|
||||
* @param out_ep_address
|
||||
* endpoint address to write to
|
||||
@@ -183,11 +180,14 @@ public class Device {
|
||||
* @param timeout
|
||||
* amount of time in ms the device will try to send the data
|
||||
* until a timeout exception is thrown
|
||||
* @param reopenOnTimeout
|
||||
* if set to true, the device will try to open the connection and
|
||||
* send the data again before a timeout exception is thrown
|
||||
* @return the actual number of bytes written
|
||||
* @throws USBException
|
||||
*/
|
||||
public int bulkwrite(int out_ep_address, byte[] data, int length,
|
||||
int timeout) throws USBException {
|
||||
int timeout, boolean reopenOnTimeout) throws USBException {
|
||||
if (usb_dev_handle <= 0) {
|
||||
throw new USBException("invalid device handle");
|
||||
}
|
||||
@@ -202,14 +202,13 @@ public class Device {
|
||||
if (lenWritten < 0) {
|
||||
if (lenWritten == TIMEOUT_ERROR_CODE) {
|
||||
// try to reopen the device and send the data again
|
||||
if (reopenOnTimeout & !reopenDone) {
|
||||
if (reopenOnTimeout) {
|
||||
logger.info("try to reopen");
|
||||
reset();
|
||||
open(configuration, interface_, altinterface);
|
||||
reopenDone = true;
|
||||
return bulkwrite(out_ep_address, data, length, timeout);
|
||||
return bulkwrite(out_ep_address, data, length, timeout,
|
||||
false);
|
||||
}
|
||||
reopenDone = false;
|
||||
throw new USBTimeoutException("LibusbWin.usb_bulk_write: "
|
||||
+ LibusbWin.usb_strerror());
|
||||
}
|
||||
@@ -230,6 +229,8 @@ public class Device {
|
||||
}
|
||||
|
||||
/**
|
||||
* Read data from the device using a bulk transfer.<br>
|
||||
*
|
||||
* @param in_ep_address
|
||||
* endpoint address to read from
|
||||
* @param data
|
||||
@@ -239,11 +240,14 @@ public class Device {
|
||||
* @param timeout
|
||||
* amount of time in ms the device will try to receive data until
|
||||
* a timeout exception is thrown
|
||||
* @param reopenOnTimeout
|
||||
* if set to true, the device will try to open the connection and
|
||||
* receive the data again before a timeout exception is thrown
|
||||
* @return the actual number of bytes read
|
||||
* @throws USBException
|
||||
*/
|
||||
public int bulkread(int in_ep_address, byte[] data, int size, int timeout)
|
||||
throws USBException {
|
||||
public int bulkread(int in_ep_address, byte[] data, int size, int timeout,
|
||||
boolean reopenOnTimeout) throws USBException {
|
||||
if (usb_dev_handle <= 0) {
|
||||
throw new USBException("invalid device handle");
|
||||
}
|
||||
@@ -259,14 +263,13 @@ public class Device {
|
||||
if (lenRead == TIMEOUT_ERROR_CODE) {
|
||||
if (lenRead == TIMEOUT_ERROR_CODE) {
|
||||
// try to reopen the device and send the data again
|
||||
if (reopenOnTimeout & !reopenDone) {
|
||||
if (reopenOnTimeout) {
|
||||
logger.info("try to reopen");
|
||||
reset();
|
||||
open(configuration, interface_, altinterface);
|
||||
reopenDone = true;
|
||||
return bulkwrite(in_ep_address, data, size, timeout);
|
||||
return bulkwrite(in_ep_address, data, size, timeout,
|
||||
false);
|
||||
}
|
||||
reopenDone = false;
|
||||
throw new USBTimeoutException("LibusbWin.usb_bulk_write: "
|
||||
+ LibusbWin.usb_strerror());
|
||||
}
|
||||
@@ -397,18 +400,6 @@ public class Device {
|
||||
return maxPacketSize;
|
||||
}
|
||||
|
||||
/**
|
||||
* Before a timeout exception is thrown (after issuing a read or write
|
||||
* command), the device will try to open the connection and send or receive
|
||||
* the data again.<br>
|
||||
* The default value is false.
|
||||
*
|
||||
* @param enable
|
||||
*/
|
||||
public void setReopenOnTimeout(boolean enable) {
|
||||
reopenOnTimeout = enable;
|
||||
}
|
||||
|
||||
/**
|
||||
* If enabled, the device is reset when first opened. This will only happen
|
||||
* once.
|
||||
|
||||
@@ -69,7 +69,8 @@ public class TestImplementation {
|
||||
static void write(byte[] data, int length) {
|
||||
int lenWritten = 0;
|
||||
try {
|
||||
lenWritten = dev.bulkwrite(OUT_ENDPOINT, data, length, TIMEOUT);
|
||||
lenWritten = dev.bulkwrite(OUT_ENDPOINT, data, length, TIMEOUT,
|
||||
false);
|
||||
StringBuffer sb = new StringBuffer("write_bulkdata: " + lenWritten
|
||||
+ " Bytes sent: ");
|
||||
for (int i = 0; i < lenWritten; i++) {
|
||||
@@ -86,7 +87,7 @@ public class TestImplementation {
|
||||
int lenRead = 0;
|
||||
try {
|
||||
lenRead = dev.bulkread(IN_ENDPOINT, data, dev.getMaxPacketSize(),
|
||||
TIMEOUT);
|
||||
TIMEOUT, false);
|
||||
StringBuffer sb = new StringBuffer("read_bulkdata: " + lenRead
|
||||
+ " Bytes received: Data: ");
|
||||
for (int i = 0; i < lenRead; i++) {
|
||||
|
||||
Reference in New Issue
Block a user