Replace tabs with spaces

This commit is contained in:
2015-09-01 13:17:55 +01:00
parent a86b4d35ed
commit e7bf70ef9f
38 changed files with 7816 additions and 7816 deletions

View File

@@ -89,7 +89,7 @@ libraries {
cppCompiler.args "-I${org.gradle.internal.jvm.Jvm.current().javaHome}/include/win32"
linker.args '-Wl,--kill-at', '-static-libgcc', '-static-libstdc++'
tasks.withType(CppCompile) { task ->
//task.dependsOn jniHeaders
task.dependsOn jniHeaders
}
lib library: 'usb', linkage: 'static'

View File

@@ -9,203 +9,203 @@ package ch.ntb.usb.testApp;
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 {
Bulk, Interrupt
}
public static enum TransferMode {
Bulk, Interrupt
}
public AbstractDeviceInfo() {
initValues();
}
public AbstractDeviceInfo() {
initValues();
}
abstract public void initValues();
abstract public void initValues();
public int getAltinterface() {
return altinterface;
}
public int getAltinterface() {
return altinterface;
}
public int getConfiguration() {
return configuration;
}
public int getConfiguration() {
return configuration;
}
public short getIdProduct() {
return idProduct;
}
public short getIdProduct() {
return idProduct;
}
public short getIdVendor() {
return idVendor;
}
public short getIdVendor() {
return idVendor;
}
public int getInEPBulk() {
return inEPBulk;
}
public int getInEPBulk() {
return inEPBulk;
}
public int getInEPInt() {
return inEPInt;
}
public int getInEPInt() {
return inEPInt;
}
public int getInterface() {
return interface_;
}
public int getInterface() {
return interface_;
}
public int getMaxDataSize() {
return maxDataSize;
}
public int getMaxDataSize() {
return maxDataSize;
}
public int getOutEPBulk() {
return outEPBulk;
}
public int getOutEPBulk() {
return outEPBulk;
}
public int getOutEPInt() {
return outEPInt;
}
public int getOutEPInt() {
return outEPInt;
}
public int getSleepTimeout() {
return sleepTimeout;
}
public int getSleepTimeout() {
return sleepTimeout;
}
public int getTimeout() {
return timeout;
}
public int getTimeout() {
return timeout;
}
public void setAltinterface(int altinterface) {
this.altinterface = altinterface;
}
public void setAltinterface(int altinterface) {
this.altinterface = altinterface;
}
public void setConfiguration(int configuration) {
this.configuration = configuration;
}
public void setConfiguration(int configuration) {
this.configuration = configuration;
}
public void setIdProduct(short idProduct) {
this.idProduct = idProduct;
}
public void setIdProduct(short idProduct) {
this.idProduct = idProduct;
}
public void setIdVendor(short idVendor) {
this.idVendor = idVendor;
}
public void setIdVendor(short idVendor) {
this.idVendor = idVendor;
}
public void setInEPBulk(int in_ep_bulk) {
this.inEPBulk = in_ep_bulk;
}
public void setInEPBulk(int in_ep_bulk) {
this.inEPBulk = in_ep_bulk;
}
public void setInEPInt(int in_ep_int) {
this.inEPInt = in_ep_int;
}
public void setInEPInt(int in_ep_int) {
this.inEPInt = in_ep_int;
}
public void setInterface(int interface_) {
this.interface_ = interface_;
}
public void setInterface(int interface_) {
this.interface_ = interface_;
}
public void setMaxDataSize(int maxDataSize) {
this.maxDataSize = maxDataSize;
}
public void setMaxDataSize(int maxDataSize) {
this.maxDataSize = maxDataSize;
}
public void setOutEPBulk(int out_ep_bulk) {
this.outEPBulk = out_ep_bulk;
}
public void setOutEPBulk(int out_ep_bulk) {
this.outEPBulk = out_ep_bulk;
}
public void setOutEPInt(int out_ep_int) {
this.outEPInt = out_ep_int;
}
public void setOutEPInt(int out_ep_int) {
this.outEPInt = out_ep_int;
}
public void setSleepTimeout(int sleepTimeout) {
this.sleepTimeout = sleepTimeout;
}
public void setSleepTimeout(int sleepTimeout) {
this.sleepTimeout = sleepTimeout;
}
public void setTimeout(int timeout) {
this.timeout = timeout;
}
public void setTimeout(int timeout) {
this.timeout = timeout;
}
public TransferMode getMode() {
return mode;
}
public TransferMode getMode() {
return mode;
}
public void setMode(TransferMode mode) {
this.mode = mode;
}
public void setMode(TransferMode mode) {
this.mode = mode;
}
public boolean doCompareData() {
return compareData;
}
public boolean doCompareData() {
return compareData;
}
public void setDoCompareData(boolean compareData) {
this.compareData = compareData;
}
public void setDoCompareData(boolean compareData) {
this.compareData = compareData;
}
public String getManufacturer() {
return manufacturer;
}
public String getManufacturer() {
return manufacturer;
}
public void setManufacturer(String manufacturer) {
this.manufacturer = manufacturer;
}
public void setManufacturer(String manufacturer) {
this.manufacturer = manufacturer;
}
public String getProduct() {
return product;
}
public String getProduct() {
return product;
}
public void setProduct(String product) {
this.product = product;
}
public void setProduct(String product) {
this.product = product;
}
public String getSerialVersion() {
return serialVersion;
}
public String getSerialVersion() {
return serialVersion;
}
public void setSerialVersion(String serialVersion) {
this.serialVersion = serialVersion;
}
public void setSerialVersion(String serialVersion) {
this.serialVersion = serialVersion;
}
public String getFilename() {
return filename;
}
public String getFilename() {
return filename;
}
public void setFilename(String filename) {
this.filename = filename;
}
public void setFilename(String filename) {
this.filename = filename;
}
public String getBusName() {
return busName;
}
public String getBusName() {
return busName;
}
public void setBusName(String busName) {
this.busName = busName;
}
public void setBusName(String busName) {
this.busName = busName;
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -18,174 +18,174 @@ import ch.ntb.usb.logger.LogUtil;
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 outMode;
private TransferMode inMode;
private TransferMode outMode;
public TestDevice() {
logger.setLevel(Level.ALL);
// create a vector for transfer types
transferTypes = new Vector<String>();
transferTypes
.add(TransferMode.Bulk.ordinal(), TransferMode.Bulk.name());
transferTypes.add(TransferMode.Interrupt.ordinal(),
TransferMode.Interrupt.name());
inMode = TransferMode.Bulk;
outMode = TransferMode.Bulk;
}
public TestDevice() {
logger.setLevel(Level.ALL);
// create a vector for transfer types
transferTypes = new Vector<String>();
transferTypes
.add(TransferMode.Bulk.ordinal(), TransferMode.Bulk.name());
transferTypes.add(TransferMode.Interrupt.ordinal(),
TransferMode.Interrupt.name());
inMode = TransferMode.Bulk;
outMode = TransferMode.Bulk;
}
@Override
public void initValues() {
setIdVendor((short) 0x8235);
setIdProduct((short) 0x0200);
setTimeout(2000);
setConfiguration(1);
setInterface(0);
setAltinterface(-1);
setOutEPBulk(0x01);
setInEPBulk(0x82);
setOutEPInt(0x01);
setInEPInt(0x82);
setSleepTimeout(2000);
setMaxDataSize(USB.FULLSPEED_MAX_BULK_PACKET_SIZE);
setMode(TransferMode.Bulk);
}
@Override
public void initValues() {
setIdVendor((short) 0x8235);
setIdProduct((short) 0x0200);
setTimeout(2000);
setConfiguration(1);
setInterface(0);
setAltinterface(-1);
setOutEPBulk(0x01);
setInEPBulk(0x82);
setOutEPInt(0x01);
setInEPInt(0x82);
setSleepTimeout(2000);
setMaxDataSize(USB.FULLSPEED_MAX_BULK_PACKET_SIZE);
setMode(TransferMode.Bulk);
}
public void openUsbDevice() {
dev = USB.getDevice(getIdVendor(), getIdProduct());
try {
dev.open(getConfiguration(), getInterface(), getAltinterface());
logger.info("device opened, interface claimed");
} catch (USBException e) {
e.printStackTrace();
}
}
public void openUsbDevice() {
dev = USB.getDevice(getIdVendor(), getIdProduct());
try {
dev.open(getConfiguration(), getInterface(), getAltinterface());
logger.info("device opened, interface claimed");
} catch (USBException e) {
e.printStackTrace();
}
}
public void closeUsbDevice() {
try {
if (dev != null) {
dev.close();
logger.info("device closed");
} else {
logger.warning("no device to close -> open first");
}
} catch (USBException e) {
e.printStackTrace();
}
}
public void closeUsbDevice() {
try {
if (dev != null) {
dev.close();
logger.info("device closed");
} else {
logger.warning("no device to close -> open first");
}
} catch (USBException e) {
e.printStackTrace();
}
}
public void resetUsbDevice() {
try {
if (dev != null) {
dev.reset();
logger.info("device reset");
} else {
logger.warning("no device to reset -> open first");
}
} catch (USBException e) {
e.printStackTrace();
}
}
public void resetUsbDevice() {
try {
if (dev != null) {
dev.reset();
logger.info("device reset");
} else {
logger.warning("no device to reset -> open first");
}
} catch (USBException e) {
e.printStackTrace();
}
}
public void write(byte[] data, int length) {
int lenWritten = 0;
try {
if (dev != null) {
StringBuffer sb = new StringBuffer();
switch (getOutMode()) {
case Bulk:
lenWritten = dev.writeBulk(getOutEPBulk(), data, length,
getTimeout(), false);
sb.append("write_bulk, ep: 0x"
+ Integer.toHexString(getOutEPBulk()) + ", "
+ lenWritten + " Bytes sent: ");
break;
case Interrupt:
lenWritten = dev.writeInterrupt(getOutEPInt(), data,
length, getTimeout(), false);
sb.append("write_interrupt, ep: 0x"
+ Integer.toHexString(getOutEPInt()) + ", "
+ lenWritten + " Bytes sent: ");
break;
}
for (int i = 0; i < lenWritten; i++) {
sb.append("0x" + String.format("%1$02X", data[i]) + " ");
}
logger.info(sb.toString());
} else {
logger.warning("no device opened");
}
} catch (USBException e) {
e.printStackTrace();
}
}
public void write(byte[] data, int length) {
int lenWritten = 0;
try {
if (dev != null) {
StringBuffer sb = new StringBuffer();
switch (getOutMode()) {
case Bulk:
lenWritten = dev.writeBulk(getOutEPBulk(), data, length,
getTimeout(), false);
sb.append("write_bulk, ep: 0x"
+ Integer.toHexString(getOutEPBulk()) + ", "
+ lenWritten + " Bytes sent: ");
break;
case Interrupt:
lenWritten = dev.writeInterrupt(getOutEPInt(), data,
length, getTimeout(), false);
sb.append("write_interrupt, ep: 0x"
+ Integer.toHexString(getOutEPInt()) + ", "
+ lenWritten + " Bytes sent: ");
break;
}
for (int i = 0; i < lenWritten; i++) {
sb.append("0x" + String.format("%1$02X", data[i]) + " ");
}
logger.info(sb.toString());
} else {
logger.warning("no device opened");
}
} catch (USBException e) {
e.printStackTrace();
}
}
public void read() {
if (dev != null) {
byte[] data = new byte[dev.getMaxPacketSize()];
int lenRead = 0;
try {
StringBuffer sb = new StringBuffer();
switch (getInMode()) {
case Bulk:
lenRead = dev.readBulk(getInEPBulk(), data, dev
.getMaxPacketSize(), getTimeout(), false);
sb.append("read_bulk, ep: 0x"
+ Integer.toHexString(getInEPBulk()) + ", "
+ lenRead + " Bytes received: Data: ");
break;
case Interrupt:
lenRead = dev.readInterrupt(getInEPInt(), data, dev
.getMaxPacketSize(), getTimeout(), false);
sb.append("read_interrupt, ep: 0x"
+ Integer.toHexString(getInEPInt()) + ", "
+ lenRead + " Bytes received: Data: ");
break;
}
for (int i = 0; i < lenRead; i++) {
sb.append("0x" + String.format("%1$02X", data[i]) + " ");
}
logger.info(sb.toString());
} catch (USBException e) {
e.printStackTrace();
}
} else {
logger.warning("no device opened");
}
}
public void read() {
if (dev != null) {
byte[] data = new byte[dev.getMaxPacketSize()];
int lenRead = 0;
try {
StringBuffer sb = new StringBuffer();
switch (getInMode()) {
case Bulk:
lenRead = dev.readBulk(getInEPBulk(), data, dev
.getMaxPacketSize(), getTimeout(), false);
sb.append("read_bulk, ep: 0x"
+ Integer.toHexString(getInEPBulk()) + ", "
+ lenRead + " Bytes received: Data: ");
break;
case Interrupt:
lenRead = dev.readInterrupt(getInEPInt(), data, dev
.getMaxPacketSize(), getTimeout(), false);
sb.append("read_interrupt, ep: 0x"
+ Integer.toHexString(getInEPInt()) + ", "
+ lenRead + " Bytes received: Data: ");
break;
}
for (int i = 0; i < lenRead; i++) {
sb.append("0x" + String.format("%1$02X", data[i]) + " ");
}
logger.info(sb.toString());
} catch (USBException e) {
e.printStackTrace();
}
} else {
logger.warning("no device opened");
}
}
public String getSendData() {
return sendData;
}
public String getSendData() {
return sendData;
}
public void setSendData(String sendData) {
this.sendData = sendData;
}
public void setSendData(String sendData) {
this.sendData = sendData;
}
public Vector<String> getTransferTypes() {
return transferTypes;
}
public Vector<String> getTransferTypes() {
return transferTypes;
}
public TransferMode getOutMode() {
return outMode;
}
public TransferMode getOutMode() {
return outMode;
}
public void setOutMode(TransferMode outMode) {
this.outMode = outMode;
}
public void setOutMode(TransferMode outMode) {
this.outMode = outMode;
}
public TransferMode getInMode() {
return inMode;
}
public TransferMode getInMode() {
return inMode;
}
public void setInMode(TransferMode inMode) {
this.inMode = inMode;
}
public void setInMode(TransferMode inMode) {
this.inMode = inMode;
}
}

View File

@@ -30,496 +30,496 @@ import ch.ntb.usb.exceptions.LibusbError;
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>
*
* @param rootBus
* the root bus from which the data is read
* @param textArea
* the text area to which the data is written
*/
public UsbTreeModel(Usb_Bus rootBus, JTextArea textArea) {
this.rootBus = rootBus;
this.textArea = textArea;
}
/**
* Default constructor.<br>
*
* @param rootBus
* the root bus from which the data is read
* @param textArea
* the text area to which the data is written
*/
public UsbTreeModel(Usb_Bus rootBus, JTextArea textArea) {
this.rootBus = rootBus;
this.textArea = textArea;
}
/**
* Returns the root of the tree.
*/
public Object getRoot() {
return USB_ROOT;
}
/**
* Returns the root of the tree.
*/
public Object getRoot() {
return USB_ROOT;
}
/**
* Returns the child of parent at index index in the parent's child array.
*/
public Object getChild(Object parent, int index) {
/**
* Returns the child of parent at index index in the parent's child array.
*/
public Object getChild(Object parent, int index) {
if (parent instanceof String
&& ((String) parent).compareTo(USB_ROOT) == 0) {
Usb_Bus curBus = rootBus;
if (parent instanceof String
&& ((String) parent).compareTo(USB_ROOT) == 0) {
Usb_Bus curBus = rootBus;
for (int i = 0; curBus != null; curBus = curBus.getNext(), i++) {
if (i == index)
return curBus;
}
}
for (int i = 0; curBus != null; curBus = curBus.getNext(), i++) {
if (i == index)
return curBus;
}
}
else if (parent instanceof Usb_Bus) {
Usb_Device device = ((Usb_Bus) parent).getDevices();
int count = 0;
while (device != null) {
if (count == index)
return device;
count++;
device = device.getNext();
}
return null;
} else if (parent instanceof Usb_Device) {
Usb_Device dev = (Usb_Device) parent;
// return the Usb_Device_Descriptor at index 0
if (index == 0) {
return dev.getDescriptor();
}
Usb_Config_Descriptor[] confDescs = dev.getConfig();
if (index >= confDescs.length + 1)
return null;
return confDescs[index - 1];
} else if (parent instanceof Usb_Config_Descriptor) {
Usb_Interface[] intDescs = ((Usb_Config_Descriptor) parent)
.getInterface();
if (index >= intDescs.length)
return null;
return intDescs[index];
} else if (parent instanceof Usb_Interface) {
Usb_Interface_Descriptor[] altSettings = ((Usb_Interface) parent)
.getAltsetting();
if (index >= altSettings.length)
return null;
return altSettings[index];
} else if (parent instanceof Usb_Interface_Descriptor) {
Usb_Endpoint_Descriptor[] endpoints = ((Usb_Interface_Descriptor) parent)
.getEndpoint();
if (index >= endpoints.length)
return null;
return endpoints[index];
}
return null;
}
else if (parent instanceof Usb_Bus) {
Usb_Device device = ((Usb_Bus) parent).getDevices();
int count = 0;
while (device != null) {
if (count == index)
return device;
count++;
device = device.getNext();
}
return null;
} else if (parent instanceof Usb_Device) {
Usb_Device dev = (Usb_Device) parent;
// return the Usb_Device_Descriptor at index 0
if (index == 0) {
return dev.getDescriptor();
}
Usb_Config_Descriptor[] confDescs = dev.getConfig();
if (index >= confDescs.length + 1)
return null;
return confDescs[index - 1];
} else if (parent instanceof Usb_Config_Descriptor) {
Usb_Interface[] intDescs = ((Usb_Config_Descriptor) parent)
.getInterface();
if (index >= intDescs.length)
return null;
return intDescs[index];
} else if (parent instanceof Usb_Interface) {
Usb_Interface_Descriptor[] altSettings = ((Usb_Interface) parent)
.getAltsetting();
if (index >= altSettings.length)
return null;
return altSettings[index];
} else if (parent instanceof Usb_Interface_Descriptor) {
Usb_Endpoint_Descriptor[] endpoints = ((Usb_Interface_Descriptor) parent)
.getEndpoint();
if (index >= endpoints.length)
return null;
return endpoints[index];
}
return null;
}
/**
* Returns the number of children of parent.
*/
public int getChildCount(Object parent) {
if (parent instanceof String
&& ((String) parent).compareTo(USB_ROOT) == 0) {
int count = 0;
/**
* Returns the number of children of parent.
*/
public int getChildCount(Object parent) {
if (parent instanceof String
&& ((String) parent).compareTo(USB_ROOT) == 0) {
int count = 0;
Usb_Bus curBus = rootBus;
Usb_Bus curBus = rootBus;
for (; curBus != null; curBus = curBus.getNext()) {
count++;
}
for (; curBus != null; curBus = curBus.getNext()) {
count++;
}
return count;
return count;
} else if (parent instanceof Usb_Bus) {
Usb_Device device = ((Usb_Bus) parent).getDevices();
int count = 0;
while (device != null) {
count++;
device = device.getNext();
}
return count;
} else if (parent instanceof Usb_Device) {
// add the Usb_Device_Descriptor
return ((Usb_Device) parent).getConfig().length + 1;
} else if (parent instanceof Usb_Config_Descriptor) {
return ((Usb_Config_Descriptor) parent).getInterface().length;
} else if (parent instanceof Usb_Interface) {
return ((Usb_Interface) parent).getAltsetting().length;
} else if (parent instanceof Usb_Interface_Descriptor) {
return ((Usb_Interface_Descriptor) parent).getEndpoint().length;
}
return 0;
}
} else if (parent instanceof Usb_Bus) {
Usb_Device device = ((Usb_Bus) parent).getDevices();
int count = 0;
while (device != null) {
count++;
device = device.getNext();
}
return count;
} else if (parent instanceof Usb_Device) {
// add the Usb_Device_Descriptor
return ((Usb_Device) parent).getConfig().length + 1;
} else if (parent instanceof Usb_Config_Descriptor) {
return ((Usb_Config_Descriptor) parent).getInterface().length;
} else if (parent instanceof Usb_Interface) {
return ((Usb_Interface) parent).getAltsetting().length;
} else if (parent instanceof Usb_Interface_Descriptor) {
return ((Usb_Interface_Descriptor) parent).getEndpoint().length;
}
return 0;
}
/**
* Returns true if node is a leaf.
*/
public boolean isLeaf(Object node) {
return false;
}
/**
* Returns true if node is a leaf.
*/
public boolean isLeaf(Object node) {
return false;
}
/**
* Messaged when the user has altered the value for the item identified by
* path to newValue. Not used by this model.
*/
public void valueForPathChanged(TreePath path, Object newValue) {
System.out.println("*** valueForPathChanged : " + path + " --> "
+ newValue);
}
/**
* Messaged when the user has altered the value for the item identified by
* path to newValue. Not used by this model.
*/
public void valueForPathChanged(TreePath path, Object newValue) {
System.out.println("*** valueForPathChanged : " + path + " --> "
+ newValue);
}
/**
* Returns the index of child in parent.
*/
public int getIndexOfChild(Object parent, Object child) {
return 0;
}
/**
* Returns the index of child in parent.
*/
public int getIndexOfChild(Object parent, Object child) {
return 0;
}
public void addTreeModelListener(TreeModelListener l) {
treeModelListeners.addElement(l);
}
public void addTreeModelListener(TreeModelListener l) {
treeModelListeners.addElement(l);
}
public void removeTreeModelListener(TreeModelListener l) {
treeModelListeners.removeElement(l);
}
public void removeTreeModelListener(TreeModelListener l) {
treeModelListeners.removeElement(l);
}
/**
* The only event raised by this model is TreeStructureChanged with the root
* as path, i.e. the whole tree has changed.
*/
protected void fireTreeStructureChanged(Usb_Bus newRootBus) {
rootBus = newRootBus;
int len = treeModelListeners.size();
TreeModelEvent e = new TreeModelEvent(this, new Object[] { newRootBus });
for (int i = 0; i < len; i++) {
treeModelListeners.elementAt(i).treeStructureChanged(e);
}
}
/**
* The only event raised by this model is TreeStructureChanged with the root
* as path, i.e. the whole tree has changed.
*/
protected void fireTreeStructureChanged(Usb_Bus newRootBus) {
rootBus = newRootBus;
int len = treeModelListeners.size();
TreeModelEvent e = new TreeModelEvent(this, new Object[] { newRootBus });
for (int i = 0; i < len; i++) {
treeModelListeners.elementAt(i).treeStructureChanged(e);
}
}
public void valueChanged(TreeSelectionEvent e) {
JTree tree = (JTree) e.getSource();
Object component = tree.getLastSelectedPathComponent();
if (component instanceof Usb_Bus) {
Usb_Bus bus = (Usb_Bus) component;
StringBuffer sb = new StringBuffer("Usb_Bus\n");
sb.append("\tdirname: " + bus.getDirname() + "\n");
sb.append("\tlocation: 0x" + Long.toHexString(bus.getLocation())
+ "\n");
textArea.setText(sb.toString());
} else if (component instanceof Usb_Device) {
Usb_Device device = (Usb_Device) component;
StringBuffer sb = new StringBuffer("Usb_Device\n");
sb.append("\tfilename: " + device.getFilename() + "\n");
sb.append("\tdevnum: " + device.getDevnum() + "\n");
sb.append("\tnum_children: " + device.getNumChildren() + "\n");
textArea.setText(sb.toString());
} else if (component instanceof Usb_Device_Descriptor) {
Usb_Device_Descriptor devDesc = (Usb_Device_Descriptor) component;
StringBuffer sb = new StringBuffer("Usb_Device_Descriptor\n");
sb.append("\tblenght: 0x"
+ Integer.toHexString(devDesc.getBLength() & 0xFF) + "\n");
sb.append("\tbDescriptorType: 0x"
+ Integer.toHexString(devDesc.getBDescriptorType() & 0xFF)
+ "\n");
sb.append("\tbcdUSB: 0x"
+ Integer.toHexString(devDesc.getBcdUSB() & 0xFFFF) + "\n");
sb.append("\tbDeviceClass: 0x"
+ Integer.toHexString(devDesc.getBDeviceClass() & 0xFF)
+ "\n");
sb.append("\tbDeviceSubClass: 0x"
+ Integer.toHexString(devDesc.getBDeviceSubClass() & 0xFF)
+ "\n");
sb.append("\tbDeviceProtocol: 0x"
+ Integer.toHexString(devDesc.getBDeviceProtocol() & 0xFF)
+ "\n");
sb.append("\tbMaxPacketSize0: 0x"
+ Integer.toHexString(devDesc.getBMaxPacketSize0() & 0xFF)
+ " (" + devDesc.getBMaxPacketSize0() + ")\n");
sb.append("\tidVendor: 0x"
+ Integer.toHexString(devDesc.getIdVendor() & 0xFFFF)
+ "\n");
sb.append("\tidProduct: 0x"
+ Integer.toHexString(devDesc.getIdProduct() & 0xFFFF)
+ "\n");
sb.append("\tbcdDevice: 0x"
+ Integer.toHexString(devDesc.getBcdDevice() & 0xFF) + "\n");
sb.append("\tiManufacturer: 0x"
+ Integer.toHexString(devDesc.getIManufacturer() & 0xFF)
+ "\n");
sb.append("\tiProduct: 0x"
+ Integer.toHexString(devDesc.getIProduct()) + "\n");
sb.append("\tiSerialNumber: 0x"
+ Integer.toHexString(devDesc.getISerialNumber() & 0xFF)
+ "\n");
sb.append("\tbNumConfigurations: 0x"
+ Integer.toHexString(devDesc.getBNumConfigurations() & 0xFF)
+ "\n");
// get device handle to retrieve string descriptors
Usb_Bus bus = rootBus;
while (bus != null) {
Usb_Device dev = bus.getDevices();
while (dev != null) {
Usb_Device_Descriptor tmpDevDesc = dev.getDescriptor();
if ((dev.getDescriptor() != null)
&& ((dev.getDescriptor().getIManufacturer() > 0)
|| (dev.getDescriptor().getIProduct() > 0) || (dev
.getDescriptor().getISerialNumber() > 0))) {
if (tmpDevDesc.equals(devDesc)) {
try {
sb.append("\nString descriptors\n");
long handle = LibusbJava1.libusb_open(dev);
public void valueChanged(TreeSelectionEvent e) {
JTree tree = (JTree) e.getSource();
Object component = tree.getLastSelectedPathComponent();
if (component instanceof Usb_Bus) {
Usb_Bus bus = (Usb_Bus) component;
StringBuffer sb = new StringBuffer("Usb_Bus\n");
sb.append("\tdirname: " + bus.getDirname() + "\n");
sb.append("\tlocation: 0x" + Long.toHexString(bus.getLocation())
+ "\n");
textArea.setText(sb.toString());
} else if (component instanceof Usb_Device) {
Usb_Device device = (Usb_Device) component;
StringBuffer sb = new StringBuffer("Usb_Device\n");
sb.append("\tfilename: " + device.getFilename() + "\n");
sb.append("\tdevnum: " + device.getDevnum() + "\n");
sb.append("\tnum_children: " + device.getNumChildren() + "\n");
textArea.setText(sb.toString());
} else if (component instanceof Usb_Device_Descriptor) {
Usb_Device_Descriptor devDesc = (Usb_Device_Descriptor) component;
StringBuffer sb = new StringBuffer("Usb_Device_Descriptor\n");
sb.append("\tblenght: 0x"
+ Integer.toHexString(devDesc.getBLength() & 0xFF) + "\n");
sb.append("\tbDescriptorType: 0x"
+ Integer.toHexString(devDesc.getBDescriptorType() & 0xFF)
+ "\n");
sb.append("\tbcdUSB: 0x"
+ Integer.toHexString(devDesc.getBcdUSB() & 0xFFFF) + "\n");
sb.append("\tbDeviceClass: 0x"
+ Integer.toHexString(devDesc.getBDeviceClass() & 0xFF)
+ "\n");
sb.append("\tbDeviceSubClass: 0x"
+ Integer.toHexString(devDesc.getBDeviceSubClass() & 0xFF)
+ "\n");
sb.append("\tbDeviceProtocol: 0x"
+ Integer.toHexString(devDesc.getBDeviceProtocol() & 0xFF)
+ "\n");
sb.append("\tbMaxPacketSize0: 0x"
+ Integer.toHexString(devDesc.getBMaxPacketSize0() & 0xFF)
+ " (" + devDesc.getBMaxPacketSize0() + ")\n");
sb.append("\tidVendor: 0x"
+ Integer.toHexString(devDesc.getIdVendor() & 0xFFFF)
+ "\n");
sb.append("\tidProduct: 0x"
+ Integer.toHexString(devDesc.getIdProduct() & 0xFFFF)
+ "\n");
sb.append("\tbcdDevice: 0x"
+ Integer.toHexString(devDesc.getBcdDevice() & 0xFF) + "\n");
sb.append("\tiManufacturer: 0x"
+ Integer.toHexString(devDesc.getIManufacturer() & 0xFF)
+ "\n");
sb.append("\tiProduct: 0x"
+ Integer.toHexString(devDesc.getIProduct()) + "\n");
sb.append("\tiSerialNumber: 0x"
+ Integer.toHexString(devDesc.getISerialNumber() & 0xFF)
+ "\n");
sb.append("\tbNumConfigurations: 0x"
+ Integer.toHexString(devDesc.getBNumConfigurations() & 0xFF)
+ "\n");
// get device handle to retrieve string descriptors
Usb_Bus bus = rootBus;
while (bus != null) {
Usb_Device dev = bus.getDevices();
while (dev != null) {
Usb_Device_Descriptor tmpDevDesc = dev.getDescriptor();
if ((dev.getDescriptor() != null)
&& ((dev.getDescriptor().getIManufacturer() > 0)
|| (dev.getDescriptor().getIProduct() > 0) || (dev
.getDescriptor().getISerialNumber() > 0))) {
if (tmpDevDesc.equals(devDesc)) {
try {
sb.append("\nString descriptors\n");
long handle = LibusbJava1.libusb_open(dev);
try {
if (dev.getDescriptor().getIManufacturer() > 0) {
String manufacturer = LibusbJava1
.libusb_get_string_descriptor_ascii(
handle,
devDesc.getIManufacturer(),
255);
if (manufacturer == null)
manufacturer = "unable to fetch manufacturer string";
sb.append("\tiManufacturer: "
+ manufacturer + "\n");
}
if (dev.getDescriptor().getIProduct() > 0) {
String product = LibusbJava1
.libusb_get_string_descriptor_ascii(
handle,
devDesc.getIProduct(),
255);
if (product == null)
product = "unable to fetch product string";
sb.append("\tiProduct: " + product
+ "\n");
}
if (dev.getDescriptor().getISerialNumber() > 0) {
String serialNumber = LibusbJava1
.libusb_get_string_descriptor_ascii(
handle,
devDesc.getISerialNumber(),
255);
if (serialNumber == null)
serialNumber = "unable to fetch serial number string";
sb.append("\tiSerialNumber: "
+ serialNumber + "\n");
}
} catch (LibusbError ex) {
sb.append("\terror getting descriptors: "
+ ex.getErrorString() + "\n");
} finally {
LibusbJava1.libusb_close(handle);
}
} catch (LibusbError ex) {
sb.append("\terror opening the device"
+ ex.getErrorString() + "\n");
}
}
}
dev = dev.getNext();
}
bus = bus.getNext();
}
textArea.setText(sb.toString());
} else if (component instanceof Usb_Config_Descriptor) {
Usb_Config_Descriptor confDesc = (Usb_Config_Descriptor) component;
StringBuffer sb = new StringBuffer("Usb_Config_Descriptor\n");
sb.append("\tblenght: 0x"
+ Integer.toHexString(confDesc.getBLength()) + "\n");
sb.append("\tbDescriptorType: 0x"
+ Integer.toHexString(confDesc.getBDescriptorType() & 0xFF)
+ "\n");
sb.append("\tbNumInterfaces: 0x"
+ Integer.toHexString(confDesc.getBNumInterfaces() & 0xFF)
+ "\n");
sb.append("\tbConfigurationValue: 0x"
+ Integer.toHexString(confDesc.getBConfigurationValue() & 0xFF)
+ "\n");
sb.append("\tiConfiguration: 0x"
+ Integer.toHexString(confDesc.getIConfiguration() & 0xFF)
+ "\n");
sb.append("\tbmAttributes: 0x"
+ Integer.toHexString(confDesc.getBmAttributes() & 0xFF)
+ "\n");
sb.append("\tMaxPower [mA]: 0x"
+ Integer.toHexString(confDesc.getMaxPower() & 0xFF) + " ("
+ confDesc.getMaxPower() + ")\n");
sb.append("\textralen: 0x"
+ Integer.toHexString(confDesc.getExtralen()) + "\n");
sb.append("\textra: "
+ extraDescriptorToString(confDesc.getExtra()) + "\n");
// get device handle to retrieve string descriptors
Usb_Bus bus = rootBus;
while (bus != null) {
Usb_Device dev = bus.getDevices();
while (dev != null) {
Usb_Config_Descriptor[] tmpConfDesc = dev.getConfig();
for (int i = 0; i < tmpConfDesc.length; i++) {
if ((tmpConfDesc.equals(confDesc))
&& (confDesc.getIConfiguration() > 0)) {
try {
sb.append("\nString descriptors\n");
long handle = LibusbJava1.libusb_open(dev);
try {
if (dev.getDescriptor().getIManufacturer() > 0) {
String manufacturer = LibusbJava1
.libusb_get_string_descriptor_ascii(
handle,
devDesc.getIManufacturer(),
255);
if (manufacturer == null)
manufacturer = "unable to fetch manufacturer string";
sb.append("\tiManufacturer: "
+ manufacturer + "\n");
}
if (dev.getDescriptor().getIProduct() > 0) {
String product = LibusbJava1
.libusb_get_string_descriptor_ascii(
handle,
devDesc.getIProduct(),
255);
if (product == null)
product = "unable to fetch product string";
sb.append("\tiProduct: " + product
+ "\n");
}
if (dev.getDescriptor().getISerialNumber() > 0) {
String serialNumber = LibusbJava1
.libusb_get_string_descriptor_ascii(
handle,
devDesc.getISerialNumber(),
255);
if (serialNumber == null)
serialNumber = "unable to fetch serial number string";
sb.append("\tiSerialNumber: "
+ serialNumber + "\n");
}
} catch (LibusbError ex) {
sb.append("\terror getting descriptors: "
+ ex.getErrorString() + "\n");
} finally {
LibusbJava1.libusb_close(handle);
}
} catch (LibusbError ex) {
sb.append("\terror opening the device"
+ ex.getErrorString() + "\n");
}
}
}
dev = dev.getNext();
}
bus = bus.getNext();
}
textArea.setText(sb.toString());
} else if (component instanceof Usb_Config_Descriptor) {
Usb_Config_Descriptor confDesc = (Usb_Config_Descriptor) component;
StringBuffer sb = new StringBuffer("Usb_Config_Descriptor\n");
sb.append("\tblenght: 0x"
+ Integer.toHexString(confDesc.getBLength()) + "\n");
sb.append("\tbDescriptorType: 0x"
+ Integer.toHexString(confDesc.getBDescriptorType() & 0xFF)
+ "\n");
sb.append("\tbNumInterfaces: 0x"
+ Integer.toHexString(confDesc.getBNumInterfaces() & 0xFF)
+ "\n");
sb.append("\tbConfigurationValue: 0x"
+ Integer.toHexString(confDesc.getBConfigurationValue() & 0xFF)
+ "\n");
sb.append("\tiConfiguration: 0x"
+ Integer.toHexString(confDesc.getIConfiguration() & 0xFF)
+ "\n");
sb.append("\tbmAttributes: 0x"
+ Integer.toHexString(confDesc.getBmAttributes() & 0xFF)
+ "\n");
sb.append("\tMaxPower [mA]: 0x"
+ Integer.toHexString(confDesc.getMaxPower() & 0xFF) + " ("
+ confDesc.getMaxPower() + ")\n");
sb.append("\textralen: 0x"
+ Integer.toHexString(confDesc.getExtralen()) + "\n");
sb.append("\textra: "
+ extraDescriptorToString(confDesc.getExtra()) + "\n");
// get device handle to retrieve string descriptors
Usb_Bus bus = rootBus;
while (bus != null) {
Usb_Device dev = bus.getDevices();
while (dev != null) {
Usb_Config_Descriptor[] tmpConfDesc = dev.getConfig();
for (int i = 0; i < tmpConfDesc.length; i++) {
if ((tmpConfDesc.equals(confDesc))
&& (confDesc.getIConfiguration() > 0)) {
try {
sb.append("\nString descriptors\n");
long handle = LibusbJava1.libusb_open(dev);
try {
String configuration = LibusbJava1
.libusb_get_string_descriptor_ascii(
handle,
confDesc.getIConfiguration(),
255);
if (configuration == null)
configuration = "unable to fetch configuration string";
sb.append("\tiConfiguration: "
+ configuration + "\n");
} catch (LibusbError e1) {
sb.append("\terror getting config descriptor: "
+ e1.getErrorString() + "\n");
} finally {
LibusbJava1.libusb_close(handle);
}
} catch (LibusbError e1) {
sb.append("\terror opening the device: "
+ e1.getErrorString() + "\n");
} finally {
}
}
}
dev = dev.getNext();
}
bus = bus.getNext();
}
textArea.setText(sb.toString());
} else if (component instanceof Usb_Interface) {
Usb_Interface int_ = (Usb_Interface) component;
StringBuffer sb = new StringBuffer("Usb_Interface\n");
sb.append("\tnum_altsetting: 0x"
+ Integer.toHexString(int_.getNumAltsetting()) + "\n");
sb.append("\taltsetting: " + int_.getAltsetting() + "\n");
textArea.setText(sb.toString());
} else if (component instanceof Usb_Interface_Descriptor) {
Usb_Interface_Descriptor intDesc = (Usb_Interface_Descriptor) component;
StringBuffer sb = new StringBuffer("Usb_Interface_Descriptor\n");
sb.append("\tblenght: 0x"
+ Integer.toHexString(intDesc.getBLength() & 0xFF) + "\n");
sb.append("\tbDescriptorType: 0x"
+ Integer.toHexString(intDesc.getBDescriptorType() & 0xFF)
+ "\n");
sb.append("\tbInterfaceNumber: 0x"
+ Integer.toHexString(intDesc.getBInterfaceNumber() & 0xFF)
+ "\n");
sb.append("\tbAlternateSetting: 0x"
+ Integer.toHexString(intDesc.getBAlternateSetting() & 0xFF)
+ "\n");
sb.append("\tbNumEndpoints: 0x"
+ Integer.toHexString(intDesc.getBNumEndpoints() & 0xFF)
+ "\n");
sb.append("\tbInterfaceClass: 0x"
+ Integer.toHexString(intDesc.getBInterfaceClass() & 0xFF)
+ "\n");
sb.append("\tbInterfaceSubClass: 0x"
+ Integer.toHexString(intDesc.getBInterfaceSubClass() & 0xFF)
+ "\n");
sb.append("\tbInterfaceProtocol: 0x"
+ Integer.toHexString(intDesc.getBInterfaceProtocol() & 0xFF)
+ "\n");
sb.append("\tiInterface: 0x"
+ Integer.toHexString(intDesc.getIInterface()) + "\n");
sb.append("\textralen: 0x"
+ Integer.toHexString(intDesc.getExtralen()) + "\n");
sb.append("\textra: " + extraDescriptorToString(intDesc.getExtra())
+ "\n");
// get device handle to retrieve string descriptors
Usb_Bus bus = rootBus;
while (bus != null) {
Usb_Device dev = bus.getDevices();
while (dev != null) {
try {
long handle = LibusbJava1.libusb_open(dev);
try {
String configuration = LibusbJava1
.libusb_get_string_descriptor_ascii(
handle,
confDesc.getIConfiguration(),
255);
if (configuration == null)
configuration = "unable to fetch configuration string";
sb.append("\tiConfiguration: "
+ configuration + "\n");
} catch (LibusbError e1) {
sb.append("\terror getting config descriptor: "
+ e1.getErrorString() + "\n");
} finally {
LibusbJava1.libusb_close(handle);
}
} catch (LibusbError e1) {
sb.append("\terror opening the device: "
+ e1.getErrorString() + "\n");
} finally {
}
}
}
dev = dev.getNext();
}
bus = bus.getNext();
}
textArea.setText(sb.toString());
} else if (component instanceof Usb_Interface) {
Usb_Interface int_ = (Usb_Interface) component;
StringBuffer sb = new StringBuffer("Usb_Interface\n");
sb.append("\tnum_altsetting: 0x"
+ Integer.toHexString(int_.getNumAltsetting()) + "\n");
sb.append("\taltsetting: " + int_.getAltsetting() + "\n");
textArea.setText(sb.toString());
} else if (component instanceof Usb_Interface_Descriptor) {
Usb_Interface_Descriptor intDesc = (Usb_Interface_Descriptor) component;
StringBuffer sb = new StringBuffer("Usb_Interface_Descriptor\n");
sb.append("\tblenght: 0x"
+ Integer.toHexString(intDesc.getBLength() & 0xFF) + "\n");
sb.append("\tbDescriptorType: 0x"
+ Integer.toHexString(intDesc.getBDescriptorType() & 0xFF)
+ "\n");
sb.append("\tbInterfaceNumber: 0x"
+ Integer.toHexString(intDesc.getBInterfaceNumber() & 0xFF)
+ "\n");
sb.append("\tbAlternateSetting: 0x"
+ Integer.toHexString(intDesc.getBAlternateSetting() & 0xFF)
+ "\n");
sb.append("\tbNumEndpoints: 0x"
+ Integer.toHexString(intDesc.getBNumEndpoints() & 0xFF)
+ "\n");
sb.append("\tbInterfaceClass: 0x"
+ Integer.toHexString(intDesc.getBInterfaceClass() & 0xFF)
+ "\n");
sb.append("\tbInterfaceSubClass: 0x"
+ Integer.toHexString(intDesc.getBInterfaceSubClass() & 0xFF)
+ "\n");
sb.append("\tbInterfaceProtocol: 0x"
+ Integer.toHexString(intDesc.getBInterfaceProtocol() & 0xFF)
+ "\n");
sb.append("\tiInterface: 0x"
+ Integer.toHexString(intDesc.getIInterface()) + "\n");
sb.append("\textralen: 0x"
+ Integer.toHexString(intDesc.getExtralen()) + "\n");
sb.append("\textra: " + extraDescriptorToString(intDesc.getExtra())
+ "\n");
// get device handle to retrieve string descriptors
Usb_Bus bus = rootBus;
while (bus != null) {
Usb_Device dev = bus.getDevices();
while (dev != null) {
try {
long handle = LibusbJava1.libusb_open(dev);
Usb_Config_Descriptor[] confDescs = dev.getConfig();
for (int i = 0; i < confDescs.length; i++) {
Usb_Interface[] ints = confDescs[i].getInterface();
for (int j = 0; j < ints.length; j++) {
Usb_Interface_Descriptor[] tmpIntDescs = ints[j]
.getAltsetting();
for (int k = 0; k < ints.length; k++) {
if (i < tmpIntDescs.length
&& tmpIntDescs[i].equals(intDesc)
&& (intDesc.getIInterface() > 0)) {
sb.append("\nString descriptors\n");
try {
String interface_ = LibusbJava1
.libusb_get_string_descriptor_ascii(
handle,
intDesc.getIInterface(),
255);
if (interface_ == null)
interface_ = "unable to fetch interface string";
sb.append("\tiInterface: "
+ interface_ + "\n");
} catch (LibusbError e1) {
sb.append("\terror while reading descriptors: "
+ e1.getErrorString()
+ "\n");
}
}
}
}
}
Usb_Config_Descriptor[] confDescs = dev.getConfig();
for (int i = 0; i < confDescs.length; i++) {
Usb_Interface[] ints = confDescs[i].getInterface();
for (int j = 0; j < ints.length; j++) {
Usb_Interface_Descriptor[] tmpIntDescs = ints[j]
.getAltsetting();
for (int k = 0; k < ints.length; k++) {
if (i < tmpIntDescs.length
&& tmpIntDescs[i].equals(intDesc)
&& (intDesc.getIInterface() > 0)) {
sb.append("\nString descriptors\n");
try {
String interface_ = LibusbJava1
.libusb_get_string_descriptor_ascii(
handle,
intDesc.getIInterface(),
255);
if (interface_ == null)
interface_ = "unable to fetch interface string";
sb.append("\tiInterface: "
+ interface_ + "\n");
} catch (LibusbError e1) {
sb.append("\terror while reading descriptors: "
+ e1.getErrorString()
+ "\n");
}
}
}
}
}
LibusbJava1.libusb_close(handle);
} catch (LibusbError e1) {
sb.append("\terror opening the device: "
+ e1.getErrorString() + "\n");
}
LibusbJava1.libusb_close(handle);
} catch (LibusbError e1) {
sb.append("\terror opening the device: "
+ e1.getErrorString() + "\n");
}
dev = dev.getNext();
}
bus = bus.getNext();
}
textArea.setText(sb.toString());
} else if (component instanceof Usb_Endpoint_Descriptor) {
Usb_Endpoint_Descriptor epDesc = (Usb_Endpoint_Descriptor) component;
StringBuffer sb = new StringBuffer("Usb_Endpoint_Descriptor\n");
sb.append("\tblenght: 0x"
+ Integer.toHexString(epDesc.getBLength() & 0xFF) + "\n");
sb.append("\tbDescriptorType: 0x"
+ Integer.toHexString(epDesc.getBDescriptorType() & 0xFF)
+ "\n");
sb.append("\tbEndpointAddress: 0x"
+ Integer.toHexString(epDesc.getBEndpointAddress() & 0xFF)
+ "\n");
sb.append("\tbmAttributes: 0x"
+ Integer.toHexString(epDesc.getBmAttributes() & 0xFF)
+ "\n");
sb.append("\twMaxPacketSize: 0x"
+ Integer.toHexString(epDesc.getWMaxPacketSize() & 0xFFFF)
+ " (" + epDesc.getWMaxPacketSize() + ")\n");
sb.append("\tbInterval: 0x"
+ Integer.toHexString(epDesc.getBInterval() & 0xFF) + "\n");
sb.append("\tbRefresh: 0x"
+ Integer.toHexString(epDesc.getBRefresh() & 0xFF) + "\n");
sb.append("\tbSynchAddress: 0x"
+ Integer.toHexString(epDesc.getBSynchAddress()) + "\n");
sb.append("\textralen: 0x"
+ Integer.toHexString(epDesc.getExtralen()) + "\n");
sb.append("\textra: " + extraDescriptorToString(epDesc.getExtra())
+ "\n");
textArea.setText(sb.toString());
}
}
dev = dev.getNext();
}
bus = bus.getNext();
}
textArea.setText(sb.toString());
} else if (component instanceof Usb_Endpoint_Descriptor) {
Usb_Endpoint_Descriptor epDesc = (Usb_Endpoint_Descriptor) component;
StringBuffer sb = new StringBuffer("Usb_Endpoint_Descriptor\n");
sb.append("\tblenght: 0x"
+ Integer.toHexString(epDesc.getBLength() & 0xFF) + "\n");
sb.append("\tbDescriptorType: 0x"
+ Integer.toHexString(epDesc.getBDescriptorType() & 0xFF)
+ "\n");
sb.append("\tbEndpointAddress: 0x"
+ Integer.toHexString(epDesc.getBEndpointAddress() & 0xFF)
+ "\n");
sb.append("\tbmAttributes: 0x"
+ Integer.toHexString(epDesc.getBmAttributes() & 0xFF)
+ "\n");
sb.append("\twMaxPacketSize: 0x"
+ Integer.toHexString(epDesc.getWMaxPacketSize() & 0xFFFF)
+ " (" + epDesc.getWMaxPacketSize() + ")\n");
sb.append("\tbInterval: 0x"
+ Integer.toHexString(epDesc.getBInterval() & 0xFF) + "\n");
sb.append("\tbRefresh: 0x"
+ Integer.toHexString(epDesc.getBRefresh() & 0xFF) + "\n");
sb.append("\tbSynchAddress: 0x"
+ Integer.toHexString(epDesc.getBSynchAddress()) + "\n");
sb.append("\textralen: 0x"
+ Integer.toHexString(epDesc.getExtralen()) + "\n");
sb.append("\textra: " + extraDescriptorToString(epDesc.getExtra())
+ "\n");
textArea.setText(sb.toString());
}
}
private String extraDescriptorToString(byte[] extra) {
if (extra != null) {
StringBuffer sb = new StringBuffer();
for (int i = 0; i < extra.length; i++) {
sb.append("0x");
sb.append(Integer.toHexString(extra[i] & 0xff));
sb.append(' ');
}
return sb.toString();
}
return null;
}
private String extraDescriptorToString(byte[] extra) {
if (extra != null) {
StringBuffer sb = new StringBuffer();
for (int i = 0; i < extra.length; i++) {
sb.append("0x");
sb.append(Integer.toHexString(extra[i] & 0xff));
sb.append(' ');
}
return sb.toString();
}
return null;
}
}

