Replace tabs with spaces
This commit is contained in:
@@ -89,7 +89,7 @@ libraries {
|
|||||||
cppCompiler.args "-I${org.gradle.internal.jvm.Jvm.current().javaHome}/include/win32"
|
cppCompiler.args "-I${org.gradle.internal.jvm.Jvm.current().javaHome}/include/win32"
|
||||||
linker.args '-Wl,--kill-at', '-static-libgcc', '-static-libstdc++'
|
linker.args '-Wl,--kill-at', '-static-libgcc', '-static-libstdc++'
|
||||||
tasks.withType(CppCompile) { task ->
|
tasks.withType(CppCompile) { task ->
|
||||||
//task.dependsOn jniHeaders
|
task.dependsOn jniHeaders
|
||||||
}
|
}
|
||||||
|
|
||||||
lib library: 'usb', linkage: 'static'
|
lib library: 'usb', linkage: 'static'
|
||||||
|
|||||||
@@ -9,203 +9,203 @@ package ch.ntb.usb.testApp;
|
|||||||
|
|
||||||
public abstract class AbstractDeviceInfo {
|
public abstract class AbstractDeviceInfo {
|
||||||
|
|
||||||
private short idVendor;
|
private short idVendor;
|
||||||
|
|
||||||
private short idProduct;
|
private short idProduct;
|
||||||
|
|
||||||
private String filename = null;
|
private String filename = null;
|
||||||
|
|
||||||
private String busName = null;
|
private String busName = null;
|
||||||
|
|
||||||
private int timeout;
|
private int timeout;
|
||||||
|
|
||||||
private int configuration;
|
private int configuration;
|
||||||
|
|
||||||
private int interface_;
|
private int interface_;
|
||||||
|
|
||||||
private int altinterface;
|
private int altinterface;
|
||||||
|
|
||||||
private int outEPBulk = -1;
|
private int outEPBulk = -1;
|
||||||
|
|
||||||
private int inEPBulk = -1;
|
private int inEPBulk = -1;
|
||||||
|
|
||||||
private int outEPInt = -1;
|
private int outEPInt = -1;
|
||||||
|
|
||||||
private int inEPInt = -1;
|
private int inEPInt = -1;
|
||||||
|
|
||||||
private int sleepTimeout;
|
private int sleepTimeout;
|
||||||
|
|
||||||
private int maxDataSize;
|
private int maxDataSize;
|
||||||
|
|
||||||
private TransferMode mode;
|
private TransferMode mode;
|
||||||
|
|
||||||
private boolean compareData = true;
|
private boolean compareData = true;
|
||||||
|
|
||||||
private String manufacturer = null;
|
private String manufacturer = null;
|
||||||
|
|
||||||
private String product = null;
|
private String product = null;
|
||||||
|
|
||||||
private String serialVersion = null;
|
private String serialVersion = null;
|
||||||
|
|
||||||
public static enum TransferMode {
|
public static enum TransferMode {
|
||||||
Bulk, Interrupt
|
Bulk, Interrupt
|
||||||
}
|
}
|
||||||
|
|
||||||
public AbstractDeviceInfo() {
|
public AbstractDeviceInfo() {
|
||||||
initValues();
|
initValues();
|
||||||
}
|
}
|
||||||
|
|
||||||
abstract public void initValues();
|
abstract public void initValues();
|
||||||
|
|
||||||
public int getAltinterface() {
|
public int getAltinterface() {
|
||||||
return altinterface;
|
return altinterface;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getConfiguration() {
|
public int getConfiguration() {
|
||||||
return configuration;
|
return configuration;
|
||||||
}
|
}
|
||||||
|
|
||||||
public short getIdProduct() {
|
public short getIdProduct() {
|
||||||
return idProduct;
|
return idProduct;
|
||||||
}
|
}
|
||||||
|
|
||||||
public short getIdVendor() {
|
public short getIdVendor() {
|
||||||
return idVendor;
|
return idVendor;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getInEPBulk() {
|
public int getInEPBulk() {
|
||||||
return inEPBulk;
|
return inEPBulk;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getInEPInt() {
|
public int getInEPInt() {
|
||||||
return inEPInt;
|
return inEPInt;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getInterface() {
|
public int getInterface() {
|
||||||
return interface_;
|
return interface_;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getMaxDataSize() {
|
public int getMaxDataSize() {
|
||||||
return maxDataSize;
|
return maxDataSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getOutEPBulk() {
|
public int getOutEPBulk() {
|
||||||
return outEPBulk;
|
return outEPBulk;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getOutEPInt() {
|
public int getOutEPInt() {
|
||||||
return outEPInt;
|
return outEPInt;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getSleepTimeout() {
|
public int getSleepTimeout() {
|
||||||
return sleepTimeout;
|
return sleepTimeout;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getTimeout() {
|
public int getTimeout() {
|
||||||
return timeout;
|
return timeout;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setAltinterface(int altinterface) {
|
public void setAltinterface(int altinterface) {
|
||||||
this.altinterface = altinterface;
|
this.altinterface = altinterface;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setConfiguration(int configuration) {
|
public void setConfiguration(int configuration) {
|
||||||
this.configuration = configuration;
|
this.configuration = configuration;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setIdProduct(short idProduct) {
|
public void setIdProduct(short idProduct) {
|
||||||
this.idProduct = idProduct;
|
this.idProduct = idProduct;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setIdVendor(short idVendor) {
|
public void setIdVendor(short idVendor) {
|
||||||
this.idVendor = idVendor;
|
this.idVendor = idVendor;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setInEPBulk(int in_ep_bulk) {
|
public void setInEPBulk(int in_ep_bulk) {
|
||||||
this.inEPBulk = in_ep_bulk;
|
this.inEPBulk = in_ep_bulk;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setInEPInt(int in_ep_int) {
|
public void setInEPInt(int in_ep_int) {
|
||||||
this.inEPInt = in_ep_int;
|
this.inEPInt = in_ep_int;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setInterface(int interface_) {
|
public void setInterface(int interface_) {
|
||||||
this.interface_ = interface_;
|
this.interface_ = interface_;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setMaxDataSize(int maxDataSize) {
|
public void setMaxDataSize(int maxDataSize) {
|
||||||
this.maxDataSize = maxDataSize;
|
this.maxDataSize = maxDataSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setOutEPBulk(int out_ep_bulk) {
|
public void setOutEPBulk(int out_ep_bulk) {
|
||||||
this.outEPBulk = out_ep_bulk;
|
this.outEPBulk = out_ep_bulk;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setOutEPInt(int out_ep_int) {
|
public void setOutEPInt(int out_ep_int) {
|
||||||
this.outEPInt = out_ep_int;
|
this.outEPInt = out_ep_int;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setSleepTimeout(int sleepTimeout) {
|
public void setSleepTimeout(int sleepTimeout) {
|
||||||
this.sleepTimeout = sleepTimeout;
|
this.sleepTimeout = sleepTimeout;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setTimeout(int timeout) {
|
public void setTimeout(int timeout) {
|
||||||
this.timeout = timeout;
|
this.timeout = timeout;
|
||||||
}
|
}
|
||||||
|
|
||||||
public TransferMode getMode() {
|
public TransferMode getMode() {
|
||||||
return mode;
|
return mode;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setMode(TransferMode mode) {
|
public void setMode(TransferMode mode) {
|
||||||
this.mode = mode;
|
this.mode = mode;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean doCompareData() {
|
public boolean doCompareData() {
|
||||||
return compareData;
|
return compareData;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setDoCompareData(boolean compareData) {
|
public void setDoCompareData(boolean compareData) {
|
||||||
this.compareData = compareData;
|
this.compareData = compareData;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getManufacturer() {
|
public String getManufacturer() {
|
||||||
return manufacturer;
|
return manufacturer;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setManufacturer(String manufacturer) {
|
public void setManufacturer(String manufacturer) {
|
||||||
this.manufacturer = manufacturer;
|
this.manufacturer = manufacturer;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getProduct() {
|
public String getProduct() {
|
||||||
return product;
|
return product;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setProduct(String product) {
|
public void setProduct(String product) {
|
||||||
this.product = product;
|
this.product = product;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getSerialVersion() {
|
public String getSerialVersion() {
|
||||||
return serialVersion;
|
return serialVersion;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setSerialVersion(String serialVersion) {
|
public void setSerialVersion(String serialVersion) {
|
||||||
this.serialVersion = serialVersion;
|
this.serialVersion = serialVersion;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getFilename() {
|
public String getFilename() {
|
||||||
return filename;
|
return filename;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setFilename(String filename) {
|
public void setFilename(String filename) {
|
||||||
this.filename = filename;
|
this.filename = filename;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getBusName() {
|
public String getBusName() {
|
||||||
return busName;
|
return busName;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setBusName(String busName) {
|
public void setBusName(String busName) {
|
||||||
this.busName = busName;
|
this.busName = busName;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -18,174 +18,174 @@ import ch.ntb.usb.logger.LogUtil;
|
|||||||
|
|
||||||
public class TestDevice extends AbstractDeviceInfo {
|
public class TestDevice extends AbstractDeviceInfo {
|
||||||
|
|
||||||
private static final Logger logger = LogUtil.getLogger("ch.ntb.inf.libusbJava.test");
|
private static final Logger logger = LogUtil.getLogger("ch.ntb.inf.libusbJava.test");
|
||||||
|
|
||||||
private String sendData = "0x5b 0x02 0x01 0x00 0x03 0x03 0xf0 0xf0 0x1f";
|
private String sendData = "0x5b 0x02 0x01 0x00 0x03 0x03 0xf0 0xf0 0x1f";
|
||||||
|
|
||||||
private Vector<String> transferTypes;
|
private Vector<String> transferTypes;
|
||||||
|
|
||||||
private static Device dev = null;
|
private static Device dev = null;
|
||||||
|
|
||||||
private TransferMode inMode;
|
private TransferMode inMode;
|
||||||
private TransferMode outMode;
|
private TransferMode outMode;
|
||||||
|
|
||||||
public TestDevice() {
|
public TestDevice() {
|
||||||
logger.setLevel(Level.ALL);
|
logger.setLevel(Level.ALL);
|
||||||
// create a vector for transfer types
|
// create a vector for transfer types
|
||||||
transferTypes = new Vector<String>();
|
transferTypes = new Vector<String>();
|
||||||
transferTypes
|
transferTypes
|
||||||
.add(TransferMode.Bulk.ordinal(), TransferMode.Bulk.name());
|
.add(TransferMode.Bulk.ordinal(), TransferMode.Bulk.name());
|
||||||
transferTypes.add(TransferMode.Interrupt.ordinal(),
|
transferTypes.add(TransferMode.Interrupt.ordinal(),
|
||||||
TransferMode.Interrupt.name());
|
TransferMode.Interrupt.name());
|
||||||
inMode = TransferMode.Bulk;
|
inMode = TransferMode.Bulk;
|
||||||
outMode = TransferMode.Bulk;
|
outMode = TransferMode.Bulk;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void initValues() {
|
public void initValues() {
|
||||||
setIdVendor((short) 0x8235);
|
setIdVendor((short) 0x8235);
|
||||||
setIdProduct((short) 0x0200);
|
setIdProduct((short) 0x0200);
|
||||||
setTimeout(2000);
|
setTimeout(2000);
|
||||||
setConfiguration(1);
|
setConfiguration(1);
|
||||||
setInterface(0);
|
setInterface(0);
|
||||||
setAltinterface(-1);
|
setAltinterface(-1);
|
||||||
setOutEPBulk(0x01);
|
setOutEPBulk(0x01);
|
||||||
setInEPBulk(0x82);
|
setInEPBulk(0x82);
|
||||||
setOutEPInt(0x01);
|
setOutEPInt(0x01);
|
||||||
setInEPInt(0x82);
|
setInEPInt(0x82);
|
||||||
setSleepTimeout(2000);
|
setSleepTimeout(2000);
|
||||||
setMaxDataSize(USB.FULLSPEED_MAX_BULK_PACKET_SIZE);
|
setMaxDataSize(USB.FULLSPEED_MAX_BULK_PACKET_SIZE);
|
||||||
setMode(TransferMode.Bulk);
|
setMode(TransferMode.Bulk);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void openUsbDevice() {
|
public void openUsbDevice() {
|
||||||
dev = USB.getDevice(getIdVendor(), getIdProduct());
|
dev = USB.getDevice(getIdVendor(), getIdProduct());
|
||||||
try {
|
try {
|
||||||
dev.open(getConfiguration(), getInterface(), getAltinterface());
|
dev.open(getConfiguration(), getInterface(), getAltinterface());
|
||||||
logger.info("device opened, interface claimed");
|
logger.info("device opened, interface claimed");
|
||||||
} catch (USBException e) {
|
} catch (USBException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void closeUsbDevice() {
|
public void closeUsbDevice() {
|
||||||
try {
|
try {
|
||||||
if (dev != null) {
|
if (dev != null) {
|
||||||
dev.close();
|
dev.close();
|
||||||
logger.info("device closed");
|
logger.info("device closed");
|
||||||
} else {
|
} else {
|
||||||
logger.warning("no device to close -> open first");
|
logger.warning("no device to close -> open first");
|
||||||
}
|
}
|
||||||
} catch (USBException e) {
|
} catch (USBException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void resetUsbDevice() {
|
public void resetUsbDevice() {
|
||||||
try {
|
try {
|
||||||
if (dev != null) {
|
if (dev != null) {
|
||||||
dev.reset();
|
dev.reset();
|
||||||
logger.info("device reset");
|
logger.info("device reset");
|
||||||
} else {
|
} else {
|
||||||
logger.warning("no device to reset -> open first");
|
logger.warning("no device to reset -> open first");
|
||||||
}
|
}
|
||||||
} catch (USBException e) {
|
} catch (USBException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void write(byte[] data, int length) {
|
public void write(byte[] data, int length) {
|
||||||
int lenWritten = 0;
|
int lenWritten = 0;
|
||||||
try {
|
try {
|
||||||
if (dev != null) {
|
if (dev != null) {
|
||||||
StringBuffer sb = new StringBuffer();
|
StringBuffer sb = new StringBuffer();
|
||||||
switch (getOutMode()) {
|
switch (getOutMode()) {
|
||||||
case Bulk:
|
case Bulk:
|
||||||
lenWritten = dev.writeBulk(getOutEPBulk(), data, length,
|
lenWritten = dev.writeBulk(getOutEPBulk(), data, length,
|
||||||
getTimeout(), false);
|
getTimeout(), false);
|
||||||
sb.append("write_bulk, ep: 0x"
|
sb.append("write_bulk, ep: 0x"
|
||||||
+ Integer.toHexString(getOutEPBulk()) + ", "
|
+ Integer.toHexString(getOutEPBulk()) + ", "
|
||||||
+ lenWritten + " Bytes sent: ");
|
+ lenWritten + " Bytes sent: ");
|
||||||
break;
|
break;
|
||||||
case Interrupt:
|
case Interrupt:
|
||||||
lenWritten = dev.writeInterrupt(getOutEPInt(), data,
|
lenWritten = dev.writeInterrupt(getOutEPInt(), data,
|
||||||
length, getTimeout(), false);
|
length, getTimeout(), false);
|
||||||
sb.append("write_interrupt, ep: 0x"
|
sb.append("write_interrupt, ep: 0x"
|
||||||
+ Integer.toHexString(getOutEPInt()) + ", "
|
+ Integer.toHexString(getOutEPInt()) + ", "
|
||||||
+ lenWritten + " Bytes sent: ");
|
+ lenWritten + " Bytes sent: ");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
for (int i = 0; i < lenWritten; i++) {
|
for (int i = 0; i < lenWritten; i++) {
|
||||||
sb.append("0x" + String.format("%1$02X", data[i]) + " ");
|
sb.append("0x" + String.format("%1$02X", data[i]) + " ");
|
||||||
}
|
}
|
||||||
logger.info(sb.toString());
|
logger.info(sb.toString());
|
||||||
} else {
|
} else {
|
||||||
logger.warning("no device opened");
|
logger.warning("no device opened");
|
||||||
}
|
}
|
||||||
} catch (USBException e) {
|
} catch (USBException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void read() {
|
public void read() {
|
||||||
if (dev != null) {
|
if (dev != null) {
|
||||||
byte[] data = new byte[dev.getMaxPacketSize()];
|
byte[] data = new byte[dev.getMaxPacketSize()];
|
||||||
int lenRead = 0;
|
int lenRead = 0;
|
||||||
try {
|
try {
|
||||||
StringBuffer sb = new StringBuffer();
|
StringBuffer sb = new StringBuffer();
|
||||||
switch (getInMode()) {
|
switch (getInMode()) {
|
||||||
case Bulk:
|
case Bulk:
|
||||||
lenRead = dev.readBulk(getInEPBulk(), data, dev
|
lenRead = dev.readBulk(getInEPBulk(), data, dev
|
||||||
.getMaxPacketSize(), getTimeout(), false);
|
.getMaxPacketSize(), getTimeout(), false);
|
||||||
sb.append("read_bulk, ep: 0x"
|
sb.append("read_bulk, ep: 0x"
|
||||||
+ Integer.toHexString(getInEPBulk()) + ", "
|
+ Integer.toHexString(getInEPBulk()) + ", "
|
||||||
+ lenRead + " Bytes received: Data: ");
|
+ lenRead + " Bytes received: Data: ");
|
||||||
break;
|
break;
|
||||||
case Interrupt:
|
case Interrupt:
|
||||||
lenRead = dev.readInterrupt(getInEPInt(), data, dev
|
lenRead = dev.readInterrupt(getInEPInt(), data, dev
|
||||||
.getMaxPacketSize(), getTimeout(), false);
|
.getMaxPacketSize(), getTimeout(), false);
|
||||||
sb.append("read_interrupt, ep: 0x"
|
sb.append("read_interrupt, ep: 0x"
|
||||||
+ Integer.toHexString(getInEPInt()) + ", "
|
+ Integer.toHexString(getInEPInt()) + ", "
|
||||||
+ lenRead + " Bytes received: Data: ");
|
+ lenRead + " Bytes received: Data: ");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
for (int i = 0; i < lenRead; i++) {
|
for (int i = 0; i < lenRead; i++) {
|
||||||
sb.append("0x" + String.format("%1$02X", data[i]) + " ");
|
sb.append("0x" + String.format("%1$02X", data[i]) + " ");
|
||||||
}
|
}
|
||||||
logger.info(sb.toString());
|
logger.info(sb.toString());
|
||||||
} catch (USBException e) {
|
} catch (USBException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
logger.warning("no device opened");
|
logger.warning("no device opened");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getSendData() {
|
public String getSendData() {
|
||||||
return sendData;
|
return sendData;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setSendData(String sendData) {
|
public void setSendData(String sendData) {
|
||||||
this.sendData = sendData;
|
this.sendData = sendData;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Vector<String> getTransferTypes() {
|
public Vector<String> getTransferTypes() {
|
||||||
return transferTypes;
|
return transferTypes;
|
||||||
}
|
}
|
||||||
|
|
||||||
public TransferMode getOutMode() {
|
public TransferMode getOutMode() {
|
||||||
return outMode;
|
return outMode;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setOutMode(TransferMode outMode) {
|
public void setOutMode(TransferMode outMode) {
|
||||||
this.outMode = outMode;
|
this.outMode = outMode;
|
||||||
}
|
}
|
||||||
|
|
||||||
public TransferMode getInMode() {
|
public TransferMode getInMode() {
|
||||||
return inMode;
|
return inMode;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setInMode(TransferMode inMode) {
|
public void setInMode(TransferMode inMode) {
|
||||||
this.inMode = inMode;
|
this.inMode = inMode;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -30,496 +30,496 @@ import ch.ntb.usb.exceptions.LibusbError;
|
|||||||
|
|
||||||
public class UsbTreeModel implements TreeModel, TreeSelectionListener {
|
public class UsbTreeModel implements TreeModel, TreeSelectionListener {
|
||||||
|
|
||||||
private Usb_Bus rootBus;
|
private Usb_Bus rootBus;
|
||||||
|
|
||||||
private static final String USB_ROOT = "USB";
|
private static final String USB_ROOT = "USB";
|
||||||
|
|
||||||
private JTextArea textArea;
|
private JTextArea textArea;
|
||||||
|
|
||||||
private Vector<TreeModelListener> treeModelListeners = new Vector<TreeModelListener>();
|
private Vector<TreeModelListener> treeModelListeners = new Vector<TreeModelListener>();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Default constructor.<br>
|
* Default constructor.<br>
|
||||||
*
|
*
|
||||||
* @param rootBus
|
* @param rootBus
|
||||||
* the root bus from which the data is read
|
* the root bus from which the data is read
|
||||||
* @param textArea
|
* @param textArea
|
||||||
* the text area to which the data is written
|
* the text area to which the data is written
|
||||||
*/
|
*/
|
||||||
public UsbTreeModel(Usb_Bus rootBus, JTextArea textArea) {
|
public UsbTreeModel(Usb_Bus rootBus, JTextArea textArea) {
|
||||||
this.rootBus = rootBus;
|
this.rootBus = rootBus;
|
||||||
this.textArea = textArea;
|
this.textArea = textArea;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the root of the tree.
|
* Returns the root of the tree.
|
||||||
*/
|
*/
|
||||||
public Object getRoot() {
|
public Object getRoot() {
|
||||||
return USB_ROOT;
|
return USB_ROOT;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the child of parent at index index in the parent's child array.
|
* Returns the child of parent at index index in the parent's child array.
|
||||||
*/
|
*/
|
||||||
public Object getChild(Object parent, int index) {
|
public Object getChild(Object parent, int index) {
|
||||||
|
|
||||||
if (parent instanceof String
|
if (parent instanceof String
|
||||||
&& ((String) parent).compareTo(USB_ROOT) == 0) {
|
&& ((String) parent).compareTo(USB_ROOT) == 0) {
|
||||||
Usb_Bus curBus = rootBus;
|
Usb_Bus curBus = rootBus;
|
||||||
|
|
||||||
for (int i = 0; curBus != null; curBus = curBus.getNext(), i++) {
|
for (int i = 0; curBus != null; curBus = curBus.getNext(), i++) {
|
||||||
if (i == index)
|
if (i == index)
|
||||||
return curBus;
|
return curBus;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (parent instanceof Usb_Bus) {
|
else if (parent instanceof Usb_Bus) {
|
||||||
Usb_Device device = ((Usb_Bus) parent).getDevices();
|
Usb_Device device = ((Usb_Bus) parent).getDevices();
|
||||||
int count = 0;
|
int count = 0;
|
||||||
while (device != null) {
|
while (device != null) {
|
||||||
if (count == index)
|
if (count == index)
|
||||||
return device;
|
return device;
|
||||||
count++;
|
count++;
|
||||||
device = device.getNext();
|
device = device.getNext();
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
} else if (parent instanceof Usb_Device) {
|
} else if (parent instanceof Usb_Device) {
|
||||||
Usb_Device dev = (Usb_Device) parent;
|
Usb_Device dev = (Usb_Device) parent;
|
||||||
// return the Usb_Device_Descriptor at index 0
|
// return the Usb_Device_Descriptor at index 0
|
||||||
if (index == 0) {
|
if (index == 0) {
|
||||||
return dev.getDescriptor();
|
return dev.getDescriptor();
|
||||||
}
|
}
|
||||||
Usb_Config_Descriptor[] confDescs = dev.getConfig();
|
Usb_Config_Descriptor[] confDescs = dev.getConfig();
|
||||||
if (index >= confDescs.length + 1)
|
if (index >= confDescs.length + 1)
|
||||||
return null;
|
return null;
|
||||||
return confDescs[index - 1];
|
return confDescs[index - 1];
|
||||||
} else if (parent instanceof Usb_Config_Descriptor) {
|
} else if (parent instanceof Usb_Config_Descriptor) {
|
||||||
Usb_Interface[] intDescs = ((Usb_Config_Descriptor) parent)
|
Usb_Interface[] intDescs = ((Usb_Config_Descriptor) parent)
|
||||||
.getInterface();
|
.getInterface();
|
||||||
if (index >= intDescs.length)
|
if (index >= intDescs.length)
|
||||||
return null;
|
return null;
|
||||||
return intDescs[index];
|
return intDescs[index];
|
||||||
} else if (parent instanceof Usb_Interface) {
|
} else if (parent instanceof Usb_Interface) {
|
||||||
Usb_Interface_Descriptor[] altSettings = ((Usb_Interface) parent)
|
Usb_Interface_Descriptor[] altSettings = ((Usb_Interface) parent)
|
||||||
.getAltsetting();
|
.getAltsetting();
|
||||||
if (index >= altSettings.length)
|
if (index >= altSettings.length)
|
||||||
return null;
|
return null;
|
||||||
return altSettings[index];
|
return altSettings[index];
|
||||||
} else if (parent instanceof Usb_Interface_Descriptor) {
|
} else if (parent instanceof Usb_Interface_Descriptor) {
|
||||||
Usb_Endpoint_Descriptor[] endpoints = ((Usb_Interface_Descriptor) parent)
|
Usb_Endpoint_Descriptor[] endpoints = ((Usb_Interface_Descriptor) parent)
|
||||||
.getEndpoint();
|
.getEndpoint();
|
||||||
if (index >= endpoints.length)
|
if (index >= endpoints.length)
|
||||||
return null;
|
return null;
|
||||||
return endpoints[index];
|
return endpoints[index];
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the number of children of parent.
|
* Returns the number of children of parent.
|
||||||
*/
|
*/
|
||||||
public int getChildCount(Object parent) {
|
public int getChildCount(Object parent) {
|
||||||
if (parent instanceof String
|
if (parent instanceof String
|
||||||
&& ((String) parent).compareTo(USB_ROOT) == 0) {
|
&& ((String) parent).compareTo(USB_ROOT) == 0) {
|
||||||
int count = 0;
|
int count = 0;
|
||||||
|
|
||||||
Usb_Bus curBus = rootBus;
|
Usb_Bus curBus = rootBus;
|
||||||
|
|
||||||
for (; curBus != null; curBus = curBus.getNext()) {
|
for (; curBus != null; curBus = curBus.getNext()) {
|
||||||
count++;
|
count++;
|
||||||
}
|
}
|
||||||
|
|
||||||
return count;
|
return count;
|
||||||
|
|
||||||
} else if (parent instanceof Usb_Bus) {
|
} else if (parent instanceof Usb_Bus) {
|
||||||
Usb_Device device = ((Usb_Bus) parent).getDevices();
|
Usb_Device device = ((Usb_Bus) parent).getDevices();
|
||||||
int count = 0;
|
int count = 0;
|
||||||
while (device != null) {
|
while (device != null) {
|
||||||
count++;
|
count++;
|
||||||
device = device.getNext();
|
device = device.getNext();
|
||||||
}
|
}
|
||||||
return count;
|
return count;
|
||||||
} else if (parent instanceof Usb_Device) {
|
} else if (parent instanceof Usb_Device) {
|
||||||
// add the Usb_Device_Descriptor
|
// add the Usb_Device_Descriptor
|
||||||
return ((Usb_Device) parent).getConfig().length + 1;
|
return ((Usb_Device) parent).getConfig().length + 1;
|
||||||
} else if (parent instanceof Usb_Config_Descriptor) {
|
} else if (parent instanceof Usb_Config_Descriptor) {
|
||||||
return ((Usb_Config_Descriptor) parent).getInterface().length;
|
return ((Usb_Config_Descriptor) parent).getInterface().length;
|
||||||
} else if (parent instanceof Usb_Interface) {
|
} else if (parent instanceof Usb_Interface) {
|
||||||
return ((Usb_Interface) parent).getAltsetting().length;
|
return ((Usb_Interface) parent).getAltsetting().length;
|
||||||
} else if (parent instanceof Usb_Interface_Descriptor) {
|
} else if (parent instanceof Usb_Interface_Descriptor) {
|
||||||
return ((Usb_Interface_Descriptor) parent).getEndpoint().length;
|
return ((Usb_Interface_Descriptor) parent).getEndpoint().length;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns true if node is a leaf.
|
* Returns true if node is a leaf.
|
||||||
*/
|
*/
|
||||||
public boolean isLeaf(Object node) {
|
public boolean isLeaf(Object node) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Messaged when the user has altered the value for the item identified by
|
* Messaged when the user has altered the value for the item identified by
|
||||||
* path to newValue. Not used by this model.
|
* path to newValue. Not used by this model.
|
||||||
*/
|
*/
|
||||||
public void valueForPathChanged(TreePath path, Object newValue) {
|
public void valueForPathChanged(TreePath path, Object newValue) {
|
||||||
System.out.println("*** valueForPathChanged : " + path + " --> "
|
System.out.println("*** valueForPathChanged : " + path + " --> "
|
||||||
+ newValue);
|
+ newValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the index of child in parent.
|
* Returns the index of child in parent.
|
||||||
*/
|
*/
|
||||||
public int getIndexOfChild(Object parent, Object child) {
|
public int getIndexOfChild(Object parent, Object child) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addTreeModelListener(TreeModelListener l) {
|
public void addTreeModelListener(TreeModelListener l) {
|
||||||
treeModelListeners.addElement(l);
|
treeModelListeners.addElement(l);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void removeTreeModelListener(TreeModelListener l) {
|
public void removeTreeModelListener(TreeModelListener l) {
|
||||||
treeModelListeners.removeElement(l);
|
treeModelListeners.removeElement(l);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The only event raised by this model is TreeStructureChanged with the root
|
* The only event raised by this model is TreeStructureChanged with the root
|
||||||
* as path, i.e. the whole tree has changed.
|
* as path, i.e. the whole tree has changed.
|
||||||
*/
|
*/
|
||||||
protected void fireTreeStructureChanged(Usb_Bus newRootBus) {
|
protected void fireTreeStructureChanged(Usb_Bus newRootBus) {
|
||||||
rootBus = newRootBus;
|
rootBus = newRootBus;
|
||||||
int len = treeModelListeners.size();
|
int len = treeModelListeners.size();
|
||||||
TreeModelEvent e = new TreeModelEvent(this, new Object[] { newRootBus });
|
TreeModelEvent e = new TreeModelEvent(this, new Object[] { newRootBus });
|
||||||
for (int i = 0; i < len; i++) {
|
for (int i = 0; i < len; i++) {
|
||||||
treeModelListeners.elementAt(i).treeStructureChanged(e);
|
treeModelListeners.elementAt(i).treeStructureChanged(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void valueChanged(TreeSelectionEvent e) {
|
public void valueChanged(TreeSelectionEvent e) {
|
||||||
JTree tree = (JTree) e.getSource();
|
JTree tree = (JTree) e.getSource();
|
||||||
Object component = tree.getLastSelectedPathComponent();
|
Object component = tree.getLastSelectedPathComponent();
|
||||||
if (component instanceof Usb_Bus) {
|
if (component instanceof Usb_Bus) {
|
||||||
Usb_Bus bus = (Usb_Bus) component;
|
Usb_Bus bus = (Usb_Bus) component;
|
||||||
StringBuffer sb = new StringBuffer("Usb_Bus\n");
|
StringBuffer sb = new StringBuffer("Usb_Bus\n");
|
||||||
sb.append("\tdirname: " + bus.getDirname() + "\n");
|
sb.append("\tdirname: " + bus.getDirname() + "\n");
|
||||||
sb.append("\tlocation: 0x" + Long.toHexString(bus.getLocation())
|
sb.append("\tlocation: 0x" + Long.toHexString(bus.getLocation())
|
||||||
+ "\n");
|
+ "\n");
|
||||||
textArea.setText(sb.toString());
|
textArea.setText(sb.toString());
|
||||||
} else if (component instanceof Usb_Device) {
|
} else if (component instanceof Usb_Device) {
|
||||||
Usb_Device device = (Usb_Device) component;
|
Usb_Device device = (Usb_Device) component;
|
||||||
StringBuffer sb = new StringBuffer("Usb_Device\n");
|
StringBuffer sb = new StringBuffer("Usb_Device\n");
|
||||||
sb.append("\tfilename: " + device.getFilename() + "\n");
|
sb.append("\tfilename: " + device.getFilename() + "\n");
|
||||||
sb.append("\tdevnum: " + device.getDevnum() + "\n");
|
sb.append("\tdevnum: " + device.getDevnum() + "\n");
|
||||||
sb.append("\tnum_children: " + device.getNumChildren() + "\n");
|
sb.append("\tnum_children: " + device.getNumChildren() + "\n");
|
||||||
textArea.setText(sb.toString());
|
textArea.setText(sb.toString());
|
||||||
} else if (component instanceof Usb_Device_Descriptor) {
|
} else if (component instanceof Usb_Device_Descriptor) {
|
||||||
Usb_Device_Descriptor devDesc = (Usb_Device_Descriptor) component;
|
Usb_Device_Descriptor devDesc = (Usb_Device_Descriptor) component;
|
||||||
StringBuffer sb = new StringBuffer("Usb_Device_Descriptor\n");
|
StringBuffer sb = new StringBuffer("Usb_Device_Descriptor\n");
|
||||||
sb.append("\tblenght: 0x"
|
sb.append("\tblenght: 0x"
|
||||||
+ Integer.toHexString(devDesc.getBLength() & 0xFF) + "\n");
|
+ Integer.toHexString(devDesc.getBLength() & 0xFF) + "\n");
|
||||||
sb.append("\tbDescriptorType: 0x"
|
sb.append("\tbDescriptorType: 0x"
|
||||||
+ Integer.toHexString(devDesc.getBDescriptorType() & 0xFF)
|
+ Integer.toHexString(devDesc.getBDescriptorType() & 0xFF)
|
||||||
+ "\n");
|
+ "\n");
|
||||||
sb.append("\tbcdUSB: 0x"
|
sb.append("\tbcdUSB: 0x"
|
||||||
+ Integer.toHexString(devDesc.getBcdUSB() & 0xFFFF) + "\n");
|
+ Integer.toHexString(devDesc.getBcdUSB() & 0xFFFF) + "\n");
|
||||||
sb.append("\tbDeviceClass: 0x"
|
sb.append("\tbDeviceClass: 0x"
|
||||||
+ Integer.toHexString(devDesc.getBDeviceClass() & 0xFF)
|
+ Integer.toHexString(devDesc.getBDeviceClass() & 0xFF)
|
||||||
+ "\n");
|
+ "\n");
|
||||||
sb.append("\tbDeviceSubClass: 0x"
|
sb.append("\tbDeviceSubClass: 0x"
|
||||||
+ Integer.toHexString(devDesc.getBDeviceSubClass() & 0xFF)
|
+ Integer.toHexString(devDesc.getBDeviceSubClass() & 0xFF)
|
||||||
+ "\n");
|
+ "\n");
|
||||||
sb.append("\tbDeviceProtocol: 0x"
|
sb.append("\tbDeviceProtocol: 0x"
|
||||||
+ Integer.toHexString(devDesc.getBDeviceProtocol() & 0xFF)
|
+ Integer.toHexString(devDesc.getBDeviceProtocol() & 0xFF)
|
||||||
+ "\n");
|
+ "\n");
|
||||||
sb.append("\tbMaxPacketSize0: 0x"
|
sb.append("\tbMaxPacketSize0: 0x"
|
||||||
+ Integer.toHexString(devDesc.getBMaxPacketSize0() & 0xFF)
|
+ Integer.toHexString(devDesc.getBMaxPacketSize0() & 0xFF)
|
||||||
+ " (" + devDesc.getBMaxPacketSize0() + ")\n");
|
+ " (" + devDesc.getBMaxPacketSize0() + ")\n");
|
||||||
sb.append("\tidVendor: 0x"
|
sb.append("\tidVendor: 0x"
|
||||||
+ Integer.toHexString(devDesc.getIdVendor() & 0xFFFF)
|
+ Integer.toHexString(devDesc.getIdVendor() & 0xFFFF)
|
||||||
+ "\n");
|
+ "\n");
|
||||||
sb.append("\tidProduct: 0x"
|
sb.append("\tidProduct: 0x"
|
||||||
+ Integer.toHexString(devDesc.getIdProduct() & 0xFFFF)
|
+ Integer.toHexString(devDesc.getIdProduct() & 0xFFFF)
|
||||||
+ "\n");
|
+ "\n");
|
||||||
sb.append("\tbcdDevice: 0x"
|
sb.append("\tbcdDevice: 0x"
|
||||||
+ Integer.toHexString(devDesc.getBcdDevice() & 0xFF) + "\n");
|
+ Integer.toHexString(devDesc.getBcdDevice() & 0xFF) + "\n");
|
||||||
sb.append("\tiManufacturer: 0x"
|
sb.append("\tiManufacturer: 0x"
|
||||||
+ Integer.toHexString(devDesc.getIManufacturer() & 0xFF)
|
+ Integer.toHexString(devDesc.getIManufacturer() & 0xFF)
|
||||||
+ "\n");
|
+ "\n");
|
||||||
sb.append("\tiProduct: 0x"
|
sb.append("\tiProduct: 0x"
|
||||||
+ Integer.toHexString(devDesc.getIProduct()) + "\n");
|
+ Integer.toHexString(devDesc.getIProduct()) + "\n");
|
||||||
sb.append("\tiSerialNumber: 0x"
|
sb.append("\tiSerialNumber: 0x"
|
||||||
+ Integer.toHexString(devDesc.getISerialNumber() & 0xFF)
|
+ Integer.toHexString(devDesc.getISerialNumber() & 0xFF)
|
||||||
+ "\n");
|
+ "\n");
|
||||||
sb.append("\tbNumConfigurations: 0x"
|
sb.append("\tbNumConfigurations: 0x"
|
||||||
+ Integer.toHexString(devDesc.getBNumConfigurations() & 0xFF)
|
+ Integer.toHexString(devDesc.getBNumConfigurations() & 0xFF)
|
||||||
+ "\n");
|
+ "\n");
|
||||||
// get device handle to retrieve string descriptors
|
// get device handle to retrieve string descriptors
|
||||||
Usb_Bus bus = rootBus;
|
Usb_Bus bus = rootBus;
|
||||||
while (bus != null) {
|
while (bus != null) {
|
||||||
Usb_Device dev = bus.getDevices();
|
Usb_Device dev = bus.getDevices();
|
||||||
while (dev != null) {
|
while (dev != null) {
|
||||||
Usb_Device_Descriptor tmpDevDesc = dev.getDescriptor();
|
Usb_Device_Descriptor tmpDevDesc = dev.getDescriptor();
|
||||||
if ((dev.getDescriptor() != null)
|
if ((dev.getDescriptor() != null)
|
||||||
&& ((dev.getDescriptor().getIManufacturer() > 0)
|
&& ((dev.getDescriptor().getIManufacturer() > 0)
|
||||||
|| (dev.getDescriptor().getIProduct() > 0) || (dev
|
|| (dev.getDescriptor().getIProduct() > 0) || (dev
|
||||||
.getDescriptor().getISerialNumber() > 0))) {
|
.getDescriptor().getISerialNumber() > 0))) {
|
||||||
if (tmpDevDesc.equals(devDesc)) {
|
if (tmpDevDesc.equals(devDesc)) {
|
||||||
try {
|
try {
|
||||||
sb.append("\nString descriptors\n");
|
sb.append("\nString descriptors\n");
|
||||||
long handle = LibusbJava1.libusb_open(dev);
|
long handle = LibusbJava1.libusb_open(dev);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
if (dev.getDescriptor().getIManufacturer() > 0) {
|
if (dev.getDescriptor().getIManufacturer() > 0) {
|
||||||
String manufacturer = LibusbJava1
|
String manufacturer = LibusbJava1
|
||||||
.libusb_get_string_descriptor_ascii(
|
.libusb_get_string_descriptor_ascii(
|
||||||
handle,
|
handle,
|
||||||
devDesc.getIManufacturer(),
|
devDesc.getIManufacturer(),
|
||||||
255);
|
255);
|
||||||
if (manufacturer == null)
|
if (manufacturer == null)
|
||||||
manufacturer = "unable to fetch manufacturer string";
|
manufacturer = "unable to fetch manufacturer string";
|
||||||
sb.append("\tiManufacturer: "
|
sb.append("\tiManufacturer: "
|
||||||
+ manufacturer + "\n");
|
+ manufacturer + "\n");
|
||||||
}
|
}
|
||||||
if (dev.getDescriptor().getIProduct() > 0) {
|
if (dev.getDescriptor().getIProduct() > 0) {
|
||||||
String product = LibusbJava1
|
String product = LibusbJava1
|
||||||
.libusb_get_string_descriptor_ascii(
|
.libusb_get_string_descriptor_ascii(
|
||||||
handle,
|
handle,
|
||||||
devDesc.getIProduct(),
|
devDesc.getIProduct(),
|
||||||
255);
|
255);
|
||||||
if (product == null)
|
if (product == null)
|
||||||
product = "unable to fetch product string";
|
product = "unable to fetch product string";
|
||||||
sb.append("\tiProduct: " + product
|
sb.append("\tiProduct: " + product
|
||||||
+ "\n");
|
+ "\n");
|
||||||
}
|
}
|
||||||
if (dev.getDescriptor().getISerialNumber() > 0) {
|
if (dev.getDescriptor().getISerialNumber() > 0) {
|
||||||
String serialNumber = LibusbJava1
|
String serialNumber = LibusbJava1
|
||||||
.libusb_get_string_descriptor_ascii(
|
.libusb_get_string_descriptor_ascii(
|
||||||
handle,
|
handle,
|
||||||
devDesc.getISerialNumber(),
|
devDesc.getISerialNumber(),
|
||||||
255);
|
255);
|
||||||
if (serialNumber == null)
|
if (serialNumber == null)
|
||||||
serialNumber = "unable to fetch serial number string";
|
serialNumber = "unable to fetch serial number string";
|
||||||
sb.append("\tiSerialNumber: "
|
sb.append("\tiSerialNumber: "
|
||||||
+ serialNumber + "\n");
|
+ serialNumber + "\n");
|
||||||
}
|
}
|
||||||
} catch (LibusbError ex) {
|
} catch (LibusbError ex) {
|
||||||
sb.append("\terror getting descriptors: "
|
sb.append("\terror getting descriptors: "
|
||||||
+ ex.getErrorString() + "\n");
|
+ ex.getErrorString() + "\n");
|
||||||
} finally {
|
} finally {
|
||||||
LibusbJava1.libusb_close(handle);
|
LibusbJava1.libusb_close(handle);
|
||||||
}
|
}
|
||||||
} catch (LibusbError ex) {
|
} catch (LibusbError ex) {
|
||||||
sb.append("\terror opening the device"
|
sb.append("\terror opening the device"
|
||||||
+ ex.getErrorString() + "\n");
|
+ ex.getErrorString() + "\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
dev = dev.getNext();
|
dev = dev.getNext();
|
||||||
}
|
}
|
||||||
bus = bus.getNext();
|
bus = bus.getNext();
|
||||||
}
|
}
|
||||||
textArea.setText(sb.toString());
|
textArea.setText(sb.toString());
|
||||||
} else if (component instanceof Usb_Config_Descriptor) {
|
} else if (component instanceof Usb_Config_Descriptor) {
|
||||||
Usb_Config_Descriptor confDesc = (Usb_Config_Descriptor) component;
|
Usb_Config_Descriptor confDesc = (Usb_Config_Descriptor) component;
|
||||||
StringBuffer sb = new StringBuffer("Usb_Config_Descriptor\n");
|
StringBuffer sb = new StringBuffer("Usb_Config_Descriptor\n");
|
||||||
sb.append("\tblenght: 0x"
|
sb.append("\tblenght: 0x"
|
||||||
+ Integer.toHexString(confDesc.getBLength()) + "\n");
|
+ Integer.toHexString(confDesc.getBLength()) + "\n");
|
||||||
sb.append("\tbDescriptorType: 0x"
|
sb.append("\tbDescriptorType: 0x"
|
||||||
+ Integer.toHexString(confDesc.getBDescriptorType() & 0xFF)
|
+ Integer.toHexString(confDesc.getBDescriptorType() & 0xFF)
|
||||||
+ "\n");
|
+ "\n");
|
||||||
sb.append("\tbNumInterfaces: 0x"
|
sb.append("\tbNumInterfaces: 0x"
|
||||||
+ Integer.toHexString(confDesc.getBNumInterfaces() & 0xFF)
|
+ Integer.toHexString(confDesc.getBNumInterfaces() & 0xFF)
|
||||||
+ "\n");
|
+ "\n");
|
||||||
sb.append("\tbConfigurationValue: 0x"
|
sb.append("\tbConfigurationValue: 0x"
|
||||||
+ Integer.toHexString(confDesc.getBConfigurationValue() & 0xFF)
|
+ Integer.toHexString(confDesc.getBConfigurationValue() & 0xFF)
|
||||||
+ "\n");
|
+ "\n");
|
||||||
sb.append("\tiConfiguration: 0x"
|
sb.append("\tiConfiguration: 0x"
|
||||||
+ Integer.toHexString(confDesc.getIConfiguration() & 0xFF)
|
+ Integer.toHexString(confDesc.getIConfiguration() & 0xFF)
|
||||||
+ "\n");
|
+ "\n");
|
||||||
sb.append("\tbmAttributes: 0x"
|
sb.append("\tbmAttributes: 0x"
|
||||||
+ Integer.toHexString(confDesc.getBmAttributes() & 0xFF)
|
+ Integer.toHexString(confDesc.getBmAttributes() & 0xFF)
|
||||||
+ "\n");
|
+ "\n");
|
||||||
sb.append("\tMaxPower [mA]: 0x"
|
sb.append("\tMaxPower [mA]: 0x"
|
||||||
+ Integer.toHexString(confDesc.getMaxPower() & 0xFF) + " ("
|
+ Integer.toHexString(confDesc.getMaxPower() & 0xFF) + " ("
|
||||||
+ confDesc.getMaxPower() + ")\n");
|
+ confDesc.getMaxPower() + ")\n");
|
||||||
sb.append("\textralen: 0x"
|
sb.append("\textralen: 0x"
|
||||||
+ Integer.toHexString(confDesc.getExtralen()) + "\n");
|
+ Integer.toHexString(confDesc.getExtralen()) + "\n");
|
||||||
sb.append("\textra: "
|
sb.append("\textra: "
|
||||||
+ extraDescriptorToString(confDesc.getExtra()) + "\n");
|
+ extraDescriptorToString(confDesc.getExtra()) + "\n");
|
||||||
// get device handle to retrieve string descriptors
|
// get device handle to retrieve string descriptors
|
||||||
Usb_Bus bus = rootBus;
|
Usb_Bus bus = rootBus;
|
||||||
while (bus != null) {
|
while (bus != null) {
|
||||||
Usb_Device dev = bus.getDevices();
|
Usb_Device dev = bus.getDevices();
|
||||||
while (dev != null) {
|
while (dev != null) {
|
||||||
Usb_Config_Descriptor[] tmpConfDesc = dev.getConfig();
|
Usb_Config_Descriptor[] tmpConfDesc = dev.getConfig();
|
||||||
for (int i = 0; i < tmpConfDesc.length; i++) {
|
for (int i = 0; i < tmpConfDesc.length; i++) {
|
||||||
if ((tmpConfDesc.equals(confDesc))
|
if ((tmpConfDesc.equals(confDesc))
|
||||||
&& (confDesc.getIConfiguration() > 0)) {
|
&& (confDesc.getIConfiguration() > 0)) {
|
||||||
try {
|
try {
|
||||||
sb.append("\nString descriptors\n");
|
sb.append("\nString descriptors\n");
|
||||||
long handle = LibusbJava1.libusb_open(dev);
|
long handle = LibusbJava1.libusb_open(dev);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
String configuration = LibusbJava1
|
String configuration = LibusbJava1
|
||||||
.libusb_get_string_descriptor_ascii(
|
.libusb_get_string_descriptor_ascii(
|
||||||
handle,
|
handle,
|
||||||
confDesc.getIConfiguration(),
|
confDesc.getIConfiguration(),
|
||||||
255);
|
255);
|
||||||
if (configuration == null)
|
if (configuration == null)
|
||||||
configuration = "unable to fetch configuration string";
|
configuration = "unable to fetch configuration string";
|
||||||
sb.append("\tiConfiguration: "
|
sb.append("\tiConfiguration: "
|
||||||
+ configuration + "\n");
|
+ configuration + "\n");
|
||||||
} catch (LibusbError e1) {
|
} catch (LibusbError e1) {
|
||||||
sb.append("\terror getting config descriptor: "
|
sb.append("\terror getting config descriptor: "
|
||||||
+ e1.getErrorString() + "\n");
|
+ e1.getErrorString() + "\n");
|
||||||
} finally {
|
} finally {
|
||||||
LibusbJava1.libusb_close(handle);
|
LibusbJava1.libusb_close(handle);
|
||||||
}
|
}
|
||||||
} catch (LibusbError e1) {
|
} catch (LibusbError e1) {
|
||||||
sb.append("\terror opening the device: "
|
sb.append("\terror opening the device: "
|
||||||
+ e1.getErrorString() + "\n");
|
+ e1.getErrorString() + "\n");
|
||||||
} finally {
|
} finally {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
dev = dev.getNext();
|
dev = dev.getNext();
|
||||||
}
|
}
|
||||||
bus = bus.getNext();
|
bus = bus.getNext();
|
||||||
}
|
}
|
||||||
textArea.setText(sb.toString());
|
textArea.setText(sb.toString());
|
||||||
} else if (component instanceof Usb_Interface) {
|
} else if (component instanceof Usb_Interface) {
|
||||||
Usb_Interface int_ = (Usb_Interface) component;
|
Usb_Interface int_ = (Usb_Interface) component;
|
||||||
StringBuffer sb = new StringBuffer("Usb_Interface\n");
|
StringBuffer sb = new StringBuffer("Usb_Interface\n");
|
||||||
sb.append("\tnum_altsetting: 0x"
|
sb.append("\tnum_altsetting: 0x"
|
||||||
+ Integer.toHexString(int_.getNumAltsetting()) + "\n");
|
+ Integer.toHexString(int_.getNumAltsetting()) + "\n");
|
||||||
sb.append("\taltsetting: " + int_.getAltsetting() + "\n");
|
sb.append("\taltsetting: " + int_.getAltsetting() + "\n");
|
||||||
textArea.setText(sb.toString());
|
textArea.setText(sb.toString());
|
||||||
} else if (component instanceof Usb_Interface_Descriptor) {
|
} else if (component instanceof Usb_Interface_Descriptor) {
|
||||||
Usb_Interface_Descriptor intDesc = (Usb_Interface_Descriptor) component;
|
Usb_Interface_Descriptor intDesc = (Usb_Interface_Descriptor) component;
|
||||||
StringBuffer sb = new StringBuffer("Usb_Interface_Descriptor\n");
|
StringBuffer sb = new StringBuffer("Usb_Interface_Descriptor\n");
|
||||||
sb.append("\tblenght: 0x"
|
sb.append("\tblenght: 0x"
|
||||||
+ Integer.toHexString(intDesc.getBLength() & 0xFF) + "\n");
|
+ Integer.toHexString(intDesc.getBLength() & 0xFF) + "\n");
|
||||||
sb.append("\tbDescriptorType: 0x"
|
sb.append("\tbDescriptorType: 0x"
|
||||||
+ Integer.toHexString(intDesc.getBDescriptorType() & 0xFF)
|
+ Integer.toHexString(intDesc.getBDescriptorType() & 0xFF)
|
||||||
+ "\n");
|
+ "\n");
|
||||||
sb.append("\tbInterfaceNumber: 0x"
|
sb.append("\tbInterfaceNumber: 0x"
|
||||||
+ Integer.toHexString(intDesc.getBInterfaceNumber() & 0xFF)
|
+ Integer.toHexString(intDesc.getBInterfaceNumber() & 0xFF)
|
||||||
+ "\n");
|
+ "\n");
|
||||||
sb.append("\tbAlternateSetting: 0x"
|
sb.append("\tbAlternateSetting: 0x"
|
||||||
+ Integer.toHexString(intDesc.getBAlternateSetting() & 0xFF)
|
+ Integer.toHexString(intDesc.getBAlternateSetting() & 0xFF)
|
||||||
+ "\n");
|
+ "\n");
|
||||||
sb.append("\tbNumEndpoints: 0x"
|
sb.append("\tbNumEndpoints: 0x"
|
||||||
+ Integer.toHexString(intDesc.getBNumEndpoints() & 0xFF)
|
+ Integer.toHexString(intDesc.getBNumEndpoints() & 0xFF)
|
||||||
+ "\n");
|
+ "\n");
|
||||||
sb.append("\tbInterfaceClass: 0x"
|
sb.append("\tbInterfaceClass: 0x"
|
||||||
+ Integer.toHexString(intDesc.getBInterfaceClass() & 0xFF)
|
+ Integer.toHexString(intDesc.getBInterfaceClass() & 0xFF)
|
||||||
+ "\n");
|
+ "\n");
|
||||||
sb.append("\tbInterfaceSubClass: 0x"
|
sb.append("\tbInterfaceSubClass: 0x"
|
||||||
+ Integer.toHexString(intDesc.getBInterfaceSubClass() & 0xFF)
|
+ Integer.toHexString(intDesc.getBInterfaceSubClass() & 0xFF)
|
||||||
+ "\n");
|
+ "\n");
|
||||||
sb.append("\tbInterfaceProtocol: 0x"
|
sb.append("\tbInterfaceProtocol: 0x"
|
||||||
+ Integer.toHexString(intDesc.getBInterfaceProtocol() & 0xFF)
|
+ Integer.toHexString(intDesc.getBInterfaceProtocol() & 0xFF)
|
||||||
+ "\n");
|
+ "\n");
|
||||||
sb.append("\tiInterface: 0x"
|
sb.append("\tiInterface: 0x"
|
||||||
+ Integer.toHexString(intDesc.getIInterface()) + "\n");
|
+ Integer.toHexString(intDesc.getIInterface()) + "\n");
|
||||||
sb.append("\textralen: 0x"
|
sb.append("\textralen: 0x"
|
||||||
+ Integer.toHexString(intDesc.getExtralen()) + "\n");
|
+ Integer.toHexString(intDesc.getExtralen()) + "\n");
|
||||||
sb.append("\textra: " + extraDescriptorToString(intDesc.getExtra())
|
sb.append("\textra: " + extraDescriptorToString(intDesc.getExtra())
|
||||||
+ "\n");
|
+ "\n");
|
||||||
// get device handle to retrieve string descriptors
|
// get device handle to retrieve string descriptors
|
||||||
Usb_Bus bus = rootBus;
|
Usb_Bus bus = rootBus;
|
||||||
while (bus != null) {
|
while (bus != null) {
|
||||||
Usb_Device dev = bus.getDevices();
|
Usb_Device dev = bus.getDevices();
|
||||||
while (dev != null) {
|
while (dev != null) {
|
||||||
try {
|
try {
|
||||||
long handle = LibusbJava1.libusb_open(dev);
|
long handle = LibusbJava1.libusb_open(dev);
|
||||||
|
|
||||||
Usb_Config_Descriptor[] confDescs = dev.getConfig();
|
Usb_Config_Descriptor[] confDescs = dev.getConfig();
|
||||||
for (int i = 0; i < confDescs.length; i++) {
|
for (int i = 0; i < confDescs.length; i++) {
|
||||||
Usb_Interface[] ints = confDescs[i].getInterface();
|
Usb_Interface[] ints = confDescs[i].getInterface();
|
||||||
|
|
||||||
for (int j = 0; j < ints.length; j++) {
|
for (int j = 0; j < ints.length; j++) {
|
||||||
Usb_Interface_Descriptor[] tmpIntDescs = ints[j]
|
Usb_Interface_Descriptor[] tmpIntDescs = ints[j]
|
||||||
.getAltsetting();
|
.getAltsetting();
|
||||||
|
|
||||||
for (int k = 0; k < ints.length; k++) {
|
for (int k = 0; k < ints.length; k++) {
|
||||||
if (i < tmpIntDescs.length
|
if (i < tmpIntDescs.length
|
||||||
&& tmpIntDescs[i].equals(intDesc)
|
&& tmpIntDescs[i].equals(intDesc)
|
||||||
&& (intDesc.getIInterface() > 0)) {
|
&& (intDesc.getIInterface() > 0)) {
|
||||||
sb.append("\nString descriptors\n");
|
sb.append("\nString descriptors\n");
|
||||||
try {
|
try {
|
||||||
String interface_ = LibusbJava1
|
String interface_ = LibusbJava1
|
||||||
.libusb_get_string_descriptor_ascii(
|
.libusb_get_string_descriptor_ascii(
|
||||||
handle,
|
handle,
|
||||||
intDesc.getIInterface(),
|
intDesc.getIInterface(),
|
||||||
255);
|
255);
|
||||||
if (interface_ == null)
|
if (interface_ == null)
|
||||||
interface_ = "unable to fetch interface string";
|
interface_ = "unable to fetch interface string";
|
||||||
sb.append("\tiInterface: "
|
sb.append("\tiInterface: "
|
||||||
+ interface_ + "\n");
|
+ interface_ + "\n");
|
||||||
} catch (LibusbError e1) {
|
} catch (LibusbError e1) {
|
||||||
sb.append("\terror while reading descriptors: "
|
sb.append("\terror while reading descriptors: "
|
||||||
+ e1.getErrorString()
|
+ e1.getErrorString()
|
||||||
+ "\n");
|
+ "\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
LibusbJava1.libusb_close(handle);
|
LibusbJava1.libusb_close(handle);
|
||||||
} catch (LibusbError e1) {
|
} catch (LibusbError e1) {
|
||||||
sb.append("\terror opening the device: "
|
sb.append("\terror opening the device: "
|
||||||
+ e1.getErrorString() + "\n");
|
+ e1.getErrorString() + "\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
dev = dev.getNext();
|
dev = dev.getNext();
|
||||||
}
|
}
|
||||||
bus = bus.getNext();
|
bus = bus.getNext();
|
||||||
}
|
}
|
||||||
textArea.setText(sb.toString());
|
textArea.setText(sb.toString());
|
||||||
} else if (component instanceof Usb_Endpoint_Descriptor) {
|
} else if (component instanceof Usb_Endpoint_Descriptor) {
|
||||||
Usb_Endpoint_Descriptor epDesc = (Usb_Endpoint_Descriptor) component;
|
Usb_Endpoint_Descriptor epDesc = (Usb_Endpoint_Descriptor) component;
|
||||||
StringBuffer sb = new StringBuffer("Usb_Endpoint_Descriptor\n");
|
StringBuffer sb = new StringBuffer("Usb_Endpoint_Descriptor\n");
|
||||||
sb.append("\tblenght: 0x"
|
sb.append("\tblenght: 0x"
|
||||||
+ Integer.toHexString(epDesc.getBLength() & 0xFF) + "\n");
|
+ Integer.toHexString(epDesc.getBLength() & 0xFF) + "\n");
|
||||||
sb.append("\tbDescriptorType: 0x"
|
sb.append("\tbDescriptorType: 0x"
|
||||||
+ Integer.toHexString(epDesc.getBDescriptorType() & 0xFF)
|
+ Integer.toHexString(epDesc.getBDescriptorType() & 0xFF)
|
||||||
+ "\n");
|
+ "\n");
|
||||||
sb.append("\tbEndpointAddress: 0x"
|
sb.append("\tbEndpointAddress: 0x"
|
||||||
+ Integer.toHexString(epDesc.getBEndpointAddress() & 0xFF)
|
+ Integer.toHexString(epDesc.getBEndpointAddress() & 0xFF)
|
||||||
+ "\n");
|
+ "\n");
|
||||||
sb.append("\tbmAttributes: 0x"
|
sb.append("\tbmAttributes: 0x"
|
||||||
+ Integer.toHexString(epDesc.getBmAttributes() & 0xFF)
|
+ Integer.toHexString(epDesc.getBmAttributes() & 0xFF)
|
||||||
+ "\n");
|
+ "\n");
|
||||||
sb.append("\twMaxPacketSize: 0x"
|
sb.append("\twMaxPacketSize: 0x"
|
||||||
+ Integer.toHexString(epDesc.getWMaxPacketSize() & 0xFFFF)
|
+ Integer.toHexString(epDesc.getWMaxPacketSize() & 0xFFFF)
|
||||||
+ " (" + epDesc.getWMaxPacketSize() + ")\n");
|
+ " (" + epDesc.getWMaxPacketSize() + ")\n");
|
||||||
sb.append("\tbInterval: 0x"
|
sb.append("\tbInterval: 0x"
|
||||||
+ Integer.toHexString(epDesc.getBInterval() & 0xFF) + "\n");
|
+ Integer.toHexString(epDesc.getBInterval() & 0xFF) + "\n");
|
||||||
sb.append("\tbRefresh: 0x"
|
sb.append("\tbRefresh: 0x"
|
||||||
+ Integer.toHexString(epDesc.getBRefresh() & 0xFF) + "\n");
|
+ Integer.toHexString(epDesc.getBRefresh() & 0xFF) + "\n");
|
||||||
sb.append("\tbSynchAddress: 0x"
|
sb.append("\tbSynchAddress: 0x"
|
||||||
+ Integer.toHexString(epDesc.getBSynchAddress()) + "\n");
|
+ Integer.toHexString(epDesc.getBSynchAddress()) + "\n");
|
||||||
sb.append("\textralen: 0x"
|
sb.append("\textralen: 0x"
|
||||||
+ Integer.toHexString(epDesc.getExtralen()) + "\n");
|
+ Integer.toHexString(epDesc.getExtralen()) + "\n");
|
||||||
sb.append("\textra: " + extraDescriptorToString(epDesc.getExtra())
|
sb.append("\textra: " + extraDescriptorToString(epDesc.getExtra())
|
||||||
+ "\n");
|
+ "\n");
|
||||||
textArea.setText(sb.toString());
|
textArea.setText(sb.toString());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private String extraDescriptorToString(byte[] extra) {
|
private String extraDescriptorToString(byte[] extra) {
|
||||||
if (extra != null) {
|
if (extra != null) {
|
||||||
StringBuffer sb = new StringBuffer();
|
StringBuffer sb = new StringBuffer();
|
||||||
for (int i = 0; i < extra.length; i++) {
|
for (int i = 0; i < extra.length; i++) {
|
||||||
sb.append("0x");
|
sb.append("0x");
|
||||||
sb.append(Integer.toHexString(extra[i] & 0xff));
|
sb.append(Integer.toHexString(extra[i] & 0xff));
|
||||||
sb.append(' ');
|
sb.append(' ');
|
||||||
}
|
}
|
||||||
return sb.toString();
|
return sb.toString();
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -41,363 +41,363 @@ import ch.ntb.usb.testApp.TestDevice;
|
|||||||
|
|
||||||
public class UsbView extends JFrame {
|
public class UsbView extends JFrame {
|
||||||
|
|
||||||
private static final long serialVersionUID = 4693554326612734263L;
|
private static final long serialVersionUID = 4693554326612734263L;
|
||||||
|
|
||||||
private static final int APP_WIDTH = 600, APP_HIGHT = 800;
|
private static final int APP_WIDTH = 600, APP_HIGHT = 800;
|
||||||
|
|
||||||
private JPanel jContentPane = null;
|
private JPanel jContentPane = null;
|
||||||
private JMenuBar jJMenuBar = null;
|
private JMenuBar jJMenuBar = null;
|
||||||
private JMenu commandsMenu = null;
|
private JMenu commandsMenu = null;
|
||||||
private JMenuItem exitMenuItem = null;
|
private JMenuItem exitMenuItem = null;
|
||||||
private JMenuItem updateMenuItem = null;
|
private JMenuItem updateMenuItem = null;
|
||||||
JTree usbTree = null;
|
JTree usbTree = null;
|
||||||
private JSplitPane jSplitPane = null;
|
private JSplitPane jSplitPane = null;
|
||||||
|
|
||||||
private JTextArea jPropertiesArea = null;
|
private JTextArea jPropertiesArea = null;
|
||||||
|
|
||||||
UsbTreeModel treeModel;
|
UsbTreeModel treeModel;
|
||||||
|
|
||||||
JPopupMenu testAppPopup;
|
JPopupMenu testAppPopup;
|
||||||
|
|
||||||
protected JPopupMenu endpointPopup;
|
protected JPopupMenu endpointPopup;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This is the default constructor
|
* This is the default constructor
|
||||||
*/
|
*/
|
||||||
public UsbView() {
|
public UsbView() {
|
||||||
super();
|
super();
|
||||||
initialize();
|
initialize();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method initializes this
|
* This method initializes this
|
||||||
*
|
*
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
private void initialize() {
|
private void initialize() {
|
||||||
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
||||||
this.setJMenuBar(getJJMenuBar());
|
this.setJMenuBar(getJJMenuBar());
|
||||||
this.setSize(APP_WIDTH, APP_HIGHT);
|
this.setSize(APP_WIDTH, APP_HIGHT);
|
||||||
this.setContentPane(getJContentPane());
|
this.setContentPane(getJContentPane());
|
||||||
this.setTitle("USB View");
|
this.setTitle("USB View");
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method initializes jContentPane
|
* This method initializes jContentPane
|
||||||
*
|
*
|
||||||
* @return javax.swing.JPanel
|
* @return javax.swing.JPanel
|
||||||
*/
|
*/
|
||||||
private JPanel getJContentPane() {
|
private JPanel getJContentPane() {
|
||||||
if (jContentPane == null) {
|
if (jContentPane == null) {
|
||||||
jContentPane = new JPanel();
|
jContentPane = new JPanel();
|
||||||
jContentPane.setLayout(new BorderLayout());
|
jContentPane.setLayout(new BorderLayout());
|
||||||
jContentPane.add(getJSplitPane(), java.awt.BorderLayout.CENTER);
|
jContentPane.add(getJSplitPane(), java.awt.BorderLayout.CENTER);
|
||||||
}
|
}
|
||||||
return jContentPane;
|
return jContentPane;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method initializes jJMenuBar
|
* This method initializes jJMenuBar
|
||||||
*
|
*
|
||||||
* @return javax.swing.JMenuBar
|
* @return javax.swing.JMenuBar
|
||||||
*/
|
*/
|
||||||
private JMenuBar getJJMenuBar() {
|
private JMenuBar getJJMenuBar() {
|
||||||
if (jJMenuBar == null) {
|
if (jJMenuBar == null) {
|
||||||
jJMenuBar = new JMenuBar();
|
jJMenuBar = new JMenuBar();
|
||||||
jJMenuBar.add(getFileMenu());
|
jJMenuBar.add(getFileMenu());
|
||||||
}
|
}
|
||||||
return jJMenuBar;
|
return jJMenuBar;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method initializes jMenu
|
* This method initializes jMenu
|
||||||
*
|
*
|
||||||
* @return javax.swing.JMenu
|
* @return javax.swing.JMenu
|
||||||
*/
|
*/
|
||||||
private JMenu getFileMenu() {
|
private JMenu getFileMenu() {
|
||||||
if (commandsMenu == null) {
|
if (commandsMenu == null) {
|
||||||
commandsMenu = new JMenu();
|
commandsMenu = new JMenu();
|
||||||
commandsMenu.setText("Commands");
|
commandsMenu.setText("Commands");
|
||||||
commandsMenu.add(getUpdateMenuItem());
|
commandsMenu.add(getUpdateMenuItem());
|
||||||
commandsMenu.add(getExitMenuItem());
|
commandsMenu.add(getExitMenuItem());
|
||||||
}
|
}
|
||||||
return commandsMenu;
|
return commandsMenu;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method initializes jMenuItem
|
* This method initializes jMenuItem
|
||||||
*
|
*
|
||||||
* @return javax.swing.JMenuItem
|
* @return javax.swing.JMenuItem
|
||||||
*/
|
*/
|
||||||
private JMenuItem getExitMenuItem() {
|
private JMenuItem getExitMenuItem() {
|
||||||
if (exitMenuItem == null) {
|
if (exitMenuItem == null) {
|
||||||
exitMenuItem = new JMenuItem();
|
exitMenuItem = new JMenuItem();
|
||||||
exitMenuItem.setText("Exit");
|
exitMenuItem.setText("Exit");
|
||||||
exitMenuItem.addActionListener(new ActionListener() {
|
exitMenuItem.addActionListener(new ActionListener() {
|
||||||
public void actionPerformed(ActionEvent e) {
|
public void actionPerformed(ActionEvent e) {
|
||||||
System.exit(0);
|
System.exit(0);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
return exitMenuItem;
|
return exitMenuItem;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method initializes jMenuItem
|
* This method initializes jMenuItem
|
||||||
*
|
*
|
||||||
* @return javax.swing.JMenuItem
|
* @return javax.swing.JMenuItem
|
||||||
*/
|
*/
|
||||||
private JMenuItem getUpdateMenuItem() {
|
private JMenuItem getUpdateMenuItem() {
|
||||||
if (updateMenuItem == null) {
|
if (updateMenuItem == null) {
|
||||||
updateMenuItem = new JMenuItem();
|
updateMenuItem = new JMenuItem();
|
||||||
updateMenuItem.setText("Update");
|
updateMenuItem.setText("Update");
|
||||||
updateMenuItem.setAccelerator(KeyStroke.getKeyStroke(
|
updateMenuItem.setAccelerator(KeyStroke.getKeyStroke(
|
||||||
KeyEvent.VK_F5, 0, true));
|
KeyEvent.VK_F5, 0, true));
|
||||||
updateMenuItem
|
updateMenuItem
|
||||||
.addActionListener(new java.awt.event.ActionListener() {
|
.addActionListener(new java.awt.event.ActionListener() {
|
||||||
public void actionPerformed(java.awt.event.ActionEvent e) {
|
public void actionPerformed(java.awt.event.ActionEvent e) {
|
||||||
// open bus
|
// open bus
|
||||||
LibusbJava.usb_init();
|
LibusbJava.usb_init();
|
||||||
LibusbJava.usb_find_busses();
|
LibusbJava.usb_find_busses();
|
||||||
LibusbJava.usb_find_devices();
|
LibusbJava.usb_find_devices();
|
||||||
|
|
||||||
Usb_Bus bus = LibusbJava.usb_get_busses();
|
Usb_Bus bus = LibusbJava.usb_get_busses();
|
||||||
if (bus != null) {
|
if (bus != null) {
|
||||||
treeModel.fireTreeStructureChanged(bus);
|
treeModel.fireTreeStructureChanged(bus);
|
||||||
expandAll(usbTree);
|
expandAll(usbTree);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
return updateMenuItem;
|
return updateMenuItem;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method initializes usbTree
|
* This method initializes usbTree
|
||||||
*
|
*
|
||||||
* @return javax.swing.JTree
|
* @return javax.swing.JTree
|
||||||
*/
|
*/
|
||||||
private JTree getUsbTree() {
|
private JTree getUsbTree() {
|
||||||
if (usbTree == null) {
|
if (usbTree == null) {
|
||||||
// open bus
|
// open bus
|
||||||
LibusbJava.usb_init();
|
LibusbJava.usb_init();
|
||||||
LibusbJava.usb_find_busses();
|
LibusbJava.usb_find_busses();
|
||||||
LibusbJava.usb_find_devices();
|
LibusbJava.usb_find_devices();
|
||||||
|
|
||||||
Usb_Bus bus = LibusbJava.usb_get_busses();
|
Usb_Bus bus = LibusbJava.usb_get_busses();
|
||||||
|
|
||||||
treeModel = new UsbTreeModel(bus, jPropertiesArea);
|
treeModel = new UsbTreeModel(bus, jPropertiesArea);
|
||||||
usbTree = new JTree(treeModel);
|
usbTree = new JTree(treeModel);
|
||||||
expandAll(usbTree);
|
expandAll(usbTree);
|
||||||
usbTree.addTreeSelectionListener(treeModel);
|
usbTree.addTreeSelectionListener(treeModel);
|
||||||
getJTestAppPopup();
|
getJTestAppPopup();
|
||||||
usbTree.addMouseListener(new MouseAdapter() {
|
usbTree.addMouseListener(new MouseAdapter() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void mousePressed(MouseEvent e) {
|
public void mousePressed(MouseEvent e) {
|
||||||
if (e.isPopupTrigger()) {
|
if (e.isPopupTrigger()) {
|
||||||
Object source = e.getSource();
|
Object source = e.getSource();
|
||||||
if (source instanceof JTree) {
|
if (source instanceof JTree) {
|
||||||
JTree tree = (JTree) source;
|
JTree tree = (JTree) source;
|
||||||
TreePath path = tree.getPathForLocation(e.getX(), e
|
TreePath path = tree.getPathForLocation(e.getX(), e
|
||||||
.getY());
|
.getY());
|
||||||
if (path != null
|
if (path != null
|
||||||
&& (path.getLastPathComponent() instanceof Usb_Interface_Descriptor)) {
|
&& (path.getLastPathComponent() instanceof Usb_Interface_Descriptor)) {
|
||||||
usbTree.setSelectionPath(path);
|
usbTree.setSelectionPath(path);
|
||||||
testAppPopup.show(tree, e.getX(), e.getY());
|
testAppPopup.show(tree, e.getX(), e.getY());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void mouseReleased(MouseEvent e) {
|
public void mouseReleased(MouseEvent e) {
|
||||||
if (e.isPopupTrigger()) {
|
if (e.isPopupTrigger()) {
|
||||||
if (e.isPopupTrigger()) {
|
if (e.isPopupTrigger()) {
|
||||||
Object source = e.getSource();
|
Object source = e.getSource();
|
||||||
if (source instanceof JTree) {
|
if (source instanceof JTree) {
|
||||||
JTree tree = (JTree) source;
|
JTree tree = (JTree) source;
|
||||||
TreePath path = tree.getPathForLocation(e
|
TreePath path = tree.getPathForLocation(e
|
||||||
.getX(), e.getY());
|
.getX(), e.getY());
|
||||||
if (path != null
|
if (path != null
|
||||||
&& (path.getLastPathComponent() instanceof Usb_Interface_Descriptor)) {
|
&& (path.getLastPathComponent() instanceof Usb_Interface_Descriptor)) {
|
||||||
usbTree.setSelectionPath(path);
|
usbTree.setSelectionPath(path);
|
||||||
testAppPopup.show(tree, e.getX(), e.getY());
|
testAppPopup.show(tree, e.getX(), e.getY());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
return usbTree;
|
return usbTree;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void getJTestAppPopup() {
|
private void getJTestAppPopup() {
|
||||||
// Create the popup menu.
|
// Create the popup menu.
|
||||||
testAppPopup = new JPopupMenu();
|
testAppPopup = new JPopupMenu();
|
||||||
endpointPopup = new JPopupMenu();
|
endpointPopup = new JPopupMenu();
|
||||||
JMenuItem menuItem = new JMenuItem(
|
JMenuItem menuItem = new JMenuItem(
|
||||||
"Start a test application using this interface");
|
"Start a test application using this interface");
|
||||||
menuItem.addActionListener(new java.awt.event.ActionListener() {
|
menuItem.addActionListener(new java.awt.event.ActionListener() {
|
||||||
public void actionPerformed(java.awt.event.ActionEvent e) {
|
public void actionPerformed(java.awt.event.ActionEvent e) {
|
||||||
initAndStartTestApp();
|
initAndStartTestApp();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initAndStartTestApp() {
|
private void initAndStartTestApp() {
|
||||||
JTree tree = (JTree) testAppPopup.getInvoker();
|
JTree tree = (JTree) testAppPopup.getInvoker();
|
||||||
TreePath path = tree.getSelectionPath();
|
TreePath path = tree.getSelectionPath();
|
||||||
TreePath parent = path;
|
TreePath parent = path;
|
||||||
Usb_Endpoint_Descriptor[] endpoints = null;
|
Usb_Endpoint_Descriptor[] endpoints = null;
|
||||||
int altinterface = -1;
|
int altinterface = -1;
|
||||||
int interface_ = -1;
|
int interface_ = -1;
|
||||||
int configuration = -1;
|
int configuration = -1;
|
||||||
short vendorId = -1;
|
short vendorId = -1;
|
||||||
short productId = -1;
|
short productId = -1;
|
||||||
while (parent != null
|
while (parent != null
|
||||||
&& !(parent.getLastPathComponent() instanceof Usb_Bus)) {
|
&& !(parent.getLastPathComponent() instanceof Usb_Bus)) {
|
||||||
Object usbObj = parent.getLastPathComponent();
|
Object usbObj = parent.getLastPathComponent();
|
||||||
if (usbObj instanceof Usb_Interface_Descriptor) {
|
if (usbObj instanceof Usb_Interface_Descriptor) {
|
||||||
Usb_Interface_Descriptor usbIntDesc = (Usb_Interface_Descriptor) usbObj;
|
Usb_Interface_Descriptor usbIntDesc = (Usb_Interface_Descriptor) usbObj;
|
||||||
endpoints = usbIntDesc.getEndpoint();
|
endpoints = usbIntDesc.getEndpoint();
|
||||||
interface_ = usbIntDesc.getBInterfaceNumber();
|
interface_ = usbIntDesc.getBInterfaceNumber();
|
||||||
altinterface = usbIntDesc.getBAlternateSetting();
|
altinterface = usbIntDesc.getBAlternateSetting();
|
||||||
} else if (usbObj instanceof Usb_Config_Descriptor) {
|
} else if (usbObj instanceof Usb_Config_Descriptor) {
|
||||||
configuration = ((Usb_Config_Descriptor) usbObj)
|
configuration = ((Usb_Config_Descriptor) usbObj)
|
||||||
.getBConfigurationValue();
|
.getBConfigurationValue();
|
||||||
} else if (usbObj instanceof Usb_Device) {
|
} else if (usbObj instanceof Usb_Device) {
|
||||||
Usb_Device_Descriptor devDesc = ((Usb_Device) usbObj)
|
Usb_Device_Descriptor devDesc = ((Usb_Device) usbObj)
|
||||||
.getDescriptor();
|
.getDescriptor();
|
||||||
productId = devDesc.getIdProduct();
|
productId = devDesc.getIdProduct();
|
||||||
vendorId = devDesc.getIdVendor();
|
vendorId = devDesc.getIdVendor();
|
||||||
}
|
}
|
||||||
parent = parent.getParentPath();
|
parent = parent.getParentPath();
|
||||||
}
|
}
|
||||||
if (parent != null) {
|
if (parent != null) {
|
||||||
// present a dialog to select in/out endpoint
|
// present a dialog to select in/out endpoint
|
||||||
// TODO: present dialog to select in/out endpoint
|
// TODO: present dialog to select in/out endpoint
|
||||||
Usb_Endpoint_Descriptor[] outEPs = null;
|
Usb_Endpoint_Descriptor[] outEPs = null;
|
||||||
int nofOutEPs = 0;
|
int nofOutEPs = 0;
|
||||||
Usb_Endpoint_Descriptor[] inEPs = null;
|
Usb_Endpoint_Descriptor[] inEPs = null;
|
||||||
int nofInEPs = 0;
|
int nofInEPs = 0;
|
||||||
|
|
||||||
if (endpoints != null) {
|
if (endpoints != null) {
|
||||||
outEPs = new Usb_Endpoint_Descriptor[endpoints.length];
|
outEPs = new Usb_Endpoint_Descriptor[endpoints.length];
|
||||||
inEPs = new Usb_Endpoint_Descriptor[endpoints.length];
|
inEPs = new Usb_Endpoint_Descriptor[endpoints.length];
|
||||||
for (int i = 0; i < endpoints.length; i++) {
|
for (int i = 0; i < endpoints.length; i++) {
|
||||||
int epAddr = endpoints[i].getBEndpointAddress() & 0xFF;
|
int epAddr = endpoints[i].getBEndpointAddress() & 0xFF;
|
||||||
if ((epAddr & 0x80) > 0) {
|
if ((epAddr & 0x80) > 0) {
|
||||||
// is IN endpoint
|
// is IN endpoint
|
||||||
inEPs[nofInEPs++] = endpoints[i];
|
inEPs[nofInEPs++] = endpoints[i];
|
||||||
} else {
|
} else {
|
||||||
// is OUT endpoint
|
// is OUT endpoint
|
||||||
outEPs[nofOutEPs++] = endpoints[i];
|
outEPs[nofOutEPs++] = endpoints[i];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// create a new TestDevice
|
// create a new TestDevice
|
||||||
TestDevice testDevice = new TestDevice();
|
TestDevice testDevice = new TestDevice();
|
||||||
testDevice.setIdProduct(productId);
|
testDevice.setIdProduct(productId);
|
||||||
testDevice.setIdVendor(vendorId);
|
testDevice.setIdVendor(vendorId);
|
||||||
testDevice.setAltinterface(altinterface);
|
testDevice.setAltinterface(altinterface);
|
||||||
testDevice.setConfiguration(configuration);
|
testDevice.setConfiguration(configuration);
|
||||||
testDevice.setInterface(interface_);
|
testDevice.setInterface(interface_);
|
||||||
if (inEPs != null) {
|
if (inEPs != null) {
|
||||||
for (int i = 0; i < nofInEPs; i++) {
|
for (int i = 0; i < nofInEPs; i++) {
|
||||||
int type = inEPs[i].getBmAttributes() & 0x03;
|
int type = inEPs[i].getBmAttributes() & 0x03;
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case Usb_Endpoint_Descriptor.USB_ENDPOINT_TRANSFER_TYPE_BULK:
|
case Usb_Endpoint_Descriptor.USB_ENDPOINT_TRANSFER_TYPE_BULK:
|
||||||
testDevice.setInEPBulk(inEPs[i]
|
testDevice.setInEPBulk(inEPs[i]
|
||||||
.getBEndpointAddress() & 0xff);
|
.getBEndpointAddress() & 0xff);
|
||||||
testDevice.setInMode(TransferMode.Bulk);
|
testDevice.setInMode(TransferMode.Bulk);
|
||||||
break;
|
break;
|
||||||
case Usb_Endpoint_Descriptor.USB_ENDPOINT_TRANSFER_TYPE_INTERRUPT:
|
case Usb_Endpoint_Descriptor.USB_ENDPOINT_TRANSFER_TYPE_INTERRUPT:
|
||||||
testDevice.setInEPInt(inEPs[i]
|
testDevice.setInEPInt(inEPs[i]
|
||||||
.getBEndpointAddress() & 0xff);
|
.getBEndpointAddress() & 0xff);
|
||||||
testDevice.setInMode(TransferMode.Interrupt);
|
testDevice.setInMode(TransferMode.Interrupt);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (outEPs != null) {
|
if (outEPs != null) {
|
||||||
for (int i = 0; i < nofOutEPs; i++) {
|
for (int i = 0; i < nofOutEPs; i++) {
|
||||||
int type = outEPs[i].getBmAttributes() & 0x03;
|
int type = outEPs[i].getBmAttributes() & 0x03;
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case Usb_Endpoint_Descriptor.USB_ENDPOINT_TRANSFER_TYPE_BULK:
|
case Usb_Endpoint_Descriptor.USB_ENDPOINT_TRANSFER_TYPE_BULK:
|
||||||
testDevice.setOutEPBulk(outEPs[i]
|
testDevice.setOutEPBulk(outEPs[i]
|
||||||
.getBEndpointAddress() & 0xff);
|
.getBEndpointAddress() & 0xff);
|
||||||
testDevice.setOutMode(TransferMode.Bulk);
|
testDevice.setOutMode(TransferMode.Bulk);
|
||||||
break;
|
break;
|
||||||
case Usb_Endpoint_Descriptor.USB_ENDPOINT_TRANSFER_TYPE_INTERRUPT:
|
case Usb_Endpoint_Descriptor.USB_ENDPOINT_TRANSFER_TYPE_INTERRUPT:
|
||||||
testDevice.setOutEPInt(outEPs[i]
|
testDevice.setOutEPInt(outEPs[i]
|
||||||
.getBEndpointAddress() & 0xff);
|
.getBEndpointAddress() & 0xff);
|
||||||
testDevice.setOutMode(TransferMode.Interrupt);
|
testDevice.setOutMode(TransferMode.Interrupt);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// open a new testApp
|
// open a new testApp
|
||||||
TestApp app = new TestApp(testDevice);
|
TestApp app = new TestApp(testDevice);
|
||||||
app.setVisible(true);
|
app.setVisible(true);
|
||||||
} else {
|
} else {
|
||||||
System.out.println("error, could not find device node");
|
System.out.println("error, could not find device node");
|
||||||
// TODO: handle error
|
// TODO: handle error
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
testAppPopup.add(menuItem);
|
testAppPopup.add(menuItem);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method initializes jSplitPane
|
* This method initializes jSplitPane
|
||||||
*
|
*
|
||||||
* @return javax.swing.JSplitPane
|
* @return javax.swing.JSplitPane
|
||||||
*/
|
*/
|
||||||
private JSplitPane getJSplitPane() {
|
private JSplitPane getJSplitPane() {
|
||||||
if (jSplitPane == null) {
|
if (jSplitPane == null) {
|
||||||
jSplitPane = new JSplitPane();
|
jSplitPane = new JSplitPane();
|
||||||
jSplitPane.setOrientation(javax.swing.JSplitPane.VERTICAL_SPLIT);
|
jSplitPane.setOrientation(javax.swing.JSplitPane.VERTICAL_SPLIT);
|
||||||
jSplitPane.setContinuousLayout(true);
|
jSplitPane.setContinuousLayout(true);
|
||||||
jSplitPane.setDividerLocation(APP_HIGHT / 2);
|
jSplitPane.setDividerLocation(APP_HIGHT / 2);
|
||||||
jSplitPane
|
jSplitPane
|
||||||
.setBottomComponent(createScrollPane(getJPropertiesArea()));
|
.setBottomComponent(createScrollPane(getJPropertiesArea()));
|
||||||
jSplitPane.setTopComponent(createScrollPane(getUsbTree()));
|
jSplitPane.setTopComponent(createScrollPane(getUsbTree()));
|
||||||
}
|
}
|
||||||
return jSplitPane;
|
return jSplitPane;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method initializes jPropertiesArea
|
* This method initializes jPropertiesArea
|
||||||
*
|
*
|
||||||
* @return javax.swing.JTextArea
|
* @return javax.swing.JTextArea
|
||||||
*/
|
*/
|
||||||
private JTextArea getJPropertiesArea() {
|
private JTextArea getJPropertiesArea() {
|
||||||
if (jPropertiesArea == null) {
|
if (jPropertiesArea == null) {
|
||||||
jPropertiesArea = new JTextArea();
|
jPropertiesArea = new JTextArea();
|
||||||
}
|
}
|
||||||
return jPropertiesArea;
|
return jPropertiesArea;
|
||||||
}
|
}
|
||||||
|
|
||||||
private JScrollPane createScrollPane(Component view) {
|
private JScrollPane createScrollPane(Component view) {
|
||||||
JScrollPane scrollPane = new JScrollPane(view);
|
JScrollPane scrollPane = new JScrollPane(view);
|
||||||
return scrollPane;
|
return scrollPane;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Launches this application
|
* Launches this application
|
||||||
*/
|
*/
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
UsbView application = new UsbView();
|
UsbView application = new UsbView();
|
||||||
application.setVisible(true);
|
application.setVisible(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
void expandAll(JTree tree) {
|
void expandAll(JTree tree) {
|
||||||
for (int row = 0; row < tree.getRowCount(); row++) {
|
for (int row = 0; row < tree.getRowCount(); row++) {
|
||||||
tree.expandRow(row);
|
tree.expandRow(row);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,23 +20,23 @@ import ch.ntb.usb.Utils;
|
|||||||
*/
|
*/
|
||||||
public class LogBus {
|
public class LogBus {
|
||||||
|
|
||||||
private static void logBus() {
|
private static void logBus() {
|
||||||
// if you don't use the ch.ntb.inf.libusbJava.Device class you must
|
// if you don't use the ch.ntb.inf.libusbJava.Device class you must
|
||||||
// initialise
|
// initialise
|
||||||
// Libusb before use
|
// Libusb before use
|
||||||
LibusbJava.usb_init();
|
LibusbJava.usb_init();
|
||||||
LibusbJava.usb_find_busses();
|
LibusbJava.usb_find_busses();
|
||||||
LibusbJava.usb_find_devices();
|
LibusbJava.usb_find_devices();
|
||||||
|
|
||||||
// retrieve a object tree representing the bus with its devices and
|
// retrieve a object tree representing the bus with its devices and
|
||||||
// descriptors
|
// descriptors
|
||||||
Usb_Bus bus = LibusbJava.usb_get_busses();
|
Usb_Bus bus = LibusbJava.usb_get_busses();
|
||||||
|
|
||||||
// log the bus structure to standard out
|
// log the bus structure to standard out
|
||||||
Utils.logBus(bus);
|
Utils.logBus(bus);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
logBus();
|
logBus();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,44 +17,44 @@ import ch.ntb.usb.USBException;
|
|||||||
*/
|
*/
|
||||||
public class ReadWrite {
|
public class ReadWrite {
|
||||||
|
|
||||||
private static void logData(byte[] data) {
|
private static void logData(byte[] data) {
|
||||||
System.out.print("Data: ");
|
System.out.print("Data: ");
|
||||||
for (int i = 0; i < data.length; i++) {
|
for (int i = 0; i < data.length; i++) {
|
||||||
System.out.print("0x" + Integer.toHexString(data[i] & 0xff) + " ");
|
System.out.print("0x" + Integer.toHexString(data[i] & 0xff) + " ");
|
||||||
}
|
}
|
||||||
System.out.println();
|
System.out.println();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
// get a device instance with vendor id and product id
|
// get a device instance with vendor id and product id
|
||||||
Device dev = USB.getDevice((short) 0x8235, (short) 0x0100);
|
Device dev = USB.getDevice((short) 0x8235, (short) 0x0100);
|
||||||
try {
|
try {
|
||||||
// data to write to the device
|
// data to write to the device
|
||||||
byte[] data = new byte[] { 0, 1, 2, 3 };
|
byte[] data = new byte[] { 0, 1, 2, 3 };
|
||||||
// data read from the device
|
// data read from the device
|
||||||
byte[] readData = new byte[data.length];
|
byte[] readData = new byte[data.length];
|
||||||
|
|
||||||
// open the device with configuration 1, interface 0 and without
|
// open the device with configuration 1, interface 0 and without
|
||||||
// altinterface
|
// altinterface
|
||||||
// this will initialise Libusb for you
|
// this will initialise Libusb for you
|
||||||
dev.open(1, 0, -1);
|
dev.open(1, 0, -1);
|
||||||
// write some data to the device
|
// write some data to the device
|
||||||
// 0x03 is the endpoint address of the OUT endpoint 3 (from PC to
|
// 0x03 is the endpoint address of the OUT endpoint 3 (from PC to
|
||||||
// device)
|
// device)
|
||||||
dev.writeInterrupt(0x02, data, data.length, 2000, false);
|
dev.writeInterrupt(0x02, data, data.length, 2000, false);
|
||||||
// read some data from the device
|
// read some data from the device
|
||||||
// 0x84 is the endpoint address of the IN endpoint 4 (from PC to
|
// 0x84 is the endpoint address of the IN endpoint 4 (from PC to
|
||||||
// device)
|
// device)
|
||||||
// bit 7 (0x80) is set in case of an IN endpoint
|
// bit 7 (0x80) is set in case of an IN endpoint
|
||||||
dev.readInterrupt(0x86, readData, readData.length, 2000, false);
|
dev.readInterrupt(0x86, readData, readData.length, 2000, false);
|
||||||
// log the data from the device
|
// log the data from the device
|
||||||
logData(readData);
|
logData(readData);
|
||||||
// close the device
|
// close the device
|
||||||
dev.close();
|
dev.close();
|
||||||
} catch (USBException e) {
|
} catch (USBException e) {
|
||||||
// if an exception occures during connect or read/write an exception
|
// if an exception occures during connect or read/write an exception
|
||||||
// is thrown
|
// is thrown
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,16 +13,16 @@
|
|||||||
|
|
||||||
char* CuStrAlloc(int size)
|
char* CuStrAlloc(int size)
|
||||||
{
|
{
|
||||||
char* newStr = (char*) malloc( sizeof(char) * (size) );
|
char* newStr = (char*) malloc( sizeof(char) * (size) );
|
||||||
return newStr;
|
return newStr;
|
||||||
}
|
}
|
||||||
|
|
||||||
char* CuStrCopy(const char* old)
|
char* CuStrCopy(const char* old)
|
||||||
{
|
{
|
||||||
int len = strlen(old);
|
int len = strlen(old);
|
||||||
char* newStr = CuStrAlloc(len + 1);
|
char* newStr = CuStrAlloc(len + 1);
|
||||||
strcpy(newStr, old);
|
strcpy(newStr, old);
|
||||||
return newStr;
|
return newStr;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*-------------------------------------------------------------------------*
|
/*-------------------------------------------------------------------------*
|
||||||
@@ -31,20 +31,20 @@ char* CuStrCopy(const char* old)
|
|||||||
|
|
||||||
void CuStringInit(CuString* str)
|
void CuStringInit(CuString* str)
|
||||||
{
|
{
|
||||||
str->length = 0;
|
str->length = 0;
|
||||||
str->size = STRING_MAX;
|
str->size = STRING_MAX;
|
||||||
str->buffer = (char*) malloc(sizeof(char) * str->size);
|
str->buffer = (char*) malloc(sizeof(char) * str->size);
|
||||||
str->buffer[0] = '\0';
|
str->buffer[0] = '\0';
|
||||||
}
|
}
|
||||||
|
|
||||||
CuString* CuStringNew(void)
|
CuString* CuStringNew(void)
|
||||||
{
|
{
|
||||||
CuString* str = (CuString*) malloc(sizeof(CuString));
|
CuString* str = (CuString*) malloc(sizeof(CuString));
|
||||||
str->length = 0;
|
str->length = 0;
|
||||||
str->size = STRING_MAX;
|
str->size = STRING_MAX;
|
||||||
str->buffer = (char*) malloc(sizeof(char) * str->size);
|
str->buffer = (char*) malloc(sizeof(char) * str->size);
|
||||||
str->buffer[0] = '\0';
|
str->buffer[0] = '\0';
|
||||||
return str;
|
return str;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CuStringDelete(CuString *str)
|
void CuStringDelete(CuString *str)
|
||||||
@@ -56,53 +56,53 @@ void CuStringDelete(CuString *str)
|
|||||||
|
|
||||||
void CuStringResize(CuString* str, int newSize)
|
void CuStringResize(CuString* str, int newSize)
|
||||||
{
|
{
|
||||||
str->buffer = (char*) realloc(str->buffer, sizeof(char) * newSize);
|
str->buffer = (char*) realloc(str->buffer, sizeof(char) * newSize);
|
||||||
str->size = newSize;
|
str->size = newSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CuStringAppend(CuString* str, const char* text)
|
void CuStringAppend(CuString* str, const char* text)
|
||||||
{
|
{
|
||||||
int length;
|
int length;
|
||||||
|
|
||||||
if (text == NULL) {
|
if (text == NULL) {
|
||||||
text = "NULL";
|
text = "NULL";
|
||||||
}
|
}
|
||||||
|
|
||||||
length = strlen(text);
|
length = strlen(text);
|
||||||
if (str->length + length + 1 >= str->size)
|
if (str->length + length + 1 >= str->size)
|
||||||
CuStringResize(str, str->length + length + 1 + STRING_INC);
|
CuStringResize(str, str->length + length + 1 + STRING_INC);
|
||||||
str->length += length;
|
str->length += length;
|
||||||
strcat(str->buffer, text);
|
strcat(str->buffer, text);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CuStringAppendChar(CuString* str, char ch)
|
void CuStringAppendChar(CuString* str, char ch)
|
||||||
{
|
{
|
||||||
char text[2];
|
char text[2];
|
||||||
text[0] = ch;
|
text[0] = ch;
|
||||||
text[1] = '\0';
|
text[1] = '\0';
|
||||||
CuStringAppend(str, text);
|
CuStringAppend(str, text);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CuStringAppendFormat(CuString* str, const char* format, ...)
|
void CuStringAppendFormat(CuString* str, const char* format, ...)
|
||||||
{
|
{
|
||||||
va_list argp;
|
va_list argp;
|
||||||
char buf[HUGE_STRING_LEN];
|
char buf[HUGE_STRING_LEN];
|
||||||
va_start(argp, format);
|
va_start(argp, format);
|
||||||
vsprintf(buf, format, argp);
|
vsprintf(buf, format, argp);
|
||||||
va_end(argp);
|
va_end(argp);
|
||||||
CuStringAppend(str, buf);
|
CuStringAppend(str, buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CuStringInsert(CuString* str, const char* text, int pos)
|
void CuStringInsert(CuString* str, const char* text, int pos)
|
||||||
{
|
{
|
||||||
int length = strlen(text);
|
int length = strlen(text);
|
||||||
if (pos > str->length)
|
if (pos > str->length)
|
||||||
pos = str->length;
|
pos = str->length;
|
||||||
if (str->length + length + 1 >= str->size)
|
if (str->length + length + 1 >= str->size)
|
||||||
CuStringResize(str, str->length + length + 1 + STRING_INC);
|
CuStringResize(str, str->length + length + 1 + STRING_INC);
|
||||||
memmove(str->buffer + pos + length, str->buffer + pos, (str->length - pos) + 1);
|
memmove(str->buffer + pos + length, str->buffer + pos, (str->length - pos) + 1);
|
||||||
str->length += length;
|
str->length += length;
|
||||||
memcpy(str->buffer + pos, text, length);
|
memcpy(str->buffer + pos, text, length);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*-------------------------------------------------------------------------*
|
/*-------------------------------------------------------------------------*
|
||||||
@@ -111,19 +111,19 @@ void CuStringInsert(CuString* str, const char* text, int pos)
|
|||||||
|
|
||||||
void CuTestInit(CuTest* t, const char* name, TestFunction function)
|
void CuTestInit(CuTest* t, const char* name, TestFunction function)
|
||||||
{
|
{
|
||||||
t->name = CuStrCopy(name);
|
t->name = CuStrCopy(name);
|
||||||
t->failed = 0;
|
t->failed = 0;
|
||||||
t->ran = 0;
|
t->ran = 0;
|
||||||
t->message = NULL;
|
t->message = NULL;
|
||||||
t->function = function;
|
t->function = function;
|
||||||
t->jumpBuf = NULL;
|
t->jumpBuf = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
CuTest* CuTestNew(const char* name, TestFunction function)
|
CuTest* CuTestNew(const char* name, TestFunction function)
|
||||||
{
|
{
|
||||||
CuTest* tc = CU_ALLOC(CuTest);
|
CuTest* tc = CU_ALLOC(CuTest);
|
||||||
CuTestInit(tc, name, function);
|
CuTestInit(tc, name, function);
|
||||||
return tc;
|
return tc;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CuTestDelete(CuTest *t)
|
void CuTestDelete(CuTest *t)
|
||||||
@@ -135,99 +135,99 @@ void CuTestDelete(CuTest *t)
|
|||||||
|
|
||||||
void CuTestRun(CuTest* tc)
|
void CuTestRun(CuTest* tc)
|
||||||
{
|
{
|
||||||
jmp_buf buf;
|
jmp_buf buf;
|
||||||
tc->jumpBuf = &buf;
|
tc->jumpBuf = &buf;
|
||||||
if (setjmp(buf) == 0)
|
if (setjmp(buf) == 0)
|
||||||
{
|
{
|
||||||
tc->ran = 1;
|
tc->ran = 1;
|
||||||
(tc->function)(tc);
|
(tc->function)(tc);
|
||||||
}
|
}
|
||||||
tc->jumpBuf = 0;
|
tc->jumpBuf = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void CuFailInternal(CuTest* tc, const char* file, int line, CuString* string)
|
static void CuFailInternal(CuTest* tc, const char* file, int line, CuString* string)
|
||||||
{
|
{
|
||||||
char buf[HUGE_STRING_LEN];
|
char buf[HUGE_STRING_LEN];
|
||||||
|
|
||||||
sprintf(buf, "%s:%d: ", file, line);
|
sprintf(buf, "%s:%d: ", file, line);
|
||||||
CuStringInsert(string, buf, 0);
|
CuStringInsert(string, buf, 0);
|
||||||
|
|
||||||
tc->failed = 1;
|
tc->failed = 1;
|
||||||
tc->message = string->buffer;
|
tc->message = string->buffer;
|
||||||
if (tc->jumpBuf != 0) longjmp(*(tc->jumpBuf), 0);
|
if (tc->jumpBuf != 0) longjmp(*(tc->jumpBuf), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CuFail_Line(CuTest* tc, const char* file, int line, const char* message2, const char* message)
|
void CuFail_Line(CuTest* tc, const char* file, int line, const char* message2, const char* message)
|
||||||
{
|
{
|
||||||
CuString string;
|
CuString string;
|
||||||
|
|
||||||
CuStringInit(&string);
|
CuStringInit(&string);
|
||||||
if (message2 != NULL)
|
if (message2 != NULL)
|
||||||
{
|
{
|
||||||
CuStringAppend(&string, message2);
|
CuStringAppend(&string, message2);
|
||||||
CuStringAppend(&string, ": ");
|
CuStringAppend(&string, ": ");
|
||||||
}
|
}
|
||||||
CuStringAppend(&string, message);
|
CuStringAppend(&string, message);
|
||||||
CuFailInternal(tc, file, line, &string);
|
CuFailInternal(tc, file, line, &string);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CuAssert_Line(CuTest* tc, const char* file, int line, const char* message, int condition)
|
void CuAssert_Line(CuTest* tc, const char* file, int line, const char* message, int condition)
|
||||||
{
|
{
|
||||||
if (condition) return;
|
if (condition) return;
|
||||||
CuFail_Line(tc, file, line, NULL, message);
|
CuFail_Line(tc, file, line, NULL, message);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CuAssertStrEquals_LineMsg(CuTest* tc, const char* file, int line, const char* message,
|
void CuAssertStrEquals_LineMsg(CuTest* tc, const char* file, int line, const char* message,
|
||||||
const char* expected, const char* actual)
|
const char* expected, const char* actual)
|
||||||
{
|
{
|
||||||
CuString string;
|
CuString string;
|
||||||
if ((expected == NULL && actual == NULL) ||
|
if ((expected == NULL && actual == NULL) ||
|
||||||
(expected != NULL && actual != NULL &&
|
(expected != NULL && actual != NULL &&
|
||||||
strcmp(expected, actual) == 0))
|
strcmp(expected, actual) == 0))
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
CuStringInit(&string);
|
CuStringInit(&string);
|
||||||
if (message != NULL)
|
if (message != NULL)
|
||||||
{
|
{
|
||||||
CuStringAppend(&string, message);
|
CuStringAppend(&string, message);
|
||||||
CuStringAppend(&string, ": ");
|
CuStringAppend(&string, ": ");
|
||||||
}
|
}
|
||||||
CuStringAppend(&string, "expected <");
|
CuStringAppend(&string, "expected <");
|
||||||
CuStringAppend(&string, expected);
|
CuStringAppend(&string, expected);
|
||||||
CuStringAppend(&string, "> but was <");
|
CuStringAppend(&string, "> but was <");
|
||||||
CuStringAppend(&string, actual);
|
CuStringAppend(&string, actual);
|
||||||
CuStringAppend(&string, ">");
|
CuStringAppend(&string, ">");
|
||||||
CuFailInternal(tc, file, line, &string);
|
CuFailInternal(tc, file, line, &string);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CuAssertIntEquals_LineMsg(CuTest* tc, const char* file, int line, const char* message,
|
void CuAssertIntEquals_LineMsg(CuTest* tc, const char* file, int line, const char* message,
|
||||||
int expected, int actual)
|
int expected, int actual)
|
||||||
{
|
{
|
||||||
char buf[STRING_MAX];
|
char buf[STRING_MAX];
|
||||||
if (expected == actual) return;
|
if (expected == actual) return;
|
||||||
sprintf(buf, "expected <%d> but was <%d>", expected, actual);
|
sprintf(buf, "expected <%d> but was <%d>", expected, actual);
|
||||||
CuFail_Line(tc, file, line, message, buf);
|
CuFail_Line(tc, file, line, message, buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CuAssertDblEquals_LineMsg(CuTest* tc, const char* file, int line, const char* message,
|
void CuAssertDblEquals_LineMsg(CuTest* tc, const char* file, int line, const char* message,
|
||||||
double expected, double actual, double delta)
|
double expected, double actual, double delta)
|
||||||
{
|
{
|
||||||
char buf[STRING_MAX];
|
char buf[STRING_MAX];
|
||||||
if (fabs(expected - actual) <= delta) return;
|
if (fabs(expected - actual) <= delta) return;
|
||||||
sprintf(buf, "expected <%f> but was <%f>", expected, actual);
|
sprintf(buf, "expected <%f> but was <%f>", expected, actual);
|
||||||
|
|
||||||
CuFail_Line(tc, file, line, message, buf);
|
CuFail_Line(tc, file, line, message, buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CuAssertPtrEquals_LineMsg(CuTest* tc, const char* file, int line, const char* message,
|
void CuAssertPtrEquals_LineMsg(CuTest* tc, const char* file, int line, const char* message,
|
||||||
void* expected, void* actual)
|
void* expected, void* actual)
|
||||||
{
|
{
|
||||||
char buf[STRING_MAX];
|
char buf[STRING_MAX];
|
||||||
if (expected == actual) return;
|
if (expected == actual) return;
|
||||||
sprintf(buf, "expected pointer <0x%p> but was <0x%p>", expected, actual);
|
sprintf(buf, "expected pointer <0x%p> but was <0x%p>", expected, actual);
|
||||||
CuFail_Line(tc, file, line, message, buf);
|
CuFail_Line(tc, file, line, message, buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -237,16 +237,16 @@ void CuAssertPtrEquals_LineMsg(CuTest* tc, const char* file, int line, const cha
|
|||||||
|
|
||||||
void CuSuiteInit(CuSuite* testSuite)
|
void CuSuiteInit(CuSuite* testSuite)
|
||||||
{
|
{
|
||||||
testSuite->count = 0;
|
testSuite->count = 0;
|
||||||
testSuite->failCount = 0;
|
testSuite->failCount = 0;
|
||||||
memset(testSuite->list, 0, sizeof(testSuite->list));
|
memset(testSuite->list, 0, sizeof(testSuite->list));
|
||||||
}
|
}
|
||||||
|
|
||||||
CuSuite* CuSuiteNew(void)
|
CuSuite* CuSuiteNew(void)
|
||||||
{
|
{
|
||||||
CuSuite* testSuite = CU_ALLOC(CuSuite);
|
CuSuite* testSuite = CU_ALLOC(CuSuite);
|
||||||
CuSuiteInit(testSuite);
|
CuSuiteInit(testSuite);
|
||||||
return testSuite;
|
return testSuite;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CuSuiteDelete(CuSuite *testSuite)
|
void CuSuiteDelete(CuSuite *testSuite)
|
||||||
@@ -265,75 +265,75 @@ void CuSuiteDelete(CuSuite *testSuite)
|
|||||||
|
|
||||||
void CuSuiteAdd(CuSuite* testSuite, CuTest *testCase)
|
void CuSuiteAdd(CuSuite* testSuite, CuTest *testCase)
|
||||||
{
|
{
|
||||||
assert(testSuite->count < MAX_TEST_CASES);
|
assert(testSuite->count < MAX_TEST_CASES);
|
||||||
testSuite->list[testSuite->count] = testCase;
|
testSuite->list[testSuite->count] = testCase;
|
||||||
testSuite->count++;
|
testSuite->count++;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CuSuiteAddSuite(CuSuite* testSuite, CuSuite* testSuite2)
|
void CuSuiteAddSuite(CuSuite* testSuite, CuSuite* testSuite2)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
for (i = 0 ; i < testSuite2->count ; ++i)
|
for (i = 0 ; i < testSuite2->count ; ++i)
|
||||||
{
|
{
|
||||||
CuTest* testCase = testSuite2->list[i];
|
CuTest* testCase = testSuite2->list[i];
|
||||||
CuSuiteAdd(testSuite, testCase);
|
CuSuiteAdd(testSuite, testCase);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CuSuiteRun(CuSuite* testSuite)
|
void CuSuiteRun(CuSuite* testSuite)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
for (i = 0 ; i < testSuite->count ; ++i)
|
for (i = 0 ; i < testSuite->count ; ++i)
|
||||||
{
|
{
|
||||||
CuTest* testCase = testSuite->list[i];
|
CuTest* testCase = testSuite->list[i];
|
||||||
CuTestRun(testCase);
|
CuTestRun(testCase);
|
||||||
if (testCase->failed) { testSuite->failCount += 1; }
|
if (testCase->failed) { testSuite->failCount += 1; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CuSuiteSummary(CuSuite* testSuite, CuString* summary)
|
void CuSuiteSummary(CuSuite* testSuite, CuString* summary)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
for (i = 0 ; i < testSuite->count ; ++i)
|
for (i = 0 ; i < testSuite->count ; ++i)
|
||||||
{
|
{
|
||||||
CuTest* testCase = testSuite->list[i];
|
CuTest* testCase = testSuite->list[i];
|
||||||
CuStringAppend(summary, testCase->failed ? "F" : ".");
|
CuStringAppend(summary, testCase->failed ? "F" : ".");
|
||||||
}
|
}
|
||||||
CuStringAppend(summary, "\n\n");
|
CuStringAppend(summary, "\n\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
void CuSuiteDetails(CuSuite* testSuite, CuString* details)
|
void CuSuiteDetails(CuSuite* testSuite, CuString* details)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
int failCount = 0;
|
int failCount = 0;
|
||||||
|
|
||||||
if (testSuite->failCount == 0)
|
if (testSuite->failCount == 0)
|
||||||
{
|
{
|
||||||
int passCount = testSuite->count - testSuite->failCount;
|
int passCount = testSuite->count - testSuite->failCount;
|
||||||
const char* testWord = passCount == 1 ? "test" : "tests";
|
const char* testWord = passCount == 1 ? "test" : "tests";
|
||||||
CuStringAppendFormat(details, "OK (%d %s)\n", passCount, testWord);
|
CuStringAppendFormat(details, "OK (%d %s)\n", passCount, testWord);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (testSuite->failCount == 1)
|
if (testSuite->failCount == 1)
|
||||||
CuStringAppend(details, "There was 1 failure:\n");
|
CuStringAppend(details, "There was 1 failure:\n");
|
||||||
else
|
else
|
||||||
CuStringAppendFormat(details, "There were %d failures:\n", testSuite->failCount);
|
CuStringAppendFormat(details, "There were %d failures:\n", testSuite->failCount);
|
||||||
|
|
||||||
for (i = 0 ; i < testSuite->count ; ++i)
|
for (i = 0 ; i < testSuite->count ; ++i)
|
||||||
{
|
{
|
||||||
CuTest* testCase = testSuite->list[i];
|
CuTest* testCase = testSuite->list[i];
|
||||||
if (testCase->failed)
|
if (testCase->failed)
|
||||||
{
|
{
|
||||||
failCount++;
|
failCount++;
|
||||||
CuStringAppendFormat(details, "%d) %s: %s\n",
|
CuStringAppendFormat(details, "%d) %s: %s\n",
|
||||||
failCount, testCase->name, testCase->message);
|
failCount, testCase->name, testCase->message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
CuStringAppend(details, "\n!!!FAILURES!!!\n");
|
CuStringAppend(details, "\n!!!FAILURES!!!\n");
|
||||||
|
|
||||||
CuStringAppendFormat(details, "Runs: %d ", testSuite->count);
|
CuStringAppendFormat(details, "Runs: %d ", testSuite->count);
|
||||||
CuStringAppendFormat(details, "Passes: %d ", testSuite->count - testSuite->failCount);
|
CuStringAppendFormat(details, "Passes: %d ", testSuite->count - testSuite->failCount);
|
||||||
CuStringAppendFormat(details, "Fails: %d\n", testSuite->failCount);
|
CuStringAppendFormat(details, "Fails: %d\n", testSuite->failCount);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -2,12 +2,12 @@
|
|||||||
#include <jni.h>
|
#include <jni.h>
|
||||||
|
|
||||||
#if defined(_WIN32) || defined(_WIN64)
|
#if defined(_WIN32) || defined(_WIN64)
|
||||||
# include <windows.h>
|
# include <windows.h>
|
||||||
|
|
||||||
typedef HINSTANCE tLibHandle;
|
typedef HINSTANCE tLibHandle;
|
||||||
typedef FARPROC tCallbackPtr;
|
typedef FARPROC tCallbackPtr;
|
||||||
#else
|
#else
|
||||||
# error "Unit-Tests are not available on this platform"
|
# error "Unit-Tests are not available on this platform"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "CuTest.h"
|
#include "CuTest.h"
|
||||||
@@ -17,244 +17,244 @@
|
|||||||
|
|
||||||
const char *lib_paths[] = {
|
const char *lib_paths[] = {
|
||||||
#if defined(_WIN32) || defined(_WIN64)
|
#if defined(_WIN32) || defined(_WIN64)
|
||||||
"server\\jvm.dll",
|
"server\\jvm.dll",
|
||||||
"client\\jvm.dll",
|
"client\\jvm.dll",
|
||||||
"..\\jre\\bin\\server\\jvm.dll",
|
"..\\jre\\bin\\server\\jvm.dll",
|
||||||
"..\\jre\\bin\\client\\jvm.dll",
|
"..\\jre\\bin\\client\\jvm.dll",
|
||||||
#else
|
#else
|
||||||
# error "Library names are unknown for this platform"
|
# error "Library names are unknown for this platform"
|
||||||
#endif
|
#endif
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
/*! \brief Signature of the JNI call for creating a new VM */
|
/*! \brief Signature of the JNI call for creating a new VM */
|
||||||
typedef jint (CALLBACK *tJavaVMcreate)(JavaVM** jvm, void** env, JavaVMInitArgs* args);
|
typedef jint (CALLBACK *tJavaVMcreate)(JavaVM** jvm, void** env, JavaVMInitArgs* args);
|
||||||
|
|
||||||
/*! \brief Structure holding the data for the created JVM */
|
/*! \brief Structure holding the data for the created JVM */
|
||||||
typedef struct JVM {
|
typedef struct JVM {
|
||||||
JavaVM *jvm; /*!< Pointer to the JVM the tests run in */
|
JavaVM *jvm; /*!< Pointer to the JVM the tests run in */
|
||||||
JNIEnv *env; /*!< Pointer to the environment received while creating the
|
JNIEnv *env; /*!< Pointer to the environment received while creating the
|
||||||
JVM */
|
JVM */
|
||||||
}tJVM;
|
}tJVM;
|
||||||
|
|
||||||
static inline int CreateVM(tJVM *vmdata);
|
static inline int CreateVM(tJVM *vmdata);
|
||||||
static inline tCallbackPtr JvmLibraryFunctionGet(const char *name);
|
static inline tCallbackPtr JvmLibraryFunctionGet(const char *name);
|
||||||
static inline void JvmLibraryFree(void);
|
static inline void JvmLibraryFree(void);
|
||||||
static inline tLibHandle JvmLibraryLoad(void);
|
static inline tLibHandle JvmLibraryLoad(void);
|
||||||
static inline long int JvmLibraryLastErrorGet(void);
|
static inline long int JvmLibraryLastErrorGet(void);
|
||||||
static inline int RunAllTests(void);
|
static inline int RunAllTests(void);
|
||||||
|
|
||||||
/*! \brief Contains Environment data for the test program */
|
/*! \brief Contains Environment data for the test program */
|
||||||
static struct
|
static struct
|
||||||
{
|
{
|
||||||
struct {
|
struct {
|
||||||
tLibHandle lib; /*!< Contains the handle for the loaded JVM-Library */
|
tLibHandle lib; /*!< Contains the handle for the loaded JVM-Library */
|
||||||
tJavaVMcreate VMcreate; /*!< Holds the pointer to the call for creating a JVM
|
tJavaVMcreate VMcreate; /*!< Holds the pointer to the call for creating a JVM
|
||||||
instance. */
|
instance. */
|
||||||
}jni;
|
}jni;
|
||||||
|
|
||||||
tJVM jvm; /*!< Contains the data for the created JVM used
|
tJVM jvm; /*!< Contains the data for the created JVM used
|
||||||
for tests. */
|
for tests. */
|
||||||
|
|
||||||
JNIEnv* thread_env; /*!< Holds the pointer to the environment that can be
|
JNIEnv* thread_env; /*!< Holds the pointer to the environment that can be
|
||||||
used for the tests. (after the thread has been
|
used for the tests. (after the thread has been
|
||||||
attached) */
|
attached) */
|
||||||
}globals = { { NULL, NULL }, { NULL, NULL }, NULL };
|
}globals = { { NULL, NULL }, { NULL, NULL }, NULL };
|
||||||
int main(void)
|
int main(void)
|
||||||
{
|
{
|
||||||
int test_fail_count = -1;
|
int test_fail_count = -1;
|
||||||
|
|
||||||
jint result = -1;
|
jint result = -1;
|
||||||
|
|
||||||
globals.jni.lib = JvmLibraryLoad();
|
globals.jni.lib = JvmLibraryLoad();
|
||||||
if (globals.jni.lib == NULL)
|
if (globals.jni.lib == NULL)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Error loading library (%ld)\n", JvmLibraryLastErrorGet());
|
fprintf(stderr, "Error loading library (%ld)\n", JvmLibraryLastErrorGet());
|
||||||
goto end_no_jvm_lib;
|
goto end_no_jvm_lib;
|
||||||
}
|
}
|
||||||
|
|
||||||
// get the address of the JNI call to create the VM from the loaded library.
|
// get the address of the JNI call to create the VM from the loaded library.
|
||||||
globals.jni.VMcreate = (tJavaVMcreate)JvmLibraryFunctionGet("JNI_CreateJavaVM");
|
globals.jni.VMcreate = (tJavaVMcreate)JvmLibraryFunctionGet("JNI_CreateJavaVM");
|
||||||
if (globals.jni.VMcreate == NULL)
|
if (globals.jni.VMcreate == NULL)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Error getting JNI_CreateJavaVM (%ld)", JvmLibraryLastErrorGet());
|
fprintf(stderr, "Error getting JNI_CreateJavaVM (%ld)", JvmLibraryLastErrorGet());
|
||||||
goto end_no_CreateJavaVM;
|
goto end_no_CreateJavaVM;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create the VM the tests should be done within
|
// Create the VM the tests should be done within
|
||||||
result = CreateVM(&globals.jvm);
|
result = CreateVM(&globals.jvm);
|
||||||
if (result < 0) {
|
if (result < 0) {
|
||||||
fprintf(stderr, "Can't create Java VM (%ld)\n", result);
|
fprintf(stderr, "Can't create Java VM (%ld)\n", result);
|
||||||
goto end_no_java_vm;
|
goto end_no_java_vm;
|
||||||
}
|
}
|
||||||
|
|
||||||
// In order to be able to interact with the VM we have to attach our thread to the VM
|
// In order to be able to interact with the VM we have to attach our thread to the VM
|
||||||
result = globals.jvm.jvm->AttachCurrentThread((void**)&globals.thread_env, NULL);
|
result = globals.jvm.jvm->AttachCurrentThread((void**)&globals.thread_env, NULL);
|
||||||
if (result < 0) {
|
if (result < 0) {
|
||||||
fprintf(stderr, "Can't attach thread to Java VM (%ld)\n", result);
|
fprintf(stderr, "Can't attach thread to Java VM (%ld)\n", result);
|
||||||
goto end_no_attach;
|
goto end_no_attach;
|
||||||
}
|
}
|
||||||
|
|
||||||
test_fail_count = RunAllTests();
|
test_fail_count = RunAllTests();
|
||||||
|
|
||||||
/* Check if there is still a pending exception. Usually all the tests should clear the
|
/* Check if there is still a pending exception. Usually all the tests should clear the
|
||||||
* exceptions if any have been expected. If this is not the case something went wrong... */
|
* exceptions if any have been expected. If this is not the case something went wrong... */
|
||||||
if (globals.jvm.env->ExceptionOccurred()) {
|
if (globals.jvm.env->ExceptionOccurred()) {
|
||||||
globals.jvm.env->ExceptionDescribe();
|
globals.jvm.env->ExceptionDescribe();
|
||||||
test_fail_count++;
|
test_fail_count++;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* After cleaning up the java environment we can safely detach our thread from the JVM */
|
/* After cleaning up the java environment we can safely detach our thread from the JVM */
|
||||||
globals.jvm.jvm->DetachCurrentThread();
|
globals.jvm.jvm->DetachCurrentThread();
|
||||||
|
|
||||||
end_no_attach:
|
end_no_attach:
|
||||||
globals.jvm.jvm->DestroyJavaVM();
|
globals.jvm.jvm->DestroyJavaVM();
|
||||||
|
|
||||||
end_no_java_vm:
|
end_no_java_vm:
|
||||||
end_no_CreateJavaVM:
|
end_no_CreateJavaVM:
|
||||||
/* Unload the JNI Library */
|
/* Unload the JNI Library */
|
||||||
JvmLibraryFree();
|
JvmLibraryFree();
|
||||||
|
|
||||||
end_no_jvm_lib:
|
end_no_jvm_lib:
|
||||||
return test_fail_count;
|
return test_fail_count;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
typedef CuSuite* (*tSuiteNew)(void);
|
typedef CuSuite* (*tSuiteNew)(void);
|
||||||
typedef CuSuite* (*tGetDLLtests)(tSuiteNew SuiteNew, JNIEnv *env);
|
typedef CuSuite* (*tGetDLLtests)(tSuiteNew SuiteNew, JNIEnv *env);
|
||||||
|
|
||||||
/*! \brief Executes all the tests
|
/*! \brief Executes all the tests
|
||||||
*
|
*
|
||||||
* \return Number of tests that failed */
|
* \return Number of tests that failed */
|
||||||
static inline int RunAllTests(void)
|
static inline int RunAllTests(void)
|
||||||
{
|
{
|
||||||
int result = 0;
|
int result = 0;
|
||||||
tGetDLLtests getTestSuite = NULL;
|
tGetDLLtests getTestSuite = NULL;
|
||||||
tLibHandle libusb = LoadLibrary("LibusbJava-1_0.dll");
|
tLibHandle libusb = LoadLibrary("LibusbJava-1_0.dll");
|
||||||
|
|
||||||
if (libusb == NULL) {
|
if (libusb == NULL) {
|
||||||
printf("Failed to load LibusbJava-1_0.dll: %lu", GetLastError());
|
printf("Failed to load LibusbJava-1_0.dll: %lu", GetLastError());
|
||||||
goto no_lib;
|
goto no_lib;
|
||||||
}
|
}
|
||||||
|
|
||||||
getTestSuite = (tGetDLLtests)GetProcAddress(libusb, "GetLibusbJavaSuite");
|
getTestSuite = (tGetDLLtests)GetProcAddress(libusb, "GetLibusbJavaSuite");
|
||||||
if (getTestSuite == NULL)
|
if (getTestSuite == NULL)
|
||||||
{
|
{
|
||||||
printf("Failed to get unit tests: %lu", GetLastError());
|
printf("Failed to get unit tests: %lu", GetLastError());
|
||||||
goto no_suite_new;
|
goto no_suite_new;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Run the test procedures */
|
/* Run the test procedures */
|
||||||
{
|
{
|
||||||
CuSuite *suite = getTestSuite(&CuSuiteNew, globals.thread_env);
|
CuSuite *suite = getTestSuite(&CuSuiteNew, globals.thread_env);
|
||||||
CuString *output = CuStringNew();
|
CuString *output = CuStringNew();
|
||||||
|
|
||||||
|
|
||||||
CuSuiteRun(suite);
|
CuSuiteRun(suite);
|
||||||
CuSuiteSummary(suite, output);
|
CuSuiteSummary(suite, output);
|
||||||
CuSuiteDetails(suite, output);
|
CuSuiteDetails(suite, output);
|
||||||
|
|
||||||
printf("%s\n", output->buffer);
|
printf("%s\n", output->buffer);
|
||||||
|
|
||||||
result = suite->failCount;
|
result = suite->failCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
FreeLibrary(libusb);
|
FreeLibrary(libusb);
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
|
|
||||||
no_suite_new:
|
no_suite_new:
|
||||||
FreeLibrary(libusb);
|
FreeLibrary(libusb);
|
||||||
|
|
||||||
no_lib:
|
no_lib:
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*! \brief Creates a java virtual machine and places all the received handles into
|
/*! \brief Creates a java virtual machine and places all the received handles into
|
||||||
* the given structure
|
* the given structure
|
||||||
*
|
*
|
||||||
* \param vmdata Pointer to the structure that should hold all the handles
|
* \param vmdata Pointer to the structure that should hold all the handles
|
||||||
* of the VM created.
|
* of the VM created.
|
||||||
*
|
*
|
||||||
* \return
|
* \return
|
||||||
* - JNI_OK on success
|
* - JNI_OK on success
|
||||||
* - <0 on failure (see jni.h)
|
* - <0 on failure (see jni.h)
|
||||||
*/
|
*/
|
||||||
static inline int CreateVM(tJVM *vmdata)
|
static inline int CreateVM(tJVM *vmdata)
|
||||||
{
|
{
|
||||||
JavaVMInitArgs vm_args;
|
JavaVMInitArgs vm_args;
|
||||||
JavaVMOption options[1];
|
JavaVMOption options[1];
|
||||||
|
|
||||||
options[0].optionString = "-Djava.class.path=" USER_CLASSPATH;
|
options[0].optionString = "-Djava.class.path=" USER_CLASSPATH;
|
||||||
vm_args.version = JNI_VERSION_1_2;
|
vm_args.version = JNI_VERSION_1_2;
|
||||||
vm_args.options = options;
|
vm_args.options = options;
|
||||||
vm_args.nOptions = 1;
|
vm_args.nOptions = 1;
|
||||||
vm_args.ignoreUnrecognized = JNI_TRUE;
|
vm_args.ignoreUnrecognized = JNI_TRUE;
|
||||||
|
|
||||||
/* Create the Java VM for unit tests */
|
/* Create the Java VM for unit tests */
|
||||||
return globals.jni.VMcreate(&vmdata->jvm, (void**) &vmdata->env, &vm_args);
|
return globals.jni.VMcreate(&vmdata->jvm, (void**) &vmdata->env, &vm_args);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*! \brief Searches and tries to load the JVM library
|
/*! \brief Searches and tries to load the JVM library
|
||||||
*
|
*
|
||||||
* As there are some issues to find the appropriate library in the given path
|
* As there are some issues to find the appropriate library in the given path
|
||||||
* this function searches a several options for loading a library.
|
* this function searches a several options for loading a library.
|
||||||
*
|
*
|
||||||
* \return
|
* \return
|
||||||
* - Handle for the loaded library
|
* - Handle for the loaded library
|
||||||
* - NULL if the library could not be loaded. Use GetLastError() to determine
|
* - NULL if the library could not be loaded. Use GetLastError() to determine
|
||||||
* the reason.
|
* the reason.
|
||||||
*/
|
*/
|
||||||
static inline tLibHandle JvmLibraryLoad(void)
|
static inline tLibHandle JvmLibraryLoad(void)
|
||||||
{
|
{
|
||||||
unsigned int pos = 0;
|
unsigned int pos = 0;
|
||||||
tLibHandle result = NULL;
|
tLibHandle result = NULL;
|
||||||
|
|
||||||
while ((result == NULL) && (lib_paths[pos] != NULL))
|
while ((result == NULL) && (lib_paths[pos] != NULL))
|
||||||
{
|
{
|
||||||
#if defined(_WIN32) || defined(_WIN64)
|
#if defined(_WIN32) || defined(_WIN64)
|
||||||
result = LoadLibrary(lib_paths[pos++]);
|
result = LoadLibrary(lib_paths[pos++]);
|
||||||
#else
|
#else
|
||||||
# error "Unable to load the jvm library for this platform"
|
# error "Unable to load the jvm library for this platform"
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*! \brief Wrapper for freeing a loaded JVM library */
|
/*! \brief Wrapper for freeing a loaded JVM library */
|
||||||
static inline void JvmLibraryFree(void)
|
static inline void JvmLibraryFree(void)
|
||||||
{
|
{
|
||||||
#if defined(_WIN32) || defined(_WIN64)
|
#if defined(_WIN32) || defined(_WIN64)
|
||||||
FreeLibrary(globals.jni.lib);
|
FreeLibrary(globals.jni.lib);
|
||||||
#else
|
#else
|
||||||
# error "Unable to unload the jvm library for this platform"
|
# error "Unable to unload the jvm library for this platform"
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/*! \brief Wrapper for getting a specific function pointer from the loaded JVM library
|
/*! \brief Wrapper for getting a specific function pointer from the loaded JVM library
|
||||||
*
|
*
|
||||||
* \param name Name of the function to be retrieved.
|
* \param name Name of the function to be retrieved.
|
||||||
*
|
*
|
||||||
* \return Function pointer to the given function or NULL if the function could not be found
|
* \return Function pointer to the given function or NULL if the function could not be found
|
||||||
*/
|
*/
|
||||||
static inline tCallbackPtr JvmLibraryFunctionGet(const char *name)
|
static inline tCallbackPtr JvmLibraryFunctionGet(const char *name)
|
||||||
{
|
{
|
||||||
#if defined(_WIN32) || defined(_WIN64)
|
#if defined(_WIN32) || defined(_WIN64)
|
||||||
return GetProcAddress(globals.jni.lib, name);
|
return GetProcAddress(globals.jni.lib, name);
|
||||||
#else
|
#else
|
||||||
# error "Unable to get library function pointer for this platform"
|
# error "Unable to get library function pointer for this platform"
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/*! \brief Wrapper for getting the reason why the last JvmLibrary*-Call failed
|
/*! \brief Wrapper for getting the reason why the last JvmLibrary*-Call failed
|
||||||
*
|
*
|
||||||
* \return Errorcode describing the error that happened. */
|
* \return Errorcode describing the error that happened. */
|
||||||
static inline long int JvmLibraryLastErrorGet(void)
|
static inline long int JvmLibraryLastErrorGet(void)
|
||||||
{
|
{
|
||||||
#if defined(_WIN32) || defined(_WIN64)
|
#if defined(_WIN32) || defined(_WIN64)
|
||||||
return GetLastError();
|
return GetLastError();
|
||||||
#else
|
#else
|
||||||
# error "Unable to determine last error for this platform"
|
# error "Unable to determine last error for this platform"
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,46 +1,46 @@
|
|||||||
/*! \file
|
/*! \file
|
||||||
*
|
*
|
||||||
* C++ Stub for the java class of a java class ch.ntb.inf.libusbJava.Usb_Device.
|
* C++ Stub for the java class of a java class ch.ntb.inf.libusbJava.Usb_Device.
|
||||||
*
|
*
|
||||||
* \author Ueli Niederer <ueli.niederer @ ntb.ch>
|
* \author Ueli Niederer <ueli.niederer @ ntb.ch>
|
||||||
*/
|
*/
|
||||||
#include "Usb_Device.h"
|
#include "Usb_Device.h"
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#ifdef DO_UNIT_TEST
|
#ifdef DO_UNIT_TEST
|
||||||
# include <CuTest.h>
|
# include <CuTest.h>
|
||||||
|
|
||||||
# define TEST_CASE(name) static void name(CuTest *tc)
|
# define TEST_CASE(name) static void name(CuTest *tc)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
typedef struct JField {
|
typedef struct JField {
|
||||||
const char *type;
|
const char *type;
|
||||||
const char *name;
|
const char *name;
|
||||||
jfieldID id;
|
jfieldID id;
|
||||||
}tJField;
|
}tJField;
|
||||||
|
|
||||||
typedef struct Usb_Device {
|
typedef struct Usb_Device {
|
||||||
int loaded;
|
int loaded;
|
||||||
|
|
||||||
jclass clazz;
|
jclass clazz;
|
||||||
|
|
||||||
jmethodID constructor;
|
jmethodID constructor;
|
||||||
|
|
||||||
jfieldID next;
|
jfieldID next;
|
||||||
jfieldID prev;
|
jfieldID prev;
|
||||||
jfieldID filename;
|
jfieldID filename;
|
||||||
jfieldID bus;
|
jfieldID bus;
|
||||||
jfieldID descriptor;
|
jfieldID descriptor;
|
||||||
jfieldID config;
|
jfieldID config;
|
||||||
jfieldID devnum;
|
jfieldID devnum;
|
||||||
jfieldID num_children;
|
jfieldID num_children;
|
||||||
jfieldID children;
|
jfieldID children;
|
||||||
jfieldID devStructAddr;
|
jfieldID devStructAddr;
|
||||||
}tUsb_Device;
|
}tUsb_Device;
|
||||||
|
|
||||||
#define LOAD_FIELD(env, me, type, name) me->name = env->GetFieldID(me->clazz, #name, (type))
|
#define LOAD_FIELD(env, me, type, name) me->name = env->GetFieldID(me->clazz, #name, (type))
|
||||||
#if 0
|
#if 0
|
||||||
#define SANITY_CHECK() { if (me->loaded == 0) Usb_Device_connect(env); }
|
#define SANITY_CHECK() { if (me->loaded == 0) Usb_Device_connect(env); }
|
||||||
#else
|
#else
|
||||||
#define SANITY_CHECK()
|
#define SANITY_CHECK()
|
||||||
#endif
|
#endif
|
||||||
@@ -50,92 +50,92 @@ static tUsb_Device *me = &instance;
|
|||||||
|
|
||||||
int Usb_Device_connect(JNIEnv *env)
|
int Usb_Device_connect(JNIEnv *env)
|
||||||
{
|
{
|
||||||
jobject theClass = env->FindClass("ch/ntb/usb/Usb_Device");
|
jobject theClass = env->FindClass("ch/ntb/usb/Usb_Device");
|
||||||
if (theClass == NULL) goto no_class;
|
if (theClass == NULL) goto no_class;
|
||||||
|
|
||||||
me->clazz = (jclass) env->NewGlobalRef(theClass); // make it global to avoid class unloading and therefore
|
me->clazz = (jclass) env->NewGlobalRef(theClass); // make it global to avoid class unloading and therefore
|
||||||
// invalidating the references obtained.
|
// invalidating the references obtained.
|
||||||
if (me->clazz == NULL) goto no_memory;
|
if (me->clazz == NULL) goto no_memory;
|
||||||
|
|
||||||
me->constructor = env->GetMethodID(me->clazz, "<init>", "()V");
|
me->constructor = env->GetMethodID(me->clazz, "<init>", "()V");
|
||||||
if (me->constructor == NULL) goto no_constructor;
|
if (me->constructor == NULL) goto no_constructor;
|
||||||
|
|
||||||
LOAD_FIELD(env, me, "Lch/ntb/usb/Usb_Device;", next);
|
LOAD_FIELD(env, me, "Lch/ntb/usb/Usb_Device;", next);
|
||||||
LOAD_FIELD(env, me, "Lch/ntb/usb/Usb_Device;", prev);
|
LOAD_FIELD(env, me, "Lch/ntb/usb/Usb_Device;", prev);
|
||||||
LOAD_FIELD(env, me, "Ljava/lang/String;", filename);
|
LOAD_FIELD(env, me, "Ljava/lang/String;", filename);
|
||||||
LOAD_FIELD(env, me, "Lch/ntb/usb/Usb_Bus;", bus);
|
LOAD_FIELD(env, me, "Lch/ntb/usb/Usb_Bus;", bus);
|
||||||
LOAD_FIELD(env, me, "Lch/ntb/usb/Usb_Device_Descriptor;", descriptor);
|
LOAD_FIELD(env, me, "Lch/ntb/usb/Usb_Device_Descriptor;", descriptor);
|
||||||
LOAD_FIELD(env, me, "[Lch/ntb/usb/Usb_Config_Descriptor;", config);
|
LOAD_FIELD(env, me, "[Lch/ntb/usb/Usb_Config_Descriptor;", config);
|
||||||
LOAD_FIELD(env, me, "B", devnum);
|
LOAD_FIELD(env, me, "B", devnum);
|
||||||
LOAD_FIELD(env, me, "B", num_children);
|
LOAD_FIELD(env, me, "B", num_children);
|
||||||
LOAD_FIELD(env, me, "Lch/ntb/usb/Usb_Device;", children);
|
LOAD_FIELD(env, me, "Lch/ntb/usb/Usb_Device;", children);
|
||||||
LOAD_FIELD(env, me, "J", devStructAddr);
|
LOAD_FIELD(env, me, "J", devStructAddr);
|
||||||
|
|
||||||
me->loaded = 1;
|
me->loaded = 1;
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
no_constructor:
|
no_constructor:
|
||||||
env->DeleteGlobalRef(me->clazz);
|
env->DeleteGlobalRef(me->clazz);
|
||||||
no_memory:
|
no_memory:
|
||||||
no_class:
|
no_class:
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Usb_Device_disconnect(JNIEnv *env)
|
void Usb_Device_disconnect(JNIEnv *env)
|
||||||
{
|
{
|
||||||
if (me->loaded == 0) return;
|
if (me->loaded == 0) return;
|
||||||
|
|
||||||
env->DeleteGlobalRef(me->clazz);
|
env->DeleteGlobalRef(me->clazz);
|
||||||
memset(me, 0, sizeof(tUsb_Device));
|
memset(me, 0, sizeof(tUsb_Device));
|
||||||
}
|
}
|
||||||
|
|
||||||
jobject Usb_Device_create(JNIEnv *env, libusb_device *handle, uint8_t address){
|
jobject Usb_Device_create(JNIEnv *env, libusb_device *handle, uint8_t address){
|
||||||
if (me->loaded == 0) return NULL;
|
if (me->loaded == 0) return NULL;
|
||||||
|
|
||||||
jobject result = env->NewObject(me->clazz, me->constructor);
|
jobject result = env->NewObject(me->clazz, me->constructor);
|
||||||
|
|
||||||
if (result != NULL) {
|
if (result != NULL) {
|
||||||
char filename[4];
|
char filename[4];
|
||||||
|
|
||||||
snprintf(filename, 4, "%03d", address);
|
snprintf(filename, 4, "%03d", address);
|
||||||
|
|
||||||
env->SetLongField(result, me->devStructAddr, (jlong)handle);
|
env->SetLongField(result, me->devStructAddr, (jlong)handle);
|
||||||
env->SetByteField(result, me->devnum, address);
|
env->SetByteField(result, me->devnum, address);
|
||||||
env->SetObjectField(result, me->filename, env->NewStringUTF(filename));
|
env->SetObjectField(result, me->filename, env->NewStringUTF(filename));
|
||||||
|
|
||||||
env->SetByteField(result, me->num_children, 0); /*Hardcoded to 0, like the compatibility Layer*/
|
env->SetByteField(result, me->num_children, 0); /*Hardcoded to 0, like the compatibility Layer*/
|
||||||
env->SetObjectField(result, me->children, NULL); /*Hardcoded to NULL, like the compatibility Layer*/
|
env->SetObjectField(result, me->children, NULL); /*Hardcoded to NULL, like the compatibility Layer*/
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
libusb_device * Usb_Device_HandleGet(JNIEnv *env, jobject dev)
|
libusb_device * Usb_Device_HandleGet(JNIEnv *env, jobject dev)
|
||||||
{
|
{
|
||||||
if (me->loaded == 0) return NULL;
|
if (me->loaded == 0) return NULL;
|
||||||
|
|
||||||
return (libusb_device*)env->GetLongField(dev, me->devStructAddr);
|
return (libusb_device*)env->GetLongField(dev, me->devStructAddr);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Usb_Device_HandleSet(JNIEnv *env, jobject dev, libusb_device *handle)
|
void Usb_Device_HandleSet(JNIEnv *env, jobject dev, libusb_device *handle)
|
||||||
{
|
{
|
||||||
env->SetLongField(dev, me->devStructAddr, (jlong)handle);
|
env->SetLongField(dev, me->devStructAddr, (jlong)handle);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Usb_Device_ConfigSet(JNIEnv *env, jobject dev, jobjectArray config)
|
void Usb_Device_ConfigSet(JNIEnv *env, jobject dev, jobjectArray config)
|
||||||
{
|
{
|
||||||
env->SetObjectField(dev, me->config, config);
|
env->SetObjectField(dev, me->config, config);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Usb_Device_DescriptorSet(JNIEnv *env, jobject dev, jobject desc)
|
void Usb_Device_DescriptorSet(JNIEnv *env, jobject dev, jobject desc)
|
||||||
{
|
{
|
||||||
env->SetObjectField(dev, me->descriptor, desc);
|
env->SetObjectField(dev, me->descriptor, desc);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Usb_Device_NextSet(JNIEnv *env, jobject dev, jobject next) {
|
void Usb_Device_NextSet(JNIEnv *env, jobject dev, jobject next) {
|
||||||
env->SetObjectField(dev, me->next, next);
|
env->SetObjectField(dev, me->next, next);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Usb_Device_PrevSet(JNIEnv *env, jobject dev, jobject prev) {
|
void Usb_Device_PrevSet(JNIEnv *env, jobject dev, jobject prev) {
|
||||||
env->SetObjectField(dev, me->prev, prev);
|
env->SetObjectField(dev, me->prev, prev);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,17 +11,17 @@
|
|||||||
char* CuStrAlloc(int size);
|
char* CuStrAlloc(int size);
|
||||||
char* CuStrCopy(const char* old);
|
char* CuStrCopy(const char* old);
|
||||||
|
|
||||||
#define CU_ALLOC(TYPE) ((TYPE*) malloc(sizeof(TYPE)))
|
#define CU_ALLOC(TYPE) ((TYPE*) malloc(sizeof(TYPE)))
|
||||||
|
|
||||||
#define HUGE_STRING_LEN 8192
|
#define HUGE_STRING_LEN 8192
|
||||||
#define STRING_MAX 256
|
#define STRING_MAX 256
|
||||||
#define STRING_INC 256
|
#define STRING_INC 256
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
int length;
|
int length;
|
||||||
int size;
|
int size;
|
||||||
char* buffer;
|
char* buffer;
|
||||||
} CuString;
|
} CuString;
|
||||||
|
|
||||||
void CuStringInit(CuString* str);
|
void CuStringInit(CuString* str);
|
||||||
@@ -42,12 +42,12 @@ typedef void (*TestFunction)(CuTest *);
|
|||||||
|
|
||||||
struct CuTest
|
struct CuTest
|
||||||
{
|
{
|
||||||
char* name;
|
char* name;
|
||||||
TestFunction function;
|
TestFunction function;
|
||||||
int failed;
|
int failed;
|
||||||
int ran;
|
int ran;
|
||||||
const char* message;
|
const char* message;
|
||||||
jmp_buf *jumpBuf;
|
jmp_buf *jumpBuf;
|
||||||
};
|
};
|
||||||
|
|
||||||
void CuTestInit(CuTest* t, const char* name, TestFunction function);
|
void CuTestInit(CuTest* t, const char* name, TestFunction function);
|
||||||
@@ -59,17 +59,17 @@ void CuTestDelete(CuTest *t);
|
|||||||
void CuFail_Line(CuTest* tc, const char* file, int line, const char* message2, const char* message);
|
void CuFail_Line(CuTest* tc, const char* file, int line, const char* message2, const char* message);
|
||||||
void CuAssert_Line(CuTest* tc, const char* file, int line, const char* message, int condition);
|
void CuAssert_Line(CuTest* tc, const char* file, int line, const char* message, int condition);
|
||||||
void CuAssertStrEquals_LineMsg(CuTest* tc,
|
void CuAssertStrEquals_LineMsg(CuTest* tc,
|
||||||
const char* file, int line, const char* message,
|
const char* file, int line, const char* message,
|
||||||
const char* expected, const char* actual);
|
const char* expected, const char* actual);
|
||||||
void CuAssertIntEquals_LineMsg(CuTest* tc,
|
void CuAssertIntEquals_LineMsg(CuTest* tc,
|
||||||
const char* file, int line, const char* message,
|
const char* file, int line, const char* message,
|
||||||
int expected, int actual);
|
int expected, int actual);
|
||||||
void CuAssertDblEquals_LineMsg(CuTest* tc,
|
void CuAssertDblEquals_LineMsg(CuTest* tc,
|
||||||
const char* file, int line, const char* message,
|
const char* file, int line, const char* message,
|
||||||
double expected, double actual, double delta);
|
double expected, double actual, double delta);
|
||||||
void CuAssertPtrEquals_LineMsg(CuTest* tc,
|
void CuAssertPtrEquals_LineMsg(CuTest* tc,
|
||||||
const char* file, int line, const char* message,
|
const char* file, int line, const char* message,
|
||||||
void* expected, void* actual);
|
void* expected, void* actual);
|
||||||
|
|
||||||
/* public assert functions */
|
/* public assert functions */
|
||||||
|
|
||||||
@@ -91,15 +91,15 @@ void CuAssertPtrEquals_LineMsg(CuTest* tc,
|
|||||||
|
|
||||||
/* CuSuite */
|
/* CuSuite */
|
||||||
|
|
||||||
#define MAX_TEST_CASES 1024
|
#define MAX_TEST_CASES 1024
|
||||||
|
|
||||||
#define SUITE_ADD_TEST(SUITE,TEST) CuSuiteAdd(SUITE, CuTestNew(#TEST, TEST))
|
#define SUITE_ADD_TEST(SUITE,TEST) CuSuiteAdd(SUITE, CuTestNew(#TEST, TEST))
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
int count;
|
int count;
|
||||||
CuTest* list[MAX_TEST_CASES];
|
CuTest* list[MAX_TEST_CASES];
|
||||||
int failCount;
|
int failCount;
|
||||||
|
|
||||||
} CuSuite;
|
} CuSuite;
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -32,345 +32,345 @@ import com.github.boukefalos.jlibloader.Native;
|
|||||||
*/
|
*/
|
||||||
public class LibusbJava {
|
public class LibusbJava {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* System error codes.<br>
|
* System error codes.<br>
|
||||||
* This list is not complete! For more error codes see the file 'errorno.h'
|
* This list is not complete! For more error codes see the file 'errorno.h'
|
||||||
* on your system.
|
* on your system.
|
||||||
*/
|
*/
|
||||||
public static int ERROR_SUCCESS, ERROR_BAD_FILE_DESCRIPTOR,
|
public static int ERROR_SUCCESS, ERROR_BAD_FILE_DESCRIPTOR,
|
||||||
ERROR_NO_SUCH_DEVICE_OR_ADDRESS, ERROR_BUSY,
|
ERROR_NO_SUCH_DEVICE_OR_ADDRESS, ERROR_BUSY,
|
||||||
ERROR_INVALID_PARAMETER, ERROR_TIMEDOUT, ERROR_IO_ERROR,
|
ERROR_INVALID_PARAMETER, ERROR_TIMEDOUT, ERROR_IO_ERROR,
|
||||||
ERROR_NOT_ENOUGH_MEMORY;;
|
ERROR_NOT_ENOUGH_MEMORY;;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the debugging level of libusb.<br>
|
* Sets the debugging level of libusb.<br>
|
||||||
*
|
*
|
||||||
* The range is from 0 to 255, where 0 disables debug output and 255 enables
|
* The range is from 0 to 255, where 0 disables debug output and 255 enables
|
||||||
* all output. On application start, debugging is disabled (0).
|
* all output. On application start, debugging is disabled (0).
|
||||||
*
|
*
|
||||||
* @param level
|
* @param level
|
||||||
* 0 to 255
|
* 0 to 255
|
||||||
*/
|
*/
|
||||||
public static native void usb_set_debug(int level);
|
public static native void usb_set_debug(int level);
|
||||||
|
|
||||||
// Core
|
// Core
|
||||||
/**
|
/**
|
||||||
* Just like the name implies, <code>usb_init</code> sets up some internal
|
* Just like the name implies, <code>usb_init</code> sets up some internal
|
||||||
* structures. <code>usb_init</code> must be called before any other
|
* structures. <code>usb_init</code> must be called before any other
|
||||||
* libusb functions.
|
* libusb functions.
|
||||||
*/
|
*/
|
||||||
public static native void usb_init();
|
public static native void usb_init();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <code>usb_find_busses</code> will find all of the busses on the system.
|
* <code>usb_find_busses</code> will find all of the busses on the system.
|
||||||
*
|
*
|
||||||
* @return the number of changes since previous call to this function (total
|
* @return the number of changes since previous call to this function (total
|
||||||
* of new busses and busses removed).
|
* of new busses and busses removed).
|
||||||
*/
|
*/
|
||||||
public static native int usb_find_busses();
|
public static native int usb_find_busses();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <code>usb_find_devices</code> will find all of the devices on each bus.
|
* <code>usb_find_devices</code> will find all of the devices on each bus.
|
||||||
* This should be called after <code>usb_find_busses</code>.
|
* This should be called after <code>usb_find_busses</code>.
|
||||||
*
|
*
|
||||||
* @return the number of changes since the previous call to this function
|
* @return the number of changes since the previous call to this function
|
||||||
* (total of new device and devices removed).
|
* (total of new device and devices removed).
|
||||||
*/
|
*/
|
||||||
public static native int usb_find_devices();
|
public static native int usb_find_devices();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <code>usb_get_busses</code> returns a tree of descriptor objects.<br>
|
* <code>usb_get_busses</code> returns a tree of descriptor objects.<br>
|
||||||
* The tree represents the bus structure with devices, configurations,
|
* The tree represents the bus structure with devices, configurations,
|
||||||
* interfaces and endpoints. Note that this is only a copy. To refresh the
|
* interfaces and endpoints. Note that this is only a copy. To refresh the
|
||||||
* information, <code>usb_get_busses()</code> must be called again.<br>
|
* information, <code>usb_get_busses()</code> must be called again.<br>
|
||||||
* The name of the objects contained in the tree is starting with
|
* The name of the objects contained in the tree is starting with
|
||||||
* <code>Usb_</code>.
|
* <code>Usb_</code>.
|
||||||
*
|
*
|
||||||
* @return the structure of all busses and devices. <code>Note:</code> The
|
* @return the structure of all busses and devices. <code>Note:</code> The
|
||||||
* java objects are copies of the C structs.
|
* java objects are copies of the C structs.
|
||||||
*/
|
*/
|
||||||
public static native Usb_Bus usb_get_busses();
|
public static native Usb_Bus usb_get_busses();
|
||||||
|
|
||||||
// Device Operations
|
// Device Operations
|
||||||
/**
|
/**
|
||||||
* <code>usb_open</code> is to be used to open up a device for use.
|
* <code>usb_open</code> is to be used to open up a device for use.
|
||||||
* <code>usb_open</code> must be called before attempting to perform any
|
* <code>usb_open</code> must be called before attempting to perform any
|
||||||
* operations to the device.
|
* operations to the device.
|
||||||
*
|
*
|
||||||
* @param dev
|
* @param dev
|
||||||
* The device to open.
|
* The device to open.
|
||||||
* @return a handle used in future communication with the device. 0 if an
|
* @return a handle used in future communication with the device. 0 if an
|
||||||
* error has occurred.
|
* error has occurred.
|
||||||
*/
|
*/
|
||||||
public static native long usb_open(Usb_Device dev);
|
public static native long usb_open(Usb_Device dev);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <code>usb_close</code> closes a device opened with
|
* <code>usb_close</code> closes a device opened with
|
||||||
* <code>usb_open</code>.
|
* <code>usb_open</code>.
|
||||||
*
|
*
|
||||||
* @param dev_handle
|
* @param dev_handle
|
||||||
* The handle to the device.
|
* The handle to the device.
|
||||||
* @return 0 on success or < 0 on error.
|
* @return 0 on success or < 0 on error.
|
||||||
*/
|
*/
|
||||||
public static native int usb_close(long dev_handle);
|
public static native int usb_close(long dev_handle);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the active configuration of a device
|
* Sets the active configuration of a device
|
||||||
*
|
*
|
||||||
* @param dev_handle
|
* @param dev_handle
|
||||||
* The handle to the device.
|
* The handle to the device.
|
||||||
* @param configuration
|
* @param configuration
|
||||||
* The value as specified in the descriptor field
|
* The value as specified in the descriptor field
|
||||||
* bConfigurationValue.
|
* bConfigurationValue.
|
||||||
* @return 0 on success or < 0 on error.
|
* @return 0 on success or < 0 on error.
|
||||||
*/
|
*/
|
||||||
public static native int usb_set_configuration(long dev_handle,
|
public static native int usb_set_configuration(long dev_handle,
|
||||||
int configuration);
|
int configuration);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the active alternate setting of the current interface
|
* Sets the active alternate setting of the current interface
|
||||||
*
|
*
|
||||||
* @param dev_handle
|
* @param dev_handle
|
||||||
* The handle to the device.
|
* The handle to the device.
|
||||||
* @param alternate
|
* @param alternate
|
||||||
* The value as specified in the descriptor field
|
* The value as specified in the descriptor field
|
||||||
* bAlternateSetting.
|
* bAlternateSetting.
|
||||||
* @return 0 on success or < 0 on error.
|
* @return 0 on success or < 0 on error.
|
||||||
*/
|
*/
|
||||||
public static native int usb_set_altinterface(long dev_handle, int alternate);
|
public static native int usb_set_altinterface(long dev_handle, int alternate);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Clears any halt status on an endpoint.
|
* Clears any halt status on an endpoint.
|
||||||
*
|
*
|
||||||
* @param dev_handle
|
* @param dev_handle
|
||||||
* The handle to the device.
|
* The handle to the device.
|
||||||
* @param ep
|
* @param ep
|
||||||
* The value specified in the descriptor field bEndpointAddress.
|
* The value specified in the descriptor field bEndpointAddress.
|
||||||
* @return 0 on success or < 0 on error.
|
* @return 0 on success or < 0 on error.
|
||||||
*/
|
*/
|
||||||
public static native int usb_clear_halt(long dev_handle, int ep);
|
public static native int usb_clear_halt(long dev_handle, int ep);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Resets a device by sending a RESET down the port it is connected to.<br>
|
* Resets a device by sending a RESET down the port it is connected to.<br>
|
||||||
* <br>
|
* <br>
|
||||||
* <b>Causes re-enumeration:</b> After calling <code>usb_reset</code>,
|
* <b>Causes re-enumeration:</b> After calling <code>usb_reset</code>,
|
||||||
* the device will need to re-enumerate and thusly, requires you to find the
|
* the device will need to re-enumerate and thusly, requires you to find the
|
||||||
* new device and open a new handle. The handle used to call
|
* new device and open a new handle. The handle used to call
|
||||||
* <code>usb_reset</code> will no longer work.
|
* <code>usb_reset</code> will no longer work.
|
||||||
*
|
*
|
||||||
* @param dev_handle
|
* @param dev_handle
|
||||||
* The handle to the device.
|
* The handle to the device.
|
||||||
* @return 0 on success or < 0 on error.
|
* @return 0 on success or < 0 on error.
|
||||||
*/
|
*/
|
||||||
public static native int usb_reset(long dev_handle);
|
public static native int usb_reset(long dev_handle);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Claim an interface of a device.<br>
|
* Claim an interface of a device.<br>
|
||||||
* <br>
|
* <br>
|
||||||
* <b>Must be called!:</b> <code>usb_claim_interface</code> must be
|
* <b>Must be called!:</b> <code>usb_claim_interface</code> must be
|
||||||
* called before you perform any operations related to this interface (like
|
* called before you perform any operations related to this interface (like
|
||||||
* <code>usb_set_altinterface, usb_bulk_write</code>, etc).
|
* <code>usb_set_altinterface, usb_bulk_write</code>, etc).
|
||||||
*
|
*
|
||||||
* @param dev_handle
|
* @param dev_handle
|
||||||
* The handle to the device.
|
* The handle to the device.
|
||||||
* @param interface_
|
* @param interface_
|
||||||
* The value as specified in the descriptor field
|
* The value as specified in the descriptor field
|
||||||
* bInterfaceNumber.
|
* bInterfaceNumber.
|
||||||
* @return 0 on success or < 0 on error.
|
* @return 0 on success or < 0 on error.
|
||||||
*/
|
*/
|
||||||
public static native int usb_claim_interface(long dev_handle, int interface_);
|
public static native int usb_claim_interface(long dev_handle, int interface_);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Releases a previously claimed interface
|
* Releases a previously claimed interface
|
||||||
*
|
*
|
||||||
* @param dev_handle
|
* @param dev_handle
|
||||||
* The handle to the device.
|
* The handle to the device.
|
||||||
* @param interface_
|
* @param interface_
|
||||||
* The value as specified in the descriptor field
|
* The value as specified in the descriptor field
|
||||||
* bInterfaceNumber.
|
* bInterfaceNumber.
|
||||||
* @return 0 on success or < 0 on error.
|
* @return 0 on success or < 0 on error.
|
||||||
*/
|
*/
|
||||||
public static native int usb_release_interface(long dev_handle,
|
public static native int usb_release_interface(long dev_handle,
|
||||||
int interface_);
|
int interface_);
|
||||||
|
|
||||||
// Control Transfers
|
// Control Transfers
|
||||||
/**
|
/**
|
||||||
* Performs a control request to the default control pipe on a device. The
|
* Performs a control request to the default control pipe on a device. The
|
||||||
* parameters mirror the types of the same name in the USB specification.
|
* parameters mirror the types of the same name in the USB specification.
|
||||||
*
|
*
|
||||||
* @param dev_handle
|
* @param dev_handle
|
||||||
* The handle to the device.
|
* The handle to the device.
|
||||||
* @param requesttype
|
* @param requesttype
|
||||||
* @param request
|
* @param request
|
||||||
* @param value
|
* @param value
|
||||||
* @param index
|
* @param index
|
||||||
* @param bytes
|
* @param bytes
|
||||||
* @param size
|
* @param size
|
||||||
* @param timeout
|
* @param timeout
|
||||||
* @return the number of bytes written/read or < 0 on error.
|
* @return the number of bytes written/read or < 0 on error.
|
||||||
*/
|
*/
|
||||||
public static native int usb_control_msg(long dev_handle, int requesttype,
|
public static native int usb_control_msg(long dev_handle, int requesttype,
|
||||||
int request, int value, int index, byte[] bytes, int size,
|
int request, int value, int index, byte[] bytes, int size,
|
||||||
int timeout);
|
int timeout);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Retrieves the string descriptor specified by index and langid from a
|
* Retrieves the string descriptor specified by index and langid from a
|
||||||
* device.
|
* device.
|
||||||
*
|
*
|
||||||
* @param dev_handle
|
* @param dev_handle
|
||||||
* The handle to the device.
|
* The handle to the device.
|
||||||
* @param index
|
* @param index
|
||||||
* @param langid
|
* @param langid
|
||||||
* @return the descriptor String or null
|
* @return the descriptor String or null
|
||||||
*/
|
*/
|
||||||
public static native String usb_get_string(long dev_handle, int index,
|
public static native String usb_get_string(long dev_handle, int index,
|
||||||
int langid);
|
int langid);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <code>usb_get_string_simple</code> is a wrapper around
|
* <code>usb_get_string_simple</code> is a wrapper around
|
||||||
* <code>usb_get_string</code> that retrieves the string description
|
* <code>usb_get_string</code> that retrieves the string description
|
||||||
* specified by index in the first language for the descriptor.
|
* specified by index in the first language for the descriptor.
|
||||||
*
|
*
|
||||||
* @param dev_handle
|
* @param dev_handle
|
||||||
* The handle to the device.
|
* The handle to the device.
|
||||||
* @param index
|
* @param index
|
||||||
* @return the descriptor String or null
|
* @return the descriptor String or null
|
||||||
*/
|
*/
|
||||||
public static native String usb_get_string_simple(long dev_handle, int index);
|
public static native String usb_get_string_simple(long dev_handle, int index);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Retrieves a descriptor from the device identified by the type and index
|
* Retrieves a descriptor from the device identified by the type and index
|
||||||
* of the descriptor from the default control pipe.<br>
|
* of the descriptor from the default control pipe.<br>
|
||||||
* <br>
|
* <br>
|
||||||
* See {@link #usb_get_descriptor_by_endpoint(long, int, byte, byte, int)}
|
* See {@link #usb_get_descriptor_by_endpoint(long, int, byte, byte, int)}
|
||||||
* for a function that allows the control endpoint to be specified.
|
* for a function that allows the control endpoint to be specified.
|
||||||
*
|
*
|
||||||
* @param dev_handle
|
* @param dev_handle
|
||||||
* The handle to the device.
|
* The handle to the device.
|
||||||
* @param type
|
* @param type
|
||||||
* @param index
|
* @param index
|
||||||
* @param size
|
* @param size
|
||||||
* number of charactes which will be retrieved (the length of the
|
* number of charactes which will be retrieved (the length of the
|
||||||
* resulting String)
|
* resulting String)
|
||||||
* @return the descriptor String or null
|
* @return the descriptor String or null
|
||||||
*/
|
*/
|
||||||
public static native String usb_get_descriptor(long dev_handle, byte type,
|
public static native String usb_get_descriptor(long dev_handle, byte type,
|
||||||
byte index, int size);
|
byte index, int size);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Retrieves a descriptor from the device identified by the type and index
|
* Retrieves a descriptor from the device identified by the type and index
|
||||||
* of the descriptor from the control pipe identified by ep.
|
* of the descriptor from the control pipe identified by ep.
|
||||||
*
|
*
|
||||||
* @param dev_handle
|
* @param dev_handle
|
||||||
* The handle to the device.
|
* The handle to the device.
|
||||||
* @param ep
|
* @param ep
|
||||||
* @param type
|
* @param type
|
||||||
* @param index
|
* @param index
|
||||||
* @param size
|
* @param size
|
||||||
* number of charactes which will be retrieved (the length of the
|
* number of charactes which will be retrieved (the length of the
|
||||||
* resulting String)
|
* resulting String)
|
||||||
* @return the descriptor String or null
|
* @return the descriptor String or null
|
||||||
*/
|
*/
|
||||||
public static native String usb_get_descriptor_by_endpoint(long dev_handle,
|
public static native String usb_get_descriptor_by_endpoint(long dev_handle,
|
||||||
int ep, byte type, byte index, int size);
|
int ep, byte type, byte index, int size);
|
||||||
|
|
||||||
// Bulk Transfers
|
// Bulk Transfers
|
||||||
/**
|
/**
|
||||||
* Performs a bulk write request to the endpoint specified by ep.
|
* Performs a bulk write request to the endpoint specified by ep.
|
||||||
*
|
*
|
||||||
* @param dev_handle
|
* @param dev_handle
|
||||||
* The handle to the device.
|
* The handle to the device.
|
||||||
* @param ep
|
* @param ep
|
||||||
* @param bytes
|
* @param bytes
|
||||||
* @param size
|
* @param size
|
||||||
* @param timeout
|
* @param timeout
|
||||||
* @return the number of bytes written on success or < 0 on error.
|
* @return the number of bytes written on success or < 0 on error.
|
||||||
*/
|
*/
|
||||||
public static native int usb_bulk_write(long dev_handle, int ep,
|
public static native int usb_bulk_write(long dev_handle, int ep,
|
||||||
byte[] bytes, int size, int timeout);
|
byte[] bytes, int size, int timeout);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Performs a bulk read request to the endpoint specified by ep.
|
* Performs a bulk read request to the endpoint specified by ep.
|
||||||
*
|
*
|
||||||
* @param dev_handle
|
* @param dev_handle
|
||||||
* The handle to the device.
|
* The handle to the device.
|
||||||
* @param ep
|
* @param ep
|
||||||
* @param bytes
|
* @param bytes
|
||||||
* @param size
|
* @param size
|
||||||
* @param timeout
|
* @param timeout
|
||||||
* @return the number of bytes read on success or < 0 on error.
|
* @return the number of bytes read on success or < 0 on error.
|
||||||
*/
|
*/
|
||||||
public static native int usb_bulk_read(long dev_handle, int ep,
|
public static native int usb_bulk_read(long dev_handle, int ep,
|
||||||
byte[] bytes, int size, int timeout);
|
byte[] bytes, int size, int timeout);
|
||||||
|
|
||||||
// Interrupt Transfers
|
// Interrupt Transfers
|
||||||
/**
|
/**
|
||||||
* Performs an interrupt write request to the endpoint specified by ep.
|
* Performs an interrupt write request to the endpoint specified by ep.
|
||||||
*
|
*
|
||||||
* @param dev_handle
|
* @param dev_handle
|
||||||
* The handle to the device.
|
* The handle to the device.
|
||||||
* @param ep
|
* @param ep
|
||||||
* @param bytes
|
* @param bytes
|
||||||
* @param size
|
* @param size
|
||||||
* @param timeout
|
* @param timeout
|
||||||
* @return the number of bytes written on success or < 0 on error.
|
* @return the number of bytes written on success or < 0 on error.
|
||||||
*/
|
*/
|
||||||
public static native int usb_interrupt_write(long dev_handle, int ep,
|
public static native int usb_interrupt_write(long dev_handle, int ep,
|
||||||
byte[] bytes, int size, int timeout);
|
byte[] bytes, int size, int timeout);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Performs a interrupt read request to the endpoint specified by ep.
|
* Performs a interrupt read request to the endpoint specified by ep.
|
||||||
*
|
*
|
||||||
* @param dev_handle
|
* @param dev_handle
|
||||||
* The handle to the device.
|
* The handle to the device.
|
||||||
* @param ep
|
* @param ep
|
||||||
* @param bytes
|
* @param bytes
|
||||||
* @param size
|
* @param size
|
||||||
* @param timeout
|
* @param timeout
|
||||||
* @return the number of bytes read on success or < 0 on error.
|
* @return the number of bytes read on success or < 0 on error.
|
||||||
*/
|
*/
|
||||||
public static native int usb_interrupt_read(long dev_handle, int ep,
|
public static native int usb_interrupt_read(long dev_handle, int ep,
|
||||||
byte[] bytes, int size, int timeout);
|
byte[] bytes, int size, int timeout);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the error string after an error occured.
|
* Returns the error string after an error occured.
|
||||||
*
|
*
|
||||||
* @return the last error sring.
|
* @return the last error sring.
|
||||||
*/
|
*/
|
||||||
public static native String usb_strerror();
|
public static native String usb_strerror();
|
||||||
|
|
||||||
/** **************************************************************** */
|
/** **************************************************************** */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Maps the Java error code to the system error code.<br>
|
* Maps the Java error code to the system error code.<br>
|
||||||
* <br>
|
* <br>
|
||||||
* Note that not all error codes are be mapped by this method. For more
|
* Note that not all error codes are be mapped by this method. For more
|
||||||
* error codes see the file 'errno.h' on your system.<br>
|
* error codes see the file 'errno.h' on your system.<br>
|
||||||
* <br>
|
* <br>
|
||||||
* 1: EBADF: Bad file descriptor.<br>
|
* 1: EBADF: Bad file descriptor.<br>
|
||||||
* 2: ENXIO: No such device or address.<br>
|
* 2: ENXIO: No such device or address.<br>
|
||||||
* 3: EBUSY: Device or resource busy.<br>
|
* 3: EBUSY: Device or resource busy.<br>
|
||||||
* 4: EINVAL: Invalid argument.<br>
|
* 4: EINVAL: Invalid argument.<br>
|
||||||
* 5: ETIMEDOUT: Connection timed out.<br>
|
* 5: ETIMEDOUT: Connection timed out.<br>
|
||||||
* 6: EIO: I/O error.<br>
|
* 6: EIO: I/O error.<br>
|
||||||
* 7: ENOMEM: Not enough memory.<br>
|
* 7: ENOMEM: Not enough memory.<br>
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
* @return the system error code or 100000 if no mapping has been found.
|
* @return the system error code or 100000 if no mapping has been found.
|
||||||
*/
|
*/
|
||||||
private static native int usb_error_no(int value);
|
private static native int usb_error_no(int value);
|
||||||
|
|
||||||
static {
|
static {
|
||||||
Native.load("com.github.boukefalos", "jlibusb");
|
Native.load("com.github.boukefalos", "jlibusb");
|
||||||
|
|
||||||
// define the error codes
|
// define the error codes
|
||||||
ERROR_SUCCESS = 0;
|
ERROR_SUCCESS = 0;
|
||||||
ERROR_BAD_FILE_DESCRIPTOR = -usb_error_no(1);
|
ERROR_BAD_FILE_DESCRIPTOR = -usb_error_no(1);
|
||||||
ERROR_NO_SUCH_DEVICE_OR_ADDRESS = -usb_error_no(2);
|
ERROR_NO_SUCH_DEVICE_OR_ADDRESS = -usb_error_no(2);
|
||||||
ERROR_BUSY = -usb_error_no(3);
|
ERROR_BUSY = -usb_error_no(3);
|
||||||
ERROR_INVALID_PARAMETER = -usb_error_no(4);
|
ERROR_INVALID_PARAMETER = -usb_error_no(4);
|
||||||
ERROR_TIMEDOUT = -usb_error_no(5);
|
ERROR_TIMEDOUT = -usb_error_no(5);
|
||||||
ERROR_IO_ERROR = -usb_error_no(6);
|
ERROR_IO_ERROR = -usb_error_no(6);
|
||||||
ERROR_NOT_ENOUGH_MEMORY = -usb_error_no(7);
|
ERROR_NOT_ENOUGH_MEMORY = -usb_error_no(7);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -19,300 +19,300 @@ import ch.ntb.usb.logger.LogUtil;
|
|||||||
*/
|
*/
|
||||||
public class USB {
|
public class USB {
|
||||||
|
|
||||||
// Standard requests (USB spec 9.4)
|
// Standard requests (USB spec 9.4)
|
||||||
/**
|
/**
|
||||||
* This request returns status for the specified recipient (USB spec 9.4.5).
|
* This request returns status for the specified recipient (USB spec 9.4.5).
|
||||||
*
|
*
|
||||||
* @see ch.ntb.usb.Device#controlMsg(int, int, int, int, byte[], int, int,
|
* @see ch.ntb.usb.Device#controlMsg(int, int, int, int, byte[], int, int,
|
||||||
* boolean)
|
* boolean)
|
||||||
*/
|
*/
|
||||||
public static final int REQ_GET_STATUS = 0x00;
|
public static final int REQ_GET_STATUS = 0x00;
|
||||||
/**
|
/**
|
||||||
* This request is used to clear or disable a specific feature (USB spec
|
* This request is used to clear or disable a specific feature (USB spec
|
||||||
* 9.4.1).
|
* 9.4.1).
|
||||||
*
|
*
|
||||||
* @see ch.ntb.usb.Device#controlMsg(int, int, int, int, byte[], int, int,
|
* @see ch.ntb.usb.Device#controlMsg(int, int, int, int, byte[], int, int,
|
||||||
* boolean)
|
* boolean)
|
||||||
*/
|
*/
|
||||||
public static final int REQ_CLEAR_FEATURE = 0x01;
|
public static final int REQ_CLEAR_FEATURE = 0x01;
|
||||||
// 0x02 is reserved
|
// 0x02 is reserved
|
||||||
/**
|
/**
|
||||||
* This request is used to set or enable a specific feature (USB spec
|
* This request is used to set or enable a specific feature (USB spec
|
||||||
* 9.4.9).
|
* 9.4.9).
|
||||||
*
|
*
|
||||||
* @see ch.ntb.usb.Device#controlMsg(int, int, int, int, byte[], int, int,
|
* @see ch.ntb.usb.Device#controlMsg(int, int, int, int, byte[], int, int,
|
||||||
* boolean)
|
* boolean)
|
||||||
*/
|
*/
|
||||||
public static final int REQ_SET_FEATURE = 0x03;
|
public static final int REQ_SET_FEATURE = 0x03;
|
||||||
// 0x04 is reserved
|
// 0x04 is reserved
|
||||||
/**
|
/**
|
||||||
* This request sets the device address for all future device accesses (USB
|
* This request sets the device address for all future device accesses (USB
|
||||||
* spec 9.4.6).
|
* spec 9.4.6).
|
||||||
*
|
*
|
||||||
* @see ch.ntb.usb.Device#controlMsg(int, int, int, int, byte[], int, int,
|
* @see ch.ntb.usb.Device#controlMsg(int, int, int, int, byte[], int, int,
|
||||||
* boolean)
|
* boolean)
|
||||||
*/
|
*/
|
||||||
public static final int REQ_SET_ADDRESS = 0x05;
|
public static final int REQ_SET_ADDRESS = 0x05;
|
||||||
/**
|
/**
|
||||||
* This request returns the specified descriptor if the descriptor exists
|
* This request returns the specified descriptor if the descriptor exists
|
||||||
* (USB spec 9.4.3).
|
* (USB spec 9.4.3).
|
||||||
*
|
*
|
||||||
* @see ch.ntb.usb.Device#controlMsg(int, int, int, int, byte[], int, int,
|
* @see ch.ntb.usb.Device#controlMsg(int, int, int, int, byte[], int, int,
|
||||||
* boolean)
|
* boolean)
|
||||||
*/
|
*/
|
||||||
public static final int REQ_GET_DESCRIPTOR = 0x06;
|
public static final int REQ_GET_DESCRIPTOR = 0x06;
|
||||||
/**
|
/**
|
||||||
* This request is optional and may be used to update existing descriptors
|
* This request is optional and may be used to update existing descriptors
|
||||||
* or new descriptors may be added (USB spec 9.4.8).
|
* or new descriptors may be added (USB spec 9.4.8).
|
||||||
*
|
*
|
||||||
* @see ch.ntb.usb.Device#controlMsg(int, int, int, int, byte[], int, int,
|
* @see ch.ntb.usb.Device#controlMsg(int, int, int, int, byte[], int, int,
|
||||||
* boolean)
|
* boolean)
|
||||||
*/
|
*/
|
||||||
public static final int REQ_SET_DESCRIPTOR = 0x07;
|
public static final int REQ_SET_DESCRIPTOR = 0x07;
|
||||||
/**
|
/**
|
||||||
* This request returns the current device configuration value (USB spec
|
* This request returns the current device configuration value (USB spec
|
||||||
* 9.4.2).
|
* 9.4.2).
|
||||||
*
|
*
|
||||||
* @see ch.ntb.usb.Device#controlMsg(int, int, int, int, byte[], int, int,
|
* @see ch.ntb.usb.Device#controlMsg(int, int, int, int, byte[], int, int,
|
||||||
* boolean)
|
* boolean)
|
||||||
*/
|
*/
|
||||||
public static final int REQ_GET_CONFIGURATION = 0x08;
|
public static final int REQ_GET_CONFIGURATION = 0x08;
|
||||||
/**
|
/**
|
||||||
* This request sets the device configuration (USB spec 9.4.7).
|
* This request sets the device configuration (USB spec 9.4.7).
|
||||||
*
|
*
|
||||||
* @see ch.ntb.usb.Device#controlMsg(int, int, int, int, byte[], int, int,
|
* @see ch.ntb.usb.Device#controlMsg(int, int, int, int, byte[], int, int,
|
||||||
* boolean)
|
* boolean)
|
||||||
*/
|
*/
|
||||||
public static final int REQ_SET_CONFIGURATION = 0x09;
|
public static final int REQ_SET_CONFIGURATION = 0x09;
|
||||||
/**
|
/**
|
||||||
* This request returns the selected alternate setting for the specified
|
* This request returns the selected alternate setting for the specified
|
||||||
* interface (USB spec 9.4.4).
|
* interface (USB spec 9.4.4).
|
||||||
*
|
*
|
||||||
* @see ch.ntb.usb.Device#controlMsg(int, int, int, int, byte[], int, int,
|
* @see ch.ntb.usb.Device#controlMsg(int, int, int, int, byte[], int, int,
|
||||||
* boolean)
|
* boolean)
|
||||||
*/
|
*/
|
||||||
public static final int REQ_GET_INTERFACE = 0x0A;
|
public static final int REQ_GET_INTERFACE = 0x0A;
|
||||||
/**
|
/**
|
||||||
* This request allows the host to select an alternate setting for the
|
* This request allows the host to select an alternate setting for the
|
||||||
* specified interface (USB spec 9.4.10).
|
* specified interface (USB spec 9.4.10).
|
||||||
*
|
*
|
||||||
* @see ch.ntb.usb.Device#controlMsg(int, int, int, int, byte[], int, int,
|
* @see ch.ntb.usb.Device#controlMsg(int, int, int, int, byte[], int, int,
|
||||||
* boolean)
|
* boolean)
|
||||||
*/
|
*/
|
||||||
public static final int REQ_SET_INTERFACE = 0x0B;
|
public static final int REQ_SET_INTERFACE = 0x0B;
|
||||||
/**
|
/**
|
||||||
* This request is used to set and then report an endpoint<6E>s synchronization
|
* This request is used to set and then report an endpoint<6E>s synchronization
|
||||||
* frame (USB spec 9.4.11).
|
* frame (USB spec 9.4.11).
|
||||||
*
|
*
|
||||||
* @see ch.ntb.usb.Device#controlMsg(int, int, int, int, byte[], int, int,
|
* @see ch.ntb.usb.Device#controlMsg(int, int, int, int, byte[], int, int,
|
||||||
* boolean)
|
* boolean)
|
||||||
*/
|
*/
|
||||||
public static final int REQ_SYNCH_FRAME = 0x0C;
|
public static final int REQ_SYNCH_FRAME = 0x0C;
|
||||||
|
|
||||||
// data transfer direction (USB spec 9.3)
|
// data transfer direction (USB spec 9.3)
|
||||||
/**
|
/**
|
||||||
* Identifies the direction of data transfer in the second phase of the
|
* Identifies the direction of data transfer in the second phase of the
|
||||||
* control transfer.<br>
|
* control transfer.<br>
|
||||||
* The state of the Direction bit is ignored if the wLength field is zero,
|
* The state of the Direction bit is ignored if the wLength field is zero,
|
||||||
* signifying there is no Data stage.<br>
|
* signifying there is no Data stage.<br>
|
||||||
* Specifies bit 7 of bmRequestType.
|
* Specifies bit 7 of bmRequestType.
|
||||||
*
|
*
|
||||||
* @see ch.ntb.usb.Device#controlMsg(int, int, int, int, byte[], int, int,
|
* @see ch.ntb.usb.Device#controlMsg(int, int, int, int, byte[], int, int,
|
||||||
* boolean)
|
* boolean)
|
||||||
*/
|
*/
|
||||||
public static final int REQ_TYPE_DIR_HOST_TO_DEVICE = (0x00 << 7),
|
public static final int REQ_TYPE_DIR_HOST_TO_DEVICE = (0x00 << 7),
|
||||||
REQ_TYPE_DIR_DEVICE_TO_HOST = (0x01 << 7);
|
REQ_TYPE_DIR_DEVICE_TO_HOST = (0x01 << 7);
|
||||||
|
|
||||||
// request types (USB spec 9.3)
|
// request types (USB spec 9.3)
|
||||||
/**
|
/**
|
||||||
* Specifies the type of the request.<br>
|
* Specifies the type of the request.<br>
|
||||||
* Specifies bits 6..5 of bmRequestType.
|
* Specifies bits 6..5 of bmRequestType.
|
||||||
*
|
*
|
||||||
* @see ch.ntb.usb.Device#controlMsg(int, int, int, int, byte[], int, int,
|
* @see ch.ntb.usb.Device#controlMsg(int, int, int, int, byte[], int, int,
|
||||||
* boolean)
|
* boolean)
|
||||||
*/
|
*/
|
||||||
public static final int REQ_TYPE_TYPE_STANDARD = (0x00 << 5),
|
public static final int REQ_TYPE_TYPE_STANDARD = (0x00 << 5),
|
||||||
REQ_TYPE_TYPE_CLASS = (0x01 << 5),
|
REQ_TYPE_TYPE_CLASS = (0x01 << 5),
|
||||||
REQ_TYPE_TYPE_VENDOR = (0x02 << 5),
|
REQ_TYPE_TYPE_VENDOR = (0x02 << 5),
|
||||||
REQ_TYPE_TYPE_RESERVED = (0x03 << 5);
|
REQ_TYPE_TYPE_RESERVED = (0x03 << 5);
|
||||||
|
|
||||||
// request recipient (USB spec 9.3)
|
// request recipient (USB spec 9.3)
|
||||||
/**
|
/**
|
||||||
* Specifies the intended recipient of the request.<br>
|
* Specifies the intended recipient of the request.<br>
|
||||||
* Requests may be directed to the device, an interface on the device, or a
|
* Requests may be directed to the device, an interface on the device, or a
|
||||||
* specific endpoint on a device. When an interface or endpoint is
|
* specific endpoint on a device. When an interface or endpoint is
|
||||||
* specified, the wIndex field identifies the interface or endpoint.<br>
|
* specified, the wIndex field identifies the interface or endpoint.<br>
|
||||||
* Specifies bits 4..0 of bmRequestType.
|
* Specifies bits 4..0 of bmRequestType.
|
||||||
*
|
*
|
||||||
* @see ch.ntb.usb.Device#controlMsg(int, int, int, int, byte[], int, int,
|
* @see ch.ntb.usb.Device#controlMsg(int, int, int, int, byte[], int, int,
|
||||||
* boolean)
|
* boolean)
|
||||||
*/
|
*/
|
||||||
public static final int REQ_TYPE_RECIP_DEVICE = 0x00,
|
public static final int REQ_TYPE_RECIP_DEVICE = 0x00,
|
||||||
REQ_TYPE_RECIP_INTERFACE = 0x01, REQ_TYPE_RECIP_ENDPOINT = 0x02,
|
REQ_TYPE_RECIP_INTERFACE = 0x01, REQ_TYPE_RECIP_ENDPOINT = 0x02,
|
||||||
REQ_TYPE_RECIP_OTHER = 0x03;
|
REQ_TYPE_RECIP_OTHER = 0x03;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The maximum packet size of a bulk transfer when operating in highspeed
|
* The maximum packet size of a bulk transfer when operating in highspeed
|
||||||
* (480 MB/s) mode.
|
* (480 MB/s) mode.
|
||||||
*/
|
*/
|
||||||
public static int HIGHSPEED_MAX_BULK_PACKET_SIZE = 512;
|
public static int HIGHSPEED_MAX_BULK_PACKET_SIZE = 512;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The maximum packet size of a bulk transfer when operating in fullspeed
|
* The maximum packet size of a bulk transfer when operating in fullspeed
|
||||||
* (12 MB/s) mode.
|
* (12 MB/s) mode.
|
||||||
*/
|
*/
|
||||||
public static int FULLSPEED_MAX_BULK_PACKET_SIZE = 64;
|
public static int FULLSPEED_MAX_BULK_PACKET_SIZE = 64;
|
||||||
|
|
||||||
private static final Logger logger = LogUtil.getLogger("ch.ntb.usb");
|
private static final Logger logger = LogUtil.getLogger("ch.ntb.usb");
|
||||||
|
|
||||||
private static LinkedList<Device> devices = new LinkedList<Device>();
|
private static LinkedList<Device> devices = new LinkedList<Device>();
|
||||||
|
|
||||||
private static boolean initUSBDone = false;
|
private static boolean initUSBDone = false;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a new device an register it in a device list. If the device is
|
* Create a new device an register it in a device list. If the device is
|
||||||
* already registered, a reference to it will be returned.<br>
|
* already registered, a reference to it will be returned.<br>
|
||||||
* After resetting or re-attaching a device the busName and filename may
|
* After resetting or re-attaching a device the busName and filename may
|
||||||
* change. You can unregister the current device instance (see
|
* change. You can unregister the current device instance (see
|
||||||
* {@link #unregisterDevice(Device)}) and get a new instance with the
|
* {@link #unregisterDevice(Device)}) and get a new instance with the
|
||||||
* updated bus and filename.
|
* updated bus and filename.
|
||||||
*
|
*
|
||||||
* @param idVendor
|
* @param idVendor
|
||||||
* the vendor id of the USB device
|
* the vendor id of the USB device
|
||||||
* @param idProduct
|
* @param idProduct
|
||||||
* the product id of the USB device
|
* the product id of the USB device
|
||||||
* @param busName
|
* @param busName
|
||||||
* optional name of the bus which can be used to distinguish
|
* optional name of the bus which can be used to distinguish
|
||||||
* multiple devices with the same vendor and product id.<br>
|
* multiple devices with the same vendor and product id.<br>
|
||||||
* see {@link Usb_Bus#getDirname()}
|
* see {@link Usb_Bus#getDirname()}
|
||||||
* @param filename
|
* @param filename
|
||||||
* optional filename which can be used to distinguish multiple
|
* optional filename which can be used to distinguish multiple
|
||||||
* devices with the same vendor and product id.<br>
|
* devices with the same vendor and product id.<br>
|
||||||
* see {@link Usb_Device#getFilename()}
|
* see {@link Usb_Device#getFilename()}
|
||||||
* @return a newly created device or an already registered device
|
* @return a newly created device or an already registered device
|
||||||
*/
|
*/
|
||||||
public static Device getDevice(short idVendor, short idProduct,
|
public static Device getDevice(short idVendor, short idProduct,
|
||||||
String busName, String filename) {
|
String busName, String filename) {
|
||||||
|
|
||||||
// check if this device is already registered
|
// check if this device is already registered
|
||||||
Device dev = getRegisteredDevice(idVendor, idProduct, busName, filename);
|
Device dev = getRegisteredDevice(idVendor, idProduct, busName, filename);
|
||||||
if (dev != null) {
|
if (dev != null) {
|
||||||
logger.info("return already registered device: " + dev);
|
logger.info("return already registered device: " + dev);
|
||||||
return dev;
|
return dev;
|
||||||
}
|
}
|
||||||
dev = new Device(idVendor, idProduct, busName, filename);
|
dev = new Device(idVendor, idProduct, busName, filename);
|
||||||
logger.info("create new device: " + dev);
|
logger.info("create new device: " + dev);
|
||||||
devices.add(dev);
|
devices.add(dev);
|
||||||
return dev;
|
return dev;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* See {@link #getDevice(short, short, String, String)}. The parameter
|
* See {@link #getDevice(short, short, String, String)}. The parameter
|
||||||
* <code>filename</code> and <code>busName</code>is set to null.
|
* <code>filename</code> and <code>busName</code>is set to null.
|
||||||
*
|
*
|
||||||
* @param idVendor
|
* @param idVendor
|
||||||
* @param idProduct
|
* @param idProduct
|
||||||
* @return a newly created device or an already registered device
|
* @return a newly created device or an already registered device
|
||||||
*/
|
*/
|
||||||
public static Device getDevice(short idVendor, short idProduct) {
|
public static Device getDevice(short idVendor, short idProduct) {
|
||||||
return getDevice(idVendor, idProduct, null, null);
|
return getDevice(idVendor, idProduct, null, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Unregister a registered device.
|
* Unregister a registered device.
|
||||||
*
|
*
|
||||||
* @param dev
|
* @param dev
|
||||||
* the device to unregister
|
* the device to unregister
|
||||||
* @return true if the device has been removed, else false
|
* @return true if the device has been removed, else false
|
||||||
*/
|
*/
|
||||||
public static boolean unregisterDevice(Device dev) {
|
public static boolean unregisterDevice(Device dev) {
|
||||||
return devices.remove(dev);
|
return devices.remove(dev);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get an already registered device or null if the device does not exist.<br>
|
* Get an already registered device or null if the device does not exist.<br>
|
||||||
* To uniquely identify a device bus and filename should be set. If only one
|
* To uniquely identify a device bus and filename should be set. If only one
|
||||||
* of those is set the first device matching the criteria is returned.
|
* of those is set the first device matching the criteria is returned.
|
||||||
*
|
*
|
||||||
* @param idVendor
|
* @param idVendor
|
||||||
* the vendor id of the USB device
|
* the vendor id of the USB device
|
||||||
* @param idProduct
|
* @param idProduct
|
||||||
* the product id of the USB device
|
* the product id of the USB device
|
||||||
* @param busName
|
* @param busName
|
||||||
* the name of the bus which can be used to distinguish multiple
|
* the name of the bus which can be used to distinguish multiple
|
||||||
* devices with the same vendor and product id.<br>
|
* devices with the same vendor and product id.<br>
|
||||||
* see {@link Usb_Bus#getDirname()}
|
* see {@link Usb_Bus#getDirname()}
|
||||||
* @param filename
|
* @param filename
|
||||||
* an optional filename which can be used to distinguish multiple
|
* an optional filename which can be used to distinguish multiple
|
||||||
* devices with the same vendor and product id. see
|
* devices with the same vendor and product id. see
|
||||||
* {@link Usb_Device#getFilename()}
|
* {@link Usb_Device#getFilename()}
|
||||||
*
|
*
|
||||||
* @return the device or null
|
* @return the device or null
|
||||||
*/
|
*/
|
||||||
private static Device getRegisteredDevice(short idVendor, short idProduct,
|
private static Device getRegisteredDevice(short idVendor, short idProduct,
|
||||||
String busName, String filename) {
|
String busName, String filename) {
|
||||||
for (Iterator<Device> iter = devices.iterator(); iter.hasNext();) {
|
for (Iterator<Device> iter = devices.iterator(); iter.hasNext();) {
|
||||||
Device dev = iter.next();
|
Device dev = iter.next();
|
||||||
// bus and filename
|
// bus and filename
|
||||||
if (busName != null && filename != null) {
|
if (busName != null && filename != null) {
|
||||||
if (busName.compareTo(dev.getBusName() == null ? "" : dev
|
if (busName.compareTo(dev.getBusName() == null ? "" : dev
|
||||||
.getBusName()) == 0
|
.getBusName()) == 0
|
||||||
&& filename.compareTo(dev.getFilename() == null ? ""
|
&& filename.compareTo(dev.getFilename() == null ? ""
|
||||||
: dev.getFilename()) == 0
|
: dev.getFilename()) == 0
|
||||||
&& dev.getIdVendor() == idVendor
|
&& dev.getIdVendor() == idVendor
|
||||||
&& dev.getIdProduct() == idProduct) {
|
&& dev.getIdProduct() == idProduct) {
|
||||||
return dev;
|
return dev;
|
||||||
}
|
}
|
||||||
} else if (filename != null) {
|
} else if (filename != null) {
|
||||||
if (filename.compareTo(dev.getFilename() == null ? "" : dev
|
if (filename.compareTo(dev.getFilename() == null ? "" : dev
|
||||||
.getFilename()) == 0
|
.getFilename()) == 0
|
||||||
&& dev.getIdVendor() == idVendor
|
&& dev.getIdVendor() == idVendor
|
||||||
&& dev.getIdProduct() == idProduct) {
|
&& dev.getIdProduct() == idProduct) {
|
||||||
return dev;
|
return dev;
|
||||||
}
|
}
|
||||||
} else if (busName != null) {
|
} else if (busName != null) {
|
||||||
if (busName.compareTo(dev.getBusName() == null ? "" : dev
|
if (busName.compareTo(dev.getBusName() == null ? "" : dev
|
||||||
.getBusName()) == 0
|
.getBusName()) == 0
|
||||||
&& dev.getIdVendor() == idVendor
|
&& dev.getIdVendor() == idVendor
|
||||||
&& dev.getIdProduct() == idProduct) {
|
&& dev.getIdProduct() == idProduct) {
|
||||||
return dev;
|
return dev;
|
||||||
}
|
}
|
||||||
} else if (dev.getIdVendor() == idVendor
|
} else if (dev.getIdVendor() == idVendor
|
||||||
&& dev.getIdProduct() == idProduct) {
|
&& dev.getIdProduct() == idProduct) {
|
||||||
return dev;
|
return dev;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the root {@link Usb_Bus} element.
|
* Returns the root {@link Usb_Bus} element.
|
||||||
*
|
*
|
||||||
* @return the root {@link Usb_Bus} element
|
* @return the root {@link Usb_Bus} element
|
||||||
* @throws USBException
|
* @throws USBException
|
||||||
*/
|
*/
|
||||||
public static Usb_Bus getBus() throws USBException {
|
public static Usb_Bus getBus() throws USBException {
|
||||||
if (!initUSBDone) {
|
if (!initUSBDone) {
|
||||||
init();
|
init();
|
||||||
}
|
}
|
||||||
LibusbJava.usb_find_busses();
|
LibusbJava.usb_find_busses();
|
||||||
LibusbJava.usb_find_devices();
|
LibusbJava.usb_find_devices();
|
||||||
|
|
||||||
Usb_Bus bus = LibusbJava.usb_get_busses();
|
Usb_Bus bus = LibusbJava.usb_get_busses();
|
||||||
if (bus == null) {
|
if (bus == null) {
|
||||||
throw new USBException("LibusbJava.usb_get_busses(): "
|
throw new USBException("LibusbJava.usb_get_busses(): "
|
||||||
+ LibusbJava.usb_strerror());
|
+ LibusbJava.usb_strerror());
|
||||||
}
|
}
|
||||||
return bus;
|
return bus;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Explicitly calls {@link LibusbJava#usb_init()}. Note that you don't need
|
* Explicitly calls {@link LibusbJava#usb_init()}. Note that you don't need
|
||||||
* to call this procedure as it is called implicitly when creating a new
|
* to call this procedure as it is called implicitly when creating a new
|
||||||
* device with {@link USB#getDevice(short, short, String, String)}.
|
* device with {@link USB#getDevice(short, short, String, String)}.
|
||||||
*/
|
*/
|
||||||
public static void init() {
|
public static void init() {
|
||||||
LibusbJava.usb_init();
|
LibusbJava.usb_init();
|
||||||
initUSBDone = true;
|
initUSBDone = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,13 +11,13 @@ import java.io.IOException;
|
|||||||
|
|
||||||
public class USBException extends IOException {
|
public class USBException extends IOException {
|
||||||
|
|
||||||
public USBException(String string) {
|
public USBException(String string) {
|
||||||
super(string);
|
super(string);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
private static final long serialVersionUID = 1690857437804284710L;
|
private static final long serialVersionUID = 1690857437804284710L;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,13 +9,13 @@ package ch.ntb.usb;
|
|||||||
|
|
||||||
public class USBTimeoutException extends USBException {
|
public class USBTimeoutException extends USBException {
|
||||||
|
|
||||||
public USBTimeoutException(String string) {
|
public USBTimeoutException(String string) {
|
||||||
super(string);
|
super(string);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
private static final long serialVersionUID = -1065328371159778249L;
|
private static final long serialVersionUID = -1065328371159778249L;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,72 +15,72 @@ package ch.ntb.usb;
|
|||||||
*/
|
*/
|
||||||
public class Usb_Bus {
|
public class Usb_Bus {
|
||||||
|
|
||||||
private Usb_Bus next, prev;
|
private Usb_Bus next, prev;
|
||||||
|
|
||||||
private String dirname;
|
private String dirname;
|
||||||
|
|
||||||
private Usb_Device devices;
|
private Usb_Device devices;
|
||||||
|
|
||||||
private long location;
|
private long location;
|
||||||
|
|
||||||
private Usb_Device root_dev;
|
private Usb_Device root_dev;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the first device ojects of the devices linked list.<br>
|
* Get the first device ojects of the devices linked list.<br>
|
||||||
*
|
*
|
||||||
* @return the first device ojects of the devices linked list or null
|
* @return the first device ojects of the devices linked list or null
|
||||||
*/
|
*/
|
||||||
public Usb_Device getDevices() {
|
public Usb_Device getDevices() {
|
||||||
return devices;
|
return devices;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the systems String representation of the bus.<br>
|
* Returns the systems String representation of the bus.<br>
|
||||||
*
|
*
|
||||||
* @return the systems String representation of the bus
|
* @return the systems String representation of the bus
|
||||||
*/
|
*/
|
||||||
public String getDirname() {
|
public String getDirname() {
|
||||||
return dirname;
|
return dirname;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the next bus object.<br>
|
* Returns the next bus object.<br>
|
||||||
*
|
*
|
||||||
* @return Returns the next bus object or null
|
* @return Returns the next bus object or null
|
||||||
*/
|
*/
|
||||||
public Usb_Bus getNext() {
|
public Usb_Bus getNext() {
|
||||||
return next;
|
return next;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the previous bus object.<br>
|
* Returns the previous bus object.<br>
|
||||||
*
|
*
|
||||||
* @return Returns the previous bus object or null
|
* @return Returns the previous bus object or null
|
||||||
*/
|
*/
|
||||||
public Usb_Bus getPrev() {
|
public Usb_Bus getPrev() {
|
||||||
return prev;
|
return prev;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the root device of this bus.<br>
|
* Get the root device of this bus.<br>
|
||||||
*
|
*
|
||||||
* @return the root device oject or null
|
* @return the root device oject or null
|
||||||
*/
|
*/
|
||||||
public Usb_Device getRootDev() {
|
public Usb_Device getRootDev() {
|
||||||
return root_dev;
|
return root_dev;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the location in the USB bus linked list.<br>
|
* Returns the location in the USB bus linked list.<br>
|
||||||
*
|
*
|
||||||
* @return the location in the USB bus linked list
|
* @return the location in the USB bus linked list
|
||||||
*/
|
*/
|
||||||
public long getLocation() {
|
public long getLocation() {
|
||||||
return location;
|
return location;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "Usb_Bus " + dirname;
|
return "Usb_Bus " + dirname;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -18,122 +18,122 @@ package ch.ntb.usb;
|
|||||||
*/
|
*/
|
||||||
public class Usb_Config_Descriptor extends Usb_Descriptor {
|
public class Usb_Config_Descriptor extends Usb_Descriptor {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Maximum number of configurations per device
|
* Maximum number of configurations per device
|
||||||
*/
|
*/
|
||||||
public static final int USB_MAXCONFIG = 8;
|
public static final int USB_MAXCONFIG = 8;
|
||||||
|
|
||||||
private short wTotalLength;
|
private short wTotalLength;
|
||||||
|
|
||||||
private byte bNumInterfaces;
|
private byte bNumInterfaces;
|
||||||
|
|
||||||
private byte bConfigurationValue;
|
private byte bConfigurationValue;
|
||||||
|
|
||||||
private byte iConfiguration;
|
private byte iConfiguration;
|
||||||
|
|
||||||
private byte bmAttributes;
|
private byte bmAttributes;
|
||||||
|
|
||||||
private byte MaxPower;
|
private byte MaxPower;
|
||||||
|
|
||||||
private Usb_Interface[] interface_;
|
private Usb_Interface[] interface_;
|
||||||
|
|
||||||
private byte[] extra; /* Extra descriptors */
|
private byte[] extra; /* Extra descriptors */
|
||||||
|
|
||||||
private int extralen;
|
private int extralen;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the value to use as an argument to select this configuration ({@link LibusbJava#usb_set_configuration(long, int)}).
|
* Returns the value to use as an argument to select this configuration ({@link LibusbJava#usb_set_configuration(long, int)}).
|
||||||
*
|
*
|
||||||
* @return the value to use as an argument to select this configuration
|
* @return the value to use as an argument to select this configuration
|
||||||
*/
|
*/
|
||||||
public byte getBConfigurationValue() {
|
public byte getBConfigurationValue() {
|
||||||
return bConfigurationValue;
|
return bConfigurationValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the power parameters for this configuration.<br>
|
* Returns the power parameters for this configuration.<br>
|
||||||
* <br>
|
* <br>
|
||||||
* Bit 7: Reserved, set to 1 (USB 1.0 Bus Powered)<br>
|
* Bit 7: Reserved, set to 1 (USB 1.0 Bus Powered)<br>
|
||||||
* Bit 6: Self Powered<br>
|
* Bit 6: Self Powered<br>
|
||||||
* Bit 5: Remote Wakeup<br>
|
* Bit 5: Remote Wakeup<br>
|
||||||
* Bit 4..0: Reserved, set to 0
|
* Bit 4..0: Reserved, set to 0
|
||||||
*
|
*
|
||||||
* @return the power parameters for this configuration
|
* @return the power parameters for this configuration
|
||||||
*/
|
*/
|
||||||
public byte getBmAttributes() {
|
public byte getBmAttributes() {
|
||||||
return bmAttributes;
|
return bmAttributes;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the number of interfaces.<br>
|
* Returns the number of interfaces.<br>
|
||||||
*
|
*
|
||||||
* @return the number of interfaces
|
* @return the number of interfaces
|
||||||
*/
|
*/
|
||||||
public byte getBNumInterfaces() {
|
public byte getBNumInterfaces() {
|
||||||
return bNumInterfaces;
|
return bNumInterfaces;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the data of extra descriptor(s) if available.<br>
|
* Returns the data of extra descriptor(s) if available.<br>
|
||||||
*
|
*
|
||||||
* @return null or a byte array with the extra descriptor data
|
* @return null or a byte array with the extra descriptor data
|
||||||
*/
|
*/
|
||||||
public byte[] getExtra() {
|
public byte[] getExtra() {
|
||||||
return extra;
|
return extra;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the number of bytes of the extra descriptor.<br>
|
* Returns the number of bytes of the extra descriptor.<br>
|
||||||
*
|
*
|
||||||
* @return the number of bytes of the extra descriptor
|
* @return the number of bytes of the extra descriptor
|
||||||
*/
|
*/
|
||||||
public int getExtralen() {
|
public int getExtralen() {
|
||||||
return extralen;
|
return extralen;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the index of the String descriptor describing this configuration.<br>
|
* Returns the index of the String descriptor describing this configuration.<br>
|
||||||
*
|
*
|
||||||
* @return the index of the String descriptor
|
* @return the index of the String descriptor
|
||||||
*/
|
*/
|
||||||
public byte getIConfiguration() {
|
public byte getIConfiguration() {
|
||||||
return iConfiguration;
|
return iConfiguration;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the USB interface descriptors.<br>
|
* Returns the USB interface descriptors.<br>
|
||||||
*
|
*
|
||||||
* @return the USB interface descriptors
|
* @return the USB interface descriptors
|
||||||
*/
|
*/
|
||||||
public Usb_Interface[] getInterface() {
|
public Usb_Interface[] getInterface() {
|
||||||
return interface_;
|
return interface_;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the maximum power consumption in 2mA units.<br>
|
* Returns the maximum power consumption in 2mA units.<br>
|
||||||
*
|
*
|
||||||
* @return the maximum power consumption in 2mA units
|
* @return the maximum power consumption in 2mA units
|
||||||
*/
|
*/
|
||||||
public byte getMaxPower() {
|
public byte getMaxPower() {
|
||||||
return MaxPower;
|
return MaxPower;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the total length in bytes of all descriptors.<br>
|
* Returns the total length in bytes of all descriptors.<br>
|
||||||
* When the configuration descriptor is read, it returns the entire
|
* When the configuration descriptor is read, it returns the entire
|
||||||
* configuration hierarchy which includes all related interface and endpoint
|
* configuration hierarchy which includes all related interface and endpoint
|
||||||
* descriptors. The <code>wTotalLength</code> field reflects the number of
|
* descriptors. The <code>wTotalLength</code> field reflects the number of
|
||||||
* bytes in the hierarchy.
|
* bytes in the hierarchy.
|
||||||
*
|
*
|
||||||
* @return the total length in bytes of all descriptors
|
* @return the total length in bytes of all descriptors
|
||||||
*/
|
*/
|
||||||
public short getWTotalLength() {
|
public short getWTotalLength() {
|
||||||
return wTotalLength;
|
return wTotalLength;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "Usb_Config_Descriptor bNumInterfaces: 0x"
|
return "Usb_Config_Descriptor bNumInterfaces: 0x"
|
||||||
+ Integer.toHexString(bNumInterfaces);
|
+ Integer.toHexString(bNumInterfaces);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -13,47 +13,47 @@ package ch.ntb.usb;
|
|||||||
*/
|
*/
|
||||||
public class Usb_Descriptor {
|
public class Usb_Descriptor {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Descriptor types ({@link #bDescriptorType}).
|
* Descriptor types ({@link #bDescriptorType}).
|
||||||
*/
|
*/
|
||||||
public static final int USB_DT_DEVICE = 0x01, USB_DT_CONFIG = 0x02,
|
public static final int USB_DT_DEVICE = 0x01, USB_DT_CONFIG = 0x02,
|
||||||
USB_DT_STRING = 0x03, USB_DT_INTERFACE = 0x04,
|
USB_DT_STRING = 0x03, USB_DT_INTERFACE = 0x04,
|
||||||
USB_DT_ENDPOINT = 0x05;
|
USB_DT_ENDPOINT = 0x05;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Descriptor types ({@link #bDescriptorType}).
|
* Descriptor types ({@link #bDescriptorType}).
|
||||||
*/
|
*/
|
||||||
public static final int USB_DT_HID = 0x21, USB_DT_REPORT = 0x22,
|
public static final int USB_DT_HID = 0x21, USB_DT_REPORT = 0x22,
|
||||||
USB_DT_PHYSICAL = 0x23, USB_DT_HUB = 0x29;
|
USB_DT_PHYSICAL = 0x23, USB_DT_HUB = 0x29;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Descriptor sizes per descriptor type ({@link #bLength}).
|
* Descriptor sizes per descriptor type ({@link #bLength}).
|
||||||
*/
|
*/
|
||||||
public static final int USB_DT_DEVICE_SIZE = 18, USB_DT_CONFIG_SIZE = 9,
|
public static final int USB_DT_DEVICE_SIZE = 18, USB_DT_CONFIG_SIZE = 9,
|
||||||
USB_DT_INTERFACE_SIZE = 9, USB_DT_ENDPOINT_SIZE = 7,
|
USB_DT_INTERFACE_SIZE = 9, USB_DT_ENDPOINT_SIZE = 7,
|
||||||
USB_DT_ENDPOINT_AUDIO_SIZE = 9 /* Audio extension */,
|
USB_DT_ENDPOINT_AUDIO_SIZE = 9 /* Audio extension */,
|
||||||
USB_DT_HUB_NONVAR_SIZE = 7;
|
USB_DT_HUB_NONVAR_SIZE = 7;
|
||||||
|
|
||||||
private byte bLength;
|
private byte bLength;
|
||||||
|
|
||||||
private byte bDescriptorType;
|
private byte bDescriptorType;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the type of this descriptor.<br>
|
* Get the type of this descriptor.<br>
|
||||||
*
|
*
|
||||||
* @return the type of this descriptor
|
* @return the type of this descriptor
|
||||||
*/
|
*/
|
||||||
public byte getBDescriptorType() {
|
public byte getBDescriptorType() {
|
||||||
return bDescriptorType;
|
return bDescriptorType;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the size of this descriptor in bytes.<br>
|
* Get the size of this descriptor in bytes.<br>
|
||||||
*
|
*
|
||||||
* @return the size of this descriptor in bytes
|
* @return the size of this descriptor in bytes
|
||||||
*/
|
*/
|
||||||
public byte getBLength() {
|
public byte getBLength() {
|
||||||
return bLength;
|
return bLength;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,111 +15,111 @@ package ch.ntb.usb;
|
|||||||
*/
|
*/
|
||||||
public class Usb_Device {
|
public class Usb_Device {
|
||||||
|
|
||||||
private Usb_Device next, prev;
|
private Usb_Device next, prev;
|
||||||
|
|
||||||
private String filename;
|
private String filename;
|
||||||
|
|
||||||
private Usb_Bus bus;
|
private Usb_Bus bus;
|
||||||
|
|
||||||
private Usb_Device_Descriptor descriptor;
|
private Usb_Device_Descriptor descriptor;
|
||||||
|
|
||||||
private Usb_Config_Descriptor[] config;
|
private Usb_Config_Descriptor[] config;
|
||||||
|
|
||||||
private byte devnum;
|
private byte devnum;
|
||||||
|
|
||||||
private byte num_children;
|
private byte num_children;
|
||||||
|
|
||||||
private Usb_Device children;
|
private Usb_Device children;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The address of the device structure to be passed to usb_open. This value
|
* The address of the device structure to be passed to usb_open. This value
|
||||||
* is used only internally so we don't use getter or setter methods.
|
* is used only internally so we don't use getter or setter methods.
|
||||||
*/
|
*/
|
||||||
public long devStructAddr;
|
public long devStructAddr;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the reference to the bus to which this device is connected.<br>
|
* Returns the reference to the bus to which this device is connected.<br>
|
||||||
*
|
*
|
||||||
* @return the reference to the bus to which this device is connected
|
* @return the reference to the bus to which this device is connected
|
||||||
*/
|
*/
|
||||||
public Usb_Bus getBus() {
|
public Usb_Bus getBus() {
|
||||||
return bus;
|
return bus;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns a reference to the first child.<br>
|
* Returns a reference to the first child.<br>
|
||||||
*
|
*
|
||||||
* @return a reference to the first child
|
* @return a reference to the first child
|
||||||
*/
|
*/
|
||||||
public Usb_Device getChildren() {
|
public Usb_Device getChildren() {
|
||||||
return children;
|
return children;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the USB config descriptors.<br>
|
* Returns the USB config descriptors.<br>
|
||||||
*
|
*
|
||||||
* @return the USB config descriptors
|
* @return the USB config descriptors
|
||||||
*/
|
*/
|
||||||
public Usb_Config_Descriptor[] getConfig() {
|
public Usb_Config_Descriptor[] getConfig() {
|
||||||
return config;
|
return config;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the USB device descriptor.<br>
|
* Returns the USB device descriptor.<br>
|
||||||
*
|
*
|
||||||
* @return the USB device descriptor
|
* @return the USB device descriptor
|
||||||
*/
|
*/
|
||||||
public Usb_Device_Descriptor getDescriptor() {
|
public Usb_Device_Descriptor getDescriptor() {
|
||||||
return descriptor;
|
return descriptor;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the number assigned to this device.<br>
|
* Returns the number assigned to this device.<br>
|
||||||
*
|
*
|
||||||
* @return the number assigned to this device
|
* @return the number assigned to this device
|
||||||
*/
|
*/
|
||||||
public byte getDevnum() {
|
public byte getDevnum() {
|
||||||
return devnum;
|
return devnum;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the systems String representation.<br>
|
* Returns the systems String representation.<br>
|
||||||
*
|
*
|
||||||
* @return the systems String representation
|
* @return the systems String representation
|
||||||
*/
|
*/
|
||||||
public String getFilename() {
|
public String getFilename() {
|
||||||
return filename;
|
return filename;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the pointer to the next device.<br>
|
* Returns the pointer to the next device.<br>
|
||||||
*
|
*
|
||||||
* @return the pointer to the next device or null
|
* @return the pointer to the next device or null
|
||||||
*/
|
*/
|
||||||
public Usb_Device getNext() {
|
public Usb_Device getNext() {
|
||||||
return next;
|
return next;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the number of children of this device.<br>
|
* Returns the number of children of this device.<br>
|
||||||
*
|
*
|
||||||
* @return the number of children of this device
|
* @return the number of children of this device
|
||||||
*/
|
*/
|
||||||
public byte getNumChildren() {
|
public byte getNumChildren() {
|
||||||
return num_children;
|
return num_children;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the pointer to the previous device.<br>
|
* Returns the pointer to the previous device.<br>
|
||||||
*
|
*
|
||||||
* @return the pointer to the previous device or null
|
* @return the pointer to the previous device or null
|
||||||
*/
|
*/
|
||||||
public Usb_Device getPrev() {
|
public Usb_Device getPrev() {
|
||||||
return prev;
|
return prev;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "Usb_Device " + filename;
|
return "Usb_Device " + filename;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -18,173 +18,173 @@ package ch.ntb.usb;
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public class Usb_Device_Descriptor extends Usb_Descriptor {
|
public class Usb_Device_Descriptor extends Usb_Descriptor {
|
||||||
/**
|
/**
|
||||||
* Device and/or interface class codes.
|
* Device and/or interface class codes.
|
||||||
*/
|
*/
|
||||||
public static final int USB_CLASS_PER_INTERFACE = 0, USB_CLASS_AUDIO = 1,
|
public static final int USB_CLASS_PER_INTERFACE = 0, USB_CLASS_AUDIO = 1,
|
||||||
USB_CLASS_COMM = 2, USB_CLASS_HID = 3, USB_CLASS_PRINTER = 7,
|
USB_CLASS_COMM = 2, USB_CLASS_HID = 3, USB_CLASS_PRINTER = 7,
|
||||||
USB_CLASS_MASS_STORAGE = 8, USB_CLASS_HUB = 9, USB_CLASS_DATA = 10,
|
USB_CLASS_MASS_STORAGE = 8, USB_CLASS_HUB = 9, USB_CLASS_DATA = 10,
|
||||||
USB_CLASS_VENDOR_SPEC = 0xff;
|
USB_CLASS_VENDOR_SPEC = 0xff;
|
||||||
|
|
||||||
private short bcdUSB;
|
private short bcdUSB;
|
||||||
|
|
||||||
private byte bDeviceClass;
|
private byte bDeviceClass;
|
||||||
|
|
||||||
private byte bDeviceSubClass;
|
private byte bDeviceSubClass;
|
||||||
|
|
||||||
private byte bDeviceProtocol;
|
private byte bDeviceProtocol;
|
||||||
|
|
||||||
private byte bMaxPacketSize0;
|
private byte bMaxPacketSize0;
|
||||||
|
|
||||||
private short idVendor;
|
private short idVendor;
|
||||||
|
|
||||||
private short idProduct;
|
private short idProduct;
|
||||||
|
|
||||||
private short bcdDevice;
|
private short bcdDevice;
|
||||||
|
|
||||||
private byte iManufacturer;
|
private byte iManufacturer;
|
||||||
|
|
||||||
private byte iProduct;
|
private byte iProduct;
|
||||||
|
|
||||||
private byte iSerialNumber;
|
private byte iSerialNumber;
|
||||||
|
|
||||||
private byte bNumConfigurations;
|
private byte bNumConfigurations;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the device release number.<br>
|
* Returns the device release number.<br>
|
||||||
* Assigned by the manufacturer of the device.
|
* Assigned by the manufacturer of the device.
|
||||||
*
|
*
|
||||||
* @return the device release number
|
* @return the device release number
|
||||||
*/
|
*/
|
||||||
public short getBcdDevice() {
|
public short getBcdDevice() {
|
||||||
return bcdDevice;
|
return bcdDevice;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the USB specification number to which the device complies to.<br>
|
* Returns the USB specification number to which the device complies to.<br>
|
||||||
* This field reports the highest version of USB the device supports. The
|
* This field reports the highest version of USB the device supports. The
|
||||||
* value is in binary coded decimal with a format of 0xJJMN where JJ is the
|
* value is in binary coded decimal with a format of 0xJJMN where JJ is the
|
||||||
* major version number, M is the minor version number and N is the sub
|
* major version number, M is the minor version number and N is the sub
|
||||||
* minor version number.<br>
|
* minor version number.<br>
|
||||||
* Examples: USB 2.0 is reported as 0x0200, USB 1.1 as 0x0110 and USB 1.0 as
|
* Examples: USB 2.0 is reported as 0x0200, USB 1.1 as 0x0110 and USB 1.0 as
|
||||||
* 0x100
|
* 0x100
|
||||||
*
|
*
|
||||||
* @return the USB specification number to which the device complies to
|
* @return the USB specification number to which the device complies to
|
||||||
*/
|
*/
|
||||||
public short getBcdUSB() {
|
public short getBcdUSB() {
|
||||||
return bcdUSB;
|
return bcdUSB;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the class code (Assigned by <a
|
* Returns the class code (Assigned by <a
|
||||||
* href="http://www.usb.org">www.usb.org</a>)<br>
|
* href="http://www.usb.org">www.usb.org</a>)<br>
|
||||||
* If equal to zero, each interface specifies it's own class code. If equal
|
* If equal to zero, each interface specifies it's own class code. If equal
|
||||||
* to 0xFF, the class code is vendor specified. Otherwise the field is a
|
* to 0xFF, the class code is vendor specified. Otherwise the field is a
|
||||||
* valid class code.
|
* valid class code.
|
||||||
*
|
*
|
||||||
* @return the class code
|
* @return the class code
|
||||||
*/
|
*/
|
||||||
public byte getBDeviceClass() {
|
public byte getBDeviceClass() {
|
||||||
return bDeviceClass;
|
return bDeviceClass;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the protocol code (Assigned by <a
|
* Returns the protocol code (Assigned by <a
|
||||||
* href="http://www.usb.org">www.usb.org</a>)<br>
|
* href="http://www.usb.org">www.usb.org</a>)<br>
|
||||||
*
|
*
|
||||||
* @return the protocol code
|
* @return the protocol code
|
||||||
*/
|
*/
|
||||||
public byte getBDeviceProtocol() {
|
public byte getBDeviceProtocol() {
|
||||||
return bDeviceProtocol;
|
return bDeviceProtocol;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the subclass code (Assigned by <a
|
* Returns the subclass code (Assigned by <a
|
||||||
* href="http://www.usb.org">www.usb.org</a>)<br>
|
* href="http://www.usb.org">www.usb.org</a>)<br>
|
||||||
*
|
*
|
||||||
* @return the subclass code
|
* @return the subclass code
|
||||||
*/
|
*/
|
||||||
public byte getBDeviceSubClass() {
|
public byte getBDeviceSubClass() {
|
||||||
return bDeviceSubClass;
|
return bDeviceSubClass;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the maximum packet size for endpoint zero.<br>
|
* Returns the maximum packet size for endpoint zero.<br>
|
||||||
* Valid sizes are 8, 16, 32, 64.
|
* Valid sizes are 8, 16, 32, 64.
|
||||||
*
|
*
|
||||||
* @return the maximum packet size for endpoint zero
|
* @return the maximum packet size for endpoint zero
|
||||||
*/
|
*/
|
||||||
public byte getBMaxPacketSize0() {
|
public byte getBMaxPacketSize0() {
|
||||||
return bMaxPacketSize0;
|
return bMaxPacketSize0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the number of possible configurations supported at its current
|
* Returns the number of possible configurations supported at its current
|
||||||
* speed.<br>
|
* speed.<br>
|
||||||
*
|
*
|
||||||
* @return the number of possible configurations supported at its current
|
* @return the number of possible configurations supported at its current
|
||||||
* speed
|
* speed
|
||||||
*/
|
*/
|
||||||
public byte getBNumConfigurations() {
|
public byte getBNumConfigurations() {
|
||||||
return bNumConfigurations;
|
return bNumConfigurations;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the product ID (Assigned by <a
|
* Returns the product ID (Assigned by <a
|
||||||
* href="http://www.usb.org">www.usb.org</a>)<br>
|
* href="http://www.usb.org">www.usb.org</a>)<br>
|
||||||
*
|
*
|
||||||
* @return the product ID
|
* @return the product ID
|
||||||
*/
|
*/
|
||||||
public short getIdProduct() {
|
public short getIdProduct() {
|
||||||
return idProduct;
|
return idProduct;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the Vendor ID (Assigned by <a
|
* Returns the Vendor ID (Assigned by <a
|
||||||
* href="http://www.usb.org">www.usb.org</a>)<br>
|
* href="http://www.usb.org">www.usb.org</a>)<br>
|
||||||
*
|
*
|
||||||
* @return the Vendor ID
|
* @return the Vendor ID
|
||||||
*/
|
*/
|
||||||
public short getIdVendor() {
|
public short getIdVendor() {
|
||||||
return idVendor;
|
return idVendor;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the index of the manufacturer string descriptor.<br>
|
* Returns the index of the manufacturer string descriptor.<br>
|
||||||
* If this value is 0, no string descriptor is used.
|
* If this value is 0, no string descriptor is used.
|
||||||
*
|
*
|
||||||
* @return the index of the manufacturer string descriptor
|
* @return the index of the manufacturer string descriptor
|
||||||
*/
|
*/
|
||||||
public byte getIManufacturer() {
|
public byte getIManufacturer() {
|
||||||
return iManufacturer;
|
return iManufacturer;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the index of the product string descriptor.<br>
|
* Returns the index of the product string descriptor.<br>
|
||||||
* If this value is 0, no string descriptor is used.
|
* If this value is 0, no string descriptor is used.
|
||||||
*
|
*
|
||||||
* @return the index of the product string descriptor
|
* @return the index of the product string descriptor
|
||||||
*/
|
*/
|
||||||
public byte getIProduct() {
|
public byte getIProduct() {
|
||||||
return iProduct;
|
return iProduct;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the index of serial number string descriptor.<br>
|
* Returns the index of serial number string descriptor.<br>
|
||||||
* If this value is 0, no string descriptor is used.
|
* If this value is 0, no string descriptor is used.
|
||||||
*
|
*
|
||||||
* @return the index of serial number string descriptor
|
* @return the index of serial number string descriptor
|
||||||
*/
|
*/
|
||||||
public byte getISerialNumber() {
|
public byte getISerialNumber() {
|
||||||
return iSerialNumber;
|
return iSerialNumber;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
StringBuffer sb = new StringBuffer();
|
StringBuffer sb = new StringBuffer();
|
||||||
sb.append("Usb_Device_Descriptor idVendor: 0x"
|
sb.append("Usb_Device_Descriptor idVendor: 0x"
|
||||||
+ Integer.toHexString(idVendor & 0xFFFF) + ", idProduct: 0x"
|
+ Integer.toHexString(idVendor & 0xFFFF) + ", idProduct: 0x"
|
||||||
+ Integer.toHexString(idProduct & 0xFFFF));
|
+ Integer.toHexString(idProduct & 0xFFFF));
|
||||||
return sb.toString();
|
return sb.toString();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -22,137 +22,137 @@ package ch.ntb.usb;
|
|||||||
*/
|
*/
|
||||||
public class Usb_Endpoint_Descriptor extends Usb_Descriptor {
|
public class Usb_Endpoint_Descriptor extends Usb_Descriptor {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Maximum number of endpoints
|
* Maximum number of endpoints
|
||||||
*/
|
*/
|
||||||
public static final int USB_MAXENDPOINTS = 32;
|
public static final int USB_MAXENDPOINTS = 32;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Endpoint address mask (in bEndpointAddress).
|
* Endpoint address mask (in bEndpointAddress).
|
||||||
*/
|
*/
|
||||||
public static final int USB_ENDPOINT_ADDRESS_MASK = 0x0f,
|
public static final int USB_ENDPOINT_ADDRESS_MASK = 0x0f,
|
||||||
USB_ENDPOINT_DIR_MASK = 0x80;
|
USB_ENDPOINT_DIR_MASK = 0x80;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Endpoint type mask (in bmAttributes).
|
* Endpoint type mask (in bmAttributes).
|
||||||
*/
|
*/
|
||||||
public static final int USB_ENDPOINT_TYPE_MASK = 0x03;
|
public static final int USB_ENDPOINT_TYPE_MASK = 0x03;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Possible endpoint types (in bmAttributes).
|
* Possible endpoint types (in bmAttributes).
|
||||||
*/
|
*/
|
||||||
public static final int USB_ENDPOINT_TYPE_CONTROL = 0,
|
public static final int USB_ENDPOINT_TYPE_CONTROL = 0,
|
||||||
USB_ENDPOINT_TYPE_ISOCHRONOUS = 1, USB_ENDPOINT_TYPE_BULK = 2,
|
USB_ENDPOINT_TYPE_ISOCHRONOUS = 1, USB_ENDPOINT_TYPE_BULK = 2,
|
||||||
USB_ENDPOINT_TYPE_INTERRUPT = 3;
|
USB_ENDPOINT_TYPE_INTERRUPT = 3;
|
||||||
|
|
||||||
private byte bEndpointAddress;
|
private byte bEndpointAddress;
|
||||||
|
|
||||||
private byte bmAttributes;
|
private byte bmAttributes;
|
||||||
|
|
||||||
private short wMaxPacketSize;
|
private short wMaxPacketSize;
|
||||||
|
|
||||||
private byte bInterval;
|
private byte bInterval;
|
||||||
|
|
||||||
private byte bRefresh;
|
private byte bRefresh;
|
||||||
|
|
||||||
private byte bSynchAddress;
|
private byte bSynchAddress;
|
||||||
|
|
||||||
private byte[] extra; /* Extra descriptors */
|
private byte[] extra; /* Extra descriptors */
|
||||||
|
|
||||||
private int extralen;
|
private int extralen;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the endpoint address.<br>
|
* Returns the endpoint address.<br>
|
||||||
* <br>
|
* <br>
|
||||||
* Bits 3..0: Endpoint number <br>
|
* Bits 3..0: Endpoint number <br>
|
||||||
* Bits 6..4: Reserved. Set to zero <br>
|
* Bits 6..4: Reserved. Set to zero <br>
|
||||||
* Bit 7: Direction (host to device). 0 = OUT (send data from host to
|
* Bit 7: Direction (host to device). 0 = OUT (send data from host to
|
||||||
* device), 1 = IN (host receives data from device). Note: these values are
|
* device), 1 = IN (host receives data from device). Note: these values are
|
||||||
* ignored for control endpoints.<br>
|
* ignored for control endpoints.<br>
|
||||||
*
|
*
|
||||||
* @return the endpoint address
|
* @return the endpoint address
|
||||||
*/
|
*/
|
||||||
public byte getBEndpointAddress() {
|
public byte getBEndpointAddress() {
|
||||||
return bEndpointAddress;
|
return bEndpointAddress;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the intervall for polling endpoint data transfers.<br>
|
* Returns the intervall for polling endpoint data transfers.<br>
|
||||||
* Value in frame counts. Ignored for Bulk & Control eEndpoints. Isochronous
|
* Value in frame counts. Ignored for Bulk & Control eEndpoints. Isochronous
|
||||||
* endpoints must equal 1 and field may range from 1 to 255 for interrupt
|
* endpoints must equal 1 and field may range from 1 to 255 for interrupt
|
||||||
* endpoints.
|
* endpoints.
|
||||||
*
|
*
|
||||||
* @return the intervall for polling endpoint data transfers
|
* @return the intervall for polling endpoint data transfers
|
||||||
*/
|
*/
|
||||||
public byte getBInterval() {
|
public byte getBInterval() {
|
||||||
return bInterval;
|
return bInterval;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the attributes of this endpoint.<br>
|
* Returns the attributes of this endpoint.<br>
|
||||||
*
|
*
|
||||||
* Bits 1..0: Transfer Type (see <i>USB_ENDPOINT_TYPE_XXX</i>).<br>
|
* Bits 1..0: Transfer Type (see <i>USB_ENDPOINT_TYPE_XXX</i>).<br>
|
||||||
* Bits 7..2: Reserved.<br>
|
* Bits 7..2: Reserved.<br>
|
||||||
*
|
*
|
||||||
* <pre>
|
* <pre>
|
||||||
* If isochronous endpoint:
|
* If isochronous endpoint:
|
||||||
* Bits 3..2: Synchronisation type
|
* Bits 3..2: Synchronisation type
|
||||||
* 00 = No synchronisation
|
* 00 = No synchronisation
|
||||||
* 01 = Asynchronous
|
* 01 = Asynchronous
|
||||||
* 10 = Adaptive
|
* 10 = Adaptive
|
||||||
* 11 = Synchronous
|
* 11 = Synchronous
|
||||||
* Bits 5..4: Usage Type
|
* Bits 5..4: Usage Type
|
||||||
* 00 = Data endpoint
|
* 00 = Data endpoint
|
||||||
* 01 = Feedback endpoint
|
* 01 = Feedback endpoint
|
||||||
* 10 = Explicit feedback data endpoint
|
* 10 = Explicit feedback data endpoint
|
||||||
* 11 = Reserved
|
* 11 = Reserved
|
||||||
* </pre>
|
* </pre>
|
||||||
*
|
*
|
||||||
* @return the attributes of this endpoint
|
* @return the attributes of this endpoint
|
||||||
*/
|
*/
|
||||||
public byte getBmAttributes() {
|
public byte getBmAttributes() {
|
||||||
return bmAttributes;
|
return bmAttributes;
|
||||||
}
|
}
|
||||||
|
|
||||||
public byte getBRefresh() {
|
public byte getBRefresh() {
|
||||||
return bRefresh;
|
return bRefresh;
|
||||||
}
|
}
|
||||||
|
|
||||||
public byte getBSynchAddress() {
|
public byte getBSynchAddress() {
|
||||||
return bSynchAddress;
|
return bSynchAddress;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the data of extra descriptor(s) if available.<br>
|
* Returns the data of extra descriptor(s) if available.<br>
|
||||||
*
|
*
|
||||||
* @return null or a byte array with the extra descriptor data
|
* @return null or a byte array with the extra descriptor data
|
||||||
*/
|
*/
|
||||||
public byte[] getExtra() {
|
public byte[] getExtra() {
|
||||||
return extra;
|
return extra;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the number of bytes of the extra descriptor.<br>
|
* Returns the number of bytes of the extra descriptor.<br>
|
||||||
*
|
*
|
||||||
* @return the number of bytes of the extra descriptor
|
* @return the number of bytes of the extra descriptor
|
||||||
*/
|
*/
|
||||||
public int getExtralen() {
|
public int getExtralen() {
|
||||||
return extralen;
|
return extralen;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the maximum packet size of this endpoint is capable of sending or
|
* Returns the maximum packet size of this endpoint is capable of sending or
|
||||||
* receiving.<br>
|
* receiving.<br>
|
||||||
*
|
*
|
||||||
* @return the maximum packet size
|
* @return the maximum packet size
|
||||||
*/
|
*/
|
||||||
public short getWMaxPacketSize() {
|
public short getWMaxPacketSize() {
|
||||||
return wMaxPacketSize;
|
return wMaxPacketSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "Usb_Endpoint_Descriptor bEndpointAddress: 0x"
|
return "Usb_Endpoint_Descriptor bEndpointAddress: 0x"
|
||||||
+ Integer.toHexString(bEndpointAddress & 0xFF);
|
+ Integer.toHexString(bEndpointAddress & 0xFF);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,37 +14,37 @@ package ch.ntb.usb;
|
|||||||
*/
|
*/
|
||||||
public class Usb_Interface {
|
public class Usb_Interface {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Maximal number of alternate settings
|
* Maximal number of alternate settings
|
||||||
*/
|
*/
|
||||||
public static final int USB_MAXALTSETTING = 128; /* Hard limit */
|
public static final int USB_MAXALTSETTING = 128; /* Hard limit */
|
||||||
|
|
||||||
private Usb_Interface_Descriptor[] altsetting;
|
private Usb_Interface_Descriptor[] altsetting;
|
||||||
|
|
||||||
private int num_altsetting;
|
private int num_altsetting;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "Usb_Interface num_altsetting: 0x"
|
return "Usb_Interface num_altsetting: 0x"
|
||||||
+ Integer.toHexString(num_altsetting);
|
+ Integer.toHexString(num_altsetting);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Retuns an array of interface descriptors.<br>
|
* Retuns an array of interface descriptors.<br>
|
||||||
*
|
*
|
||||||
* @return an array of interface descriptors
|
* @return an array of interface descriptors
|
||||||
*/
|
*/
|
||||||
public Usb_Interface_Descriptor[] getAltsetting() {
|
public Usb_Interface_Descriptor[] getAltsetting() {
|
||||||
return altsetting;
|
return altsetting;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the number of alternate settings.<br>
|
* Returns the number of alternate settings.<br>
|
||||||
*
|
*
|
||||||
* @return the number of alternate settings
|
* @return the number of alternate settings
|
||||||
*/
|
*/
|
||||||
public int getNumAltsetting() {
|
public int getNumAltsetting() {
|
||||||
return num_altsetting;
|
return num_altsetting;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,127 +19,127 @@ package ch.ntb.usb;
|
|||||||
*/
|
*/
|
||||||
public class Usb_Interface_Descriptor extends Usb_Descriptor {
|
public class Usb_Interface_Descriptor extends Usb_Descriptor {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Maximum number of interfaces
|
* Maximum number of interfaces
|
||||||
*/
|
*/
|
||||||
public static final int USB_MAXINTERFACES = 32;
|
public static final int USB_MAXINTERFACES = 32;
|
||||||
|
|
||||||
private byte bInterfaceNumber;
|
private byte bInterfaceNumber;
|
||||||
|
|
||||||
private byte bAlternateSetting;
|
private byte bAlternateSetting;
|
||||||
|
|
||||||
private byte bNumEndpoints;
|
private byte bNumEndpoints;
|
||||||
|
|
||||||
private byte bInterfaceClass;
|
private byte bInterfaceClass;
|
||||||
|
|
||||||
private byte bInterfaceSubClass;
|
private byte bInterfaceSubClass;
|
||||||
|
|
||||||
private byte bInterfaceProtocol;
|
private byte bInterfaceProtocol;
|
||||||
|
|
||||||
private byte iInterface;
|
private byte iInterface;
|
||||||
|
|
||||||
private Usb_Endpoint_Descriptor[] endpoint;
|
private Usb_Endpoint_Descriptor[] endpoint;
|
||||||
|
|
||||||
private byte[] extra; /* Extra descriptors */
|
private byte[] extra; /* Extra descriptors */
|
||||||
|
|
||||||
private int extralen;
|
private int extralen;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "Usb_Interface_Descriptor bNumEndpoints: 0x"
|
return "Usb_Interface_Descriptor bNumEndpoints: 0x"
|
||||||
+ Integer.toHexString(bNumEndpoints);
|
+ Integer.toHexString(bNumEndpoints);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the value used to select the alternate setting ({@link LibusbJava#usb_set_altinterface(long, int)}).<br>
|
* Returns the value used to select the alternate setting ({@link LibusbJava#usb_set_altinterface(long, int)}).<br>
|
||||||
*
|
*
|
||||||
* @return the alternate setting
|
* @return the alternate setting
|
||||||
*/
|
*/
|
||||||
public byte getBAlternateSetting() {
|
public byte getBAlternateSetting() {
|
||||||
return bAlternateSetting;
|
return bAlternateSetting;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the class code (Assigned by <a
|
* Returns the class code (Assigned by <a
|
||||||
* href="http://www.usb.org">www.usb.org</a>).<br>
|
* href="http://www.usb.org">www.usb.org</a>).<br>
|
||||||
*
|
*
|
||||||
* @return the class code
|
* @return the class code
|
||||||
*/
|
*/
|
||||||
public byte getBInterfaceClass() {
|
public byte getBInterfaceClass() {
|
||||||
return bInterfaceClass;
|
return bInterfaceClass;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the number (identifier) of this interface.<br>
|
* Returns the number (identifier) of this interface.<br>
|
||||||
*
|
*
|
||||||
* @return the number (identifier) of this interface
|
* @return the number (identifier) of this interface
|
||||||
*/
|
*/
|
||||||
public byte getBInterfaceNumber() {
|
public byte getBInterfaceNumber() {
|
||||||
return bInterfaceNumber;
|
return bInterfaceNumber;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the protocol code (Assigned by <a
|
* Returns the protocol code (Assigned by <a
|
||||||
* href="http://www.usb.org">www.usb.org</a>).<br>
|
* href="http://www.usb.org">www.usb.org</a>).<br>
|
||||||
*
|
*
|
||||||
* @return the protocol code
|
* @return the protocol code
|
||||||
*/
|
*/
|
||||||
public byte getBInterfaceProtocol() {
|
public byte getBInterfaceProtocol() {
|
||||||
return bInterfaceProtocol;
|
return bInterfaceProtocol;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the subclass code (Assigned by <a
|
* Returns the subclass code (Assigned by <a
|
||||||
* href="http://www.usb.org">www.usb.org</a>).<br>
|
* href="http://www.usb.org">www.usb.org</a>).<br>
|
||||||
*
|
*
|
||||||
* @return the subclass code
|
* @return the subclass code
|
||||||
*/
|
*/
|
||||||
public byte getBInterfaceSubClass() {
|
public byte getBInterfaceSubClass() {
|
||||||
return bInterfaceSubClass;
|
return bInterfaceSubClass;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the number of endpoints used for this interface.<br>
|
* Returns the number of endpoints used for this interface.<br>
|
||||||
*
|
*
|
||||||
* @return the number of endpoints used for this interface
|
* @return the number of endpoints used for this interface
|
||||||
*/
|
*/
|
||||||
public byte getBNumEndpoints() {
|
public byte getBNumEndpoints() {
|
||||||
return bNumEndpoints;
|
return bNumEndpoints;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns an array of endpoint descriptors.<br>
|
* Returns an array of endpoint descriptors.<br>
|
||||||
*
|
*
|
||||||
* @return an array of endpoint descriptors
|
* @return an array of endpoint descriptors
|
||||||
*/
|
*/
|
||||||
public Usb_Endpoint_Descriptor[] getEndpoint() {
|
public Usb_Endpoint_Descriptor[] getEndpoint() {
|
||||||
return endpoint;
|
return endpoint;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the data of extra descriptor(s) if available.<br>
|
* Returns the data of extra descriptor(s) if available.<br>
|
||||||
*
|
*
|
||||||
* @return null or a byte array with the extra descriptor data
|
* @return null or a byte array with the extra descriptor data
|
||||||
*/
|
*/
|
||||||
public byte[] getExtra() {
|
public byte[] getExtra() {
|
||||||
return extra;
|
return extra;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the number of bytes of the extra descriptor.<br>
|
* Returns the number of bytes of the extra descriptor.<br>
|
||||||
*
|
*
|
||||||
* @return the number of bytes of the extra descriptor
|
* @return the number of bytes of the extra descriptor
|
||||||
*/
|
*/
|
||||||
public int getExtralen() {
|
public int getExtralen() {
|
||||||
return extralen;
|
return extralen;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the index of the String descriptor describing this interface.<br>
|
* Returns the index of the String descriptor describing this interface.<br>
|
||||||
*
|
*
|
||||||
* @return the index of the String descriptor
|
* @return the index of the String descriptor
|
||||||
*/
|
*/
|
||||||
public byte getIInterface() {
|
public byte getIInterface() {
|
||||||
return iInterface;
|
return iInterface;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,50 +11,50 @@ import java.io.PrintStream;
|
|||||||
|
|
||||||
public class Utils {
|
public class Utils {
|
||||||
|
|
||||||
public static void logBus(Usb_Bus bus) {
|
public static void logBus(Usb_Bus bus) {
|
||||||
logBus(bus, System.out);
|
logBus(bus, System.out);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void logBus(Usb_Bus bus, PrintStream out) {
|
public static void logBus(Usb_Bus bus, PrintStream out) {
|
||||||
Usb_Bus usb_Bus = bus;
|
Usb_Bus usb_Bus = bus;
|
||||||
while (usb_Bus != null) {
|
while (usb_Bus != null) {
|
||||||
out.println(usb_Bus.toString());
|
out.println(usb_Bus.toString());
|
||||||
Usb_Device dev = usb_Bus.getDevices();
|
Usb_Device dev = usb_Bus.getDevices();
|
||||||
while (dev != null) {
|
while (dev != null) {
|
||||||
out.println("\t" + dev.toString());
|
out.println("\t" + dev.toString());
|
||||||
// Usb_Device_Descriptor
|
// Usb_Device_Descriptor
|
||||||
Usb_Device_Descriptor defDesc = dev.getDescriptor();
|
Usb_Device_Descriptor defDesc = dev.getDescriptor();
|
||||||
out.println("\t\t" + defDesc.toString());
|
out.println("\t\t" + defDesc.toString());
|
||||||
// Usb_Config_Descriptor
|
// Usb_Config_Descriptor
|
||||||
Usb_Config_Descriptor[] confDesc = dev.getConfig();
|
Usb_Config_Descriptor[] confDesc = dev.getConfig();
|
||||||
for (int i = 0; i < confDesc.length; i++) {
|
for (int i = 0; i < confDesc.length; i++) {
|
||||||
out.println("\t\t" + confDesc[i].toString());
|
out.println("\t\t" + confDesc[i].toString());
|
||||||
Usb_Interface[] int_ = confDesc[i].getInterface();
|
Usb_Interface[] int_ = confDesc[i].getInterface();
|
||||||
if (int_ != null) {
|
if (int_ != null) {
|
||||||
for (int j = 0; j < int_.length; j++) {
|
for (int j = 0; j < int_.length; j++) {
|
||||||
out.println("\t\t\t" + int_[j].toString());
|
out.println("\t\t\t" + int_[j].toString());
|
||||||
Usb_Interface_Descriptor[] intDesc = int_[j]
|
Usb_Interface_Descriptor[] intDesc = int_[j]
|
||||||
.getAltsetting();
|
.getAltsetting();
|
||||||
if (intDesc != null) {
|
if (intDesc != null) {
|
||||||
for (int k = 0; k < intDesc.length; k++) {
|
for (int k = 0; k < intDesc.length; k++) {
|
||||||
out.println("\t\t\t\t"
|
out.println("\t\t\t\t"
|
||||||
+ intDesc[k].toString());
|
+ intDesc[k].toString());
|
||||||
Usb_Endpoint_Descriptor[] epDesc = intDesc[k]
|
Usb_Endpoint_Descriptor[] epDesc = intDesc[k]
|
||||||
.getEndpoint();
|
.getEndpoint();
|
||||||
if (epDesc != null) {
|
if (epDesc != null) {
|
||||||
for (int e = 0; e < epDesc.length; e++) {
|
for (int e = 0; e < epDesc.length; e++) {
|
||||||
out.println("\t\t\t\t\t"
|
out.println("\t\t\t\t\t"
|
||||||
+ epDesc[e].toString());
|
+ epDesc[e].toString());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
dev = dev.getNext();
|
dev = dev.getNext();
|
||||||
}
|
}
|
||||||
usb_Bus = usb_Bus.getNext();
|
usb_Bus = usb_Bus.getNext();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,119 +17,119 @@ import java.util.logging.Logger;
|
|||||||
|
|
||||||
public class LogUtil {
|
public class LogUtil {
|
||||||
|
|
||||||
// debug this class
|
// debug this class
|
||||||
private static final boolean debugLogUtil = false;
|
private static final boolean debugLogUtil = false;
|
||||||
|
|
||||||
private static final String PLUGIN_ID = "ch.ntb.usb";
|
private static final String PLUGIN_ID = "ch.ntb.usb";
|
||||||
private static final String PROPERTIES_FILE = ".configure";
|
private static final String PROPERTIES_FILE = ".configure";
|
||||||
private static final String LOGGER_WARNING = "Warning in class "
|
private static final String LOGGER_WARNING = "Warning in class "
|
||||||
+ LogUtil.class.getName()
|
+ LogUtil.class.getName()
|
||||||
+ ": could not load the logger properties file " + PROPERTIES_FILE;
|
+ ": could not load the logger properties file " + PROPERTIES_FILE;
|
||||||
|
|
||||||
private static boolean debugEnabled;
|
private static boolean debugEnabled;
|
||||||
|
|
||||||
static {
|
static {
|
||||||
createLoggersFromProperties();
|
createLoggersFromProperties();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void debugMsg(String method, String message) {
|
private static void debugMsg(String method, String message) {
|
||||||
if (debugLogUtil) {
|
if (debugLogUtil) {
|
||||||
System.out.println(method + ": " + message);
|
System.out.println(method + ": " + message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void setLevel(Logger logger, Level loglevel) {
|
public static void setLevel(Logger logger, Level loglevel) {
|
||||||
Handler[] h = logger.getHandlers();
|
Handler[] h = logger.getHandlers();
|
||||||
for (int i = 0; i < h.length; i++) {
|
for (int i = 0; i < h.length; i++) {
|
||||||
System.out.println("setLevel " + loglevel.toString());
|
System.out.println("setLevel " + loglevel.toString());
|
||||||
h[i].setLevel(loglevel);
|
h[i].setLevel(loglevel);
|
||||||
}
|
}
|
||||||
logger.setLevel(loglevel);
|
logger.setLevel(loglevel);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Logger getLogger(String name) {
|
public static Logger getLogger(String name) {
|
||||||
debugMsg("getLogger", name);
|
debugMsg("getLogger", name);
|
||||||
LogManager manager = LogManager.getLogManager();
|
LogManager manager = LogManager.getLogManager();
|
||||||
// check if logger is already registered
|
// check if logger is already registered
|
||||||
Logger logger = manager.getLogger(name);
|
Logger logger = manager.getLogger(name);
|
||||||
if (logger == null) {
|
if (logger == null) {
|
||||||
logger = Logger.getLogger(name);
|
logger = Logger.getLogger(name);
|
||||||
setLevel(logger, Level.OFF);
|
setLevel(logger, Level.OFF);
|
||||||
manager.addLogger(logger);
|
manager.addLogger(logger);
|
||||||
debugMsg("getLogger", "creating new logger");
|
debugMsg("getLogger", "creating new logger");
|
||||||
}
|
}
|
||||||
if (logger.getLevel() == null) {
|
if (logger.getLevel() == null) {
|
||||||
debugMsg("getLogger", "level == null -> setLevel to OFF ");
|
debugMsg("getLogger", "level == null -> setLevel to OFF ");
|
||||||
setLevel(logger, Level.OFF);
|
setLevel(logger, Level.OFF);
|
||||||
}
|
}
|
||||||
debugMsg("getLogger", "logLevel " + logger.getLevel().getName());
|
debugMsg("getLogger", "logLevel " + logger.getLevel().getName());
|
||||||
return logger;
|
return logger;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void initLevel(Logger logger, Level loglevel) {
|
private static void initLevel(Logger logger, Level loglevel) {
|
||||||
Handler[] h = logger.getHandlers();
|
Handler[] h = logger.getHandlers();
|
||||||
for (int i = 0; i < h.length; i++) {
|
for (int i = 0; i < h.length; i++) {
|
||||||
logger.removeHandler(h[i]);
|
logger.removeHandler(h[i]);
|
||||||
}
|
}
|
||||||
Handler console = new ConsoleHandler();
|
Handler console = new ConsoleHandler();
|
||||||
console.setLevel(loglevel);
|
console.setLevel(loglevel);
|
||||||
logger.addHandler(console);
|
logger.addHandler(console);
|
||||||
logger.setLevel(loglevel);
|
logger.setLevel(loglevel);
|
||||||
logger.setUseParentHandlers(false);
|
logger.setUseParentHandlers(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void createLoggersFromProperties() {
|
private static void createLoggersFromProperties() {
|
||||||
try {
|
try {
|
||||||
debugMsg(LogUtil.class.getName(), "createLoggersFromProperties");
|
debugMsg(LogUtil.class.getName(), "createLoggersFromProperties");
|
||||||
InputStream is = LogUtil.class.getClassLoader()
|
InputStream is = LogUtil.class.getClassLoader()
|
||||||
.getResourceAsStream(PROPERTIES_FILE);
|
.getResourceAsStream(PROPERTIES_FILE);
|
||||||
if (is == null) {
|
if (is == null) {
|
||||||
System.err.println(LOGGER_WARNING);
|
System.err.println(LOGGER_WARNING);
|
||||||
} else {
|
} else {
|
||||||
Properties prop = new Properties();
|
Properties prop = new Properties();
|
||||||
prop.load(is);
|
prop.load(is);
|
||||||
debugMsg("createLoggersFromProperties",
|
debugMsg("createLoggersFromProperties",
|
||||||
"properties file loaded: " + PROPERTIES_FILE);
|
"properties file loaded: " + PROPERTIES_FILE);
|
||||||
debugMsg("createLoggersFromProperties", "file content:\n"
|
debugMsg("createLoggersFromProperties", "file content:\n"
|
||||||
+ prop.toString());
|
+ prop.toString());
|
||||||
// get global debug enable flag
|
// get global debug enable flag
|
||||||
debugEnabled = Boolean.parseBoolean(prop.getProperty(PLUGIN_ID
|
debugEnabled = Boolean.parseBoolean(prop.getProperty(PLUGIN_ID
|
||||||
+ "/debug"));
|
+ "/debug"));
|
||||||
debugMsg("createLoggersFromProperties", "debuging enabled: "
|
debugMsg("createLoggersFromProperties", "debuging enabled: "
|
||||||
+ debugEnabled);
|
+ debugEnabled);
|
||||||
// get and configure loggers
|
// get and configure loggers
|
||||||
boolean moreLoggers = true;
|
boolean moreLoggers = true;
|
||||||
int loggerCount = 0;
|
int loggerCount = 0;
|
||||||
while (moreLoggers) {
|
while (moreLoggers) {
|
||||||
String loggerProp = prop.getProperty(PLUGIN_ID
|
String loggerProp = prop.getProperty(PLUGIN_ID
|
||||||
+ "/debug/logger" + loggerCount);
|
+ "/debug/logger" + loggerCount);
|
||||||
loggerCount++;
|
loggerCount++;
|
||||||
if (loggerProp != null) {
|
if (loggerProp != null) {
|
||||||
// parse string and get logger name and log level
|
// parse string and get logger name and log level
|
||||||
int slashIndex = loggerProp.indexOf('/');
|
int slashIndex = loggerProp.indexOf('/');
|
||||||
String loggerName = loggerProp.substring(0, slashIndex)
|
String loggerName = loggerProp.substring(0, slashIndex)
|
||||||
.trim();
|
.trim();
|
||||||
String logLevel = loggerProp.substring(slashIndex + 1,
|
String logLevel = loggerProp.substring(slashIndex + 1,
|
||||||
loggerProp.length());
|
loggerProp.length());
|
||||||
// register logger
|
// register logger
|
||||||
Level level;
|
Level level;
|
||||||
if (debugEnabled) {
|
if (debugEnabled) {
|
||||||
level = Level.parse(logLevel);
|
level = Level.parse(logLevel);
|
||||||
} else {
|
} else {
|
||||||
level = Level.OFF;
|
level = Level.OFF;
|
||||||
}
|
}
|
||||||
Logger logger = getLogger(loggerName);
|
Logger logger = getLogger(loggerName);
|
||||||
initLevel(logger, level);
|
initLevel(logger, level);
|
||||||
debugMsg("createLoggersFromProperties",
|
debugMsg("createLoggersFromProperties",
|
||||||
"create logger " + loggerName + " with level "
|
"create logger " + loggerName + " with level "
|
||||||
+ level.toString());
|
+ level.toString());
|
||||||
} else {
|
} else {
|
||||||
moreLoggers = false;
|
moreLoggers = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -11,324 +11,324 @@ import ch.ntb.usb.Usb_Device;
|
|||||||
import ch.ntb.usb.exceptions.LibusbError;
|
import ch.ntb.usb.exceptions.LibusbError;
|
||||||
|
|
||||||
public class LibusbJava1Test {
|
public class LibusbJava1Test {
|
||||||
/**
|
/**
|
||||||
* This method does not need to be tested. This test only exists to document
|
* This method does not need to be tested. This test only exists to document
|
||||||
* the fact that this function has not been forgotten.
|
* the fact that this function has not been forgotten.
|
||||||
*/
|
*/
|
||||||
@Test
|
@Test
|
||||||
public void testLibusb_set_debug() {
|
public void testLibusb_set_debug() {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testLibusb_init() {
|
public void testLibusb_init() {
|
||||||
try {
|
try {
|
||||||
long handle = LibusbJava1.libusb_init();
|
long handle = LibusbJava1.libusb_init();
|
||||||
LibusbJava1.libusb_exit(handle);
|
LibusbJava1.libusb_exit(handle);
|
||||||
} catch (LibusbError e) {
|
} catch (LibusbError e) {
|
||||||
fail("Initialization failed, Code: " + e.getErrorString());
|
fail("Initialization failed, Code: " + e.getErrorString());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method can not be tested (yet). This test only exists to document
|
* This method can not be tested (yet). This test only exists to document
|
||||||
* the fact that this function has not been forgotten.
|
* the fact that this function has not been forgotten.
|
||||||
*/
|
*/
|
||||||
@Test
|
@Test
|
||||||
public void testLibusb_exit() {
|
public void testLibusb_exit() {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testLibusb_get_device_list() throws LibusbError {
|
public void testLibusb_get_device_list() throws LibusbError {
|
||||||
long handle = LibusbJava1.libusb_init();
|
long handle = LibusbJava1.libusb_init();
|
||||||
Usb_Device devices = LibusbJava1.libusb_get_device_list(handle);
|
Usb_Device devices = LibusbJava1.libusb_get_device_list(handle);
|
||||||
assertNotNull("Got devices", devices);
|
assertNotNull("Got devices", devices);
|
||||||
System.out.println(devices.toString());
|
System.out.println(devices.toString());
|
||||||
assertNull("Bus is null", devices.getBus());
|
assertNull("Bus is null", devices.getBus());
|
||||||
LibusbJava1.libusb_exit(handle);
|
LibusbJava1.libusb_exit(handle);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testLibusb_get_bus_number() throws LibusbError {
|
public void testLibusb_get_bus_number() throws LibusbError {
|
||||||
long handle = LibusbJava1.libusb_init();
|
long handle = LibusbJava1.libusb_init();
|
||||||
Usb_Device devices = LibusbJava1.libusb_get_device_list(handle);
|
Usb_Device devices = LibusbJava1.libusb_get_device_list(handle);
|
||||||
assertNotNull("Got devices", devices);
|
assertNotNull("Got devices", devices);
|
||||||
System.out.println(devices.getBus());
|
System.out.println(devices.getBus());
|
||||||
LibusbJava1.libusb_exit(handle);
|
LibusbJava1.libusb_exit(handle);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testLibusb_get_max_iso_packet_size() {
|
public void testLibusb_get_max_iso_packet_size() {
|
||||||
fail("Not yet implemented");
|
fail("Not yet implemented");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testLibusb_ref_device() {
|
public void testLibusb_ref_device() {
|
||||||
fail("Not yet implemented");
|
fail("Not yet implemented");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testLibusb_unref_device() {
|
public void testLibusb_unref_device() {
|
||||||
fail("Not yet implemented");
|
fail("Not yet implemented");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testLibusb_open() {
|
public void testLibusb_open() {
|
||||||
fail("Not yet implemented");
|
fail("Not yet implemented");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testLibusb_open_device_with_vid_pid() {
|
public void testLibusb_open_device_with_vid_pid() {
|
||||||
fail("Not yet implemented");
|
fail("Not yet implemented");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testLibusb_close() {
|
public void testLibusb_close() {
|
||||||
fail("Not yet implemented");
|
fail("Not yet implemented");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testLibusb_get_device() {
|
public void testLibusb_get_device() {
|
||||||
fail("Not yet implemented");
|
fail("Not yet implemented");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testLibusb_get_configuration() {
|
public void testLibusb_get_configuration() {
|
||||||
fail("Not yet implemented");
|
fail("Not yet implemented");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testLibusb_set_configuration() {
|
public void testLibusb_set_configuration() {
|
||||||
fail("Not yet implemented");
|
fail("Not yet implemented");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testLibusb_claim_interface() {
|
public void testLibusb_claim_interface() {
|
||||||
fail("Not yet implemented");
|
fail("Not yet implemented");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testLibusb_release_interface() {
|
public void testLibusb_release_interface() {
|
||||||
fail("Not yet implemented");
|
fail("Not yet implemented");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testLibusb_set_interface_alt_setting() {
|
public void testLibusb_set_interface_alt_setting() {
|
||||||
fail("Not yet implemented");
|
fail("Not yet implemented");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testLibusb_clear_halt() {
|
public void testLibusb_clear_halt() {
|
||||||
fail("Not yet implemented");
|
fail("Not yet implemented");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testLibusb_reset_device() {
|
public void testLibusb_reset_device() {
|
||||||
fail("Not yet implemented");
|
fail("Not yet implemented");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testLibusb_kernel_driver_active() {
|
public void testLibusb_kernel_driver_active() {
|
||||||
fail("Not yet implemented");
|
fail("Not yet implemented");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testLibusb_detach_kernel_driver() {
|
public void testLibusb_detach_kernel_driver() {
|
||||||
fail("Not yet implemented");
|
fail("Not yet implemented");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testLibusb_attach_kernel_driver() {
|
public void testLibusb_attach_kernel_driver() {
|
||||||
fail("Not yet implemented");
|
fail("Not yet implemented");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testLibusb_get_active_config_descriptor() {
|
public void testLibusb_get_active_config_descriptor() {
|
||||||
fail("Not yet implemented");
|
fail("Not yet implemented");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testLibusb_get_string_descriptor_ascii() {
|
public void testLibusb_get_string_descriptor_ascii() {
|
||||||
fail("Not yet implemented");
|
fail("Not yet implemented");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testLibusb_get_descriptor() {
|
public void testLibusb_get_descriptor() {
|
||||||
fail("Not yet implemented");
|
fail("Not yet implemented");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testLibusb_get_string_descriptor() {
|
public void testLibusb_get_string_descriptor() {
|
||||||
fail("Not yet implemented");
|
fail("Not yet implemented");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testLibusb_alloc_transfer() {
|
public void testLibusb_alloc_transfer() {
|
||||||
fail("Not yet implemented");
|
fail("Not yet implemented");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testLibusb_free_transfer() {
|
public void testLibusb_free_transfer() {
|
||||||
fail("Not yet implemented");
|
fail("Not yet implemented");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testLibusb_submit_transfer() {
|
public void testLibusb_submit_transfer() {
|
||||||
fail("Not yet implemented");
|
fail("Not yet implemented");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testLibusb_cancel_transfer() {
|
public void testLibusb_cancel_transfer() {
|
||||||
fail("Not yet implemented");
|
fail("Not yet implemented");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testLibusb_control_transfer_get_data() {
|
public void testLibusb_control_transfer_get_data() {
|
||||||
fail("Not yet implemented");
|
fail("Not yet implemented");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testLibusb_control_transfer_get_setup() {
|
public void testLibusb_control_transfer_get_setup() {
|
||||||
fail("Not yet implemented");
|
fail("Not yet implemented");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testLibusb_fill_control_setup() {
|
public void testLibusb_fill_control_setup() {
|
||||||
fail("Not yet implemented");
|
fail("Not yet implemented");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testLibusb_fill_control_transfer() {
|
public void testLibusb_fill_control_transfer() {
|
||||||
fail("Not yet implemented");
|
fail("Not yet implemented");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testLibusb_fill_bulk_transfer() {
|
public void testLibusb_fill_bulk_transfer() {
|
||||||
fail("Not yet implemented");
|
fail("Not yet implemented");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testLibusb_fill_interrupt_transfer() {
|
public void testLibusb_fill_interrupt_transfer() {
|
||||||
fail("Not yet implemented");
|
fail("Not yet implemented");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testLibusb_fill_iso_transfer() {
|
public void testLibusb_fill_iso_transfer() {
|
||||||
fail("Not yet implemented");
|
fail("Not yet implemented");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testLibusb_set_iso_packet_lengths() {
|
public void testLibusb_set_iso_packet_lengths() {
|
||||||
fail("Not yet implemented");
|
fail("Not yet implemented");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testLibusb_get_iso_packet_buffer() {
|
public void testLibusb_get_iso_packet_buffer() {
|
||||||
fail("Not yet implemented");
|
fail("Not yet implemented");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testLibusb_get_iso_packet_buffer_simple() {
|
public void testLibusb_get_iso_packet_buffer_simple() {
|
||||||
fail("Not yet implemented");
|
fail("Not yet implemented");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testLibusb_try_lock_events() {
|
public void testLibusb_try_lock_events() {
|
||||||
fail("Not yet implemented");
|
fail("Not yet implemented");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testLibusb_lock_events() {
|
public void testLibusb_lock_events() {
|
||||||
fail("Not yet implemented");
|
fail("Not yet implemented");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testLibusb_unlock_events() {
|
public void testLibusb_unlock_events() {
|
||||||
fail("Not yet implemented");
|
fail("Not yet implemented");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testLibusb_event_handling_ok() {
|
public void testLibusb_event_handling_ok() {
|
||||||
fail("Not yet implemented");
|
fail("Not yet implemented");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testLibusb_event_handler_active() {
|
public void testLibusb_event_handler_active() {
|
||||||
fail("Not yet implemented");
|
fail("Not yet implemented");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testLibusb_lock_event_waiters() {
|
public void testLibusb_lock_event_waiters() {
|
||||||
fail("Not yet implemented");
|
fail("Not yet implemented");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testLibusb_unlock_event_waiters() {
|
public void testLibusb_unlock_event_waiters() {
|
||||||
fail("Not yet implemented");
|
fail("Not yet implemented");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testLibusb_wait_for_event() {
|
public void testLibusb_wait_for_event() {
|
||||||
fail("Not yet implemented");
|
fail("Not yet implemented");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testLibusb_handle_events_timeout() {
|
public void testLibusb_handle_events_timeout() {
|
||||||
fail("Not yet implemented");
|
fail("Not yet implemented");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testLibusb_handle_events() {
|
public void testLibusb_handle_events() {
|
||||||
fail("Not yet implemented");
|
fail("Not yet implemented");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testLibusb_handle_events_locked() {
|
public void testLibusb_handle_events_locked() {
|
||||||
fail("Not yet implemented");
|
fail("Not yet implemented");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testLibusb_pollfds_handle_timeouts() {
|
public void testLibusb_pollfds_handle_timeouts() {
|
||||||
fail("Not yet implemented");
|
fail("Not yet implemented");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testLibusb_get_next_timeout() {
|
public void testLibusb_get_next_timeout() {
|
||||||
fail("Not yet implemented");
|
fail("Not yet implemented");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testLibusb_set_pollfd_notifiers() {
|
public void testLibusb_set_pollfd_notifiers() {
|
||||||
fail("Not yet implemented");
|
fail("Not yet implemented");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testLibusb_get_pollfds() {
|
public void testLibusb_get_pollfds() {
|
||||||
fail("Not yet implemented");
|
fail("Not yet implemented");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testLibusb_control_transfer() {
|
public void testLibusb_control_transfer() {
|
||||||
fail("Not yet implemented");
|
fail("Not yet implemented");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testLibusb_bulk_transfer() {
|
public void testLibusb_bulk_transfer() {
|
||||||
fail("Not yet implemented");
|
fail("Not yet implemented");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testLibusb_interrupt_transfer() {
|
public void testLibusb_interrupt_transfer() {
|
||||||
fail("Not yet implemented");
|
fail("Not yet implemented");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testLibusb_strerror() {
|
public void testLibusb_strerror() {
|
||||||
fail("Not yet implemented");
|
fail("Not yet implemented");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testIsHandleValid() {
|
public void testIsHandleValid() {
|
||||||
fail("Not yet implemented");
|
fail("Not yet implemented");
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -33,167 +33,167 @@ import ch.ntb.usb.testApp.AbstractDeviceInfo.TransferMode;
|
|||||||
@SuppressWarnings("deprecation")
|
@SuppressWarnings("deprecation")
|
||||||
public class MemoryLeakTest {
|
public class MemoryLeakTest {
|
||||||
|
|
||||||
private static final String testdevicePropertiesFile = "testdevice.properties";
|
private static final String testdevicePropertiesFile = "testdevice.properties";
|
||||||
private static final String deviceInfoKey = "testdeviceInfo";
|
private static final String deviceInfoKey = "testdeviceInfo";
|
||||||
|
|
||||||
private static AbstractDeviceInfo devinfo;
|
private static AbstractDeviceInfo devinfo;
|
||||||
|
|
||||||
private static byte[] testData;
|
private static byte[] testData;
|
||||||
|
|
||||||
private static byte[] readData;
|
private static byte[] readData;
|
||||||
|
|
||||||
private static Device dev;
|
private static Device dev;
|
||||||
|
|
||||||
private static Logger log = Logger
|
private static Logger log = Logger
|
||||||
.getLogger(MemoryLeakTest.class.getName());
|
.getLogger(MemoryLeakTest.class.getName());
|
||||||
|
|
||||||
@BeforeClass
|
@BeforeClass
|
||||||
public static void setUp() throws Exception {
|
public static void setUp() throws Exception {
|
||||||
// load the device info class with the key
|
// load the device info class with the key
|
||||||
// from 'testdevice.properties'
|
// from 'testdevice.properties'
|
||||||
InputStream propInputStream = new FileInputStream(
|
InputStream propInputStream = new FileInputStream(
|
||||||
testdevicePropertiesFile);
|
testdevicePropertiesFile);
|
||||||
Properties devInfoProp = new Properties();
|
Properties devInfoProp = new Properties();
|
||||||
devInfoProp.load(propInputStream);
|
devInfoProp.load(propInputStream);
|
||||||
String devInfoClazzName = devInfoProp.getProperty(deviceInfoKey);
|
String devInfoClazzName = devInfoProp.getProperty(deviceInfoKey);
|
||||||
if (devInfoClazzName == null) {
|
if (devInfoClazzName == null) {
|
||||||
throw new Exception("property " + deviceInfoKey
|
throw new Exception("property " + deviceInfoKey
|
||||||
+ " not found in file " + testdevicePropertiesFile);
|
+ " not found in file " + testdevicePropertiesFile);
|
||||||
}
|
}
|
||||||
Class<?> devInfoClazz = Class.forName(devInfoClazzName);
|
Class<?> devInfoClazz = Class.forName(devInfoClazzName);
|
||||||
devinfo = (AbstractDeviceInfo) devInfoClazz.newInstance();
|
devinfo = (AbstractDeviceInfo) devInfoClazz.newInstance();
|
||||||
// setup test data
|
// setup test data
|
||||||
testData = new byte[devinfo.getMaxDataSize()];
|
testData = new byte[devinfo.getMaxDataSize()];
|
||||||
readData = new byte[testData.length];
|
readData = new byte[testData.length];
|
||||||
// initialise the device
|
// initialise the device
|
||||||
dev = USB.getDevice(devinfo.getIdVendor(), devinfo.getIdProduct());
|
dev = USB.getDevice(devinfo.getIdVendor(), devinfo.getIdProduct());
|
||||||
assertNotNull(dev);
|
assertNotNull(dev);
|
||||||
|
|
||||||
// print the devices
|
// print the devices
|
||||||
LibusbJava.usb_init();
|
LibusbJava.usb_init();
|
||||||
// LibusbJava.usb_find_busses();
|
// LibusbJava.usb_find_busses();
|
||||||
LibusbJava.usb_find_devices();
|
LibusbJava.usb_find_devices();
|
||||||
Usb_Bus bus = LibusbJava.usb_get_busses();
|
Usb_Bus bus = LibusbJava.usb_get_busses();
|
||||||
ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
||||||
PrintStream ps = new PrintStream(baos);
|
PrintStream ps = new PrintStream(baos);
|
||||||
Utils.logBus(bus, ps);
|
Utils.logBus(bus, ps);
|
||||||
log.info(baos.toString());
|
log.info(baos.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void initalReset() throws Exception {
|
public void initalReset() throws Exception {
|
||||||
doOpen();
|
doOpen();
|
||||||
dev.reset();
|
dev.reset();
|
||||||
timeout();
|
timeout();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void bulkWriteReadMultiple() throws Exception {
|
public void bulkWriteReadMultiple() throws Exception {
|
||||||
final int NumberOfIterations = 3000;
|
final int NumberOfIterations = 3000;
|
||||||
|
|
||||||
devinfo.setMode(TransferMode.Bulk);
|
devinfo.setMode(TransferMode.Bulk);
|
||||||
doOpen();
|
doOpen();
|
||||||
for (int i = 0; i < NumberOfIterations; i++) {
|
for (int i = 0; i < NumberOfIterations; i++) {
|
||||||
doWriteRead();
|
doWriteRead();
|
||||||
if (i % 1000 == 0) {
|
if (i % 1000 == 0) {
|
||||||
System.out.print(".");
|
System.out.print(".");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
doClose();
|
doClose();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void interruptWriteReadMultiple() throws Exception {
|
public void interruptWriteReadMultiple() throws Exception {
|
||||||
final int NumberOfIterations = 3000;
|
final int NumberOfIterations = 3000;
|
||||||
|
|
||||||
devinfo.setMode(TransferMode.Interrupt);
|
devinfo.setMode(TransferMode.Interrupt);
|
||||||
doOpen();
|
doOpen();
|
||||||
for (int i = 0; i < NumberOfIterations; i++) {
|
for (int i = 0; i < NumberOfIterations; i++) {
|
||||||
doWriteRead();
|
doWriteRead();
|
||||||
if (i % 1000 == 0) {
|
if (i % 1000 == 0) {
|
||||||
System.out.print(".");
|
System.out.print(".");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
doClose();
|
doClose();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void closeOnException() {
|
private void closeOnException() {
|
||||||
try {
|
try {
|
||||||
dev.close();
|
dev.close();
|
||||||
} catch (USBException e1) {
|
} catch (USBException e1) {
|
||||||
// ignore exceptions
|
// ignore exceptions
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@AfterClass
|
@AfterClass
|
||||||
public static void tearDown() throws Exception {
|
public static void tearDown() throws Exception {
|
||||||
if (dev != null && dev.isOpen()) {
|
if (dev != null && dev.isOpen()) {
|
||||||
dev.close();
|
dev.close();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void doOpen() throws USBException {
|
private void doOpen() throws USBException {
|
||||||
dev.open(devinfo.getConfiguration(), devinfo.getInterface(), devinfo
|
dev.open(devinfo.getConfiguration(), devinfo.getInterface(), devinfo
|
||||||
.getAltinterface());
|
.getAltinterface());
|
||||||
}
|
}
|
||||||
|
|
||||||
private void doClose() throws USBException {
|
private void doClose() throws USBException {
|
||||||
dev.close();
|
dev.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void doWriteRead() throws Exception {
|
private void doWriteRead() throws Exception {
|
||||||
initTestData();
|
initTestData();
|
||||||
try {
|
try {
|
||||||
if (devinfo.getMode().equals(TransferMode.Bulk)) {
|
if (devinfo.getMode().equals(TransferMode.Bulk)) {
|
||||||
if (devinfo.getOutEPBulk() != -1) {
|
if (devinfo.getOutEPBulk() != -1) {
|
||||||
dev.writeBulk(devinfo.getOutEPBulk(), testData,
|
dev.writeBulk(devinfo.getOutEPBulk(), testData,
|
||||||
testData.length, devinfo.getTimeout(), false);
|
testData.length, devinfo.getTimeout(), false);
|
||||||
}
|
}
|
||||||
if (devinfo.getInEPBulk() != -1) {
|
if (devinfo.getInEPBulk() != -1) {
|
||||||
dev.readBulk(devinfo.getInEPBulk(), readData,
|
dev.readBulk(devinfo.getInEPBulk(), readData,
|
||||||
readData.length, devinfo.getTimeout(), false);
|
readData.length, devinfo.getTimeout(), false);
|
||||||
}
|
}
|
||||||
} else if (devinfo.getMode().equals(TransferMode.Interrupt)) {
|
} else if (devinfo.getMode().equals(TransferMode.Interrupt)) {
|
||||||
if (devinfo.getOutEPInt() != -1) {
|
if (devinfo.getOutEPInt() != -1) {
|
||||||
dev.writeInterrupt(devinfo.getOutEPInt(), testData,
|
dev.writeInterrupt(devinfo.getOutEPInt(), testData,
|
||||||
testData.length, devinfo.getTimeout(), false);
|
testData.length, devinfo.getTimeout(), false);
|
||||||
}
|
}
|
||||||
if (devinfo.getInEPInt() != -1) {
|
if (devinfo.getInEPInt() != -1) {
|
||||||
dev.readInterrupt(devinfo.getInEPInt(), readData,
|
dev.readInterrupt(devinfo.getInEPInt(), readData,
|
||||||
readData.length, devinfo.getTimeout(), false);
|
readData.length, devinfo.getTimeout(), false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (devinfo.doCompareData()) {
|
if (devinfo.doCompareData()) {
|
||||||
compare(testData, readData);
|
compare(testData, readData);
|
||||||
}
|
}
|
||||||
} catch (AssertionError e) {
|
} catch (AssertionError e) {
|
||||||
closeOnException();
|
closeOnException();
|
||||||
throw e;
|
throw e;
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
closeOnException();
|
closeOnException();
|
||||||
throw e;
|
throw e;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void compare(byte[] d1, byte[] d2) {
|
private static void compare(byte[] d1, byte[] d2) {
|
||||||
final int minLength = Math.min(d1.length, d2.length);
|
final int minLength = Math.min(d1.length, d2.length);
|
||||||
for (int i = 0; i < minLength; i++) {
|
for (int i = 0; i < minLength; i++) {
|
||||||
assertEquals(d1[i], d2[i]);
|
assertEquals(d1[i], d2[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void timeout() {
|
private static void timeout() {
|
||||||
try {
|
try {
|
||||||
Thread.sleep(devinfo.getSleepTimeout());
|
Thread.sleep(devinfo.getSleepTimeout());
|
||||||
} catch (InterruptedException e) {
|
} catch (InterruptedException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void initTestData() {
|
private static void initTestData() {
|
||||||
for (int i = 0; i < testData.length; i++) {
|
for (int i = 0; i < testData.length; i++) {
|
||||||
testData[i] = (byte) (Math.random() * 0xff);
|
testData[i] = (byte) (Math.random() * 0xff);
|
||||||
readData[i] = 0;
|
readData[i] = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,219 +21,219 @@ import ch.ntb.usb.Usb_Interface_Descriptor;
|
|||||||
*/
|
*/
|
||||||
@SuppressWarnings("deprecation")
|
@SuppressWarnings("deprecation")
|
||||||
public class TestLibUsbJava {
|
public class TestLibUsbJava {
|
||||||
static boolean verbose;
|
static boolean verbose;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* prints out endpoint info
|
* prints out endpoint info
|
||||||
*
|
*
|
||||||
* @param endpoint
|
* @param endpoint
|
||||||
* The end point.
|
* The end point.
|
||||||
*/
|
*/
|
||||||
private static void printEndpoint(Usb_Endpoint_Descriptor endpoint) {
|
private static void printEndpoint(Usb_Endpoint_Descriptor endpoint) {
|
||||||
System.out.print(String.format(" bEndpointAddress: %02xh\n",
|
System.out.print(String.format(" bEndpointAddress: %02xh\n",
|
||||||
endpoint.getBEndpointAddress()));
|
endpoint.getBEndpointAddress()));
|
||||||
System.out.print(String.format(" bmAttributes: %02xh\n",
|
System.out.print(String.format(" bmAttributes: %02xh\n",
|
||||||
endpoint.getBmAttributes()));
|
endpoint.getBmAttributes()));
|
||||||
System.out.print(String.format(" wMaxPacketSize: %d\n", endpoint
|
System.out.print(String.format(" wMaxPacketSize: %d\n", endpoint
|
||||||
.getWMaxPacketSize()));
|
.getWMaxPacketSize()));
|
||||||
System.out.print(String.format(" bInterval: %d\n", endpoint
|
System.out.print(String.format(" bInterval: %d\n", endpoint
|
||||||
.getBInterval()));
|
.getBInterval()));
|
||||||
System.out.print(String.format(" bRefresh: %d\n", endpoint
|
System.out.print(String.format(" bRefresh: %d\n", endpoint
|
||||||
.getBRefresh()));
|
.getBRefresh()));
|
||||||
System.out.print(String.format(" bSynchAddress: %d\n", endpoint
|
System.out.print(String.format(" bSynchAddress: %d\n", endpoint
|
||||||
.getBSynchAddress()));
|
.getBSynchAddress()));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* prints out the interface descriptor
|
* prints out the interface descriptor
|
||||||
*
|
*
|
||||||
* @param interfaceDescript
|
* @param interfaceDescript
|
||||||
* The interface descriptor.
|
* The interface descriptor.
|
||||||
*/
|
*/
|
||||||
private static void printAltsetting(
|
private static void printAltsetting(
|
||||||
Usb_Interface_Descriptor interfaceDescript) {
|
Usb_Interface_Descriptor interfaceDescript) {
|
||||||
System.out.print(String.format(" bInterfaceNumber: %d\n",
|
System.out.print(String.format(" bInterfaceNumber: %d\n",
|
||||||
interfaceDescript.getBInterfaceNumber()));
|
interfaceDescript.getBInterfaceNumber()));
|
||||||
System.out.print(String.format(" bAlternateSetting: %d\n",
|
System.out.print(String.format(" bAlternateSetting: %d\n",
|
||||||
interfaceDescript.getBAlternateSetting()));
|
interfaceDescript.getBAlternateSetting()));
|
||||||
System.out.print(String.format(" bNumEndpoints: %d\n",
|
System.out.print(String.format(" bNumEndpoints: %d\n",
|
||||||
interfaceDescript.getBNumEndpoints()));
|
interfaceDescript.getBNumEndpoints()));
|
||||||
System.out.print(String.format(" bInterfaceClass: %d\n",
|
System.out.print(String.format(" bInterfaceClass: %d\n",
|
||||||
interfaceDescript.getBInterfaceClass()));
|
interfaceDescript.getBInterfaceClass()));
|
||||||
System.out.print(String.format(" bInterfaceSubClass: %d\n",
|
System.out.print(String.format(" bInterfaceSubClass: %d\n",
|
||||||
interfaceDescript.getBInterfaceSubClass()));
|
interfaceDescript.getBInterfaceSubClass()));
|
||||||
System.out.print(String.format(" bInterfaceProtocol: %d\n",
|
System.out.print(String.format(" bInterfaceProtocol: %d\n",
|
||||||
interfaceDescript.getBInterfaceProtocol()));
|
interfaceDescript.getBInterfaceProtocol()));
|
||||||
System.out.print(String.format(" iInterface: %d\n",
|
System.out.print(String.format(" iInterface: %d\n",
|
||||||
interfaceDescript.getIInterface()));
|
interfaceDescript.getIInterface()));
|
||||||
|
|
||||||
for (int i = 0; i < interfaceDescript.getBNumEndpoints(); i++) {
|
for (int i = 0; i < interfaceDescript.getBNumEndpoints(); i++) {
|
||||||
printEndpoint(interfaceDescript.getEndpoint()[i]);
|
printEndpoint(interfaceDescript.getEndpoint()[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* prints out interface
|
* prints out interface
|
||||||
*
|
*
|
||||||
* @param usbInterface
|
* @param usbInterface
|
||||||
* The interface.
|
* The interface.
|
||||||
*/
|
*/
|
||||||
private static void printInterface(Usb_Interface usbInterface) {
|
private static void printInterface(Usb_Interface usbInterface) {
|
||||||
for (int i = 0; i < usbInterface.getNumAltsetting(); i++) {
|
for (int i = 0; i < usbInterface.getNumAltsetting(); i++) {
|
||||||
printAltsetting(usbInterface.getAltsetting()[i]);
|
printAltsetting(usbInterface.getAltsetting()[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* prints out configuration
|
* prints out configuration
|
||||||
*
|
*
|
||||||
* @param config
|
* @param config
|
||||||
* The configuration.
|
* The configuration.
|
||||||
*/
|
*/
|
||||||
private static void printConfiguration(Usb_Config_Descriptor config) {
|
private static void printConfiguration(Usb_Config_Descriptor config) {
|
||||||
System.out.print(String.format(" wTotalLength: %d\n", config
|
System.out.print(String.format(" wTotalLength: %d\n", config
|
||||||
.getWTotalLength()));
|
.getWTotalLength()));
|
||||||
System.out.print(String.format(" bNumInterfaces: %d\n", config
|
System.out.print(String.format(" bNumInterfaces: %d\n", config
|
||||||
.getBNumInterfaces()));
|
.getBNumInterfaces()));
|
||||||
System.out.print(String.format(" bConfigurationValue: %d\n", config
|
System.out.print(String.format(" bConfigurationValue: %d\n", config
|
||||||
.getBConfigurationValue()));
|
.getBConfigurationValue()));
|
||||||
System.out.print(String.format(" iConfiguration: %d\n", config
|
System.out.print(String.format(" iConfiguration: %d\n", config
|
||||||
.getIConfiguration()));
|
.getIConfiguration()));
|
||||||
System.out.print(String.format(" bmAttributes: %02xh\n",
|
System.out.print(String.format(" bmAttributes: %02xh\n",
|
||||||
config.getBmAttributes()));
|
config.getBmAttributes()));
|
||||||
System.out.print(String.format(" MaxPower: %d\n", config
|
System.out.print(String.format(" MaxPower: %d\n", config
|
||||||
.getMaxPower()));
|
.getMaxPower()));
|
||||||
|
|
||||||
for (int i = 0; i < config.getBNumInterfaces(); i++) {
|
for (int i = 0; i < config.getBNumInterfaces(); i++) {
|
||||||
printInterface(config.getInterface()[i]);
|
printInterface(config.getInterface()[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static int printDevice(Usb_Device dev, int level) {
|
private static int printDevice(Usb_Device dev, int level) {
|
||||||
long udev;
|
long udev;
|
||||||
String mfr;
|
String mfr;
|
||||||
String product;
|
String product;
|
||||||
String sn;
|
String sn;
|
||||||
String spaces;
|
String spaces;
|
||||||
String descript;
|
String descript;
|
||||||
|
|
||||||
spaces = " ";
|
spaces = " ";
|
||||||
|
|
||||||
udev = LibusbJava.usb_open(dev);
|
udev = LibusbJava.usb_open(dev);
|
||||||
|
|
||||||
if (udev != 0) {
|
if (udev != 0) {
|
||||||
if (dev.getDescriptor().getIManufacturer() != 0) {
|
if (dev.getDescriptor().getIManufacturer() != 0) {
|
||||||
mfr = LibusbJava.usb_get_string_simple(udev, dev
|
mfr = LibusbJava.usb_get_string_simple(udev, dev
|
||||||
.getDescriptor().getIManufacturer());
|
.getDescriptor().getIManufacturer());
|
||||||
|
|
||||||
if (mfr != null) {
|
if (mfr != null) {
|
||||||
descript = String.format("%s - ", mfr);
|
descript = String.format("%s - ", mfr);
|
||||||
} else {
|
} else {
|
||||||
descript = String.format("%04X - ", dev.getDescriptor()
|
descript = String.format("%04X - ", dev.getDescriptor()
|
||||||
.getIdVendor());
|
.getIdVendor());
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
descript = String.format("%04X - ", dev.getDescriptor()
|
descript = String.format("%04X - ", dev.getDescriptor()
|
||||||
.getIdVendor());
|
.getIdVendor());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dev.getDescriptor().getIProduct() != 0) {
|
if (dev.getDescriptor().getIProduct() != 0) {
|
||||||
product = LibusbJava.usb_get_string_simple(udev, dev
|
product = LibusbJava.usb_get_string_simple(udev, dev
|
||||||
.getDescriptor().getIProduct());
|
.getDescriptor().getIProduct());
|
||||||
|
|
||||||
if (product != null) {
|
if (product != null) {
|
||||||
descript = descript + String.format("%s", product);
|
descript = descript + String.format("%s", product);
|
||||||
} else {
|
} else {
|
||||||
descript = descript
|
descript = descript
|
||||||
+ String.format("%04X", dev.getDescriptor()
|
+ String.format("%04X", dev.getDescriptor()
|
||||||
.getIdProduct());
|
.getIdProduct());
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
descript = descript
|
descript = descript
|
||||||
+ String.format("%04X", dev.getDescriptor()
|
+ String.format("%04X", dev.getDescriptor()
|
||||||
.getIdProduct());
|
.getIdProduct());
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
descript = String.format("%04X - %04X", dev.getDescriptor()
|
descript = String.format("%04X - %04X", dev.getDescriptor()
|
||||||
.getIdVendor(), dev.getDescriptor().getIdProduct());
|
.getIdVendor(), dev.getDescriptor().getIdProduct());
|
||||||
}
|
}
|
||||||
|
|
||||||
System.out.print(String.format("%sDev #%d: %s\n", spaces.substring(0,
|
System.out.print(String.format("%sDev #%d: %s\n", spaces.substring(0,
|
||||||
level * 2), dev.getDevnum(), descript));
|
level * 2), dev.getDevnum(), descript));
|
||||||
|
|
||||||
if ((udev != 0) && verbose) {
|
if ((udev != 0) && verbose) {
|
||||||
if (dev.getDescriptor().getISerialNumber() != 0) {
|
if (dev.getDescriptor().getISerialNumber() != 0) {
|
||||||
sn = LibusbJava.usb_get_string_simple(udev, dev.getDescriptor()
|
sn = LibusbJava.usb_get_string_simple(udev, dev.getDescriptor()
|
||||||
.getISerialNumber());
|
.getISerialNumber());
|
||||||
|
|
||||||
if (sn != null) {
|
if (sn != null) {
|
||||||
System.out.print(String.format("%s - Serial Number: %s\n",
|
System.out.print(String.format("%s - Serial Number: %s\n",
|
||||||
spaces.substring(0, level * 2), sn));
|
spaces.substring(0, level * 2), sn));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (udev != 0) {
|
if (udev != 0) {
|
||||||
LibusbJava.usb_close(udev);
|
LibusbJava.usb_close(udev);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (verbose) {
|
if (verbose) {
|
||||||
if (dev.getConfig().length == 0) {
|
if (dev.getConfig().length == 0) {
|
||||||
System.out.print(" Couldn't retrieve descriptors\n");
|
System.out.print(" Couldn't retrieve descriptors\n");
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int i = 0; i < dev.getDescriptor().getBNumConfigurations(); i++) {
|
for (int i = 0; i < dev.getDescriptor().getBNumConfigurations(); i++) {
|
||||||
printConfiguration(dev.getConfig()[i]);
|
printConfiguration(dev.getConfig()[i]);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
Usb_Device childDev = null;
|
Usb_Device childDev = null;
|
||||||
|
|
||||||
for (int i = 0; i < dev.getNumChildren(); i++) {
|
for (int i = 0; i < dev.getNumChildren(); i++) {
|
||||||
if (i == 0) {
|
if (i == 0) {
|
||||||
childDev = dev.getChildren();
|
childDev = dev.getChildren();
|
||||||
} else {
|
} else {
|
||||||
childDev = childDev.getNext();
|
childDev = childDev.getNext();
|
||||||
}
|
}
|
||||||
|
|
||||||
printDevice(childDev, level + 1);
|
printDevice(childDev, level + 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
} // end of printDevice method
|
} // end of printDevice method
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The main method.
|
* The main method.
|
||||||
*
|
*
|
||||||
* @param args
|
* @param args
|
||||||
* The command line arguments.
|
* The command line arguments.
|
||||||
*/
|
*/
|
||||||
public static void main(String args[]) throws Exception {
|
public static void main(String args[]) throws Exception {
|
||||||
if ((args.length > 0) && (args[0].equals("-v"))) {
|
if ((args.length > 0) && (args[0].equals("-v"))) {
|
||||||
verbose = true;
|
verbose = true;
|
||||||
} else {
|
} else {
|
||||||
verbose = false;
|
verbose = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// used for debugging. 0 = no debugging, 255 = with debugging
|
// used for debugging. 0 = no debugging, 255 = with debugging
|
||||||
LibusbJava.usb_init();
|
LibusbJava.usb_init();
|
||||||
LibusbJava.usb_set_debug(255);
|
LibusbJava.usb_set_debug(255);
|
||||||
|
|
||||||
LibusbJava.usb_find_busses();
|
LibusbJava.usb_find_busses();
|
||||||
LibusbJava.usb_find_devices();
|
LibusbJava.usb_find_devices();
|
||||||
|
|
||||||
for (Usb_Bus bus = LibusbJava.usb_get_busses(); bus != null; bus = bus
|
for (Usb_Bus bus = LibusbJava.usb_get_busses(); bus != null; bus = bus
|
||||||
.getNext()) {
|
.getNext()) {
|
||||||
if ((bus.getRootDev() != null) && !verbose) {
|
if ((bus.getRootDev() != null) && !verbose) {
|
||||||
printDevice(bus.getRootDev(), 0);
|
printDevice(bus.getRootDev(), 0);
|
||||||
} else {
|
} else {
|
||||||
for (Usb_Device dev = bus.getDevices(); dev != null; dev = dev
|
for (Usb_Device dev = bus.getDevices(); dev != null; dev = dev
|
||||||
.getNext()) {
|
.getNext()) {
|
||||||
printDevice(dev, 0);
|
printDevice(dev, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} // end main
|
} // end main
|
||||||
} // end of TestLibUsbJava class
|
} // end of TestLibUsbJava class
|
||||||
|
|||||||
@@ -12,23 +12,23 @@ import ch.ntb.usb.testApp.AbstractDeviceInfo;
|
|||||||
|
|
||||||
public class AT90USB1287 extends AbstractDeviceInfo {
|
public class AT90USB1287 extends AbstractDeviceInfo {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void initValues() {
|
public void initValues() {
|
||||||
setIdVendor((short) 0x8235);
|
setIdVendor((short) 0x8235);
|
||||||
setIdProduct((short) 0x0200);
|
setIdProduct((short) 0x0200);
|
||||||
setTimeout(2000);
|
setTimeout(2000);
|
||||||
setConfiguration(1);
|
setConfiguration(1);
|
||||||
setInterface(0);
|
setInterface(0);
|
||||||
setAltinterface(-1);
|
setAltinterface(-1);
|
||||||
setOutEPBulk(0x01);
|
setOutEPBulk(0x01);
|
||||||
setInEPBulk(0x82);
|
setInEPBulk(0x82);
|
||||||
setOutEPInt(0x01);
|
setOutEPInt(0x01);
|
||||||
setInEPInt(0x82);
|
setInEPInt(0x82);
|
||||||
setSleepTimeout(2000);
|
setSleepTimeout(2000);
|
||||||
setMaxDataSize(USB.FULLSPEED_MAX_BULK_PACKET_SIZE);
|
setMaxDataSize(USB.FULLSPEED_MAX_BULK_PACKET_SIZE);
|
||||||
setMode(TransferMode.Bulk);
|
setMode(TransferMode.Bulk);
|
||||||
setManufacturer("inf.ntb.ch");
|
setManufacturer("inf.ntb.ch");
|
||||||
setProduct("JUnit Test Board");
|
setProduct("JUnit Test Board");
|
||||||
setSerialVersion("00.10.00");
|
setSerialVersion("00.10.00");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,20 +12,20 @@ import ch.ntb.usb.testApp.AbstractDeviceInfo;
|
|||||||
|
|
||||||
public class CY7C68013A extends AbstractDeviceInfo {
|
public class CY7C68013A extends AbstractDeviceInfo {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void initValues() {
|
public void initValues() {
|
||||||
setIdVendor((short) 0x8235);
|
setIdVendor((short) 0x8235);
|
||||||
setIdProduct((short) 0x0222);
|
setIdProduct((short) 0x0222);
|
||||||
setTimeout(2000);
|
setTimeout(2000);
|
||||||
setConfiguration(1);
|
setConfiguration(1);
|
||||||
setInterface(0);
|
setInterface(0);
|
||||||
setAltinterface(-1);
|
setAltinterface(-1);
|
||||||
setOutEPInt(0x02);
|
setOutEPInt(0x02);
|
||||||
setInEPInt(0x86);
|
setInEPInt(0x86);
|
||||||
setOutEPBulk(0x04);
|
setOutEPBulk(0x04);
|
||||||
setInEPBulk(0x88);
|
setInEPBulk(0x88);
|
||||||
setSleepTimeout(2000);
|
setSleepTimeout(2000);
|
||||||
setMaxDataSize(USB.HIGHSPEED_MAX_BULK_PACKET_SIZE);
|
setMaxDataSize(USB.HIGHSPEED_MAX_BULK_PACKET_SIZE);
|
||||||
setMode(TransferMode.Bulk);
|
setMode(TransferMode.Bulk);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,22 +11,22 @@ import ch.ntb.usb.testApp.AbstractDeviceInfo;
|
|||||||
|
|
||||||
public class MX500 extends AbstractDeviceInfo {
|
public class MX500 extends AbstractDeviceInfo {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void initValues() {
|
public void initValues() {
|
||||||
setIdVendor((short) 0x046d);
|
setIdVendor((short) 0x046d);
|
||||||
setIdProduct((short) 0xc025);
|
setIdProduct((short) 0xc025);
|
||||||
setTimeout(2000);
|
setTimeout(2000);
|
||||||
setConfiguration(1);
|
setConfiguration(1);
|
||||||
setInterface(0);
|
setInterface(0);
|
||||||
setAltinterface(0);
|
setAltinterface(0);
|
||||||
setOutEPInt(-1);
|
setOutEPInt(-1);
|
||||||
setInEPInt(0x81);
|
setInEPInt(0x81);
|
||||||
setOutEPBulk(-1);
|
setOutEPBulk(-1);
|
||||||
setInEPBulk(-1);
|
setInEPBulk(-1);
|
||||||
setSleepTimeout(5000);
|
setSleepTimeout(5000);
|
||||||
setMaxDataSize(5);
|
setMaxDataSize(5);
|
||||||
setMode(TransferMode.Interrupt);
|
setMode(TransferMode.Interrupt);
|
||||||
// we only read data -> don't compare
|
// we only read data -> don't compare
|
||||||
setDoCompareData(false);
|
setDoCompareData(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,24 +11,24 @@ import ch.ntb.usb.testApp.AbstractDeviceInfo;
|
|||||||
|
|
||||||
public class MousePlus extends AbstractDeviceInfo {
|
public class MousePlus extends AbstractDeviceInfo {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void initValues() {
|
public void initValues() {
|
||||||
setIdVendor((short) 0x046d);
|
setIdVendor((short) 0x046d);
|
||||||
setIdProduct((short) 0xc016);
|
setIdProduct((short) 0xc016);
|
||||||
setBusName("bus-0");
|
setBusName("bus-0");
|
||||||
setFilename("\\\\.\\libusb0-0001--0x046d-0xc016");
|
setFilename("\\\\.\\libusb0-0001--0x046d-0xc016");
|
||||||
setTimeout(2000);
|
setTimeout(2000);
|
||||||
setConfiguration(1);
|
setConfiguration(1);
|
||||||
setInterface(0);
|
setInterface(0);
|
||||||
setAltinterface(0);
|
setAltinterface(0);
|
||||||
setOutEPInt(-1);
|
setOutEPInt(-1);
|
||||||
setInEPInt(0x81);
|
setInEPInt(0x81);
|
||||||
setOutEPBulk(-1);
|
setOutEPBulk(-1);
|
||||||
setInEPBulk(-1);
|
setInEPBulk(-1);
|
||||||
setSleepTimeout(5000);
|
setSleepTimeout(5000);
|
||||||
setMaxDataSize(4);
|
setMaxDataSize(4);
|
||||||
setMode(TransferMode.Interrupt);
|
setMode(TransferMode.Interrupt);
|
||||||
// we only read data -> don't compare
|
// we only read data -> don't compare
|
||||||
setDoCompareData(false);
|
setDoCompareData(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,63 +14,63 @@ import ch.ntb.usb.exceptions.LibusbError;
|
|||||||
|
|
||||||
@RunWith(Parameterized.class)
|
@RunWith(Parameterized.class)
|
||||||
public class LibusbErrorTest {
|
public class LibusbErrorTest {
|
||||||
@Parameters
|
@Parameters
|
||||||
public static Collection<Object[]> codesToTest() {
|
public static Collection<Object[]> codesToTest() {
|
||||||
return Arrays.asList(new Object[][] { {"ERROR_UNKNWON (0)", 0 },
|
return Arrays.asList(new Object[][] { {"ERROR_UNKNWON (0)", 0 },
|
||||||
{"ERROR_IO", -1 },
|
{"ERROR_IO", -1 },
|
||||||
{"ERROR_INVALID_PARAM", -2},
|
{"ERROR_INVALID_PARAM", -2},
|
||||||
{"ERROR_ACCESS", -3},
|
{"ERROR_ACCESS", -3},
|
||||||
{"ERROR_NO_DEVICE", -4},
|
{"ERROR_NO_DEVICE", -4},
|
||||||
{"ERROR_NOT_FOUND", -5},
|
{"ERROR_NOT_FOUND", -5},
|
||||||
{"ERROR_BUSY", -6},
|
{"ERROR_BUSY", -6},
|
||||||
{"ERROR_TIMEOUT", -7},
|
{"ERROR_TIMEOUT", -7},
|
||||||
{"ERROR_OVERFLOW", -8},
|
{"ERROR_OVERFLOW", -8},
|
||||||
{"ERROR_PIPE", -9},
|
{"ERROR_PIPE", -9},
|
||||||
{"ERROR_INTERRUPTED", -10},
|
{"ERROR_INTERRUPTED", -10},
|
||||||
{"ERROR_NO_MEM", -11},
|
{"ERROR_NO_MEM", -11},
|
||||||
{"ERROR_NOT_SUPPORTED", -12},
|
{"ERROR_NOT_SUPPORTED", -12},
|
||||||
{"ERROR_UNKNWON (-13)", -13},
|
{"ERROR_UNKNWON (-13)", -13},
|
||||||
{"ERROR_UNKNWON (-98)", -98},
|
{"ERROR_UNKNWON (-98)", -98},
|
||||||
{"ERROR_JAVA_REFERENCES_NOT_LOADED", -100},
|
{"ERROR_JAVA_REFERENCES_NOT_LOADED", -100},
|
||||||
{"ERROR_JAVA_WRONG_ENVIRONMENT", -101},
|
{"ERROR_JAVA_WRONG_ENVIRONMENT", -101},
|
||||||
{"ERROR_JAVA_ILEGAL_DEVICE_HANDLE", -102},
|
{"ERROR_JAVA_ILEGAL_DEVICE_HANDLE", -102},
|
||||||
{"ERROR_UNKNWON (-103)", -103},
|
{"ERROR_UNKNWON (-103)", -103},
|
||||||
{"ERROR_OTHER", -99} });
|
{"ERROR_OTHER", -99} });
|
||||||
}
|
}
|
||||||
|
|
||||||
private String exp_desc;
|
private String exp_desc;
|
||||||
private int code;
|
private int code;
|
||||||
private LibusbError e;
|
private LibusbError e;
|
||||||
|
|
||||||
public LibusbErrorTest(String exp_desc, int code) {
|
public LibusbErrorTest(String exp_desc, int code) {
|
||||||
this.exp_desc = exp_desc;
|
this.exp_desc = exp_desc;
|
||||||
this.code = code;
|
this.code = code;
|
||||||
try {
|
try {
|
||||||
throw new LibusbError(code);
|
throw new LibusbError(code);
|
||||||
} catch (LibusbError e) {
|
} catch (LibusbError e) {
|
||||||
this.e = e;
|
this.e = e;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testGetErrorCode() {
|
public void testGetErrorCode() {
|
||||||
assertEquals("Error code is correct", e.getErrorCode(), code);
|
assertEquals("Error code is correct", e.getErrorCode(), code);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testGetStringFromCode() {
|
public void testGetStringFromCode() {
|
||||||
String gen_desc = LibusbError.getStringFromCode(code);
|
String gen_desc = LibusbError.getStringFromCode(code);
|
||||||
assertEquals("Correct error description for " + code, exp_desc, gen_desc);
|
assertEquals("Correct error description for " + code, exp_desc, gen_desc);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testGetErrorString() {
|
public void testGetErrorString() {
|
||||||
assertEquals("Correct error string for " + code, e.getErrorString(), exp_desc);
|
assertEquals("Correct error string for " + code, e.getErrorString(), exp_desc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testGetMessage() {
|
public void testGetMessage() {
|
||||||
assertEquals("Correct error string for " + code, e.getMessage(), "libusb result: " + exp_desc);
|
assertEquals("Correct error string for " + code, e.getMessage(), "libusb result: " + exp_desc);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user