View File

@@ -41,363 +41,363 @@ import ch.ntb.usb.testApp.TestDevice;
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 JMenuBar jJMenuBar = null;
private JMenu commandsMenu = null;
private JMenuItem exitMenuItem = null;
private JMenuItem updateMenuItem = null;
JTree usbTree = null;
private JSplitPane jSplitPane = null;
private JPanel jContentPane = null;
private JMenuBar jJMenuBar = null;
private JMenu commandsMenu = null;
private JMenuItem exitMenuItem = null;
private JMenuItem updateMenuItem = null;
JTree usbTree = 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
*/
public UsbView() {
super();
initialize();
}
/**
* This is the default constructor
*/
public UsbView() {
super();
initialize();
}
/**
* This method initializes this
*
* @return void
*/
private void initialize() {
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setJMenuBar(getJJMenuBar());
this.setSize(APP_WIDTH, APP_HIGHT);
this.setContentPane(getJContentPane());
this.setTitle("USB View");
}
/**
* This method initializes this
*
* @return void
*/
private void initialize() {
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setJMenuBar(getJJMenuBar());
this.setSize(APP_WIDTH, APP_HIGHT);
this.setContentPane(getJContentPane());
this.setTitle("USB View");
}
/**
* This method initializes jContentPane
*
* @return javax.swing.JPanel
*/
private JPanel getJContentPane() {
if (jContentPane == null) {
jContentPane = new JPanel();
jContentPane.setLayout(new BorderLayout());
jContentPane.add(getJSplitPane(), java.awt.BorderLayout.CENTER);
}
return jContentPane;
}
/**
* This method initializes jContentPane
*
* @return javax.swing.JPanel
*/
private JPanel getJContentPane() {
if (jContentPane == null) {
jContentPane = new JPanel();
jContentPane.setLayout(new BorderLayout());
jContentPane.add(getJSplitPane(), java.awt.BorderLayout.CENTER);
}
return jContentPane;
}
/**
* This method initializes jJMenuBar
*
* @return javax.swing.JMenuBar
*/
private JMenuBar getJJMenuBar() {
if (jJMenuBar == null) {
jJMenuBar = new JMenuBar();
jJMenuBar.add(getFileMenu());
}
return jJMenuBar;
}
/**
* This method initializes jJMenuBar
*
* @return javax.swing.JMenuBar
*/
private JMenuBar getJJMenuBar() {
if (jJMenuBar == null) {
jJMenuBar = new JMenuBar();
jJMenuBar.add(getFileMenu());
}
return jJMenuBar;
}
/**
* This method initializes jMenu
*
* @return javax.swing.JMenu
*/
private JMenu getFileMenu() {
if (commandsMenu == null) {
commandsMenu = new JMenu();
commandsMenu.setText("Commands");
commandsMenu.add(getUpdateMenuItem());
commandsMenu.add(getExitMenuItem());
}
return commandsMenu;
}
/**
* This method initializes jMenu
*
* @return javax.swing.JMenu
*/
private JMenu getFileMenu() {
if (commandsMenu == null) {
commandsMenu = new JMenu();
commandsMenu.setText("Commands");
commandsMenu.add(getUpdateMenuItem());
commandsMenu.add(getExitMenuItem());
}
return commandsMenu;
}
/**
* This method initializes jMenuItem
*
* @return javax.swing.JMenuItem
*/
private JMenuItem getExitMenuItem() {
if (exitMenuItem == null) {
exitMenuItem = new JMenuItem();
exitMenuItem.setText("Exit");
exitMenuItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
}
return exitMenuItem;
}
/**
* This method initializes jMenuItem
*
* @return javax.swing.JMenuItem
*/
private JMenuItem getExitMenuItem() {
if (exitMenuItem == null) {
exitMenuItem = new JMenuItem();
exitMenuItem.setText("Exit");
exitMenuItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
}
return exitMenuItem;
}
/**
* This method initializes jMenuItem
*
* @return javax.swing.JMenuItem
*/
private JMenuItem getUpdateMenuItem() {
if (updateMenuItem == null) {
updateMenuItem = new JMenuItem();
updateMenuItem.setText("Update");
updateMenuItem.setAccelerator(KeyStroke.getKeyStroke(
KeyEvent.VK_F5, 0, true));
updateMenuItem
.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
// open bus
LibusbJava.usb_init();
LibusbJava.usb_find_busses();
LibusbJava.usb_find_devices();
/**
* This method initializes jMenuItem
*
* @return javax.swing.JMenuItem
*/
private JMenuItem getUpdateMenuItem() {
if (updateMenuItem == null) {
updateMenuItem = new JMenuItem();
updateMenuItem.setText("Update");
updateMenuItem.setAccelerator(KeyStroke.getKeyStroke(
KeyEvent.VK_F5, 0, true));
updateMenuItem
.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
// open bus
LibusbJava.usb_init();
LibusbJava.usb_find_busses();
LibusbJava.usb_find_devices();
Usb_Bus bus = LibusbJava.usb_get_busses();
if (bus != null) {
treeModel.fireTreeStructureChanged(bus);
expandAll(usbTree);
}
}
});
}
return updateMenuItem;
}
Usb_Bus bus = LibusbJava.usb_get_busses();
if (bus != null) {
treeModel.fireTreeStructureChanged(bus);
expandAll(usbTree);
}
}
});
}
return updateMenuItem;
}
/**
* This method initializes usbTree
*
* @return javax.swing.JTree
*/
private JTree getUsbTree() {
if (usbTree == null) {
// open bus
LibusbJava.usb_init();
LibusbJava.usb_find_busses();
LibusbJava.usb_find_devices();
/**
* This method initializes usbTree
*
* @return javax.swing.JTree
*/
private JTree getUsbTree() {
if (usbTree == null) {
// open bus
LibusbJava.usb_init();
LibusbJava.usb_find_busses();
LibusbJava.usb_find_devices();
Usb_Bus bus = LibusbJava.usb_get_busses();
Usb_Bus bus = LibusbJava.usb_get_busses();
treeModel = new UsbTreeModel(bus, jPropertiesArea);
usbTree = new JTree(treeModel);
expandAll(usbTree);
usbTree.addTreeSelectionListener(treeModel);
getJTestAppPopup();
usbTree.addMouseListener(new MouseAdapter() {
treeModel = new UsbTreeModel(bus, jPropertiesArea);
usbTree = new JTree(treeModel);
expandAll(usbTree);
usbTree.addTreeSelectionListener(treeModel);
getJTestAppPopup();
usbTree.addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(MouseEvent e) {
if (e.isPopupTrigger()) {
Object source = e.getSource();
if (source instanceof JTree) {
JTree tree = (JTree) source;
TreePath path = tree.getPathForLocation(e.getX(), e
.getY());
if (path != null
&& (path.getLastPathComponent() instanceof Usb_Interface_Descriptor)) {
usbTree.setSelectionPath(path);
testAppPopup.show(tree, e.getX(), e.getY());
}
}
}
}
@Override
public void mousePressed(MouseEvent e) {
if (e.isPopupTrigger()) {
Object source = e.getSource();
if (source instanceof JTree) {
JTree tree = (JTree) source;
TreePath path = tree.getPathForLocation(e.getX(), e
.getY());
if (path != null
&& (path.getLastPathComponent() instanceof Usb_Interface_Descriptor)) {
usbTree.setSelectionPath(path);
testAppPopup.show(tree, e.getX(), e.getY());
}
}
}
}
@Override
public void mouseReleased(MouseEvent e) {
if (e.isPopupTrigger()) {
if (e.isPopupTrigger()) {
Object source = e.getSource();
if (source instanceof JTree) {
JTree tree = (JTree) source;
TreePath path = tree.getPathForLocation(e
.getX(), e.getY());
if (path != null
&& (path.getLastPathComponent() instanceof Usb_Interface_Descriptor)) {
usbTree.setSelectionPath(path);
testAppPopup.show(tree, e.getX(), e.getY());
}
}
}
}
}
});
}
return usbTree;
}
@Override
public void mouseReleased(MouseEvent e) {
if (e.isPopupTrigger()) {
if (e.isPopupTrigger()) {
Object source = e.getSource();
if (source instanceof JTree) {
JTree tree = (JTree) source;
TreePath path = tree.getPathForLocation(e
.getX(), e.getY());
if (path != null
&& (path.getLastPathComponent() instanceof Usb_Interface_Descriptor)) {
usbTree.setSelectionPath(path);
testAppPopup.show(tree, e.getX(), e.getY());
}
}
}
}
}
});
}
return usbTree;
}
private void getJTestAppPopup() {
// Create the popup menu.
testAppPopup = new JPopupMenu();
endpointPopup = new JPopupMenu();
JMenuItem menuItem = new JMenuItem(
"Start a test application using this interface");
menuItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
initAndStartTestApp();
}
private void getJTestAppPopup() {
// Create the popup menu.
testAppPopup = new JPopupMenu();
endpointPopup = new JPopupMenu();
JMenuItem menuItem = new JMenuItem(
"Start a test application using this interface");
menuItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
initAndStartTestApp();
}
private void initAndStartTestApp() {
JTree tree = (JTree) testAppPopup.getInvoker();
TreePath path = tree.getSelectionPath();
TreePath parent = path;
Usb_Endpoint_Descriptor[] endpoints = null;
int altinterface = -1;
int interface_ = -1;
int configuration = -1;
short vendorId = -1;
short productId = -1;
while (parent != null
&& !(parent.getLastPathComponent() instanceof Usb_Bus)) {
Object usbObj = parent.getLastPathComponent();
if (usbObj instanceof Usb_Interface_Descriptor) {
Usb_Interface_Descriptor usbIntDesc = (Usb_Interface_Descriptor) usbObj;
endpoints = usbIntDesc.getEndpoint();
interface_ = usbIntDesc.getBInterfaceNumber();
altinterface = usbIntDesc.getBAlternateSetting();
} else if (usbObj instanceof Usb_Config_Descriptor) {
configuration = ((Usb_Config_Descriptor) usbObj)
.getBConfigurationValue();
} else if (usbObj instanceof Usb_Device) {
Usb_Device_Descriptor devDesc = ((Usb_Device) usbObj)
.getDescriptor();
productId = devDesc.getIdProduct();
vendorId = devDesc.getIdVendor();
}
parent = parent.getParentPath();
}
if (parent != null) {
// present a dialog to select in/out endpoint
// TODO: present dialog to select in/out endpoint
Usb_Endpoint_Descriptor[] outEPs = null;
int nofOutEPs = 0;
Usb_Endpoint_Descriptor[] inEPs = null;
int nofInEPs = 0;
private void initAndStartTestApp() {
JTree tree = (JTree) testAppPopup.getInvoker();
TreePath path = tree.getSelectionPath();
TreePath parent = path;
Usb_Endpoint_Descriptor[] endpoints = null;
int altinterface = -1;
int interface_ = -1;
int configuration = -1;
short vendorId = -1;
short productId = -1;
while (parent != null
&& !(parent.getLastPathComponent() instanceof Usb_Bus)) {
Object usbObj = parent.getLastPathComponent();
if (usbObj instanceof Usb_Interface_Descriptor) {
Usb_Interface_Descriptor usbIntDesc = (Usb_Interface_Descriptor) usbObj;
endpoints = usbIntDesc.getEndpoint();
interface_ = usbIntDesc.getBInterfaceNumber();
altinterface = usbIntDesc.getBAlternateSetting();
} else if (usbObj instanceof Usb_Config_Descriptor) {
configuration = ((Usb_Config_Descriptor) usbObj)
.getBConfigurationValue();
} else if (usbObj instanceof Usb_Device) {
Usb_Device_Descriptor devDesc = ((Usb_Device) usbObj)
.getDescriptor();
productId = devDesc.getIdProduct();
vendorId = devDesc.getIdVendor();
}
parent = parent.getParentPath();
}
if (parent != null) {
// present a dialog to select in/out endpoint
// TODO: present dialog to select in/out endpoint
Usb_Endpoint_Descriptor[] outEPs = null;
int nofOutEPs = 0;
Usb_Endpoint_Descriptor[] inEPs = null;
int nofInEPs = 0;
if (endpoints != null) {
outEPs = new Usb_Endpoint_Descriptor[endpoints.length];
inEPs = new Usb_Endpoint_Descriptor[endpoints.length];
for (int i = 0; i < endpoints.length; i++) {
int epAddr = endpoints[i].getBEndpointAddress() & 0xFF;
if ((epAddr & 0x80) > 0) {
// is IN endpoint
inEPs[nofInEPs++] = endpoints[i];
} else {
// is OUT endpoint
outEPs[nofOutEPs++] = endpoints[i];
}
}
}
// create a new TestDevice
TestDevice testDevice = new TestDevice();
testDevice.setIdProduct(productId);
testDevice.setIdVendor(vendorId);
testDevice.setAltinterface(altinterface);
testDevice.setConfiguration(configuration);
testDevice.setInterface(interface_);
if (inEPs != null) {
for (int i = 0; i < nofInEPs; i++) {
int type = inEPs[i].getBmAttributes() & 0x03;
switch (type) {
case Usb_Endpoint_Descriptor.USB_ENDPOINT_TRANSFER_TYPE_BULK:
testDevice.setInEPBulk(inEPs[i]
.getBEndpointAddress() & 0xff);
testDevice.setInMode(TransferMode.Bulk);
break;
case Usb_Endpoint_Descriptor.USB_ENDPOINT_TRANSFER_TYPE_INTERRUPT:
testDevice.setInEPInt(inEPs[i]
.getBEndpointAddress() & 0xff);
testDevice.setInMode(TransferMode.Interrupt);
break;
default:
break;
}
}
}
if (outEPs != null) {
for (int i = 0; i < nofOutEPs; i++) {
int type = outEPs[i].getBmAttributes() & 0x03;
switch (type) {
case Usb_Endpoint_Descriptor.USB_ENDPOINT_TRANSFER_TYPE_BULK:
testDevice.setOutEPBulk(outEPs[i]
.getBEndpointAddress() & 0xff);
testDevice.setOutMode(TransferMode.Bulk);
break;
case Usb_Endpoint_Descriptor.USB_ENDPOINT_TRANSFER_TYPE_INTERRUPT:
testDevice.setOutEPInt(outEPs[i]
.getBEndpointAddress() & 0xff);
testDevice.setOutMode(TransferMode.Interrupt);
break;
default:
break;
}
}
}
// open a new testApp
TestApp app = new TestApp(testDevice);
app.setVisible(true);
} else {
System.out.println("error, could not find device node");
// TODO: handle error
}
}
});
testAppPopup.add(menuItem);
}
if (endpoints != null) {
outEPs = new Usb_Endpoint_Descriptor[endpoints.length];
inEPs = new Usb_Endpoint_Descriptor[endpoints.length];
for (int i = 0; i < endpoints.length; i++) {
int epAddr = endpoints[i].getBEndpointAddress() & 0xFF;
if ((epAddr & 0x80) > 0) {
// is IN endpoint
inEPs[nofInEPs++] = endpoints[i];
} else {
// is OUT endpoint
outEPs[nofOutEPs++] = endpoints[i];
}
}
}
// create a new TestDevice
TestDevice testDevice = new TestDevice();
testDevice.setIdProduct(productId);
testDevice.setIdVendor(vendorId);
testDevice.setAltinterface(altinterface);
testDevice.setConfiguration(configuration);
testDevice.setInterface(interface_);
if (inEPs != null) {
for (int i = 0; i < nofInEPs; i++) {
int type = inEPs[i].getBmAttributes() & 0x03;
switch (type) {
case Usb_Endpoint_Descriptor.USB_ENDPOINT_TRANSFER_TYPE_BULK:
testDevice.setInEPBulk(inEPs[i]
.getBEndpointAddress() & 0xff);
testDevice.setInMode(TransferMode.Bulk);
break;
case Usb_Endpoint_Descriptor.USB_ENDPOINT_TRANSFER_TYPE_INTERRUPT:
testDevice.setInEPInt(inEPs[i]
.getBEndpointAddress() & 0xff);
testDevice.setInMode(TransferMode.Interrupt);
break;
default:
break;
}
}
}
if (outEPs != null) {
for (int i = 0; i < nofOutEPs; i++) {
int type = outEPs[i].getBmAttributes() & 0x03;
switch (type) {
case Usb_Endpoint_Descriptor.USB_ENDPOINT_TRANSFER_TYPE_BULK:
testDevice.setOutEPBulk(outEPs[i]
.getBEndpointAddress() & 0xff);
testDevice.setOutMode(TransferMode.Bulk);
break;
case Usb_Endpoint_Descriptor.USB_ENDPOINT_TRANSFER_TYPE_INTERRUPT:
testDevice.setOutEPInt(outEPs[i]
.getBEndpointAddress() & 0xff);
testDevice.setOutMode(TransferMode.Interrupt);
break;
default:
break;
}
}
}
// open a new testApp
TestApp app = new TestApp(testDevice);
app.setVisible(true);
} else {
System.out.println("error, could not find device node");
// TODO: handle error
}
}
});
testAppPopup.add(menuItem);
}
/**
* This method initializes jSplitPane
*
* @return javax.swing.JSplitPane
*/
private JSplitPane getJSplitPane() {
if (jSplitPane == null) {
jSplitPane = new JSplitPane();
jSplitPane.setOrientation(javax.swing.JSplitPane.VERTICAL_SPLIT);
jSplitPane.setContinuousLayout(true);
jSplitPane.setDividerLocation(APP_HIGHT / 2);
jSplitPane
.setBottomComponent(createScrollPane(getJPropertiesArea()));
jSplitPane.setTopComponent(createScrollPane(getUsbTree()));
}
return jSplitPane;
}
/**
* This method initializes jSplitPane
*
* @return javax.swing.JSplitPane
*/
private JSplitPane getJSplitPane() {
if (jSplitPane == null) {
jSplitPane = new JSplitPane();
jSplitPane.setOrientation(javax.swing.JSplitPane.VERTICAL_SPLIT);
jSplitPane.setContinuousLayout(true);
jSplitPane.setDividerLocation(APP_HIGHT / 2);
jSplitPane
.setBottomComponent(createScrollPane(getJPropertiesArea()));
jSplitPane.setTopComponent(createScrollPane(getUsbTree()));
}
return jSplitPane;
}
/**
* This method initializes jPropertiesArea
*
* @return javax.swing.JTextArea
*/
private JTextArea getJPropertiesArea() {
if (jPropertiesArea == null) {
jPropertiesArea = new JTextArea();
}
return jPropertiesArea;
}
/**
* This method initializes jPropertiesArea
*
* @return javax.swing.JTextArea
*/
private JTextArea getJPropertiesArea() {
if (jPropertiesArea == null) {
jPropertiesArea = new JTextArea();
}
return jPropertiesArea;
}
private JScrollPane createScrollPane(Component view) {
JScrollPane scrollPane = new JScrollPane(view);
return scrollPane;
}
private JScrollPane createScrollPane(Component view) {
JScrollPane scrollPane = new JScrollPane(view);
return scrollPane;
}
/**
* Launches this application
*/
public static void main(String[] args) {
UsbView application = new UsbView();
application.setVisible(true);
}
/**
* Launches this application
*/
public static void main(String[] args) {
UsbView application = new UsbView();
application.setVisible(true);
}
void expandAll(JTree tree) {
for (int row = 0; row < tree.getRowCount(); row++) {
tree.expandRow(row);
}
}
void expandAll(JTree tree) {
for (int row = 0; row < tree.getRowCount(); row++) {
tree.expandRow(row);
}
}
}

View File

@@ -20,23 +20,23 @@ import ch.ntb.usb.Utils;
*/
public class LogBus {
private static void logBus() {
// if you don't use the ch.ntb.inf.libusbJava.Device class you must
// initialise
// Libusb before use
LibusbJava.usb_init();
LibusbJava.usb_find_busses();
LibusbJava.usb_find_devices();
private static void logBus() {
// if you don't use the ch.ntb.inf.libusbJava.Device class you must
// initialise
// Libusb before use
LibusbJava.usb_init();
LibusbJava.usb_find_busses();
LibusbJava.usb_find_devices();
// retrieve a object tree representing the bus with its devices and
// descriptors
Usb_Bus bus = LibusbJava.usb_get_busses();
// retrieve a object tree representing the bus with its devices and
// descriptors
Usb_Bus bus = LibusbJava.usb_get_busses();
// log the bus structure to standard out
Utils.logBus(bus);
}
// log the bus structure to standard out
Utils.logBus(bus);
}
public static void main(String[] args) {
logBus();
}
public static void main(String[] args) {
logBus();
}
}

View File

@@ -17,44 +17,44 @@ import ch.ntb.usb.USBException;
*/
public class ReadWrite {
private static void logData(byte[] data) {
System.out.print("Data: ");
for (int i = 0; i < data.length; i++) {
System.out.print("0x" + Integer.toHexString(data[i] & 0xff) + " ");
}
System.out.println();
}
private static void logData(byte[] data) {
System.out.print("Data: ");
for (int i = 0; i < data.length; i++) {
System.out.print("0x" + Integer.toHexString(data[i] & 0xff) + " ");
}
System.out.println();
}
public static void main(String[] args) {
// get a device instance with vendor id and product id
Device dev = USB.getDevice((short) 0x8235, (short) 0x0100);
try {
// data to write to the device
byte[] data = new byte[] { 0, 1, 2, 3 };
// data read from the device
byte[] readData = new byte[data.length];
public static void main(String[] args) {
// get a device instance with vendor id and product id
Device dev = USB.getDevice((short) 0x8235, (short) 0x0100);
try {
// data to write to the device
byte[] data = new byte[] { 0, 1, 2, 3 };
// data read from the device
byte[] readData = new byte[data.length];
// open the device with configuration 1, interface 0 and without
// altinterface
// this will initialise Libusb for you
dev.open(1, 0, -1);
// write some data to the device
// 0x03 is the endpoint address of the OUT endpoint 3 (from PC to
// device)
dev.writeInterrupt(0x02, data, data.length, 2000, false);
// read some data from the device
// 0x84 is the endpoint address of the IN endpoint 4 (from PC to
// device)
// bit 7 (0x80) is set in case of an IN endpoint
dev.readInterrupt(0x86, readData, readData.length, 2000, false);
// log the data from the device
logData(readData);
// close the device
dev.close();
} catch (USBException e) {
// if an exception occures during connect or read/write an exception
// is thrown
e.printStackTrace();
}
}
// open the device with configuration 1, interface 0 and without
// altinterface
// this will initialise Libusb for you
dev.open(1, 0, -1);
// write some data to the device
// 0x03 is the endpoint address of the OUT endpoint 3 (from PC to
// device)
dev.writeInterrupt(0x02, data, data.length, 2000, false);
// read some data from the device
// 0x84 is the endpoint address of the IN endpoint 4 (from PC to
// device)
// bit 7 (0x80) is set in case of an IN endpoint
dev.readInterrupt(0x86, readData, readData.length, 2000, false);
// log the data from the device
logData(readData);
// close the device
dev.close();
} catch (USBException e) {
// if an exception occures during connect or read/write an exception
// is thrown
e.printStackTrace();
}
}
}

View File

@@ -13,16 +13,16 @@
char* CuStrAlloc(int size)
{
char* newStr = (char*) malloc( sizeof(char) * (size) );
return newStr;
char* newStr = (char*) malloc( sizeof(char) * (size) );
return newStr;
}
char* CuStrCopy(const char* old)
{
int len = strlen(old);
char* newStr = CuStrAlloc(len + 1);
strcpy(newStr, old);
return newStr;
int len = strlen(old);
char* newStr = CuStrAlloc(len + 1);
strcpy(newStr, old);
return newStr;
}
/*-------------------------------------------------------------------------*
@@ -31,20 +31,20 @@ char* CuStrCopy(const char* old)
void CuStringInit(CuString* str)
{
str->length = 0;
str->size = STRING_MAX;
str->buffer = (char*) malloc(sizeof(char) * str->size);
str->buffer[0] = '\0';
str->length = 0;
str->size = STRING_MAX;
str->buffer = (char*) malloc(sizeof(char) * str->size);
str->buffer[0] = '\0';
}
CuString* CuStringNew(void)
{
CuString* str = (CuString*) malloc(sizeof(CuString));
str->length = 0;
str->size = STRING_MAX;
str->buffer = (char*) malloc(sizeof(char) * str->size);
str->buffer[0] = '\0';
return str;
CuString* str = (CuString*) malloc(sizeof(CuString));
str->length = 0;
str->size = STRING_MAX;
str->buffer = (char*) malloc(sizeof(char) * str->size);
str->buffer[0] = '\0';
return str;
}
void CuStringDelete(CuString *str)
@@ -56,53 +56,53 @@ void CuStringDelete(CuString *str)
void CuStringResize(CuString* str, int newSize)
{
str->buffer = (char*) realloc(str->buffer, sizeof(char) * newSize);
str->size = newSize;
str->buffer = (char*) realloc(str->buffer, sizeof(char) * newSize);
str->size = newSize;
}
void CuStringAppend(CuString* str, const char* text)
{
int length;
int length;
if (text == NULL) {
text = "NULL";
}
if (text == NULL) {
text = "NULL";
}
length = strlen(text);
if (str->length + length + 1 >= str->size)
CuStringResize(str, str->length + length + 1 + STRING_INC);
str->length += length;
strcat(str->buffer, text);
length = strlen(text);
if (str->length + length + 1 >= str->size)
CuStringResize(str, str->length + length + 1 + STRING_INC);
str->length += length;
strcat(str->buffer, text);
}
void CuStringAppendChar(CuString* str, char ch)
{
char text[2];
text[0] = ch;
text[1] = '\0';
CuStringAppend(str, text);
char text[2];
text[0] = ch;
text[1] = '\0';
CuStringAppend(str, text);
}
void CuStringAppendFormat(CuString* str, const char* format, ...)
{
va_list argp;
char buf[HUGE_STRING_LEN];
va_start(argp, format);
vsprintf(buf, format, argp);
va_end(argp);
CuStringAppend(str, buf);
va_list argp;
char buf[HUGE_STRING_LEN];
va_start(argp, format);
vsprintf(buf, format, argp);
va_end(argp);
CuStringAppend(str, buf);
}
void CuStringInsert(CuString* str, const char* text, int pos)
{
int length = strlen(text);
if (pos > str->length)
pos = str->length;
if (str->length + length + 1 >= str->size)
CuStringResize(str, str->length + length + 1 + STRING_INC);
memmove(str->buffer + pos + length, str->buffer + pos, (str->length - pos) + 1);
str->length += length;
memcpy(str->buffer + pos, text, length);
int length = strlen(text);
if (pos > str->length)
pos = str->length;
if (str->length + length + 1 >= str->size)
CuStringResize(str, str->length + length + 1 + STRING_INC);
memmove(str->buffer + pos + length, str->buffer + pos, (str->length - pos) + 1);
str->length += 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)
{
t->name = CuStrCopy(name);
t->failed = 0;
t->ran = 0;
t->message = NULL;
t->function = function;
t->jumpBuf = NULL;
t->name = CuStrCopy(name);
t->failed = 0;
t->ran = 0;
t->message = NULL;
t->function = function;
t->jumpBuf = NULL;
}
CuTest* CuTestNew(const char* name, TestFunction function)
{
CuTest* tc = CU_ALLOC(CuTest);
CuTestInit(tc, name, function);
return tc;
CuTest* tc = CU_ALLOC(CuTest);
CuTestInit(tc, name, function);
return tc;
}
void CuTestDelete(CuTest *t)
@@ -135,99 +135,99 @@ void CuTestDelete(CuTest *t)
void CuTestRun(CuTest* tc)
{
jmp_buf buf;
tc->jumpBuf = &buf;
if (setjmp(buf) == 0)
{
tc->ran = 1;
(tc->function)(tc);
}
tc->jumpBuf = 0;
jmp_buf buf;
tc->jumpBuf = &buf;
if (setjmp(buf) == 0)
{
tc->ran = 1;
(tc->function)(tc);
}
tc->jumpBuf = 0;
}
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);
CuStringInsert(string, buf, 0);
sprintf(buf, "%s:%d: ", file, line);
CuStringInsert(string, buf, 0);
tc->failed = 1;
tc->message = string->buffer;
if (tc->jumpBuf != 0) longjmp(*(tc->jumpBuf), 0);
tc->failed = 1;
tc->message = string->buffer;
if (tc->jumpBuf != 0) longjmp(*(tc->jumpBuf), 0);
}
void CuFail_Line(CuTest* tc, const char* file, int line, const char* message2, const char* message)
{
CuString string;
CuString string;
CuStringInit(&string);
if (message2 != NULL)
{
CuStringAppend(&string, message2);
CuStringAppend(&string, ": ");
}
CuStringAppend(&string, message);
CuFailInternal(tc, file, line, &string);
CuStringInit(&string);
if (message2 != NULL)
{
CuStringAppend(&string, message2);
CuStringAppend(&string, ": ");
}
CuStringAppend(&string, message);
CuFailInternal(tc, file, line, &string);
}
void CuAssert_Line(CuTest* tc, const char* file, int line, const char* message, int condition)
{
if (condition) return;
CuFail_Line(tc, file, line, NULL, message);
if (condition) return;
CuFail_Line(tc, file, line, NULL, 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;
if ((expected == NULL && actual == NULL) ||
(expected != NULL && actual != NULL &&
strcmp(expected, actual) == 0))
{
return;
}
CuString string;
if ((expected == NULL && actual == NULL) ||
(expected != NULL && actual != NULL &&
strcmp(expected, actual) == 0))
{
return;
}
CuStringInit(&string);
if (message != NULL)
{
CuStringAppend(&string, message);
CuStringAppend(&string, ": ");
}
CuStringAppend(&string, "expected <");
CuStringAppend(&string, expected);
CuStringAppend(&string, "> but was <");
CuStringAppend(&string, actual);
CuStringAppend(&string, ">");
CuFailInternal(tc, file, line, &string);
CuStringInit(&string);
if (message != NULL)
{
CuStringAppend(&string, message);
CuStringAppend(&string, ": ");
}
CuStringAppend(&string, "expected <");
CuStringAppend(&string, expected);
CuStringAppend(&string, "> but was <");
CuStringAppend(&string, actual);
CuStringAppend(&string, ">");
CuFailInternal(tc, file, line, &string);
}
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];
if (expected == actual) return;
sprintf(buf, "expected <%d> but was <%d>", expected, actual);
CuFail_Line(tc, file, line, message, buf);
char buf[STRING_MAX];
if (expected == actual) return;
sprintf(buf, "expected <%d> but was <%d>", expected, actual);
CuFail_Line(tc, file, line, message, buf);
}
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];
if (fabs(expected - actual) <= delta) return;
sprintf(buf, "expected <%f> but was <%f>", expected, actual);
char buf[STRING_MAX];
if (fabs(expected - actual) <= delta) return;
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* expected, void* actual)
void* expected, void* actual)
{
char buf[STRING_MAX];
if (expected == actual) return;
sprintf(buf, "expected pointer <0x%p> but was <0x%p>", expected, actual);
CuFail_Line(tc, file, line, message, buf);
char buf[STRING_MAX];
if (expected == actual) return;
sprintf(buf, "expected pointer <0x%p> but was <0x%p>", expected, actual);
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)
{
testSuite->count = 0;
testSuite->failCount = 0;
testSuite->count = 0;
testSuite->failCount = 0;
memset(testSuite->list, 0, sizeof(testSuite->list));
}
CuSuite* CuSuiteNew(void)
{
CuSuite* testSuite = CU_ALLOC(CuSuite);
CuSuiteInit(testSuite);
return testSuite;
CuSuite* testSuite = CU_ALLOC(CuSuite);
CuSuiteInit(testSuite);
return testSuite;
}
void CuSuiteDelete(CuSuite *testSuite)
@@ -265,75 +265,75 @@ void CuSuiteDelete(CuSuite *testSuite)
void CuSuiteAdd(CuSuite* testSuite, CuTest *testCase)
{
assert(testSuite->count < MAX_TEST_CASES);
testSuite->list[testSuite->count] = testCase;
testSuite->count++;
assert(testSuite->count < MAX_TEST_CASES);
testSuite->list[testSuite->count] = testCase;
testSuite->count++;
}
void CuSuiteAddSuite(CuSuite* testSuite, CuSuite* testSuite2)
{
int i;
for (i = 0 ; i < testSuite2->count ; ++i)
{
CuTest* testCase = testSuite2->list[i];
CuSuiteAdd(testSuite, testCase);
}
int i;
for (i = 0 ; i < testSuite2->count ; ++i)
{
CuTest* testCase = testSuite2->list[i];
CuSuiteAdd(testSuite, testCase);
}
}
void CuSuiteRun(CuSuite* testSuite)
{
int i;
for (i = 0 ; i < testSuite->count ; ++i)
{
CuTest* testCase = testSuite->list[i];
CuTestRun(testCase);
if (testCase->failed) { testSuite->failCount += 1; }
}
int i;
for (i = 0 ; i < testSuite->count ; ++i)
{
CuTest* testCase = testSuite->list[i];
CuTestRun(testCase);
if (testCase->failed) { testSuite->failCount += 1; }
}
}
void CuSuiteSummary(CuSuite* testSuite, CuString* summary)
{
int i;
for (i = 0 ; i < testSuite->count ; ++i)
{
CuTest* testCase = testSuite->list[i];
CuStringAppend(summary, testCase->failed ? "F" : ".");
}
CuStringAppend(summary, "\n\n");
int i;
for (i = 0 ; i < testSuite->count ; ++i)
{
CuTest* testCase = testSuite->list[i];
CuStringAppend(summary, testCase->failed ? "F" : ".");
}
CuStringAppend(summary, "\n\n");
}
void CuSuiteDetails(CuSuite* testSuite, CuString* details)
{
int i;
int failCount = 0;
int i;
int failCount = 0;
if (testSuite->failCount == 0)
{
int passCount = testSuite->count - testSuite->failCount;
const char* testWord = passCount == 1 ? "test" : "tests";
CuStringAppendFormat(details, "OK (%d %s)\n", passCount, testWord);
}
else
{
if (testSuite->failCount == 1)
CuStringAppend(details, "There was 1 failure:\n");
else
CuStringAppendFormat(details, "There were %d failures:\n", testSuite->failCount);
if (testSuite->failCount == 0)
{
int passCount = testSuite->count - testSuite->failCount;
const char* testWord = passCount == 1 ? "test" : "tests";
CuStringAppendFormat(details, "OK (%d %s)\n", passCount, testWord);
}
else
{
if (testSuite->failCount == 1)
CuStringAppend(details, "There was 1 failure:\n");
else
CuStringAppendFormat(details, "There were %d failures:\n", testSuite->failCount);
for (i = 0 ; i < testSuite->count ; ++i)
{
CuTest* testCase = testSuite->list[i];
if (testCase->failed)
{
failCount++;
CuStringAppendFormat(details, "%d) %s: %s\n",
failCount, testCase->name, testCase->message);
}
}
CuStringAppend(details, "\n!!!FAILURES!!!\n");
for (i = 0 ; i < testSuite->count ; ++i)
{
CuTest* testCase = testSuite->list[i];
if (testCase->failed)
{
failCount++;
CuStringAppendFormat(details, "%d) %s: %s\n",
failCount, testCase->name, testCase->message);
}
}
CuStringAppend(details, "\n!!!FAILURES!!!\n");
CuStringAppendFormat(details, "Runs: %d ", testSuite->count);
CuStringAppendFormat(details, "Passes: %d ", testSuite->count - testSuite->failCount);
CuStringAppendFormat(details, "Fails: %d\n", testSuite->failCount);
}
CuStringAppendFormat(details, "Runs: %d ", testSuite->count);
CuStringAppendFormat(details, "Passes: %d ", testSuite->count - testSuite->failCount);
CuStringAppendFormat(details, "Fails: %d\n", testSuite->failCount);
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -2,12 +2,12 @@
#include <jni.h>
#if defined(_WIN32) || defined(_WIN64)
# include <windows.h>
# include <windows.h>
typedef HINSTANCE tLibHandle;
typedef FARPROC tCallbackPtr;
typedef HINSTANCE tLibHandle;
typedef FARPROC tCallbackPtr;
#else
# error "Unit-Tests are not available on this platform"
# error "Unit-Tests are not available on this platform"
#endif
#include "CuTest.h"
@@ -17,244 +17,244 @@
const char *lib_paths[] = {
#if defined(_WIN32) || defined(_WIN64)
"server\\jvm.dll",
"client\\jvm.dll",
"..\\jre\\bin\\server\\jvm.dll",
"..\\jre\\bin\\client\\jvm.dll",
"server\\jvm.dll",
"client\\jvm.dll",
"..\\jre\\bin\\server\\jvm.dll",
"..\\jre\\bin\\client\\jvm.dll",
#else
# error "Library names are unknown for this platform"
# error "Library names are unknown for this platform"
#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);
/*! \brief Structure holding the data for the created JVM */
/*! \brief Structure holding the data for the created JVM */
typedef struct JVM {
JavaVM *jvm; /*!< Pointer to the JVM the tests run in */
JNIEnv *env; /*!< Pointer to the environment received while creating the
JVM */
JavaVM *jvm; /*!< Pointer to the JVM the tests run in */
JNIEnv *env; /*!< Pointer to the environment received while creating the
JVM */
}tJVM;
static inline int CreateVM(tJVM *vmdata);
static inline tCallbackPtr JvmLibraryFunctionGet(const char *name);
static inline void JvmLibraryFree(void);
static inline tLibHandle JvmLibraryLoad(void);
static inline long int JvmLibraryLastErrorGet(void);
static inline int RunAllTests(void);
static inline int CreateVM(tJVM *vmdata);
static inline tCallbackPtr JvmLibraryFunctionGet(const char *name);
static inline void JvmLibraryFree(void);
static inline tLibHandle JvmLibraryLoad(void);
static inline long int JvmLibraryLastErrorGet(void);
static inline int RunAllTests(void);
/*! \brief Contains Environment data for the test program */
/*! \brief Contains Environment data for the test program */
static struct
{
struct {
tLibHandle lib; /*!< Contains the handle for the loaded JVM-Library */
tJavaVMcreate VMcreate; /*!< Holds the pointer to the call for creating a JVM
instance. */
}jni;
struct {
tLibHandle lib; /*!< Contains the handle for the loaded JVM-Library */
tJavaVMcreate VMcreate; /*!< Holds the pointer to the call for creating a JVM
instance. */
}jni;
tJVM jvm; /*!< Contains the data for the created JVM used
for tests. */
tJVM jvm; /*!< Contains the data for the created JVM used
for tests. */
JNIEnv* thread_env; /*!< Holds the pointer to the environment that can be
used for the tests. (after the thread has been
attached) */
JNIEnv* thread_env; /*!< Holds the pointer to the environment that can be
used for the tests. (after the thread has been
attached) */
}globals = { { NULL, NULL }, { NULL, NULL }, NULL };
int main(void)
{
int test_fail_count = -1;
int test_fail_count = -1;
jint result = -1;
jint result = -1;
globals.jni.lib = JvmLibraryLoad();
if (globals.jni.lib == NULL)
{
fprintf(stderr, "Error loading library (%ld)\n", JvmLibraryLastErrorGet());
goto end_no_jvm_lib;
}
globals.jni.lib = JvmLibraryLoad();
if (globals.jni.lib == NULL)
{
fprintf(stderr, "Error loading library (%ld)\n", JvmLibraryLastErrorGet());
goto end_no_jvm_lib;
}
// get the address of the JNI call to create the VM from the loaded library.
globals.jni.VMcreate = (tJavaVMcreate)JvmLibraryFunctionGet("JNI_CreateJavaVM");
if (globals.jni.VMcreate == NULL)
{
fprintf(stderr, "Error getting JNI_CreateJavaVM (%ld)", JvmLibraryLastErrorGet());
goto end_no_CreateJavaVM;
}
// get the address of the JNI call to create the VM from the loaded library.
globals.jni.VMcreate = (tJavaVMcreate)JvmLibraryFunctionGet("JNI_CreateJavaVM");
if (globals.jni.VMcreate == NULL)
{
fprintf(stderr, "Error getting JNI_CreateJavaVM (%ld)", JvmLibraryLastErrorGet());
goto end_no_CreateJavaVM;
}
// Create the VM the tests should be done within
result = CreateVM(&globals.jvm);
if (result < 0) {
fprintf(stderr, "Can't create Java VM (%ld)\n", result);
goto end_no_java_vm;
}
// Create the VM the tests should be done within
result = CreateVM(&globals.jvm);
if (result < 0) {
fprintf(stderr, "Can't create Java VM (%ld)\n", result);
goto end_no_java_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);
if (result < 0) {
fprintf(stderr, "Can't attach thread to Java VM (%ld)\n", result);
goto end_no_attach;
}
// 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);
if (result < 0) {
fprintf(stderr, "Can't attach thread to Java VM (%ld)\n", result);
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
* exceptions if any have been expected. If this is not the case something went wrong... */
if (globals.jvm.env->ExceptionOccurred()) {
globals.jvm.env->ExceptionDescribe();
test_fail_count++;
}
/* 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... */
if (globals.jvm.env->ExceptionOccurred()) {
globals.jvm.env->ExceptionDescribe();
test_fail_count++;
}
/* After cleaning up the java environment we can safely detach our thread from the JVM */
globals.jvm.jvm->DetachCurrentThread();
/* After cleaning up the java environment we can safely detach our thread from the JVM */
globals.jvm.jvm->DetachCurrentThread();
end_no_attach:
globals.jvm.jvm->DestroyJavaVM();
globals.jvm.jvm->DestroyJavaVM();
end_no_java_vm:
end_no_CreateJavaVM:
/* Unload the JNI Library */
JvmLibraryFree();
/* Unload the JNI Library */
JvmLibraryFree();
end_no_jvm_lib:
return test_fail_count;
return test_fail_count;
}
typedef CuSuite* (*tSuiteNew)(void);
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)
{
int result = 0;
tGetDLLtests getTestSuite = NULL;
tLibHandle libusb = LoadLibrary("LibusbJava-1_0.dll");
int result = 0;
tGetDLLtests getTestSuite = NULL;
tLibHandle libusb = LoadLibrary("LibusbJava-1_0.dll");
if (libusb == NULL) {
printf("Failed to load LibusbJava-1_0.dll: %lu", GetLastError());
goto no_lib;
}
if (libusb == NULL) {
printf("Failed to load LibusbJava-1_0.dll: %lu", GetLastError());
goto no_lib;
}
getTestSuite = (tGetDLLtests)GetProcAddress(libusb, "GetLibusbJavaSuite");
if (getTestSuite == NULL)
{
printf("Failed to get unit tests: %lu", GetLastError());
goto no_suite_new;
}
getTestSuite = (tGetDLLtests)GetProcAddress(libusb, "GetLibusbJavaSuite");
if (getTestSuite == NULL)
{
printf("Failed to get unit tests: %lu", GetLastError());
goto no_suite_new;
}
/* Run the test procedures */
{
CuSuite *suite = getTestSuite(&CuSuiteNew, globals.thread_env);
CuString *output = CuStringNew();
/* Run the test procedures */
{
CuSuite *suite = getTestSuite(&CuSuiteNew, globals.thread_env);
CuString *output = CuStringNew();
CuSuiteRun(suite);
CuSuiteSummary(suite, output);
CuSuiteDetails(suite, output);
CuSuiteRun(suite);
CuSuiteSummary(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:
FreeLibrary(libusb);
FreeLibrary(libusb);
no_lib:
return -1;
return -1;
}
/*! \brief Creates a java virtual machine and places all the received handles into
* the given structure
/*! \brief Creates a java virtual machine and places all the received handles into
* the given structure
*
* \param vmdata Pointer to the structure that should hold all the handles
* of the VM created.
* \param vmdata Pointer to the structure that should hold all the handles
* of the VM created.
*
* \return
* - JNI_OK on success
* - <0 on failure (see jni.h)
* \return
* - JNI_OK on success
* - <0 on failure (see jni.h)
*/
static inline int CreateVM(tJVM *vmdata)
{
JavaVMInitArgs vm_args;
JavaVMOption options[1];
JavaVMInitArgs vm_args;
JavaVMOption options[1];
options[0].optionString = "-Djava.class.path=" USER_CLASSPATH;
vm_args.version = JNI_VERSION_1_2;
vm_args.options = options;
vm_args.nOptions = 1;
vm_args.ignoreUnrecognized = JNI_TRUE;
options[0].optionString = "-Djava.class.path=" USER_CLASSPATH;
vm_args.version = JNI_VERSION_1_2;
vm_args.options = options;
vm_args.nOptions = 1;
vm_args.ignoreUnrecognized = JNI_TRUE;
/* Create the Java VM for unit tests */
return globals.jni.VMcreate(&vmdata->jvm, (void**) &vmdata->env, &vm_args);
/* Create the Java VM for unit tests */
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
* this function searches a several options for loading a library.
* As there are some issues to find the appropriate library in the given path
* this function searches a several options for loading a library.
*
* \return
* - Handle for the loaded library
* - NULL if the library could not be loaded. Use GetLastError() to determine
* the reason.
* \return
* - Handle for the loaded library
* - NULL if the library could not be loaded. Use GetLastError() to determine
* the reason.
*/
static inline tLibHandle JvmLibraryLoad(void)
{
unsigned int pos = 0;
tLibHandle result = NULL;
unsigned int pos = 0;
tLibHandle result = NULL;
while ((result == NULL) && (lib_paths[pos] != NULL))
{
while ((result == NULL) && (lib_paths[pos] != NULL))
{
#if defined(_WIN32) || defined(_WIN64)
result = LoadLibrary(lib_paths[pos++]);
result = LoadLibrary(lib_paths[pos++]);
#else
# error "Unable to load the jvm library for this platform"
# error "Unable to load the jvm library for this platform"
#endif
}
}
return result;
return result;
}
/*! \brief Wrapper for freeing a loaded JVM library */
static inline void JvmLibraryFree(void)
/*! \brief Wrapper for freeing a loaded JVM library */
static inline void JvmLibraryFree(void)
{
#if defined(_WIN32) || defined(_WIN64)
FreeLibrary(globals.jni.lib);
FreeLibrary(globals.jni.lib);
#else
# error "Unable to unload the jvm library for this platform"
# error "Unable to unload the jvm library for this platform"
#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)
return GetProcAddress(globals.jni.lib, name);
return GetProcAddress(globals.jni.lib, name);
#else
# error "Unable to get library function pointer for this platform"
# error "Unable to get library function pointer for this platform"
#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)
{
#if defined(_WIN32) || defined(_WIN64)
return GetLastError();
return GetLastError();
#else
# error "Unable to determine last error for this platform"
# error "Unable to determine last error for this platform"
#endif
}

View File

@@ -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 <string.h>
#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
typedef struct JField {
const char *type;
const char *name;
jfieldID id;
const char *type;
const char *name;
jfieldID id;
}tJField;
typedef struct Usb_Device {
int loaded;
int loaded;
jclass clazz;
jclass clazz;
jmethodID constructor;
jmethodID constructor;
jfieldID next;
jfieldID prev;
jfieldID filename;
jfieldID bus;
jfieldID descriptor;
jfieldID config;
jfieldID devnum;
jfieldID num_children;
jfieldID children;
jfieldID devStructAddr;
jfieldID next;
jfieldID prev;
jfieldID filename;
jfieldID bus;
jfieldID descriptor;
jfieldID config;
jfieldID devnum;
jfieldID num_children;
jfieldID children;
jfieldID devStructAddr;
}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
#define SANITY_CHECK() { if (me->loaded == 0) Usb_Device_connect(env); }
#define SANITY_CHECK() { if (me->loaded == 0) Usb_Device_connect(env); }
#else
#define SANITY_CHECK()
#endif
@@ -50,92 +50,92 @@ static tUsb_Device *me = &instance;
int Usb_Device_connect(JNIEnv *env)
{
jobject theClass = env->FindClass("ch/ntb/usb/Usb_Device");
if (theClass == NULL) goto no_class;
jobject theClass = env->FindClass("ch/ntb/usb/Usb_Device");
if (theClass == NULL) goto no_class;
me->clazz = (jclass) env->NewGlobalRef(theClass); // make it global to avoid class unloading and therefore
// invalidating the references obtained.
if (me->clazz == NULL) goto no_memory;
me->clazz = (jclass) env->NewGlobalRef(theClass); // make it global to avoid class unloading and therefore
// invalidating the references obtained.
if (me->clazz == NULL) goto no_memory;
me->constructor = env->GetMethodID(me->clazz, "<init>", "()V");
if (me->constructor == NULL) goto no_constructor;
me->constructor = env->GetMethodID(me->clazz, "<init>", "()V");
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;", prev);
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_Device_Descriptor;", descriptor);
LOAD_FIELD(env, me, "[Lch/ntb/usb/Usb_Config_Descriptor;", config);
LOAD_FIELD(env, me, "B", devnum);
LOAD_FIELD(env, me, "B", num_children);
LOAD_FIELD(env, me, "Lch/ntb/usb/Usb_Device;", children);
LOAD_FIELD(env, me, "J", devStructAddr);
LOAD_FIELD(env, me, "Lch/ntb/usb/Usb_Device;", next);
LOAD_FIELD(env, me, "Lch/ntb/usb/Usb_Device;", prev);
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_Device_Descriptor;", descriptor);
LOAD_FIELD(env, me, "[Lch/ntb/usb/Usb_Config_Descriptor;", config);
LOAD_FIELD(env, me, "B", devnum);
LOAD_FIELD(env, me, "B", num_children);
LOAD_FIELD(env, me, "Lch/ntb/usb/Usb_Device;", children);
LOAD_FIELD(env, me, "J", devStructAddr);
me->loaded = 1;
return 0;
me->loaded = 1;
return 0;
no_constructor:
env->DeleteGlobalRef(me->clazz);
env->DeleteGlobalRef(me->clazz);
no_memory:
no_class:
return -1;
return -1;
}
void Usb_Device_disconnect(JNIEnv *env)
{
if (me->loaded == 0) return;
if (me->loaded == 0) return;
env->DeleteGlobalRef(me->clazz);
memset(me, 0, sizeof(tUsb_Device));
env->DeleteGlobalRef(me->clazz);
memset(me, 0, sizeof(tUsb_Device));
}
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) {
char filename[4];
if (result != NULL) {
char filename[4];
snprintf(filename, 4, "%03d", address);
snprintf(filename, 4, "%03d", address);
env->SetLongField(result, me->devStructAddr, (jlong)handle);
env->SetByteField(result, me->devnum, address);
env->SetObjectField(result, me->filename, env->NewStringUTF(filename));
env->SetLongField(result, me->devStructAddr, (jlong)handle);
env->SetByteField(result, me->devnum, address);
env->SetObjectField(result, me->filename, env->NewStringUTF(filename));
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->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*/
}
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)
{
env->SetLongField(dev, me->devStructAddr, (jlong)handle);
env->SetLongField(dev, me->devStructAddr, (jlong)handle);
}
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)
{
env->SetObjectField(dev, me->descriptor, desc);
env->SetObjectField(dev, me->descriptor, desc);
}
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) {
env->SetObjectField(dev, me->prev, prev);
env->SetObjectField(dev, me->prev, prev);
}

View File

@@ -11,17 +11,17 @@
char* CuStrAlloc(int size);
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 STRING_MAX 256
#define STRING_INC 256
#define HUGE_STRING_LEN 8192
#define STRING_MAX 256
#define STRING_INC 256
typedef struct
{
int length;
int size;
char* buffer;
int length;
int size;
char* buffer;
} CuString;
void CuStringInit(CuString* str);
@@ -42,12 +42,12 @@ typedef void (*TestFunction)(CuTest *);
struct CuTest
{
char* name;
TestFunction function;
int failed;
int ran;
const char* message;
jmp_buf *jumpBuf;
char* name;
TestFunction function;
int failed;
int ran;
const char* message;
jmp_buf *jumpBuf;
};
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 CuAssert_Line(CuTest* tc, const char* file, int line, const char* message, int condition);
void CuAssertStrEquals_LineMsg(CuTest* tc,
const char* file, int line, const char* message,
const char* expected, const char* actual);
const char* file, int line, const char* message,
const char* expected, const char* actual);
void CuAssertIntEquals_LineMsg(CuTest* tc,
const char* file, int line, const char* message,
int expected, int actual);
const char* file, int line, const char* message,
int expected, int actual);
void CuAssertDblEquals_LineMsg(CuTest* tc,
const char* file, int line, const char* message,
double expected, double actual, double delta);
const char* file, int line, const char* message,
double expected, double actual, double delta);
void CuAssertPtrEquals_LineMsg(CuTest* tc,
const char* file, int line, const char* message,
void* expected, void* actual);
const char* file, int line, const char* message,
void* expected, void* actual);
/* public assert functions */
@@ -91,15 +91,15 @@ void CuAssertPtrEquals_LineMsg(CuTest* tc,
/* 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
{
int count;
CuTest* list[MAX_TEST_CASES];
int failCount;
int count;
CuTest* list[MAX_TEST_CASES];
int failCount;
} CuSuite;

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -32,345 +32,345 @@ import com.github.boukefalos.jlibloader.Native;
*/
public class LibusbJava {
/**
* System error codes.<br>
* This list is not complete! For more error codes see the file 'errorno.h'
* on your system.
*/
public static int ERROR_SUCCESS, ERROR_BAD_FILE_DESCRIPTOR,
ERROR_NO_SUCH_DEVICE_OR_ADDRESS, ERROR_BUSY,
ERROR_INVALID_PARAMETER, ERROR_TIMEDOUT, ERROR_IO_ERROR,
ERROR_NOT_ENOUGH_MEMORY;;
/**
* System error codes.<br>
* This list is not complete! For more error codes see the file 'errorno.h'
* on your system.
*/
public static int ERROR_SUCCESS, ERROR_BAD_FILE_DESCRIPTOR,
ERROR_NO_SUCH_DEVICE_OR_ADDRESS, ERROR_BUSY,
ERROR_INVALID_PARAMETER, ERROR_TIMEDOUT, ERROR_IO_ERROR,
ERROR_NOT_ENOUGH_MEMORY;;
/**
* Sets the debugging level of libusb.<br>
*
* The range is from 0 to 255, where 0 disables debug output and 255 enables
* all output. On application start, debugging is disabled (0).
*
* @param level
* 0 to 255
*/
public static native void usb_set_debug(int level);
/**
* Sets the debugging level of libusb.<br>
*
* The range is from 0 to 255, where 0 disables debug output and 255 enables
* all output. On application start, debugging is disabled (0).
*
* @param level
* 0 to 255
*/
public static native void usb_set_debug(int level);
// Core
/**
* Just like the name implies, <code>usb_init</code> sets up some internal
* structures. <code>usb_init</code> must be called before any other
* libusb functions.
*/
public static native void usb_init();
// Core
/**
* Just like the name implies, <code>usb_init</code> sets up some internal
* structures. <code>usb_init</code> must be called before any other
* libusb functions.
*/
public static native void usb_init();
/**
* <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
* of new busses and busses removed).
*/
public static native int usb_find_busses();
/**
* <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
* of new busses and busses removed).
*/
public static native int usb_find_busses();
/**
* <code>usb_find_devices</code> will find all of the devices on each bus.
* This should be called after <code>usb_find_busses</code>.
*
* @return the number of changes since the previous call to this function
* (total of new device and devices removed).
*/
public static native int usb_find_devices();
/**
* <code>usb_find_devices</code> will find all of the devices on each bus.
* This should be called after <code>usb_find_busses</code>.
*
* @return the number of changes since the previous call to this function
* (total of new device and devices removed).
*/
public static native int usb_find_devices();
/**
* <code>usb_get_busses</code> returns a tree of descriptor objects.<br>
* The tree represents the bus structure with devices, configurations,
* interfaces and endpoints. Note that this is only a copy. To refresh the
* information, <code>usb_get_busses()</code> must be called again.<br>
* The name of the objects contained in the tree is starting with
* <code>Usb_</code>.
*
* @return the structure of all busses and devices. <code>Note:</code> The
* java objects are copies of the C structs.
*/
public static native Usb_Bus usb_get_busses();
/**
* <code>usb_get_busses</code> returns a tree of descriptor objects.<br>
* The tree represents the bus structure with devices, configurations,
* interfaces and endpoints. Note that this is only a copy. To refresh the
* information, <code>usb_get_busses()</code> must be called again.<br>
* The name of the objects contained in the tree is starting with
* <code>Usb_</code>.
*
* @return the structure of all busses and devices. <code>Note:</code> The
* java objects are copies of the C structs.
*/
public static native Usb_Bus usb_get_busses();
// Device Operations
/**
* <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
* operations to the device.
*
* @param dev
* The device to open.
* @return a handle used in future communication with the device. 0 if an
* error has occurred.
*/
public static native long usb_open(Usb_Device dev);
// Device Operations
/**
* <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
* operations to the device.
*
* @param dev
* The device to open.
* @return a handle used in future communication with the device. 0 if an
* error has occurred.
*/
public static native long usb_open(Usb_Device dev);
/**
* <code>usb_close</code> closes a device opened with
* <code>usb_open</code>.
*
* @param dev_handle
* The handle to the device.
* @return 0 on success or < 0 on error.
*/
public static native int usb_close(long dev_handle);
/**
* <code>usb_close</code> closes a device opened with
* <code>usb_open</code>.
*
* @param dev_handle
* The handle to the device.
* @return 0 on success or < 0 on error.
*/
public static native int usb_close(long dev_handle);
/**
* Sets the active configuration of a device
*
* @param dev_handle
* The handle to the device.
* @param configuration
* The value as specified in the descriptor field
* bConfigurationValue.
* @return 0 on success or < 0 on error.
*/
public static native int usb_set_configuration(long dev_handle,
int configuration);
/**
* Sets the active configuration of a device
*
* @param dev_handle
* The handle to the device.
* @param configuration
* The value as specified in the descriptor field
* bConfigurationValue.
* @return 0 on success or < 0 on error.
*/
public static native int usb_set_configuration(long dev_handle,
int configuration);
/**
* Sets the active alternate setting of the current interface
*
* @param dev_handle
* The handle to the device.
* @param alternate
* The value as specified in the descriptor field
* bAlternateSetting.
* @return 0 on success or < 0 on error.
*/
public static native int usb_set_altinterface(long dev_handle, int alternate);
/**
* Sets the active alternate setting of the current interface
*
* @param dev_handle
* The handle to the device.
* @param alternate
* The value as specified in the descriptor field
* bAlternateSetting.
* @return 0 on success or < 0 on error.
*/
public static native int usb_set_altinterface(long dev_handle, int alternate);
/**
* Clears any halt status on an endpoint.
*
* @param dev_handle
* The handle to the device.
* @param ep
* The value specified in the descriptor field bEndpointAddress.
* @return 0 on success or < 0 on error.
*/
public static native int usb_clear_halt(long dev_handle, int ep);
/**
* Clears any halt status on an endpoint.
*
* @param dev_handle
* The handle to the device.
* @param ep
* The value specified in the descriptor field bEndpointAddress.
* @return 0 on success or < 0 on error.
*/
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>
* <br>
* <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
* new device and open a new handle. The handle used to call
* <code>usb_reset</code> will no longer work.
*
* @param dev_handle
* The handle to the device.
* @return 0 on success or < 0 on error.
*/
public static native int usb_reset(long dev_handle);
/**
* Resets a device by sending a RESET down the port it is connected to.<br>
* <br>
* <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
* new device and open a new handle. The handle used to call
* <code>usb_reset</code> will no longer work.
*
* @param dev_handle
* The handle to the device.
* @return 0 on success or < 0 on error.
*/
public static native int usb_reset(long dev_handle);
/**
* Claim an interface of a device.<br>
* <br>
* <b>Must be called!:</b> <code>usb_claim_interface</code> must be
* called before you perform any operations related to this interface (like
* <code>usb_set_altinterface, usb_bulk_write</code>, etc).
*
* @param dev_handle
* The handle to the device.
* @param interface_
* The value as specified in the descriptor field
* bInterfaceNumber.
* @return 0 on success or < 0 on error.
*/
public static native int usb_claim_interface(long dev_handle, int interface_);
/**
* Claim an interface of a device.<br>
* <br>
* <b>Must be called!:</b> <code>usb_claim_interface</code> must be
* called before you perform any operations related to this interface (like
* <code>usb_set_altinterface, usb_bulk_write</code>, etc).
*
* @param dev_handle
* The handle to the device.
* @param interface_
* The value as specified in the descriptor field
* bInterfaceNumber.
* @return 0 on success or < 0 on error.
*/
public static native int usb_claim_interface(long dev_handle, int interface_);
/**
* Releases a previously claimed interface
*
* @param dev_handle
* The handle to the device.
* @param interface_
* The value as specified in the descriptor field
* bInterfaceNumber.
* @return 0 on success or < 0 on error.
*/
public static native int usb_release_interface(long dev_handle,
int interface_);
/**
* Releases a previously claimed interface
*
* @param dev_handle
* The handle to the device.
* @param interface_
* The value as specified in the descriptor field
* bInterfaceNumber.
* @return 0 on success or < 0 on error.
*/
public static native int usb_release_interface(long dev_handle,
int interface_);
// Control Transfers
/**
* 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.
*
* @param dev_handle
* The handle to the device.
* @param requesttype
* @param request
* @param value
* @param index
* @param bytes
* @param size
* @param timeout
* @return the number of bytes written/read or < 0 on error.
*/
public static native int usb_control_msg(long dev_handle, int requesttype,
int request, int value, int index, byte[] bytes, int size,
int timeout);
// Control Transfers
/**
* 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.
*
* @param dev_handle
* The handle to the device.
* @param requesttype
* @param request
* @param value
* @param index
* @param bytes
* @param size
* @param timeout
* @return the number of bytes written/read or < 0 on error.
*/
public static native int usb_control_msg(long dev_handle, int requesttype,
int request, int value, int index, byte[] bytes, int size,
int timeout);
/**
* Retrieves the string descriptor specified by index and langid from a
* device.
*
* @param dev_handle
* The handle to the device.
* @param index
* @param langid
* @return the descriptor String or null
*/
public static native String usb_get_string(long dev_handle, int index,
int langid);
/**
* Retrieves the string descriptor specified by index and langid from a
* device.
*
* @param dev_handle
* The handle to the device.
* @param index
* @param langid
* @return the descriptor String or null
*/
public static native String usb_get_string(long dev_handle, int index,
int langid);
/**
* <code>usb_get_string_simple</code> is a wrapper around
* <code>usb_get_string</code> that retrieves the string description
* specified by index in the first language for the descriptor.
*
* @param dev_handle
* The handle to the device.
* @param index
* @return the descriptor String or null
*/
public static native String usb_get_string_simple(long dev_handle, int index);
/**
* <code>usb_get_string_simple</code> is a wrapper around
* <code>usb_get_string</code> that retrieves the string description
* specified by index in the first language for the descriptor.
*
* @param dev_handle
* The handle to the device.
* @param index
* @return the descriptor String or null
*/
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
* of the descriptor from the default control pipe.<br>
* <br>
* See {@link #usb_get_descriptor_by_endpoint(long, int, byte, byte, int)}
* for a function that allows the control endpoint to be specified.
*
* @param dev_handle
* The handle to the device.
* @param type
* @param index
* @param size
* number of charactes which will be retrieved (the length of the
* resulting String)
* @return the descriptor String or null
*/
public static native String usb_get_descriptor(long dev_handle, byte type,
byte index, int size);
/**
* Retrieves a descriptor from the device identified by the type and index
* of the descriptor from the default control pipe.<br>
* <br>
* See {@link #usb_get_descriptor_by_endpoint(long, int, byte, byte, int)}
* for a function that allows the control endpoint to be specified.
*
* @param dev_handle
* The handle to the device.
* @param type
* @param index
* @param size
* number of charactes which will be retrieved (the length of the
* resulting String)
* @return the descriptor String or null
*/
public static native String usb_get_descriptor(long dev_handle, byte type,
byte index, int size);
/**
* Retrieves a descriptor from the device identified by the type and index
* of the descriptor from the control pipe identified by ep.
*
* @param dev_handle
* The handle to the device.
* @param ep
* @param type
* @param index
* @param size
* number of charactes which will be retrieved (the length of the
* resulting String)
* @return the descriptor String or null
*/
public static native String usb_get_descriptor_by_endpoint(long dev_handle,
int ep, byte type, byte index, int size);
/**
* Retrieves a descriptor from the device identified by the type and index
* of the descriptor from the control pipe identified by ep.
*
* @param dev_handle
* The handle to the device.
* @param ep
* @param type
* @param index
* @param size
* number of charactes which will be retrieved (the length of the
* resulting String)
* @return the descriptor String or null
*/
public static native String usb_get_descriptor_by_endpoint(long dev_handle,
int ep, byte type, byte index, int size);
// Bulk Transfers
/**
* Performs a bulk write request to the endpoint specified by ep.
*
* @param dev_handle
* The handle to the device.
* @param ep
* @param bytes
* @param size
* @param timeout
* @return the number of bytes written on success or < 0 on error.
*/
public static native int usb_bulk_write(long dev_handle, int ep,
byte[] bytes, int size, int timeout);
// Bulk Transfers
/**
* Performs a bulk write request to the endpoint specified by ep.
*
* @param dev_handle
* The handle to the device.
* @param ep
* @param bytes
* @param size
* @param timeout
* @return the number of bytes written on success or < 0 on error.
*/
public static native int usb_bulk_write(long dev_handle, int ep,
byte[] bytes, int size, int timeout);
/**
* Performs a bulk read request to the endpoint specified by ep.
*
* @param dev_handle
* The handle to the device.
* @param ep
* @param bytes
* @param size
* @param timeout
* @return the number of bytes read on success or < 0 on error.
*/
public static native int usb_bulk_read(long dev_handle, int ep,
byte[] bytes, int size, int timeout);
/**
* Performs a bulk read request to the endpoint specified by ep.
*
* @param dev_handle
* The handle to the device.
* @param ep
* @param bytes
* @param size
* @param timeout
* @return the number of bytes read on success or < 0 on error.
*/
public static native int usb_bulk_read(long dev_handle, int ep,
byte[] bytes, int size, int timeout);
// Interrupt Transfers
/**
* Performs an interrupt write request to the endpoint specified by ep.
*
* @param dev_handle
* The handle to the device.
* @param ep
* @param bytes
* @param size
* @param timeout
* @return the number of bytes written on success or < 0 on error.
*/
public static native int usb_interrupt_write(long dev_handle, int ep,
byte[] bytes, int size, int timeout);
// Interrupt Transfers
/**
* Performs an interrupt write request to the endpoint specified by ep.
*
* @param dev_handle
* The handle to the device.
* @param ep
* @param bytes
* @param size
* @param timeout
* @return the number of bytes written on success or < 0 on error.
*/
public static native int usb_interrupt_write(long dev_handle, int ep,
byte[] bytes, int size, int timeout);
/**
* Performs a interrupt read request to the endpoint specified by ep.
*
* @param dev_handle
* The handle to the device.
* @param ep
* @param bytes
* @param size
* @param timeout
* @return the number of bytes read on success or < 0 on error.
*/
public static native int usb_interrupt_read(long dev_handle, int ep,
byte[] bytes, int size, int timeout);
/**
* Performs a interrupt read request to the endpoint specified by ep.
*
* @param dev_handle
* The handle to the device.
* @param ep
* @param bytes
* @param size
* @param timeout
* @return the number of bytes read on success or < 0 on error.
*/
public static native int usb_interrupt_read(long dev_handle, int ep,
byte[] bytes, int size, int timeout);
/**
* Returns the error string after an error occured.
*
* @return the last error sring.
*/
public static native String usb_strerror();
/**
* Returns the error string after an error occured.
*
* @return the last error sring.
*/
public static native String usb_strerror();
/** **************************************************************** */
/** **************************************************************** */
/**
* Maps the Java error code to the system error code.<br>
* <br>
* 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>
* <br>
* 1: EBADF: Bad file descriptor.<br>
* 2: ENXIO: No such device or address.<br>
* 3: EBUSY: Device or resource busy.<br>
* 4: EINVAL: Invalid argument.<br>
* 5: ETIMEDOUT: Connection timed out.<br>
* 6: EIO: I/O error.<br>
* 7: ENOMEM: Not enough memory.<br>
*
*
* @return the system error code or 100000 if no mapping has been found.
*/
private static native int usb_error_no(int value);
/**
* Maps the Java error code to the system error code.<br>
* <br>
* 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>
* <br>
* 1: EBADF: Bad file descriptor.<br>
* 2: ENXIO: No such device or address.<br>
* 3: EBUSY: Device or resource busy.<br>
* 4: EINVAL: Invalid argument.<br>
* 5: ETIMEDOUT: Connection timed out.<br>
* 6: EIO: I/O error.<br>
* 7: ENOMEM: Not enough memory.<br>
*
*
* @return the system error code or 100000 if no mapping has been found.
*/
private static native int usb_error_no(int value);
static {
Native.load("com.github.boukefalos", "jlibusb");
static {
Native.load("com.github.boukefalos", "jlibusb");
// define the error codes
ERROR_SUCCESS = 0;
ERROR_BAD_FILE_DESCRIPTOR = -usb_error_no(1);
ERROR_NO_SUCH_DEVICE_OR_ADDRESS = -usb_error_no(2);
ERROR_BUSY = -usb_error_no(3);
ERROR_INVALID_PARAMETER = -usb_error_no(4);
ERROR_TIMEDOUT = -usb_error_no(5);
ERROR_IO_ERROR = -usb_error_no(6);
ERROR_NOT_ENOUGH_MEMORY = -usb_error_no(7);
}
// define the error codes
ERROR_SUCCESS = 0;
ERROR_BAD_FILE_DESCRIPTOR = -usb_error_no(1);
ERROR_NO_SUCH_DEVICE_OR_ADDRESS = -usb_error_no(2);
ERROR_BUSY = -usb_error_no(3);
ERROR_INVALID_PARAMETER = -usb_error_no(4);
ERROR_TIMEDOUT = -usb_error_no(5);
ERROR_IO_ERROR = -usb_error_no(6);
ERROR_NOT_ENOUGH_MEMORY = -usb_error_no(7);
}
}

View File

@@ -19,300 +19,300 @@ import ch.ntb.usb.logger.LogUtil;
*/
public class USB {
// Standard requests (USB spec 9.4)
/**
* 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,
* boolean)
*/
public static final int REQ_GET_STATUS = 0x00;
/**
* This request is used to clear or disable a specific feature (USB spec
* 9.4.1).
*
* @see ch.ntb.usb.Device#controlMsg(int, int, int, int, byte[], int, int,
* boolean)
*/
public static final int REQ_CLEAR_FEATURE = 0x01;
// 0x02 is reserved
/**
* This request is used to set or enable a specific feature (USB spec
* 9.4.9).
*
* @see ch.ntb.usb.Device#controlMsg(int, int, int, int, byte[], int, int,
* boolean)
*/
public static final int REQ_SET_FEATURE = 0x03;
// 0x04 is reserved
/**
* This request sets the device address for all future device accesses (USB
* spec 9.4.6).
*
* @see ch.ntb.usb.Device#controlMsg(int, int, int, int, byte[], int, int,
* boolean)
*/
public static final int REQ_SET_ADDRESS = 0x05;
/**
* This request returns the specified descriptor if the descriptor exists
* (USB spec 9.4.3).
*
* @see ch.ntb.usb.Device#controlMsg(int, int, int, int, byte[], int, int,
* boolean)
*/
public static final int REQ_GET_DESCRIPTOR = 0x06;
/**
* This request is optional and may be used to update existing descriptors
* or new descriptors may be added (USB spec 9.4.8).
*
* @see ch.ntb.usb.Device#controlMsg(int, int, int, int, byte[], int, int,
* boolean)
*/
public static final int REQ_SET_DESCRIPTOR = 0x07;
/**
* This request returns the current device configuration value (USB spec
* 9.4.2).
*
* @see ch.ntb.usb.Device#controlMsg(int, int, int, int, byte[], int, int,
* boolean)
*/
public static final int REQ_GET_CONFIGURATION = 0x08;
/**
* This request sets the device configuration (USB spec 9.4.7).
*
* @see ch.ntb.usb.Device#controlMsg(int, int, int, int, byte[], int, int,
* boolean)
*/
public static final int REQ_SET_CONFIGURATION = 0x09;
/**
* This request returns the selected alternate setting for the specified
* interface (USB spec 9.4.4).
*
* @see ch.ntb.usb.Device#controlMsg(int, int, int, int, byte[], int, int,
* boolean)
*/
public static final int REQ_GET_INTERFACE = 0x0A;
/**
* This request allows the host to select an alternate setting for the
* specified interface (USB spec 9.4.10).
*
* @see ch.ntb.usb.Device#controlMsg(int, int, int, int, byte[], int, int,
* boolean)
*/
public static final int REQ_SET_INTERFACE = 0x0B;
/**
* This request is used to set and then report an endpoint<6E>s synchronization
* frame (USB spec 9.4.11).
*
* @see ch.ntb.usb.Device#controlMsg(int, int, int, int, byte[], int, int,
* boolean)
*/
public static final int REQ_SYNCH_FRAME = 0x0C;
// Standard requests (USB spec 9.4)
/**
* 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,
* boolean)
*/
public static final int REQ_GET_STATUS = 0x00;
/**
* This request is used to clear or disable a specific feature (USB spec
* 9.4.1).
*
* @see ch.ntb.usb.Device#controlMsg(int, int, int, int, byte[], int, int,
* boolean)
*/
public static final int REQ_CLEAR_FEATURE = 0x01;
// 0x02 is reserved
/**
* This request is used to set or enable a specific feature (USB spec
* 9.4.9).
*
* @see ch.ntb.usb.Device#controlMsg(int, int, int, int, byte[], int, int,
* boolean)
*/
public static final int REQ_SET_FEATURE = 0x03;
// 0x04 is reserved
/**
* This request sets the device address for all future device accesses (USB
* spec 9.4.6).
*
* @see ch.ntb.usb.Device#controlMsg(int, int, int, int, byte[], int, int,
* boolean)
*/
public static final int REQ_SET_ADDRESS = 0x05;
/**
* This request returns the specified descriptor if the descriptor exists
* (USB spec 9.4.3).
*
* @see ch.ntb.usb.Device#controlMsg(int, int, int, int, byte[], int, int,
* boolean)
*/
public static final int REQ_GET_DESCRIPTOR = 0x06;
/**
* This request is optional and may be used to update existing descriptors
* or new descriptors may be added (USB spec 9.4.8).
*
* @see ch.ntb.usb.Device#controlMsg(int, int, int, int, byte[], int, int,
* boolean)
*/
public static final int REQ_SET_DESCRIPTOR = 0x07;
/**
* This request returns the current device configuration value (USB spec
* 9.4.2).
*
* @see ch.ntb.usb.Device#controlMsg(int, int, int, int, byte[], int, int,
* boolean)
*/
public static final int REQ_GET_CONFIGURATION = 0x08;
/**
* This request sets the device configuration (USB spec 9.4.7).
*
* @see ch.ntb.usb.Device#controlMsg(int, int, int, int, byte[], int, int,
* boolean)
*/
public static final int REQ_SET_CONFIGURATION = 0x09;
/**
* This request returns the selected alternate setting for the specified
* interface (USB spec 9.4.4).
*
* @see ch.ntb.usb.Device#controlMsg(int, int, int, int, byte[], int, int,
* boolean)
*/
public static final int REQ_GET_INTERFACE = 0x0A;
/**
* This request allows the host to select an alternate setting for the
* specified interface (USB spec 9.4.10).
*
* @see ch.ntb.usb.Device#controlMsg(int, int, int, int, byte[], int, int,
* boolean)
*/
public static final int REQ_SET_INTERFACE = 0x0B;
/**
* This request is used to set and then report an endpoint<6E>s synchronization
* frame (USB spec 9.4.11).
*
* @see ch.ntb.usb.Device#controlMsg(int, int, int, int, byte[], int, int,
* boolean)
*/
public static final int REQ_SYNCH_FRAME = 0x0C;
// data transfer direction (USB spec 9.3)
/**
* Identifies the direction of data transfer in the second phase of the
* control transfer.<br>
* The state of the Direction bit is ignored if the wLength field is zero,
* signifying there is no Data stage.<br>
* Specifies bit 7 of bmRequestType.
*
* @see ch.ntb.usb.Device#controlMsg(int, int, int, int, byte[], int, int,
* boolean)
*/
public static final int REQ_TYPE_DIR_HOST_TO_DEVICE = (0x00 << 7),
REQ_TYPE_DIR_DEVICE_TO_HOST = (0x01 << 7);
// data transfer direction (USB spec 9.3)
/**
* Identifies the direction of data transfer in the second phase of the
* control transfer.<br>
* The state of the Direction bit is ignored if the wLength field is zero,
* signifying there is no Data stage.<br>
* Specifies bit 7 of bmRequestType.
*
* @see ch.ntb.usb.Device#controlMsg(int, int, int, int, byte[], int, int,
* boolean)
*/
public static final int REQ_TYPE_DIR_HOST_TO_DEVICE = (0x00 << 7),
REQ_TYPE_DIR_DEVICE_TO_HOST = (0x01 << 7);
// request types (USB spec 9.3)
/**
* Specifies the type of the request.<br>
* Specifies bits 6..5 of bmRequestType.
*
* @see ch.ntb.usb.Device#controlMsg(int, int, int, int, byte[], int, int,
* boolean)
*/
public static final int REQ_TYPE_TYPE_STANDARD = (0x00 << 5),
REQ_TYPE_TYPE_CLASS = (0x01 << 5),
REQ_TYPE_TYPE_VENDOR = (0x02 << 5),
REQ_TYPE_TYPE_RESERVED = (0x03 << 5);
// request types (USB spec 9.3)
/**
* Specifies the type of the request.<br>
* Specifies bits 6..5 of bmRequestType.
*
* @see ch.ntb.usb.Device#controlMsg(int, int, int, int, byte[], int, int,
* boolean)
*/
public static final int REQ_TYPE_TYPE_STANDARD = (0x00 << 5),
REQ_TYPE_TYPE_CLASS = (0x01 << 5),
REQ_TYPE_TYPE_VENDOR = (0x02 << 5),
REQ_TYPE_TYPE_RESERVED = (0x03 << 5);
// request recipient (USB spec 9.3)
/**
* Specifies the intended recipient of the request.<br>
* 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
* specified, the wIndex field identifies the interface or endpoint.<br>
* Specifies bits 4..0 of bmRequestType.
*
* @see ch.ntb.usb.Device#controlMsg(int, int, int, int, byte[], int, int,
* boolean)
*/
public static final int REQ_TYPE_RECIP_DEVICE = 0x00,
REQ_TYPE_RECIP_INTERFACE = 0x01, REQ_TYPE_RECIP_ENDPOINT = 0x02,
REQ_TYPE_RECIP_OTHER = 0x03;
// request recipient (USB spec 9.3)
/**
* Specifies the intended recipient of the request.<br>
* 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
* specified, the wIndex field identifies the interface or endpoint.<br>
* Specifies bits 4..0 of bmRequestType.
*
* @see ch.ntb.usb.Device#controlMsg(int, int, int, int, byte[], int, int,
* boolean)
*/
public static final int REQ_TYPE_RECIP_DEVICE = 0x00,
REQ_TYPE_RECIP_INTERFACE = 0x01, REQ_TYPE_RECIP_ENDPOINT = 0x02,
REQ_TYPE_RECIP_OTHER = 0x03;
/**
* The maximum packet size of a bulk transfer when operating in highspeed
* (480 MB/s) mode.
*/
public static int HIGHSPEED_MAX_BULK_PACKET_SIZE = 512;
/**
* The maximum packet size of a bulk transfer when operating in highspeed
* (480 MB/s) mode.
*/
public static int HIGHSPEED_MAX_BULK_PACKET_SIZE = 512;
/**
* The maximum packet size of a bulk transfer when operating in fullspeed
* (12 MB/s) mode.
*/
public static int FULLSPEED_MAX_BULK_PACKET_SIZE = 64;
/**
* The maximum packet size of a bulk transfer when operating in fullspeed
* (12 MB/s) mode.
*/
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
* already registered, a reference to it will be returned.<br>
* After resetting or re-attaching a device the busName and filename may
* change. You can unregister the current device instance (see
* {@link #unregisterDevice(Device)}) and get a new instance with the
* updated bus and filename.
*
* @param idVendor
* the vendor id of the USB device
* @param idProduct
* the product id of the USB device
* @param busName
* optional name of the bus which can be used to distinguish
* multiple devices with the same vendor and product id.<br>
* see {@link Usb_Bus#getDirname()}
* @param filename
* optional filename which can be used to distinguish multiple
* devices with the same vendor and product id.<br>
* see {@link Usb_Device#getFilename()}
* @return a newly created device or an already registered device
*/
public static Device getDevice(short idVendor, short idProduct,
String busName, String filename) {
/**
* 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>
* After resetting or re-attaching a device the busName and filename may
* change. You can unregister the current device instance (see
* {@link #unregisterDevice(Device)}) and get a new instance with the
* updated bus and filename.
*
* @param idVendor
* the vendor id of the USB device
* @param idProduct
* the product id of the USB device
* @param busName
* optional name of the bus which can be used to distinguish
* multiple devices with the same vendor and product id.<br>
* see {@link Usb_Bus#getDirname()}
* @param filename
* optional filename which can be used to distinguish multiple
* devices with the same vendor and product id.<br>
* see {@link Usb_Device#getFilename()}
* @return a newly created device or an already registered device
*/
public static Device getDevice(short idVendor, short idProduct,
String busName, String filename) {
// check if this device is already registered
Device dev = getRegisteredDevice(idVendor, idProduct, busName, filename);
if (dev != null) {
logger.info("return already registered device: " + dev);
return dev;
}
dev = new Device(idVendor, idProduct, busName, filename);
logger.info("create new device: " + dev);
devices.add(dev);
return dev;
}
// check if this device is already registered
Device dev = getRegisteredDevice(idVendor, idProduct, busName, filename);
if (dev != null) {
logger.info("return already registered device: " + dev);
return dev;
}
dev = new Device(idVendor, idProduct, busName, filename);
logger.info("create new device: " + dev);
devices.add(dev);
return dev;
}
/**
* See {@link #getDevice(short, short, String, String)}. The parameter
* <code>filename</code> and <code>busName</code>is set to null.
*
* @param idVendor
* @param idProduct
* @return a newly created device or an already registered device
*/
public static Device getDevice(short idVendor, short idProduct) {
return getDevice(idVendor, idProduct, null, null);
}
/**
* See {@link #getDevice(short, short, String, String)}. The parameter
* <code>filename</code> and <code>busName</code>is set to null.
*
* @param idVendor
* @param idProduct
* @return a newly created device or an already registered device
*/
public static Device getDevice(short idVendor, short idProduct) {
return getDevice(idVendor, idProduct, null, null);
}
/**
* Unregister a registered device.
*
* @param dev
* the device to unregister
* @return true if the device has been removed, else false
*/
public static boolean unregisterDevice(Device dev) {
return devices.remove(dev);
}
/**
* Unregister a registered device.
*
* @param dev
* the device to unregister
* @return true if the device has been removed, else false
*/
public static boolean unregisterDevice(Device dev) {
return devices.remove(dev);
}
/**
* 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
* of those is set the first device matching the criteria is returned.
*
* @param idVendor
* the vendor id of the USB device
* @param idProduct
* the product id of the USB device
* @param busName
* the name of the bus which can be used to distinguish multiple
* devices with the same vendor and product id.<br>
* see {@link Usb_Bus#getDirname()}
* @param filename
* an optional filename which can be used to distinguish multiple
* devices with the same vendor and product id. see
* {@link Usb_Device#getFilename()}
*
* @return the device or null
*/
private static Device getRegisteredDevice(short idVendor, short idProduct,
String busName, String filename) {
for (Iterator<Device> iter = devices.iterator(); iter.hasNext();) {
Device dev = iter.next();
// bus and filename
if (busName != null && filename != null) {
if (busName.compareTo(dev.getBusName() == null ? "" : dev
.getBusName()) == 0
&& filename.compareTo(dev.getFilename() == null ? ""
: dev.getFilename()) == 0
&& dev.getIdVendor() == idVendor
&& dev.getIdProduct() == idProduct) {
return dev;
}
} else if (filename != null) {
if (filename.compareTo(dev.getFilename() == null ? "" : dev
.getFilename()) == 0
&& dev.getIdVendor() == idVendor
&& dev.getIdProduct() == idProduct) {
return dev;
}
} else if (busName != null) {
if (busName.compareTo(dev.getBusName() == null ? "" : dev
.getBusName()) == 0
&& dev.getIdVendor() == idVendor
&& dev.getIdProduct() == idProduct) {
return dev;
}
} else if (dev.getIdVendor() == idVendor
&& dev.getIdProduct() == idProduct) {
return dev;
}
}
return null;
}
/**
* 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
* of those is set the first device matching the criteria is returned.
*
* @param idVendor
* the vendor id of the USB device
* @param idProduct
* the product id of the USB device
* @param busName
* the name of the bus which can be used to distinguish multiple
* devices with the same vendor and product id.<br>
* see {@link Usb_Bus#getDirname()}
* @param filename
* an optional filename which can be used to distinguish multiple
* devices with the same vendor and product id. see
* {@link Usb_Device#getFilename()}
*
* @return the device or null
*/
private static Device getRegisteredDevice(short idVendor, short idProduct,
String busName, String filename) {
for (Iterator<Device> iter = devices.iterator(); iter.hasNext();) {
Device dev = iter.next();
// bus and filename
if (busName != null && filename != null) {
if (busName.compareTo(dev.getBusName() == null ? "" : dev
.getBusName()) == 0
&& filename.compareTo(dev.getFilename() == null ? ""
: dev.getFilename()) == 0
&& dev.getIdVendor() == idVendor
&& dev.getIdProduct() == idProduct) {
return dev;
}
} else if (filename != null) {
if (filename.compareTo(dev.getFilename() == null ? "" : dev
.getFilename()) == 0
&& dev.getIdVendor() == idVendor
&& dev.getIdProduct() == idProduct) {
return dev;
}
} else if (busName != null) {
if (busName.compareTo(dev.getBusName() == null ? "" : dev
.getBusName()) == 0
&& dev.getIdVendor() == idVendor
&& dev.getIdProduct() == idProduct) {
return dev;
}
} else if (dev.getIdVendor() == idVendor
&& dev.getIdProduct() == idProduct) {
return dev;
}
}
return null;
}
/**
* Returns the root {@link Usb_Bus} element.
*
* @return the root {@link Usb_Bus} element
* @throws USBException
*/
public static Usb_Bus getBus() throws USBException {
if (!initUSBDone) {
init();
}
LibusbJava.usb_find_busses();
LibusbJava.usb_find_devices();
/**
* Returns the root {@link Usb_Bus} element.
*
* @return the root {@link Usb_Bus} element
* @throws USBException
*/
public static Usb_Bus getBus() throws USBException {
if (!initUSBDone) {
init();
}
LibusbJava.usb_find_busses();
LibusbJava.usb_find_devices();
Usb_Bus bus = LibusbJava.usb_get_busses();
if (bus == null) {
throw new USBException("LibusbJava.usb_get_busses(): "
+ LibusbJava.usb_strerror());
}
return bus;
}
Usb_Bus bus = LibusbJava.usb_get_busses();
if (bus == null) {
throw new USBException("LibusbJava.usb_get_busses(): "
+ LibusbJava.usb_strerror());
}
return bus;
}
/**
* 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
* device with {@link USB#getDevice(short, short, String, String)}.
*/
public static void init() {
LibusbJava.usb_init();
initUSBDone = true;
}
/**
* 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
* device with {@link USB#getDevice(short, short, String, String)}.
*/
public static void init() {
LibusbJava.usb_init();
initUSBDone = true;
}
}

View File

@@ -11,13 +11,13 @@ import java.io.IOException;
public class USBException extends IOException {
public USBException(String string) {
super(string);
}
public USBException(String string) {
super(string);
}
/**
*
*/
private static final long serialVersionUID = 1690857437804284710L;
/**
*
*/
private static final long serialVersionUID = 1690857437804284710L;
}

View File

@@ -9,13 +9,13 @@ package ch.ntb.usb;
public class USBTimeoutException extends USBException {
public USBTimeoutException(String string) {
super(string);
}
public USBTimeoutException(String string) {
super(string);
}
/**
*
*/
private static final long serialVersionUID = -1065328371159778249L;
/**
*
*/
private static final long serialVersionUID = -1065328371159778249L;
}

View File

@@ -15,72 +15,72 @@ package ch.ntb.usb;
*/
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>
*
* @return the first device ojects of the devices linked list or null
*/
public Usb_Device getDevices() {
return devices;
}
/**
* Get the first device ojects of the devices linked list.<br>
*
* @return the first device ojects of the devices linked list or null
*/
public Usb_Device getDevices() {
return devices;
}
/**
* Returns the systems String representation of the bus.<br>
*
* @return the systems String representation of the bus
*/
public String getDirname() {
return dirname;
}
/**
* Returns the systems String representation of the bus.<br>
*
* @return the systems String representation of the bus
*/
public String getDirname() {
return dirname;
}
/**
* Returns the next bus object.<br>
*
* @return Returns the next bus object or null
*/
public Usb_Bus getNext() {
return next;
}
/**
* Returns the next bus object.<br>
*
* @return Returns the next bus object or null
*/
public Usb_Bus getNext() {
return next;
}
/**
* Returns the previous bus object.<br>
*
* @return Returns the previous bus object or null
*/
public Usb_Bus getPrev() {
return prev;
}
/**
* Returns the previous bus object.<br>
*
* @return Returns the previous bus object or null
*/
public Usb_Bus getPrev() {
return prev;
}
/**
* Get the root device of this bus.<br>
*
* @return the root device oject or null
*/
public Usb_Device getRootDev() {
return root_dev;
}
/**
* Get the root device of this bus.<br>
*
* @return the root device oject or null
*/
public Usb_Device getRootDev() {
return root_dev;
}
/**
* Returns the location in the USB bus linked list.<br>
*
* @return the location in the USB bus linked list
*/
public long getLocation() {
return location;
}
/**
* Returns the location in the USB bus linked list.<br>
*
* @return the location in the USB bus linked list
*/
public long getLocation() {
return location;
}
@Override
public String toString() {
return "Usb_Bus " + dirname;
}
@Override
public String toString() {
return "Usb_Bus " + dirname;
}
}

View File

@@ -18,122 +18,122 @@ package ch.ntb.usb;
*/
public class Usb_Config_Descriptor extends Usb_Descriptor {
/**
* Maximum number of configurations per device
*/
public static final int USB_MAXCONFIG = 8;
/**
* Maximum number of configurations per device
*/
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)}).
*
* @return the value to use as an argument to select this configuration
*/
public byte getBConfigurationValue() {
return bConfigurationValue;
}
/**
* 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
*/
public byte getBConfigurationValue() {
return bConfigurationValue;
}
/**
* Returns the power parameters for this configuration.<br>
* <br>
* Bit 7: Reserved, set to 1 (USB 1.0 Bus Powered)<br>
* Bit 6: Self Powered<br>
* Bit 5: Remote Wakeup<br>
* Bit 4..0: Reserved, set to 0
*
* @return the power parameters for this configuration
*/
public byte getBmAttributes() {
return bmAttributes;
}
/**
* Returns the power parameters for this configuration.<br>
* <br>
* Bit 7: Reserved, set to 1 (USB 1.0 Bus Powered)<br>
* Bit 6: Self Powered<br>
* Bit 5: Remote Wakeup<br>
* Bit 4..0: Reserved, set to 0
*
* @return the power parameters for this configuration
*/
public byte getBmAttributes() {
return bmAttributes;
}
/**
* Returns the number of interfaces.<br>
*
* @return the number of interfaces
*/
public byte getBNumInterfaces() {
return bNumInterfaces;
}
/**
* Returns the number of interfaces.<br>
*
* @return the number of interfaces
*/
public byte getBNumInterfaces() {
return bNumInterfaces;
}
/**
* Returns the data of extra descriptor(s) if available.<br>
*
* @return null or a byte array with the extra descriptor data
*/
public byte[] getExtra() {
return extra;
}
/**
* Returns the data of extra descriptor(s) if available.<br>
*
* @return null or a byte array with the extra descriptor data
*/
public byte[] getExtra() {
return extra;
}
/**
* Returns the number of bytes of the extra descriptor.<br>
*
* @return the number of bytes of the extra descriptor
*/
public int getExtralen() {
return extralen;
}
/**
* Returns the number of bytes of the extra descriptor.<br>
*
* @return the number of bytes of the extra descriptor
*/
public int getExtralen() {
return extralen;
}
/**
* Returns the index of the String descriptor describing this configuration.<br>
*
* @return the index of the String descriptor
*/
public byte getIConfiguration() {
return iConfiguration;
}
/**
* Returns the index of the String descriptor describing this configuration.<br>
*
* @return the index of the String descriptor
*/
public byte getIConfiguration() {
return iConfiguration;
}
/**
* Returns the USB interface descriptors.<br>
*
* @return the USB interface descriptors
*/
public Usb_Interface[] getInterface() {
return interface_;
}
/**
* Returns the USB interface descriptors.<br>
*
* @return the USB interface descriptors
*/
public Usb_Interface[] getInterface() {
return interface_;
}
/**
* Returns the maximum power consumption in 2mA units.<br>
*
* @return the maximum power consumption in 2mA units
*/
public byte getMaxPower() {
return MaxPower;
}
/**
* Returns the maximum power consumption in 2mA units.<br>
*
* @return the maximum power consumption in 2mA units
*/
public byte getMaxPower() {
return MaxPower;
}
/**
* Returns the total length in bytes of all descriptors.<br>
* When the configuration descriptor is read, it returns the entire
* configuration hierarchy which includes all related interface and endpoint
* descriptors. The <code>wTotalLength</code> field reflects the number of
* bytes in the hierarchy.
*
* @return the total length in bytes of all descriptors
*/
public short getWTotalLength() {
return wTotalLength;
}
/**
* Returns the total length in bytes of all descriptors.<br>
* When the configuration descriptor is read, it returns the entire
* configuration hierarchy which includes all related interface and endpoint
* descriptors. The <code>wTotalLength</code> field reflects the number of
* bytes in the hierarchy.
*
* @return the total length in bytes of all descriptors
*/
public short getWTotalLength() {
return wTotalLength;
}
@Override
public String toString() {
return "Usb_Config_Descriptor bNumInterfaces: 0x"
+ Integer.toHexString(bNumInterfaces);
}
@Override
public String toString() {
return "Usb_Config_Descriptor bNumInterfaces: 0x"
+ Integer.toHexString(bNumInterfaces);
}
}

View File

@@ -13,47 +13,47 @@ package ch.ntb.usb;
*/
public class Usb_Descriptor {
/**
* Descriptor types ({@link #bDescriptorType}).
*/
public static final int USB_DT_DEVICE = 0x01, USB_DT_CONFIG = 0x02,
USB_DT_STRING = 0x03, USB_DT_INTERFACE = 0x04,
USB_DT_ENDPOINT = 0x05;
/**
* Descriptor types ({@link #bDescriptorType}).
*/
public static final int USB_DT_DEVICE = 0x01, USB_DT_CONFIG = 0x02,
USB_DT_STRING = 0x03, USB_DT_INTERFACE = 0x04,
USB_DT_ENDPOINT = 0x05;
/**
* Descriptor types ({@link #bDescriptorType}).
*/
public static final int USB_DT_HID = 0x21, USB_DT_REPORT = 0x22,
USB_DT_PHYSICAL = 0x23, USB_DT_HUB = 0x29;
/**
* Descriptor types ({@link #bDescriptorType}).
*/
public static final int USB_DT_HID = 0x21, USB_DT_REPORT = 0x22,
USB_DT_PHYSICAL = 0x23, USB_DT_HUB = 0x29;
/**
* Descriptor sizes per descriptor type ({@link #bLength}).
*/
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_ENDPOINT_AUDIO_SIZE = 9 /* Audio extension */,
USB_DT_HUB_NONVAR_SIZE = 7;
/**
* Descriptor sizes per descriptor type ({@link #bLength}).
*/
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_ENDPOINT_AUDIO_SIZE = 9 /* Audio extension */,
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>
*
* @return the type of this descriptor
*/
public byte getBDescriptorType() {
return bDescriptorType;
}
/**
* Get the type of this descriptor.<br>
*
* @return the type of this descriptor
*/
public byte getBDescriptorType() {
return bDescriptorType;
}
/**
* Get the size of this descriptor in bytes.<br>
*
* @return the size of this descriptor in bytes
*/
public byte getBLength() {
return bLength;
}
/**
* Get the size of this descriptor in bytes.<br>
*
* @return the size of this descriptor in bytes
*/
public byte getBLength() {
return bLength;
}
}

View File

@@ -15,111 +15,111 @@ package ch.ntb.usb;
*/
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
* is used only internally so we don't use getter or setter methods.
*/
public long devStructAddr;
/**
* 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.
*/
public long devStructAddr;
/**
* 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
*/
public Usb_Bus getBus() {
return bus;
}
/**
* 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
*/
public Usb_Bus getBus() {
return bus;
}
/**
* Returns a reference to the first child.<br>
*
* @return a reference to the first child
*/
public Usb_Device getChildren() {
return children;
}
/**
* Returns a reference to the first child.<br>
*
* @return a reference to the first child
*/
public Usb_Device getChildren() {
return children;
}
/**
* Returns the USB config descriptors.<br>
*
* @return the USB config descriptors
*/
public Usb_Config_Descriptor[] getConfig() {
return config;
}
/**
* Returns the USB config descriptors.<br>
*
* @return the USB config descriptors
*/
public Usb_Config_Descriptor[] getConfig() {
return config;
}
/**
* Returns the USB device descriptor.<br>
*
* @return the USB device descriptor
*/
public Usb_Device_Descriptor getDescriptor() {
return descriptor;
}
/**
* Returns the USB device descriptor.<br>
*
* @return the USB device descriptor
*/
public Usb_Device_Descriptor getDescriptor() {
return descriptor;
}
/**
* Returns the number assigned to this device.<br>
*
* @return the number assigned to this device
*/
public byte getDevnum() {
return devnum;
}
/**
* Returns the number assigned to this device.<br>
*
* @return the number assigned to this device
*/
public byte getDevnum() {
return devnum;
}
/**
* Returns the systems String representation.<br>
*
* @return the systems String representation
*/
public String getFilename() {
return filename;
}
/**
* Returns the systems String representation.<br>
*
* @return the systems String representation
*/
public String getFilename() {
return filename;
}
/**
* Returns the pointer to the next device.<br>
*
* @return the pointer to the next device or null
*/
public Usb_Device getNext() {
return next;
}
/**
* Returns the pointer to the next device.<br>
*
* @return the pointer to the next device or null
*/
public Usb_Device getNext() {
return next;
}
/**
* Returns the number of children of this device.<br>
*
* @return the number of children of this device
*/
public byte getNumChildren() {
return num_children;
}
/**
* Returns the number of children of this device.<br>
*
* @return the number of children of this device
*/
public byte getNumChildren() {
return num_children;
}
/**
* Returns the pointer to the previous device.<br>
*
* @return the pointer to the previous device or null
*/
public Usb_Device getPrev() {
return prev;
}
/**
* Returns the pointer to the previous device.<br>
*
* @return the pointer to the previous device or null
*/
public Usb_Device getPrev() {
return prev;
}
@Override
public String toString() {
return "Usb_Device " + filename;
}
@Override
public String toString() {
return "Usb_Device " + filename;
}
}

View File

@@ -18,173 +18,173 @@ package ch.ntb.usb;
*
*/
public class Usb_Device_Descriptor extends Usb_Descriptor {
/**
* Device and/or interface class codes.
*/
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_MASS_STORAGE = 8, USB_CLASS_HUB = 9, USB_CLASS_DATA = 10,
USB_CLASS_VENDOR_SPEC = 0xff;
/**
* Device and/or interface class codes.
*/
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_MASS_STORAGE = 8, USB_CLASS_HUB = 9, USB_CLASS_DATA = 10,
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>
* Assigned by the manufacturer of the device.
*
* @return the device release number
*/
public short getBcdDevice() {
return bcdDevice;
}
/**
* Returns the device release number.<br>
* Assigned by the manufacturer of the device.
*
* @return the device release number
*/
public short getBcdDevice() {
return bcdDevice;
}
/**
* Returns the USB specification number to which the device complies to.<br>
* 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
* major version number, M is the minor version number and N is the sub
* minor version number.<br>
* Examples: USB 2.0 is reported as 0x0200, USB 1.1 as 0x0110 and USB 1.0 as
* 0x100
*
* @return the USB specification number to which the device complies to
*/
public short getBcdUSB() {
return bcdUSB;
}
/**
* Returns the USB specification number to which the device complies to.<br>
* 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
* major version number, M is the minor version number and N is the sub
* minor version number.<br>
* Examples: USB 2.0 is reported as 0x0200, USB 1.1 as 0x0110 and USB 1.0 as
* 0x100
*
* @return the USB specification number to which the device complies to
*/
public short getBcdUSB() {
return bcdUSB;
}
/**
* Returns the class code (Assigned by <a
* href="http://www.usb.org">www.usb.org</a>)<br>
* 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
* valid class code.
*
* @return the class code
*/
public byte getBDeviceClass() {
return bDeviceClass;
}
/**
* Returns the class code (Assigned by <a
* href="http://www.usb.org">www.usb.org</a>)<br>
* 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
* valid class code.
*
* @return the class code
*/
public byte getBDeviceClass() {
return bDeviceClass;
}
/**
* Returns the protocol code (Assigned by <a
* href="http://www.usb.org">www.usb.org</a>)<br>
*
* @return the protocol code
*/
public byte getBDeviceProtocol() {
return bDeviceProtocol;
}
/**
* Returns the protocol code (Assigned by <a
* href="http://www.usb.org">www.usb.org</a>)<br>
*
* @return the protocol code
*/
public byte getBDeviceProtocol() {
return bDeviceProtocol;
}
/**
* Returns the subclass code (Assigned by <a
* href="http://www.usb.org">www.usb.org</a>)<br>
*
* @return the subclass code
*/
public byte getBDeviceSubClass() {
return bDeviceSubClass;
}
/**
* Returns the subclass code (Assigned by <a
* href="http://www.usb.org">www.usb.org</a>)<br>
*
* @return the subclass code
*/
public byte getBDeviceSubClass() {
return bDeviceSubClass;
}
/**
* Returns the maximum packet size for endpoint zero.<br>
* Valid sizes are 8, 16, 32, 64.
*
* @return the maximum packet size for endpoint zero
*/
public byte getBMaxPacketSize0() {
return bMaxPacketSize0;
}
/**
* Returns the maximum packet size for endpoint zero.<br>
* Valid sizes are 8, 16, 32, 64.
*
* @return the maximum packet size for endpoint zero
*/
public byte getBMaxPacketSize0() {
return bMaxPacketSize0;
}
/**
* Returns the number of possible configurations supported at its current
* speed.<br>
*
* @return the number of possible configurations supported at its current
* speed
*/
public byte getBNumConfigurations() {
return bNumConfigurations;
}
/**
* Returns the number of possible configurations supported at its current
* speed.<br>
*
* @return the number of possible configurations supported at its current
* speed
*/
public byte getBNumConfigurations() {
return bNumConfigurations;
}
/**
* Returns the product ID (Assigned by <a
* href="http://www.usb.org">www.usb.org</a>)<br>
*
* @return the product ID
*/
public short getIdProduct() {
return idProduct;
}
/**
* Returns the product ID (Assigned by <a
* href="http://www.usb.org">www.usb.org</a>)<br>
*
* @return the product ID
*/
public short getIdProduct() {
return idProduct;
}
/**
* Returns the Vendor ID (Assigned by <a
* href="http://www.usb.org">www.usb.org</a>)<br>
*
* @return the Vendor ID
*/
public short getIdVendor() {
return idVendor;
}
/**
* Returns the Vendor ID (Assigned by <a
* href="http://www.usb.org">www.usb.org</a>)<br>
*
* @return the Vendor ID
*/
public short getIdVendor() {
return idVendor;
}
/**
* Returns the index of the manufacturer string descriptor.<br>
* If this value is 0, no string descriptor is used.
*
* @return the index of the manufacturer string descriptor
*/
public byte getIManufacturer() {
return iManufacturer;
}
/**
* Returns the index of the manufacturer string descriptor.<br>
* If this value is 0, no string descriptor is used.
*
* @return the index of the manufacturer string descriptor
*/
public byte getIManufacturer() {
return iManufacturer;
}
/**
* Returns the index of the product string descriptor.<br>
* If this value is 0, no string descriptor is used.
*
* @return the index of the product string descriptor
*/
public byte getIProduct() {
return iProduct;
}
/**
* Returns the index of the product string descriptor.<br>
* If this value is 0, no string descriptor is used.
*
* @return the index of the product string descriptor
*/
public byte getIProduct() {
return iProduct;
}
/**
* Returns the index of serial number string descriptor.<br>
* If this value is 0, no string descriptor is used.
*
* @return the index of serial number string descriptor
*/
public byte getISerialNumber() {
return iSerialNumber;
}
/**
* Returns the index of serial number string descriptor.<br>
* If this value is 0, no string descriptor is used.
*
* @return the index of serial number string descriptor
*/
public byte getISerialNumber() {
return iSerialNumber;
}
@Override
public String toString() {
StringBuffer sb = new StringBuffer();
sb.append("Usb_Device_Descriptor idVendor: 0x"
+ Integer.toHexString(idVendor & 0xFFFF) + ", idProduct: 0x"
+ Integer.toHexString(idProduct & 0xFFFF));
return sb.toString();
}
@Override
public String toString() {
StringBuffer sb = new StringBuffer();
sb.append("Usb_Device_Descriptor idVendor: 0x"
+ Integer.toHexString(idVendor & 0xFFFF) + ", idProduct: 0x"
+ Integer.toHexString(idProduct & 0xFFFF));
return sb.toString();
}
}

View File

@@ -22,137 +22,137 @@ package ch.ntb.usb;
*/
public class Usb_Endpoint_Descriptor extends Usb_Descriptor {
/**
* Maximum number of endpoints
*/
public static final int USB_MAXENDPOINTS = 32;
/**
* Maximum number of endpoints
*/
public static final int USB_MAXENDPOINTS = 32;
/**
* Endpoint address mask (in bEndpointAddress).
*/
public static final int USB_ENDPOINT_ADDRESS_MASK = 0x0f,
USB_ENDPOINT_DIR_MASK = 0x80;
/**
* Endpoint address mask (in bEndpointAddress).
*/
public static final int USB_ENDPOINT_ADDRESS_MASK = 0x0f,
USB_ENDPOINT_DIR_MASK = 0x80;
/**
* Endpoint type mask (in bmAttributes).
*/
public static final int USB_ENDPOINT_TYPE_MASK = 0x03;
/**
* Endpoint type mask (in bmAttributes).
*/
public static final int USB_ENDPOINT_TYPE_MASK = 0x03;
/**
* Possible endpoint types (in bmAttributes).
*/
public static final int USB_ENDPOINT_TYPE_CONTROL = 0,
USB_ENDPOINT_TYPE_ISOCHRONOUS = 1, USB_ENDPOINT_TYPE_BULK = 2,
USB_ENDPOINT_TYPE_INTERRUPT = 3;
/**
* Possible endpoint types (in bmAttributes).
*/
public static final int USB_ENDPOINT_TYPE_CONTROL = 0,
USB_ENDPOINT_TYPE_ISOCHRONOUS = 1, USB_ENDPOINT_TYPE_BULK = 2,
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>
* <br>
* Bits 3..0: Endpoint number <br>
* Bits 6..4: Reserved. Set to zero <br>
* 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
* ignored for control endpoints.<br>
*
* @return the endpoint address
*/
public byte getBEndpointAddress() {
return bEndpointAddress;
}
/**
* Returns the endpoint address.<br>
* <br>
* Bits 3..0: Endpoint number <br>
* Bits 6..4: Reserved. Set to zero <br>
* 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
* ignored for control endpoints.<br>
*
* @return the endpoint address
*/
public byte getBEndpointAddress() {
return bEndpointAddress;
}
/**
* Returns the intervall for polling endpoint data transfers.<br>
* 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.
*
* @return the intervall for polling endpoint data transfers
*/
public byte getBInterval() {
return bInterval;
}
/**
* Returns the intervall for polling endpoint data transfers.<br>
* 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.
*
* @return the intervall for polling endpoint data transfers
*/
public byte getBInterval() {
return bInterval;
}
/**
* Returns the attributes of this endpoint.<br>
*
* Bits 1..0: Transfer Type (see <i>USB_ENDPOINT_TYPE_XXX</i>).<br>
* Bits 7..2: Reserved.<br>
*
* <pre>
* If isochronous endpoint:
* Bits 3..2: Synchronisation type
* 00 = No synchronisation
* 01 = Asynchronous
* 10 = Adaptive
* 11 = Synchronous
* Bits 5..4: Usage Type
* 00 = Data endpoint
* 01 = Feedback endpoint
* 10 = Explicit feedback data endpoint
* 11 = Reserved
* </pre>
*
* @return the attributes of this endpoint
*/
public byte getBmAttributes() {
return bmAttributes;
}
/**
* Returns the attributes of this endpoint.<br>
*
* Bits 1..0: Transfer Type (see <i>USB_ENDPOINT_TYPE_XXX</i>).<br>
* Bits 7..2: Reserved.<br>
*
* <pre>
* If isochronous endpoint:
* Bits 3..2: Synchronisation type
* 00 = No synchronisation
* 01 = Asynchronous
* 10 = Adaptive
* 11 = Synchronous
* Bits 5..4: Usage Type
* 00 = Data endpoint
* 01 = Feedback endpoint
* 10 = Explicit feedback data endpoint
* 11 = Reserved
* </pre>
*
* @return the attributes of this endpoint
*/
public byte getBmAttributes() {
return bmAttributes;
}
public byte getBRefresh() {
return bRefresh;
}
public byte getBRefresh() {
return bRefresh;
}
public byte getBSynchAddress() {
return bSynchAddress;
}
public byte getBSynchAddress() {
return bSynchAddress;
}
/**
* Returns the data of extra descriptor(s) if available.<br>
*
* @return null or a byte array with the extra descriptor data
*/
public byte[] getExtra() {
return extra;
}
/**
* Returns the data of extra descriptor(s) if available.<br>
*
* @return null or a byte array with the extra descriptor data
*/
public byte[] getExtra() {
return extra;
}
/**
* Returns the number of bytes of the extra descriptor.<br>
*
* @return the number of bytes of the extra descriptor
*/
public int getExtralen() {
return extralen;
}
/**
* Returns the number of bytes of the extra descriptor.<br>
*
* @return the number of bytes of the extra descriptor
*/
public int getExtralen() {
return extralen;
}
/**
* Returns the maximum packet size of this endpoint is capable of sending or
* receiving.<br>
*
* @return the maximum packet size
*/
public short getWMaxPacketSize() {
return wMaxPacketSize;
}
/**
* Returns the maximum packet size of this endpoint is capable of sending or
* receiving.<br>
*
* @return the maximum packet size
*/
public short getWMaxPacketSize() {
return wMaxPacketSize;
}
@Override
public String toString() {
return "Usb_Endpoint_Descriptor bEndpointAddress: 0x"
+ Integer.toHexString(bEndpointAddress & 0xFF);
}
@Override
public String toString() {
return "Usb_Endpoint_Descriptor bEndpointAddress: 0x"
+ Integer.toHexString(bEndpointAddress & 0xFF);
}
}

View File

@@ -14,37 +14,37 @@ package ch.ntb.usb;
*/
public class Usb_Interface {
/**
* Maximal number of alternate settings
*/
public static final int USB_MAXALTSETTING = 128; /* Hard limit */
/**
* Maximal number of alternate settings
*/
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
public String toString() {
return "Usb_Interface num_altsetting: 0x"
+ Integer.toHexString(num_altsetting);
}
@Override
public String toString() {
return "Usb_Interface num_altsetting: 0x"
+ Integer.toHexString(num_altsetting);
}
/**
* Retuns an array of interface descriptors.<br>
*
* @return an array of interface descriptors
*/
public Usb_Interface_Descriptor[] getAltsetting() {
return altsetting;
}
/**
* Retuns an array of interface descriptors.<br>
*
* @return an array of interface descriptors
*/
public Usb_Interface_Descriptor[] getAltsetting() {
return altsetting;
}
/**
* Returns the number of alternate settings.<br>
*
* @return the number of alternate settings
*/
public int getNumAltsetting() {
return num_altsetting;
}
/**
* Returns the number of alternate settings.<br>
*
* @return the number of alternate settings
*/
public int getNumAltsetting() {
return num_altsetting;
}
}

View File

@@ -19,127 +19,127 @@ package ch.ntb.usb;
*/
public class Usb_Interface_Descriptor extends Usb_Descriptor {
/**
* Maximum number of interfaces
*/
public static final int USB_MAXINTERFACES = 32;
/**
* Maximum number of interfaces
*/
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
public String toString() {
return "Usb_Interface_Descriptor bNumEndpoints: 0x"
+ Integer.toHexString(bNumEndpoints);
}
@Override
public String toString() {
return "Usb_Interface_Descriptor bNumEndpoints: 0x"
+ Integer.toHexString(bNumEndpoints);
}
/**
* Returns the value used to select the alternate setting ({@link LibusbJava#usb_set_altinterface(long, int)}).<br>
*
* @return the alternate setting
*/
public byte getBAlternateSetting() {
return bAlternateSetting;
}
/**
* Returns the value used to select the alternate setting ({@link LibusbJava#usb_set_altinterface(long, int)}).<br>
*
* @return the alternate setting
*/
public byte getBAlternateSetting() {
return bAlternateSetting;
}
/**
* Returns the class code (Assigned by <a
* href="http://www.usb.org">www.usb.org</a>).<br>
*
* @return the class code
*/
public byte getBInterfaceClass() {
return bInterfaceClass;
}
/**
* Returns the class code (Assigned by <a
* href="http://www.usb.org">www.usb.org</a>).<br>
*
* @return the class code
*/
public byte getBInterfaceClass() {
return bInterfaceClass;
}
/**
* Returns the number (identifier) of this interface.<br>
*
* @return the number (identifier) of this interface
*/
public byte getBInterfaceNumber() {
return bInterfaceNumber;
}
/**
* Returns the number (identifier) of this interface.<br>
*
* @return the number (identifier) of this interface
*/
public byte getBInterfaceNumber() {
return bInterfaceNumber;
}
/**
* Returns the protocol code (Assigned by <a
* href="http://www.usb.org">www.usb.org</a>).<br>
*
* @return the protocol code
*/
public byte getBInterfaceProtocol() {
return bInterfaceProtocol;
}
/**
* Returns the protocol code (Assigned by <a
* href="http://www.usb.org">www.usb.org</a>).<br>
*
* @return the protocol code
*/
public byte getBInterfaceProtocol() {
return bInterfaceProtocol;
}
/**
* Returns the subclass code (Assigned by <a
* href="http://www.usb.org">www.usb.org</a>).<br>
*
* @return the subclass code
*/
public byte getBInterfaceSubClass() {
return bInterfaceSubClass;
}
/**
* Returns the subclass code (Assigned by <a
* href="http://www.usb.org">www.usb.org</a>).<br>
*
* @return the subclass code
*/
public byte getBInterfaceSubClass() {
return bInterfaceSubClass;
}
/**
* Returns the number of endpoints used for this interface.<br>
*
* @return the number of endpoints used for this interface
*/
public byte getBNumEndpoints() {
return bNumEndpoints;
}
/**
* Returns the number of endpoints used for this interface.<br>
*
* @return the number of endpoints used for this interface
*/
public byte getBNumEndpoints() {
return bNumEndpoints;
}
/**
* Returns an array of endpoint descriptors.<br>
*
* @return an array of endpoint descriptors
*/
public Usb_Endpoint_Descriptor[] getEndpoint() {
return endpoint;
}
/**
* Returns an array of endpoint descriptors.<br>
*
* @return an array of endpoint descriptors
*/
public Usb_Endpoint_Descriptor[] getEndpoint() {
return endpoint;
}
/**
* Returns the data of extra descriptor(s) if available.<br>
*
* @return null or a byte array with the extra descriptor data
*/
public byte[] getExtra() {
return extra;
}
/**
* Returns the data of extra descriptor(s) if available.<br>
*
* @return null or a byte array with the extra descriptor data
*/
public byte[] getExtra() {
return extra;
}
/**
* Returns the number of bytes of the extra descriptor.<br>
*
* @return the number of bytes of the extra descriptor
*/
public int getExtralen() {
return extralen;
}
/**
* Returns the number of bytes of the extra descriptor.<br>
*
* @return the number of bytes of the extra descriptor
*/
public int getExtralen() {
return extralen;
}
/**
* Returns the index of the String descriptor describing this interface.<br>
*
* @return the index of the String descriptor
*/
public byte getIInterface() {
return iInterface;
}
/**
* Returns the index of the String descriptor describing this interface.<br>
*
* @return the index of the String descriptor
*/
public byte getIInterface() {
return iInterface;
}
}

View File

@@ -11,50 +11,50 @@ import java.io.PrintStream;
public class Utils {
public static void logBus(Usb_Bus bus) {
logBus(bus, System.out);
}
public static void logBus(Usb_Bus bus) {
logBus(bus, System.out);
}
public static void logBus(Usb_Bus bus, PrintStream out) {
Usb_Bus usb_Bus = bus;
while (usb_Bus != null) {
out.println(usb_Bus.toString());
Usb_Device dev = usb_Bus.getDevices();
while (dev != null) {
out.println("\t" + dev.toString());
// Usb_Device_Descriptor
Usb_Device_Descriptor defDesc = dev.getDescriptor();
out.println("\t\t" + defDesc.toString());
// Usb_Config_Descriptor
Usb_Config_Descriptor[] confDesc = dev.getConfig();
for (int i = 0; i < confDesc.length; i++) {
out.println("\t\t" + confDesc[i].toString());
Usb_Interface[] int_ = confDesc[i].getInterface();
if (int_ != null) {
for (int j = 0; j < int_.length; j++) {
out.println("\t\t\t" + int_[j].toString());
Usb_Interface_Descriptor[] intDesc = int_[j]
.getAltsetting();
if (intDesc != null) {
for (int k = 0; k < intDesc.length; k++) {
out.println("\t\t\t\t"
+ intDesc[k].toString());
Usb_Endpoint_Descriptor[] epDesc = intDesc[k]
.getEndpoint();
if (epDesc != null) {
for (int e = 0; e < epDesc.length; e++) {
out.println("\t\t\t\t\t"
+ epDesc[e].toString());
}
}
}
}
}
}
}
dev = dev.getNext();
}
usb_Bus = usb_Bus.getNext();
}
}
public static void logBus(Usb_Bus bus, PrintStream out) {
Usb_Bus usb_Bus = bus;
while (usb_Bus != null) {
out.println(usb_Bus.toString());
Usb_Device dev = usb_Bus.getDevices();
while (dev != null) {
out.println("\t" + dev.toString());
// Usb_Device_Descriptor
Usb_Device_Descriptor defDesc = dev.getDescriptor();
out.println("\t\t" + defDesc.toString());
// Usb_Config_Descriptor
Usb_Config_Descriptor[] confDesc = dev.getConfig();
for (int i = 0; i < confDesc.length; i++) {
out.println("\t\t" + confDesc[i].toString());
Usb_Interface[] int_ = confDesc[i].getInterface();
if (int_ != null) {
for (int j = 0; j < int_.length; j++) {
out.println("\t\t\t" + int_[j].toString());
Usb_Interface_Descriptor[] intDesc = int_[j]
.getAltsetting();
if (intDesc != null) {
for (int k = 0; k < intDesc.length; k++) {
out.println("\t\t\t\t"
+ intDesc[k].toString());
Usb_Endpoint_Descriptor[] epDesc = intDesc[k]
.getEndpoint();
if (epDesc != null) {
for (int e = 0; e < epDesc.length; e++) {
out.println("\t\t\t\t\t"
+ epDesc[e].toString());
}
}
}
}
}
}
}
dev = dev.getNext();
}
usb_Bus = usb_Bus.getNext();
}
}
}

View File

@@ -17,119 +17,119 @@ import java.util.logging.Logger;
public class LogUtil {
// debug this class
private static final boolean debugLogUtil = false;
// debug this class
private static final boolean debugLogUtil = false;
private static final String PLUGIN_ID = "ch.ntb.usb";
private static final String PROPERTIES_FILE = ".configure";
private static final String LOGGER_WARNING = "Warning in class "
+ LogUtil.class.getName()
+ ": could not load the logger properties file " + PROPERTIES_FILE;
private static final String PLUGIN_ID = "ch.ntb.usb";
private static final String PROPERTIES_FILE = ".configure";
private static final String LOGGER_WARNING = "Warning in class "
+ LogUtil.class.getName()
+ ": could not load the logger properties file " + PROPERTIES_FILE;
private static boolean debugEnabled;
private static boolean debugEnabled;
static {
createLoggersFromProperties();
}
static {
createLoggersFromProperties();
}
private static void debugMsg(String method, String message) {
if (debugLogUtil) {
System.out.println(method + ": " + message);
}
}
private static void debugMsg(String method, String message) {
if (debugLogUtil) {
System.out.println(method + ": " + message);
}
}
public static void setLevel(Logger logger, Level loglevel) {
Handler[] h = logger.getHandlers();
for (int i = 0; i < h.length; i++) {
System.out.println("setLevel " + loglevel.toString());
h[i].setLevel(loglevel);
}
logger.setLevel(loglevel);
}
public static void setLevel(Logger logger, Level loglevel) {
Handler[] h = logger.getHandlers();
for (int i = 0; i < h.length; i++) {
System.out.println("setLevel " + loglevel.toString());
h[i].setLevel(loglevel);
}
logger.setLevel(loglevel);
}
public static Logger getLogger(String name) {
debugMsg("getLogger", name);
LogManager manager = LogManager.getLogManager();
// check if logger is already registered
Logger logger = manager.getLogger(name);
if (logger == null) {
logger = Logger.getLogger(name);
setLevel(logger, Level.OFF);
manager.addLogger(logger);
debugMsg("getLogger", "creating new logger");
}
if (logger.getLevel() == null) {
debugMsg("getLogger", "level == null -> setLevel to OFF ");
setLevel(logger, Level.OFF);
}
debugMsg("getLogger", "logLevel " + logger.getLevel().getName());
return logger;
}
public static Logger getLogger(String name) {
debugMsg("getLogger", name);
LogManager manager = LogManager.getLogManager();
// check if logger is already registered
Logger logger = manager.getLogger(name);
if (logger == null) {
logger = Logger.getLogger(name);
setLevel(logger, Level.OFF);
manager.addLogger(logger);
debugMsg("getLogger", "creating new logger");
}
if (logger.getLevel() == null) {
debugMsg("getLogger", "level == null -> setLevel to OFF ");
setLevel(logger, Level.OFF);
}
debugMsg("getLogger", "logLevel " + logger.getLevel().getName());
return logger;
}
private static void initLevel(Logger logger, Level loglevel) {
Handler[] h = logger.getHandlers();
for (int i = 0; i < h.length; i++) {
logger.removeHandler(h[i]);
}
Handler console = new ConsoleHandler();
console.setLevel(loglevel);
logger.addHandler(console);
logger.setLevel(loglevel);
logger.setUseParentHandlers(false);
}
private static void initLevel(Logger logger, Level loglevel) {
Handler[] h = logger.getHandlers();
for (int i = 0; i < h.length; i++) {
logger.removeHandler(h[i]);
}
Handler console = new ConsoleHandler();
console.setLevel(loglevel);
logger.addHandler(console);
logger.setLevel(loglevel);
logger.setUseParentHandlers(false);
}
private static void createLoggersFromProperties() {
try {
debugMsg(LogUtil.class.getName(), "createLoggersFromProperties");
InputStream is = LogUtil.class.getClassLoader()
.getResourceAsStream(PROPERTIES_FILE);
if (is == null) {
System.err.println(LOGGER_WARNING);
} else {
Properties prop = new Properties();
prop.load(is);
debugMsg("createLoggersFromProperties",
"properties file loaded: " + PROPERTIES_FILE);
debugMsg("createLoggersFromProperties", "file content:\n"
+ prop.toString());
// get global debug enable flag
debugEnabled = Boolean.parseBoolean(prop.getProperty(PLUGIN_ID
+ "/debug"));
debugMsg("createLoggersFromProperties", "debuging enabled: "
+ debugEnabled);
// get and configure loggers
boolean moreLoggers = true;
int loggerCount = 0;
while (moreLoggers) {
String loggerProp = prop.getProperty(PLUGIN_ID
+ "/debug/logger" + loggerCount);
loggerCount++;
if (loggerProp != null) {
// parse string and get logger name and log level
int slashIndex = loggerProp.indexOf('/');
String loggerName = loggerProp.substring(0, slashIndex)
.trim();
String logLevel = loggerProp.substring(slashIndex + 1,
loggerProp.length());
// register logger
Level level;
if (debugEnabled) {
level = Level.parse(logLevel);
} else {
level = Level.OFF;
}
Logger logger = getLogger(loggerName);
initLevel(logger, level);
debugMsg("createLoggersFromProperties",
"create logger " + loggerName + " with level "
+ level.toString());
} else {
moreLoggers = false;
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
private static void createLoggersFromProperties() {
try {
debugMsg(LogUtil.class.getName(), "createLoggersFromProperties");
InputStream is = LogUtil.class.getClassLoader()
.getResourceAsStream(PROPERTIES_FILE);
if (is == null) {
System.err.println(LOGGER_WARNING);
} else {
Properties prop = new Properties();
prop.load(is);
debugMsg("createLoggersFromProperties",
"properties file loaded: " + PROPERTIES_FILE);
debugMsg("createLoggersFromProperties", "file content:\n"
+ prop.toString());
// get global debug enable flag
debugEnabled = Boolean.parseBoolean(prop.getProperty(PLUGIN_ID
+ "/debug"));
debugMsg("createLoggersFromProperties", "debuging enabled: "
+ debugEnabled);
// get and configure loggers
boolean moreLoggers = true;
int loggerCount = 0;
while (moreLoggers) {
String loggerProp = prop.getProperty(PLUGIN_ID
+ "/debug/logger" + loggerCount);
loggerCount++;
if (loggerProp != null) {
// parse string and get logger name and log level
int slashIndex = loggerProp.indexOf('/');
String loggerName = loggerProp.substring(0, slashIndex)
.trim();
String logLevel = loggerProp.substring(slashIndex + 1,
loggerProp.length());
// register logger
Level level;
if (debugEnabled) {
level = Level.parse(logLevel);
} else {
level = Level.OFF;
}
Logger logger = getLogger(loggerName);
initLevel(logger, level);
debugMsg("createLoggersFromProperties",
"create logger " + loggerName + " with level "
+ level.toString());
} else {
moreLoggers = false;
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -11,324 +11,324 @@ import ch.ntb.usb.Usb_Device;
import ch.ntb.usb.exceptions.LibusbError;
public class LibusbJava1Test {
/**
* This method does not need to be tested. This test only exists to document
* the fact that this function has not been forgotten.
*/
@Test
public void testLibusb_set_debug() {
}
/**
* This method does not need to be tested. This test only exists to document
* the fact that this function has not been forgotten.
*/
@Test
public void testLibusb_set_debug() {
}
@Test
public void testLibusb_init() {
try {
long handle = LibusbJava1.libusb_init();
LibusbJava1.libusb_exit(handle);
} catch (LibusbError e) {
fail("Initialization failed, Code: " + e.getErrorString());
}
}
@Test
public void testLibusb_init() {
try {
long handle = LibusbJava1.libusb_init();
LibusbJava1.libusb_exit(handle);
} catch (LibusbError e) {
fail("Initialization failed, Code: " + e.getErrorString());
}
}
/**
* This method can not be tested (yet). This test only exists to document
* the fact that this function has not been forgotten.
*/
@Test
public void testLibusb_exit() {
}
/**
* This method can not be tested (yet). This test only exists to document
* the fact that this function has not been forgotten.
*/
@Test
public void testLibusb_exit() {
}
@Test
public void testLibusb_get_device_list() throws LibusbError {
long handle = LibusbJava1.libusb_init();
Usb_Device devices = LibusbJava1.libusb_get_device_list(handle);
assertNotNull("Got devices", devices);
System.out.println(devices.toString());
assertNull("Bus is null", devices.getBus());
LibusbJava1.libusb_exit(handle);
}
@Test
public void testLibusb_get_device_list() throws LibusbError {
long handle = LibusbJava1.libusb_init();
Usb_Device devices = LibusbJava1.libusb_get_device_list(handle);
assertNotNull("Got devices", devices);
System.out.println(devices.toString());
assertNull("Bus is null", devices.getBus());
LibusbJava1.libusb_exit(handle);
}
@Test
public void testLibusb_get_bus_number() throws LibusbError {
long handle = LibusbJava1.libusb_init();
Usb_Device devices = LibusbJava1.libusb_get_device_list(handle);
assertNotNull("Got devices", devices);
System.out.println(devices.getBus());
LibusbJava1.libusb_exit(handle);
}
@Test
public void testLibusb_get_bus_number() throws LibusbError {
long handle = LibusbJava1.libusb_init();
Usb_Device devices = LibusbJava1.libusb_get_device_list(handle);
assertNotNull("Got devices", devices);
System.out.println(devices.getBus());
LibusbJava1.libusb_exit(handle);
}
@Test
public void testLibusb_get_max_iso_packet_size() {
fail("Not yet implemented");
}
@Test
public void testLibusb_get_max_iso_packet_size() {
fail("Not yet implemented");
}
@Test
public void testLibusb_ref_device() {
fail("Not yet implemented");
}
@Test
public void testLibusb_ref_device() {
fail("Not yet implemented");
}
@Test
public void testLibusb_unref_device() {
fail("Not yet implemented");
}
@Test
public void testLibusb_unref_device() {
fail("Not yet implemented");
}
@Test
public void testLibusb_open() {
fail("Not yet implemented");
}
@Test
public void testLibusb_open() {
fail("Not yet implemented");
}
@Test
public void testLibusb_open_device_with_vid_pid() {
fail("Not yet implemented");
}
@Test
public void testLibusb_open_device_with_vid_pid() {
fail("Not yet implemented");
}
@Test
public void testLibusb_close() {
fail("Not yet implemented");
}
@Test
public void testLibusb_close() {
fail("Not yet implemented");
}
@Test
public void testLibusb_get_device() {
fail("Not yet implemented");
}
@Test
public void testLibusb_get_device() {
fail("Not yet implemented");
}
@Test
public void testLibusb_get_configuration() {
fail("Not yet implemented");
}
@Test
public void testLibusb_get_configuration() {
fail("Not yet implemented");
}
@Test
public void testLibusb_set_configuration() {
fail("Not yet implemented");
}
@Test
public void testLibusb_set_configuration() {
fail("Not yet implemented");
}
@Test
public void testLibusb_claim_interface() {
fail("Not yet implemented");
}
@Test
public void testLibusb_claim_interface() {
fail("Not yet implemented");
}
@Test
public void testLibusb_release_interface() {
fail("Not yet implemented");
}
@Test
public void testLibusb_release_interface() {
fail("Not yet implemented");
}
@Test
public void testLibusb_set_interface_alt_setting() {
fail("Not yet implemented");
}
@Test
public void testLibusb_set_interface_alt_setting() {
fail("Not yet implemented");
}
@Test
public void testLibusb_clear_halt() {
fail("Not yet implemented");
}
@Test
public void testLibusb_clear_halt() {
fail("Not yet implemented");
}
@Test
public void testLibusb_reset_device() {
fail("Not yet implemented");
}
@Test
public void testLibusb_reset_device() {
fail("Not yet implemented");
}
@Test
public void testLibusb_kernel_driver_active() {
fail("Not yet implemented");
}
@Test
public void testLibusb_kernel_driver_active() {
fail("Not yet implemented");
}
@Test
public void testLibusb_detach_kernel_driver() {
fail("Not yet implemented");
}
@Test
public void testLibusb_detach_kernel_driver() {
fail("Not yet implemented");
}
@Test
public void testLibusb_attach_kernel_driver() {
fail("Not yet implemented");
}
@Test
public void testLibusb_attach_kernel_driver() {
fail("Not yet implemented");
}
@Test
public void testLibusb_get_active_config_descriptor() {
fail("Not yet implemented");
}
@Test
public void testLibusb_get_active_config_descriptor() {
fail("Not yet implemented");
}
@Test
public void testLibusb_get_string_descriptor_ascii() {
fail("Not yet implemented");
}
@Test
public void testLibusb_get_string_descriptor_ascii() {
fail("Not yet implemented");
}
@Test
public void testLibusb_get_descriptor() {
fail("Not yet implemented");
}
@Test
public void testLibusb_get_descriptor() {
fail("Not yet implemented");
}
@Test
public void testLibusb_get_string_descriptor() {
fail("Not yet implemented");
}
@Test
public void testLibusb_get_string_descriptor() {
fail("Not yet implemented");
}
@Test
public void testLibusb_alloc_transfer() {
fail("Not yet implemented");
}
@Test
public void testLibusb_alloc_transfer() {
fail("Not yet implemented");
}
@Test
public void testLibusb_free_transfer() {
fail("Not yet implemented");
}
@Test
public void testLibusb_free_transfer() {
fail("Not yet implemented");
}
@Test
public void testLibusb_submit_transfer() {
fail("Not yet implemented");
}
@Test
public void testLibusb_submit_transfer() {
fail("Not yet implemented");
}
@Test
public void testLibusb_cancel_transfer() {
fail("Not yet implemented");
}
@Test
public void testLibusb_cancel_transfer() {
fail("Not yet implemented");
}
@Test
public void testLibusb_control_transfer_get_data() {
fail("Not yet implemented");
}
@Test
public void testLibusb_control_transfer_get_data() {
fail("Not yet implemented");
}
@Test
public void testLibusb_control_transfer_get_setup() {
fail("Not yet implemented");
}
@Test
public void testLibusb_control_transfer_get_setup() {
fail("Not yet implemented");
}
@Test
public void testLibusb_fill_control_setup() {
fail("Not yet implemented");
}
@Test
public void testLibusb_fill_control_setup() {
fail("Not yet implemented");
}
@Test
public void testLibusb_fill_control_transfer() {
fail("Not yet implemented");
}
@Test
public void testLibusb_fill_control_transfer() {
fail("Not yet implemented");
}
@Test
public void testLibusb_fill_bulk_transfer() {
fail("Not yet implemented");
}
@Test
public void testLibusb_fill_bulk_transfer() {
fail("Not yet implemented");
}
@Test
public void testLibusb_fill_interrupt_transfer() {
fail("Not yet implemented");
}
@Test
public void testLibusb_fill_interrupt_transfer() {
fail("Not yet implemented");
}
@Test
public void testLibusb_fill_iso_transfer() {
fail("Not yet implemented");
}
@Test
public void testLibusb_fill_iso_transfer() {
fail("Not yet implemented");
}
@Test
public void testLibusb_set_iso_packet_lengths() {
fail("Not yet implemented");
}
@Test
public void testLibusb_set_iso_packet_lengths() {
fail("Not yet implemented");
}
@Test
public void testLibusb_get_iso_packet_buffer() {
fail("Not yet implemented");
}
@Test
public void testLibusb_get_iso_packet_buffer() {
fail("Not yet implemented");
}
@Test
public void testLibusb_get_iso_packet_buffer_simple() {
fail("Not yet implemented");
}
@Test
public void testLibusb_get_iso_packet_buffer_simple() {
fail("Not yet implemented");
}
@Test
public void testLibusb_try_lock_events() {
fail("Not yet implemented");
}
@Test
public void testLibusb_try_lock_events() {
fail("Not yet implemented");
}
@Test
public void testLibusb_lock_events() {
fail("Not yet implemented");
}
@Test
public void testLibusb_lock_events() {
fail("Not yet implemented");
}
@Test
public void testLibusb_unlock_events() {
fail("Not yet implemented");
}
@Test
public void testLibusb_unlock_events() {
fail("Not yet implemented");
}
@Test
public void testLibusb_event_handling_ok() {
fail("Not yet implemented");
}
@Test
public void testLibusb_event_handling_ok() {
fail("Not yet implemented");
}
@Test
public void testLibusb_event_handler_active() {
fail("Not yet implemented");
}
@Test
public void testLibusb_event_handler_active() {
fail("Not yet implemented");
}
@Test
public void testLibusb_lock_event_waiters() {
fail("Not yet implemented");
}
@Test
public void testLibusb_lock_event_waiters() {
fail("Not yet implemented");
}
@Test
public void testLibusb_unlock_event_waiters() {
fail("Not yet implemented");
}
@Test
public void testLibusb_unlock_event_waiters() {
fail("Not yet implemented");
}
@Test
public void testLibusb_wait_for_event() {
fail("Not yet implemented");
}
@Test
public void testLibusb_wait_for_event() {
fail("Not yet implemented");
}
@Test
public void testLibusb_handle_events_timeout() {
fail("Not yet implemented");
}
@Test
public void testLibusb_handle_events_timeout() {
fail("Not yet implemented");
}
@Test
public void testLibusb_handle_events() {
fail("Not yet implemented");
}
@Test
public void testLibusb_handle_events() {
fail("Not yet implemented");
}
@Test
public void testLibusb_handle_events_locked() {
fail("Not yet implemented");
}
@Test
public void testLibusb_handle_events_locked() {
fail("Not yet implemented");
}
@Test
public void testLibusb_pollfds_handle_timeouts() {
fail("Not yet implemented");
}
@Test
public void testLibusb_pollfds_handle_timeouts() {
fail("Not yet implemented");
}
@Test
public void testLibusb_get_next_timeout() {
fail("Not yet implemented");
}
@Test
public void testLibusb_get_next_timeout() {
fail("Not yet implemented");
}
@Test
public void testLibusb_set_pollfd_notifiers() {
fail("Not yet implemented");
}
@Test
public void testLibusb_set_pollfd_notifiers() {
fail("Not yet implemented");
}
@Test
public void testLibusb_get_pollfds() {
fail("Not yet implemented");
}
@Test
public void testLibusb_get_pollfds() {
fail("Not yet implemented");
}
@Test
public void testLibusb_control_transfer() {
fail("Not yet implemented");
}
@Test
public void testLibusb_control_transfer() {
fail("Not yet implemented");
}
@Test
public void testLibusb_bulk_transfer() {
fail("Not yet implemented");
}
@Test
public void testLibusb_bulk_transfer() {
fail("Not yet implemented");
}
@Test
public void testLibusb_interrupt_transfer() {
fail("Not yet implemented");
}
@Test
public void testLibusb_interrupt_transfer() {
fail("Not yet implemented");
}
@Test
public void testLibusb_strerror() {
fail("Not yet implemented");
}
@Test
public void testLibusb_strerror() {
fail("Not yet implemented");
}
@Test
public void testIsHandleValid() {
fail("Not yet implemented");
}
@Test
public void testIsHandleValid() {
fail("Not yet implemented");
}
}

View File

@@ -33,167 +33,167 @@ import ch.ntb.usb.testApp.AbstractDeviceInfo.TransferMode;
@SuppressWarnings("deprecation")
public class MemoryLeakTest {
private static final String testdevicePropertiesFile = "testdevice.properties";
private static final String deviceInfoKey = "testdeviceInfo";
private static final String testdevicePropertiesFile = "testdevice.properties";
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
.getLogger(MemoryLeakTest.class.getName());
private static Logger log = Logger
.getLogger(MemoryLeakTest.class.getName());
@BeforeClass
public static void setUp() throws Exception {
// load the device info class with the key
// from 'testdevice.properties'
InputStream propInputStream = new FileInputStream(
testdevicePropertiesFile);
Properties devInfoProp = new Properties();
devInfoProp.load(propInputStream);
String devInfoClazzName = devInfoProp.getProperty(deviceInfoKey);
if (devInfoClazzName == null) {
throw new Exception("property " + deviceInfoKey
+ " not found in file " + testdevicePropertiesFile);
}
Class<?> devInfoClazz = Class.forName(devInfoClazzName);
devinfo = (AbstractDeviceInfo) devInfoClazz.newInstance();
// setup test data
testData = new byte[devinfo.getMaxDataSize()];
readData = new byte[testData.length];
// initialise the device
dev = USB.getDevice(devinfo.getIdVendor(), devinfo.getIdProduct());
assertNotNull(dev);
@BeforeClass
public static void setUp() throws Exception {
// load the device info class with the key
// from 'testdevice.properties'
InputStream propInputStream = new FileInputStream(
testdevicePropertiesFile);
Properties devInfoProp = new Properties();
devInfoProp.load(propInputStream);
String devInfoClazzName = devInfoProp.getProperty(deviceInfoKey);
if (devInfoClazzName == null) {
throw new Exception("property " + deviceInfoKey
+ " not found in file " + testdevicePropertiesFile);
}
Class<?> devInfoClazz = Class.forName(devInfoClazzName);
devinfo = (AbstractDeviceInfo) devInfoClazz.newInstance();
// setup test data
testData = new byte[devinfo.getMaxDataSize()];
readData = new byte[testData.length];
// initialise the device
dev = USB.getDevice(devinfo.getIdVendor(), devinfo.getIdProduct());
assertNotNull(dev);
// print the devices
LibusbJava.usb_init();
// LibusbJava.usb_find_busses();
LibusbJava.usb_find_devices();
Usb_Bus bus = LibusbJava.usb_get_busses();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PrintStream ps = new PrintStream(baos);
Utils.logBus(bus, ps);
log.info(baos.toString());
}
// print the devices
LibusbJava.usb_init();
// LibusbJava.usb_find_busses();
LibusbJava.usb_find_devices();
Usb_Bus bus = LibusbJava.usb_get_busses();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PrintStream ps = new PrintStream(baos);
Utils.logBus(bus, ps);
log.info(baos.toString());
}
@Test
public void initalReset() throws Exception {
doOpen();
dev.reset();
timeout();
}
@Test
public void initalReset() throws Exception {
doOpen();
dev.reset();
timeout();
}
@Test
public void bulkWriteReadMultiple() throws Exception {
final int NumberOfIterations = 3000;
@Test
public void bulkWriteReadMultiple() throws Exception {
final int NumberOfIterations = 3000;
devinfo.setMode(TransferMode.Bulk);
doOpen();
for (int i = 0; i < NumberOfIterations; i++) {
doWriteRead();
if (i % 1000 == 0) {
System.out.print(".");
}
}
doClose();
}
devinfo.setMode(TransferMode.Bulk);
doOpen();
for (int i = 0; i < NumberOfIterations; i++) {
doWriteRead();
if (i % 1000 == 0) {
System.out.print(".");
}
}
doClose();
}
@Test
public void interruptWriteReadMultiple() throws Exception {
final int NumberOfIterations = 3000;
@Test
public void interruptWriteReadMultiple() throws Exception {
final int NumberOfIterations = 3000;
devinfo.setMode(TransferMode.Interrupt);
doOpen();
for (int i = 0; i < NumberOfIterations; i++) {
doWriteRead();
if (i % 1000 == 0) {
System.out.print(".");
}
}
doClose();
}
devinfo.setMode(TransferMode.Interrupt);
doOpen();
for (int i = 0; i < NumberOfIterations; i++) {
doWriteRead();
if (i % 1000 == 0) {
System.out.print(".");
}
}
doClose();
}
private void closeOnException() {
try {
dev.close();
} catch (USBException e1) {
// ignore exceptions
}
}
private void closeOnException() {
try {
dev.close();
} catch (USBException e1) {
// ignore exceptions
}
}
@AfterClass
public static void tearDown() throws Exception {
if (dev != null && dev.isOpen()) {
dev.close();
}
}
@AfterClass
public static void tearDown() throws Exception {
if (dev != null && dev.isOpen()) {
dev.close();
}
}
private void doOpen() throws USBException {
dev.open(devinfo.getConfiguration(), devinfo.getInterface(), devinfo
.getAltinterface());
}
private void doOpen() throws USBException {
dev.open(devinfo.getConfiguration(), devinfo.getInterface(), devinfo
.getAltinterface());
}
private void doClose() throws USBException {
dev.close();
}
private void doClose() throws USBException {
dev.close();
}
private void doWriteRead() throws Exception {
initTestData();
try {
if (devinfo.getMode().equals(TransferMode.Bulk)) {
if (devinfo.getOutEPBulk() != -1) {
dev.writeBulk(devinfo.getOutEPBulk(), testData,
testData.length, devinfo.getTimeout(), false);
}
if (devinfo.getInEPBulk() != -1) {
dev.readBulk(devinfo.getInEPBulk(), readData,
readData.length, devinfo.getTimeout(), false);
}
} else if (devinfo.getMode().equals(TransferMode.Interrupt)) {
if (devinfo.getOutEPInt() != -1) {
dev.writeInterrupt(devinfo.getOutEPInt(), testData,
testData.length, devinfo.getTimeout(), false);
}
if (devinfo.getInEPInt() != -1) {
dev.readInterrupt(devinfo.getInEPInt(), readData,
readData.length, devinfo.getTimeout(), false);
}
}
if (devinfo.doCompareData()) {
compare(testData, readData);
}
} catch (AssertionError e) {
closeOnException();
throw e;
} catch (Exception e) {
closeOnException();
throw e;
}
}
private void doWriteRead() throws Exception {
initTestData();
try {
if (devinfo.getMode().equals(TransferMode.Bulk)) {
if (devinfo.getOutEPBulk() != -1) {
dev.writeBulk(devinfo.getOutEPBulk(), testData,
testData.length, devinfo.getTimeout(), false);
}
if (devinfo.getInEPBulk() != -1) {
dev.readBulk(devinfo.getInEPBulk(), readData,
readData.length, devinfo.getTimeout(), false);
}
} else if (devinfo.getMode().equals(TransferMode.Interrupt)) {
if (devinfo.getOutEPInt() != -1) {
dev.writeInterrupt(devinfo.getOutEPInt(), testData,
testData.length, devinfo.getTimeout(), false);
}
if (devinfo.getInEPInt() != -1) {
dev.readInterrupt(devinfo.getInEPInt(), readData,
readData.length, devinfo.getTimeout(), false);
}
}
if (devinfo.doCompareData()) {
compare(testData, readData);
}
} catch (AssertionError e) {
closeOnException();
throw e;
} catch (Exception e) {
closeOnException();
throw e;
}
}
private static void compare(byte[] d1, byte[] d2) {
final int minLength = Math.min(d1.length, d2.length);
for (int i = 0; i < minLength; i++) {
assertEquals(d1[i], d2[i]);
}
}
private static void compare(byte[] d1, byte[] d2) {
final int minLength = Math.min(d1.length, d2.length);
for (int i = 0; i < minLength; i++) {
assertEquals(d1[i], d2[i]);
}
}
private static void timeout() {
try {
Thread.sleep(devinfo.getSleepTimeout());
} catch (InterruptedException e) {
e.printStackTrace();
}
}
private static void timeout() {
try {
Thread.sleep(devinfo.getSleepTimeout());
} catch (InterruptedException e) {
e.printStackTrace();
}
}
private static void initTestData() {
for (int i = 0; i < testData.length; i++) {
testData[i] = (byte) (Math.random() * 0xff);
readData[i] = 0;
}
}
private static void initTestData() {
for (int i = 0; i < testData.length; i++) {
testData[i] = (byte) (Math.random() * 0xff);
readData[i] = 0;
}
}
}

View File

@@ -21,219 +21,219 @@ import ch.ntb.usb.Usb_Interface_Descriptor;
*/
@SuppressWarnings("deprecation")
public class TestLibUsbJava {
static boolean verbose;
static boolean verbose;
/**
* prints out endpoint info
*
* @param endpoint
* The end point.
*/
private static void printEndpoint(Usb_Endpoint_Descriptor endpoint) {
System.out.print(String.format(" bEndpointAddress: %02xh\n",
endpoint.getBEndpointAddress()));
System.out.print(String.format(" bmAttributes: %02xh\n",
endpoint.getBmAttributes()));
System.out.print(String.format(" wMaxPacketSize: %d\n", endpoint
.getWMaxPacketSize()));
System.out.print(String.format(" bInterval: %d\n", endpoint
.getBInterval()));
System.out.print(String.format(" bRefresh: %d\n", endpoint
.getBRefresh()));
System.out.print(String.format(" bSynchAddress: %d\n", endpoint
.getBSynchAddress()));
}
/**
* prints out endpoint info
*
* @param endpoint
* The end point.
*/
private static void printEndpoint(Usb_Endpoint_Descriptor endpoint) {
System.out.print(String.format(" bEndpointAddress: %02xh\n",
endpoint.getBEndpointAddress()));
System.out.print(String.format(" bmAttributes: %02xh\n",
endpoint.getBmAttributes()));
System.out.print(String.format(" wMaxPacketSize: %d\n", endpoint
.getWMaxPacketSize()));
System.out.print(String.format(" bInterval: %d\n", endpoint
.getBInterval()));
System.out.print(String.format(" bRefresh: %d\n", endpoint
.getBRefresh()));
System.out.print(String.format(" bSynchAddress: %d\n", endpoint
.getBSynchAddress()));
}
/**
* prints out the interface descriptor
*
* @param interfaceDescript
* The interface descriptor.
*/
private static void printAltsetting(
Usb_Interface_Descriptor interfaceDescript) {
System.out.print(String.format(" bInterfaceNumber: %d\n",
interfaceDescript.getBInterfaceNumber()));
System.out.print(String.format(" bAlternateSetting: %d\n",
interfaceDescript.getBAlternateSetting()));
System.out.print(String.format(" bNumEndpoints: %d\n",
interfaceDescript.getBNumEndpoints()));
System.out.print(String.format(" bInterfaceClass: %d\n",
interfaceDescript.getBInterfaceClass()));
System.out.print(String.format(" bInterfaceSubClass: %d\n",
interfaceDescript.getBInterfaceSubClass()));
System.out.print(String.format(" bInterfaceProtocol: %d\n",
interfaceDescript.getBInterfaceProtocol()));
System.out.print(String.format(" iInterface: %d\n",
interfaceDescript.getIInterface()));
/**
* prints out the interface descriptor
*
* @param interfaceDescript
* The interface descriptor.
*/
private static void printAltsetting(
Usb_Interface_Descriptor interfaceDescript) {
System.out.print(String.format(" bInterfaceNumber: %d\n",
interfaceDescript.getBInterfaceNumber()));
System.out.print(String.format(" bAlternateSetting: %d\n",
interfaceDescript.getBAlternateSetting()));
System.out.print(String.format(" bNumEndpoints: %d\n",
interfaceDescript.getBNumEndpoints()));
System.out.print(String.format(" bInterfaceClass: %d\n",
interfaceDescript.getBInterfaceClass()));
System.out.print(String.format(" bInterfaceSubClass: %d\n",
interfaceDescript.getBInterfaceSubClass()));
System.out.print(String.format(" bInterfaceProtocol: %d\n",
interfaceDescript.getBInterfaceProtocol()));
System.out.print(String.format(" iInterface: %d\n",
interfaceDescript.getIInterface()));
for (int i = 0; i < interfaceDescript.getBNumEndpoints(); i++) {
printEndpoint(interfaceDescript.getEndpoint()[i]);
}
}
for (int i = 0; i < interfaceDescript.getBNumEndpoints(); i++) {
printEndpoint(interfaceDescript.getEndpoint()[i]);
}
}
/**
* prints out interface
*
* @param usbInterface
* The interface.
*/
private static void printInterface(Usb_Interface usbInterface) {
for (int i = 0; i < usbInterface.getNumAltsetting(); i++) {
printAltsetting(usbInterface.getAltsetting()[i]);
}
}
/**
* prints out interface
*
* @param usbInterface
* The interface.
*/
private static void printInterface(Usb_Interface usbInterface) {
for (int i = 0; i < usbInterface.getNumAltsetting(); i++) {
printAltsetting(usbInterface.getAltsetting()[i]);
}
}
/**
* prints out configuration
*
* @param config
* The configuration.
*/
private static void printConfiguration(Usb_Config_Descriptor config) {
System.out.print(String.format(" wTotalLength: %d\n", config
.getWTotalLength()));
System.out.print(String.format(" bNumInterfaces: %d\n", config
.getBNumInterfaces()));
System.out.print(String.format(" bConfigurationValue: %d\n", config
.getBConfigurationValue()));
System.out.print(String.format(" iConfiguration: %d\n", config
.getIConfiguration()));
System.out.print(String.format(" bmAttributes: %02xh\n",
config.getBmAttributes()));
System.out.print(String.format(" MaxPower: %d\n", config
.getMaxPower()));
/**
* prints out configuration
*
* @param config
* The configuration.
*/
private static void printConfiguration(Usb_Config_Descriptor config) {
System.out.print(String.format(" wTotalLength: %d\n", config
.getWTotalLength()));
System.out.print(String.format(" bNumInterfaces: %d\n", config
.getBNumInterfaces()));
System.out.print(String.format(" bConfigurationValue: %d\n", config
.getBConfigurationValue()));
System.out.print(String.format(" iConfiguration: %d\n", config
.getIConfiguration()));
System.out.print(String.format(" bmAttributes: %02xh\n",
config.getBmAttributes()));
System.out.print(String.format(" MaxPower: %d\n", config
.getMaxPower()));
for (int i = 0; i < config.getBNumInterfaces(); i++) {
printInterface(config.getInterface()[i]);
}
}
for (int i = 0; i < config.getBNumInterfaces(); i++) {
printInterface(config.getInterface()[i]);
}
}
private static int printDevice(Usb_Device dev, int level) {
long udev;
String mfr;
String product;
String sn;
String spaces;
String descript;
private static int printDevice(Usb_Device dev, int level) {
long udev;
String mfr;
String product;
String sn;
String spaces;
String descript;
spaces = " ";
spaces = " ";
udev = LibusbJava.usb_open(dev);
udev = LibusbJava.usb_open(dev);
if (udev != 0) {
if (dev.getDescriptor().getIManufacturer() != 0) {
mfr = LibusbJava.usb_get_string_simple(udev, dev
.getDescriptor().getIManufacturer());
if (udev != 0) {
if (dev.getDescriptor().getIManufacturer() != 0) {
mfr = LibusbJava.usb_get_string_simple(udev, dev
.getDescriptor().getIManufacturer());
if (mfr != null) {
descript = String.format("%s - ", mfr);
} else {
descript = String.format("%04X - ", dev.getDescriptor()
.getIdVendor());
}
} else {
descript = String.format("%04X - ", dev.getDescriptor()
.getIdVendor());
}
if (mfr != null) {
descript = String.format("%s - ", mfr);
} else {
descript = String.format("%04X - ", dev.getDescriptor()
.getIdVendor());
}
} else {
descript = String.format("%04X - ", dev.getDescriptor()
.getIdVendor());
}
if (dev.getDescriptor().getIProduct() != 0) {
product = LibusbJava.usb_get_string_simple(udev, dev
.getDescriptor().getIProduct());
if (dev.getDescriptor().getIProduct() != 0) {
product = LibusbJava.usb_get_string_simple(udev, dev
.getDescriptor().getIProduct());
if (product != null) {
descript = descript + String.format("%s", product);
} else {
descript = descript
+ String.format("%04X", dev.getDescriptor()
.getIdProduct());
}
} else {
descript = descript
+ String.format("%04X", dev.getDescriptor()
.getIdProduct());
}
} else {
descript = String.format("%04X - %04X", dev.getDescriptor()
.getIdVendor(), dev.getDescriptor().getIdProduct());
}
if (product != null) {
descript = descript + String.format("%s", product);
} else {
descript = descript
+ String.format("%04X", dev.getDescriptor()
.getIdProduct());
}
} else {
descript = descript
+ String.format("%04X", dev.getDescriptor()
.getIdProduct());
}
} else {
descript = String.format("%04X - %04X", dev.getDescriptor()
.getIdVendor(), dev.getDescriptor().getIdProduct());
}
System.out.print(String.format("%sDev #%d: %s\n", spaces.substring(0,
level * 2), dev.getDevnum(), descript));
System.out.print(String.format("%sDev #%d: %s\n", spaces.substring(0,
level * 2), dev.getDevnum(), descript));
if ((udev != 0) && verbose) {
if (dev.getDescriptor().getISerialNumber() != 0) {
sn = LibusbJava.usb_get_string_simple(udev, dev.getDescriptor()
.getISerialNumber());
if ((udev != 0) && verbose) {
if (dev.getDescriptor().getISerialNumber() != 0) {
sn = LibusbJava.usb_get_string_simple(udev, dev.getDescriptor()
.getISerialNumber());
if (sn != null) {
System.out.print(String.format("%s - Serial Number: %s\n",
spaces.substring(0, level * 2), sn));
}
}
}
if (sn != null) {
System.out.print(String.format("%s - Serial Number: %s\n",
spaces.substring(0, level * 2), sn));
}
}
}
if (udev != 0) {
LibusbJava.usb_close(udev);
}
if (udev != 0) {
LibusbJava.usb_close(udev);
}
if (verbose) {
if (dev.getConfig().length == 0) {
System.out.print(" Couldn't retrieve descriptors\n");
if (verbose) {
if (dev.getConfig().length == 0) {
System.out.print(" Couldn't retrieve descriptors\n");
return 0;
}
return 0;
}
for (int i = 0; i < dev.getDescriptor().getBNumConfigurations(); i++) {
printConfiguration(dev.getConfig()[i]);
}
} else {
Usb_Device childDev = null;
for (int i = 0; i < dev.getDescriptor().getBNumConfigurations(); i++) {
printConfiguration(dev.getConfig()[i]);
}
} else {
Usb_Device childDev = null;
for (int i = 0; i < dev.getNumChildren(); i++) {
if (i == 0) {
childDev = dev.getChildren();
} else {
childDev = childDev.getNext();
}
for (int i = 0; i < dev.getNumChildren(); i++) {
if (i == 0) {
childDev = dev.getChildren();
} else {
childDev = childDev.getNext();
}
printDevice(childDev, level + 1);
}
}
printDevice(childDev, level + 1);
}
}
return 0;
} // end of printDevice method
return 0;
} // end of printDevice method
/**
* The main method.
*
* @param args
* The command line arguments.
*/
public static void main(String args[]) throws Exception {
if ((args.length > 0) && (args[0].equals("-v"))) {
verbose = true;
} else {
verbose = false;
}
/**
* The main method.
*
* @param args
* The command line arguments.
*/
public static void main(String args[]) throws Exception {
if ((args.length > 0) && (args[0].equals("-v"))) {
verbose = true;
} else {
verbose = false;
}
// used for debugging. 0 = no debugging, 255 = with debugging
LibusbJava.usb_init();
LibusbJava.usb_set_debug(255);
// used for debugging. 0 = no debugging, 255 = with debugging
LibusbJava.usb_init();
LibusbJava.usb_set_debug(255);
LibusbJava.usb_find_busses();
LibusbJava.usb_find_devices();
LibusbJava.usb_find_busses();
LibusbJava.usb_find_devices();
for (Usb_Bus bus = LibusbJava.usb_get_busses(); bus != null; bus = bus
.getNext()) {
if ((bus.getRootDev() != null) && !verbose) {
printDevice(bus.getRootDev(), 0);
} else {
for (Usb_Device dev = bus.getDevices(); dev != null; dev = dev
.getNext()) {
printDevice(dev, 0);
}
}
}
} // end main
for (Usb_Bus bus = LibusbJava.usb_get_busses(); bus != null; bus = bus
.getNext()) {
if ((bus.getRootDev() != null) && !verbose) {
printDevice(bus.getRootDev(), 0);
} else {
for (Usb_Device dev = bus.getDevices(); dev != null; dev = dev
.getNext()) {
printDevice(dev, 0);
}
}
}
} // end main
} // end of TestLibUsbJava class

View File

@@ -12,23 +12,23 @@ import ch.ntb.usb.testApp.AbstractDeviceInfo;
public class AT90USB1287 extends AbstractDeviceInfo {
@Override
public void initValues() {
setIdVendor((short) 0x8235);
setIdProduct((short) 0x0200);
setTimeout(2000);
setConfiguration(1);
setInterface(0);
setAltinterface(-1);
setOutEPBulk(0x01);
setInEPBulk(0x82);
setOutEPInt(0x01);
setInEPInt(0x82);
setSleepTimeout(2000);
setMaxDataSize(USB.FULLSPEED_MAX_BULK_PACKET_SIZE);
setMode(TransferMode.Bulk);
setManufacturer("inf.ntb.ch");
setProduct("JUnit Test Board");
setSerialVersion("00.10.00");
}
@Override
public void initValues() {
setIdVendor((short) 0x8235);
setIdProduct((short) 0x0200);
setTimeout(2000);
setConfiguration(1);
setInterface(0);
setAltinterface(-1);
setOutEPBulk(0x01);
setInEPBulk(0x82);
setOutEPInt(0x01);
setInEPInt(0x82);
setSleepTimeout(2000);
setMaxDataSize(USB.FULLSPEED_MAX_BULK_PACKET_SIZE);
setMode(TransferMode.Bulk);
setManufacturer("inf.ntb.ch");
setProduct("JUnit Test Board");
setSerialVersion("00.10.00");
}
}

View File

@@ -12,20 +12,20 @@ import ch.ntb.usb.testApp.AbstractDeviceInfo;
public class CY7C68013A extends AbstractDeviceInfo {
@Override
public void initValues() {
setIdVendor((short) 0x8235);
setIdProduct((short) 0x0222);
setTimeout(2000);
setConfiguration(1);
setInterface(0);
setAltinterface(-1);
setOutEPInt(0x02);
setInEPInt(0x86);
setOutEPBulk(0x04);
setInEPBulk(0x88);
setSleepTimeout(2000);
setMaxDataSize(USB.HIGHSPEED_MAX_BULK_PACKET_SIZE);
setMode(TransferMode.Bulk);
}
@Override
public void initValues() {
setIdVendor((short) 0x8235);
setIdProduct((short) 0x0222);
setTimeout(2000);
setConfiguration(1);
setInterface(0);
setAltinterface(-1);
setOutEPInt(0x02);
setInEPInt(0x86);
setOutEPBulk(0x04);
setInEPBulk(0x88);
setSleepTimeout(2000);
setMaxDataSize(USB.HIGHSPEED_MAX_BULK_PACKET_SIZE);
setMode(TransferMode.Bulk);
}
}

View File

@@ -11,22 +11,22 @@ import ch.ntb.usb.testApp.AbstractDeviceInfo;
public class MX500 extends AbstractDeviceInfo {
@Override
public void initValues() {
setIdVendor((short) 0x046d);
setIdProduct((short) 0xc025);
setTimeout(2000);
setConfiguration(1);
setInterface(0);
setAltinterface(0);
setOutEPInt(-1);
setInEPInt(0x81);
setOutEPBulk(-1);
setInEPBulk(-1);
setSleepTimeout(5000);
setMaxDataSize(5);
setMode(TransferMode.Interrupt);
// we only read data -> don't compare
setDoCompareData(false);
}
@Override
public void initValues() {
setIdVendor((short) 0x046d);
setIdProduct((short) 0xc025);
setTimeout(2000);
setConfiguration(1);
setInterface(0);
setAltinterface(0);
setOutEPInt(-1);
setInEPInt(0x81);
setOutEPBulk(-1);
setInEPBulk(-1);
setSleepTimeout(5000);
setMaxDataSize(5);
setMode(TransferMode.Interrupt);
// we only read data -> don't compare
setDoCompareData(false);
}
}

View File

@@ -11,24 +11,24 @@ import ch.ntb.usb.testApp.AbstractDeviceInfo;
public class MousePlus extends AbstractDeviceInfo {
@Override
public void initValues() {
setIdVendor((short) 0x046d);
setIdProduct((short) 0xc016);
setBusName("bus-0");
setFilename("\\\\.\\libusb0-0001--0x046d-0xc016");
setTimeout(2000);
setConfiguration(1);
setInterface(0);
setAltinterface(0);
setOutEPInt(-1);
setInEPInt(0x81);
setOutEPBulk(-1);
setInEPBulk(-1);
setSleepTimeout(5000);
setMaxDataSize(4);
setMode(TransferMode.Interrupt);
// we only read data -> don't compare
setDoCompareData(false);
}
@Override
public void initValues() {
setIdVendor((short) 0x046d);
setIdProduct((short) 0xc016);
setBusName("bus-0");
setFilename("\\\\.\\libusb0-0001--0x046d-0xc016");
setTimeout(2000);
setConfiguration(1);
setInterface(0);
setAltinterface(0);
setOutEPInt(-1);
setInEPInt(0x81);
setOutEPBulk(-1);
setInEPBulk(-1);
setSleepTimeout(5000);
setMaxDataSize(4);
setMode(TransferMode.Interrupt);
// we only read data -> don't compare
setDoCompareData(false);
}
}

View File

@@ -14,63 +14,63 @@ import ch.ntb.usb.exceptions.LibusbError;
@RunWith(Parameterized.class)
public class LibusbErrorTest {
@Parameters
public static Collection<Object[]> codesToTest() {
return Arrays.asList(new Object[][] { {"ERROR_UNKNWON (0)", 0 },
{"ERROR_IO", -1 },
{"ERROR_INVALID_PARAM", -2},
{"ERROR_ACCESS", -3},
{"ERROR_NO_DEVICE", -4},
{"ERROR_NOT_FOUND", -5},
{"ERROR_BUSY", -6},
{"ERROR_TIMEOUT", -7},
{"ERROR_OVERFLOW", -8},
{"ERROR_PIPE", -9},
{"ERROR_INTERRUPTED", -10},
{"ERROR_NO_MEM", -11},
{"ERROR_NOT_SUPPORTED", -12},
{"ERROR_UNKNWON (-13)", -13},
{"ERROR_UNKNWON (-98)", -98},
{"ERROR_JAVA_REFERENCES_NOT_LOADED", -100},
{"ERROR_JAVA_WRONG_ENVIRONMENT", -101},
{"ERROR_JAVA_ILEGAL_DEVICE_HANDLE", -102},
{"ERROR_UNKNWON (-103)", -103},
{"ERROR_OTHER", -99} });
}
private String exp_desc;
private int code;
private LibusbError e;
public LibusbErrorTest(String exp_desc, int code) {
this.exp_desc = exp_desc;
this.code = code;
try {
throw new LibusbError(code);
} catch (LibusbError e) {
this.e = e;
}
}
@Test
public void testGetErrorCode() {
assertEquals("Error code is correct", e.getErrorCode(), code);
}
@Parameters
public static Collection<Object[]> codesToTest() {
return Arrays.asList(new Object[][] { {"ERROR_UNKNWON (0)", 0 },
{"ERROR_IO", -1 },
{"ERROR_INVALID_PARAM", -2},
{"ERROR_ACCESS", -3},
{"ERROR_NO_DEVICE", -4},
{"ERROR_NOT_FOUND", -5},
{"ERROR_BUSY", -6},
{"ERROR_TIMEOUT", -7},
{"ERROR_OVERFLOW", -8},
{"ERROR_PIPE", -9},
{"ERROR_INTERRUPTED", -10},
{"ERROR_NO_MEM", -11},
{"ERROR_NOT_SUPPORTED", -12},
{"ERROR_UNKNWON (-13)", -13},
{"ERROR_UNKNWON (-98)", -98},
{"ERROR_JAVA_REFERENCES_NOT_LOADED", -100},
{"ERROR_JAVA_WRONG_ENVIRONMENT", -101},
{"ERROR_JAVA_ILEGAL_DEVICE_HANDLE", -102},
{"ERROR_UNKNWON (-103)", -103},
{"ERROR_OTHER", -99} });
}
private String exp_desc;
private int code;
private LibusbError e;
public LibusbErrorTest(String exp_desc, int code) {
this.exp_desc = exp_desc;
this.code = code;
try {
throw new LibusbError(code);
} catch (LibusbError e) {
this.e = e;
}
}
@Test
public void testGetErrorCode() {
assertEquals("Error code is correct", e.getErrorCode(), code);
}
@Test
public void testGetStringFromCode() {
String gen_desc = LibusbError.getStringFromCode(code);
assertEquals("Correct error description for " + code, exp_desc, gen_desc);
}
@Test
public void testGetStringFromCode() {
String gen_desc = LibusbError.getStringFromCode(code);
assertEquals("Correct error description for " + code, exp_desc, gen_desc);
}
@Test
public void testGetErrorString() {
assertEquals("Correct error string for " + code, e.getErrorString(), exp_desc);
}
@Test
public void testGetErrorString() {
assertEquals("Correct error string for " + code, e.getErrorString(), exp_desc);
}
@Test
public void testGetMessage() {
assertEquals("Correct error string for " + code, e.getMessage(), "libusb result: " + exp_desc);
}
@Test
public void testGetMessage() {
assertEquals("Correct error string for " + code, e.getMessage(), "libusb result: " + exp_desc);
}
}