diff --git a/build.gradle b/build.gradle index 1ad20ba..7953cb4 100644 --- a/build.gradle +++ b/build.gradle @@ -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' diff --git a/src/app/java/ch/ntb/usb/testApp/AbstractDeviceInfo.java b/src/app/java/ch/ntb/usb/testApp/AbstractDeviceInfo.java index 3fe8bbf..9d52b45 100644 --- a/src/app/java/ch/ntb/usb/testApp/AbstractDeviceInfo.java +++ b/src/app/java/ch/ntb/usb/testApp/AbstractDeviceInfo.java @@ -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; + } } diff --git a/src/app/java/ch/ntb/usb/testApp/TestApp.java b/src/app/java/ch/ntb/usb/testApp/TestApp.java index 1f25eaa..d1e3d0c 100644 --- a/src/app/java/ch/ntb/usb/testApp/TestApp.java +++ b/src/app/java/ch/ntb/usb/testApp/TestApp.java @@ -27,683 +27,683 @@ import javax.swing.border.TitledBorder; public class TestApp extends JFrame { - private static final long serialVersionUID = 994508729204158681L; - TestDevice dev; - private JPanel rootPanel = null; - private JPanel sendReceivePanel = null; - private JPanel settingsPanel = null; - private JButton openDeviceButton = null; - private JButton closeDevice = null; - private JButton resetButton = null; - private JPanel settingsPanelTop = null; - private JPanel settingsPanelBottom = null; - JTextField vendorIDText = null; - JTextField productIDText = null; - private JPanel vendorIDPanel = null; - private JPanel productIDPanel = null; - private JPanel configurationPanel = null; - JTextField configurationText = null; - private JPanel interfacePanel = null; - JTextField interfaceText = null; - private JPanel altInterfacePanel = null; - JTextField altInterfaceText = null; - private JPanel settingsPanelTop2Left = null; - private JPanel settingsPanelTop2Right = null; - private JPanel outEpPanel = null; - JTextField outEpText = null; - private JPanel inEpPanel = null; - JTextField inEpText = null; - private JPanel timeoutPanel = null; - private JTextField timeoutText = null; - private JPanel sendDataPanel = null; - private JPanel sendRecButtonsPanel = null; - private JButton sendButton = null; - private JButton recButton = null; - JTextField sendDataText = null; - JComboBox sendTypeComboBox = null; - private JComboBox recTypeComboBox = null; - private JPanel sendRecButtonsPanelTop = null; - private JPanel sendRecButtonsPanelBottom = null; + private static final long serialVersionUID = 994508729204158681L; + TestDevice dev; + private JPanel rootPanel = null; + private JPanel sendReceivePanel = null; + private JPanel settingsPanel = null; + private JButton openDeviceButton = null; + private JButton closeDevice = null; + private JButton resetButton = null; + private JPanel settingsPanelTop = null; + private JPanel settingsPanelBottom = null; + JTextField vendorIDText = null; + JTextField productIDText = null; + private JPanel vendorIDPanel = null; + private JPanel productIDPanel = null; + private JPanel configurationPanel = null; + JTextField configurationText = null; + private JPanel interfacePanel = null; + JTextField interfaceText = null; + private JPanel altInterfacePanel = null; + JTextField altInterfaceText = null; + private JPanel settingsPanelTop2Left = null; + private JPanel settingsPanelTop2Right = null; + private JPanel outEpPanel = null; + JTextField outEpText = null; + private JPanel inEpPanel = null; + JTextField inEpText = null; + private JPanel timeoutPanel = null; + private JTextField timeoutText = null; + private JPanel sendDataPanel = null; + private JPanel sendRecButtonsPanel = null; + private JButton sendButton = null; + private JButton recButton = null; + JTextField sendDataText = null; + JComboBox sendTypeComboBox = null; + private JComboBox recTypeComboBox = null; + private JPanel sendRecButtonsPanelTop = null; + private JPanel sendRecButtonsPanelBottom = null; - public TestApp(TestDevice devInfo) { - super(); - this.dev = devInfo; - initialize(); - } + public TestApp(TestDevice devInfo) { + super(); + this.dev = devInfo; + initialize(); + } - private void initialize() { + private void initialize() { - this.setTitle("USB Test Application"); + this.setTitle("USB Test Application"); - this.setContentPane(getRootPanel()); + this.setContentPane(getRootPanel()); - // read default values - this.vendorIDText.setText(toHexString(dev.getIdVendor() & 0xffff)); - this.productIDText.setText(toHexString(dev.getIdProduct() & 0xffff)); - this.configurationText.setText(new Integer(dev.getConfiguration()) - .toString()); - this.interfaceText.setText(new Integer(dev.getInterface()).toString()); - this.altInterfaceText.setText(new Integer(dev.getAltinterface()) - .toString()); - this.timeoutText.setText(new Integer(dev.getTimeout()).toString()); - this.sendDataText.setText(dev.getSendData()); - setOutEpAddr(); - setInEpAddr(); + // read default values + this.vendorIDText.setText(toHexString(dev.getIdVendor() & 0xffff)); + this.productIDText.setText(toHexString(dev.getIdProduct() & 0xffff)); + this.configurationText.setText(new Integer(dev.getConfiguration()) + .toString()); + this.interfaceText.setText(new Integer(dev.getInterface()).toString()); + this.altInterfaceText.setText(new Integer(dev.getAltinterface()) + .toString()); + this.timeoutText.setText(new Integer(dev.getTimeout()).toString()); + this.sendDataText.setText(dev.getSendData()); + setOutEpAddr(); + setInEpAddr(); - this.pack(); - this.setVisible(true); - } + this.pack(); + this.setVisible(true); + } - void setOutEpAddr() { - switch (dev.getOutMode()) { - case Bulk: - this.outEpText.setText(toHexString(dev.getOutEPBulk())); - break; - case Interrupt: - this.outEpText.setText(toHexString(dev.getOutEPInt())); - break; - default: - break; - } - } + void setOutEpAddr() { + switch (dev.getOutMode()) { + case Bulk: + this.outEpText.setText(toHexString(dev.getOutEPBulk())); + break; + case Interrupt: + this.outEpText.setText(toHexString(dev.getOutEPInt())); + break; + default: + break; + } + } - void setInEpAddr() { - switch (dev.getInMode()) { - case Bulk: - this.inEpText.setText(toHexString(dev.getInEPBulk())); - break; - case Interrupt: - this.inEpText.setText(toHexString(dev.getInEPInt())); - break; - default: - break; - } - } + void setInEpAddr() { + switch (dev.getInMode()) { + case Bulk: + this.inEpText.setText(toHexString(dev.getInEPBulk())); + break; + case Interrupt: + this.inEpText.setText(toHexString(dev.getInEPInt())); + break; + default: + break; + } + } - private JPanel getRootPanel() { - if (rootPanel == null) { - rootPanel = new JPanel(); - rootPanel - .setLayout(new BoxLayout(getRootPanel(), BoxLayout.Y_AXIS)); - rootPanel.add(getSettingsPanel(), null); - rootPanel.add(getSendReceivePanel(), null); - } - return rootPanel; - } + private JPanel getRootPanel() { + if (rootPanel == null) { + rootPanel = new JPanel(); + rootPanel + .setLayout(new BoxLayout(getRootPanel(), BoxLayout.Y_AXIS)); + rootPanel.add(getSettingsPanel(), null); + rootPanel.add(getSendReceivePanel(), null); + } + return rootPanel; + } - private JPanel getSendReceivePanel() { - if (sendReceivePanel == null) { - BorderLayout borderLayout2 = new BorderLayout(); - borderLayout2.setHgap(5); - sendReceivePanel = new JPanel(); - sendReceivePanel.setLayout(borderLayout2); - sendReceivePanel.setBorder(BorderFactory.createTitledBorder(null, - "Send and Receive Data", - TitledBorder.DEFAULT_JUSTIFICATION, - TitledBorder.DEFAULT_POSITION, new Font("Dialog", - Font.BOLD, 12), new Color(51, 51, 51))); - sendReceivePanel.add(getSendRecButtonsPanel(), BorderLayout.NORTH); - sendReceivePanel.add(getSendDataPanel(), BorderLayout.SOUTH); - } - return sendReceivePanel; - } + private JPanel getSendReceivePanel() { + if (sendReceivePanel == null) { + BorderLayout borderLayout2 = new BorderLayout(); + borderLayout2.setHgap(5); + sendReceivePanel = new JPanel(); + sendReceivePanel.setLayout(borderLayout2); + sendReceivePanel.setBorder(BorderFactory.createTitledBorder(null, + "Send and Receive Data", + TitledBorder.DEFAULT_JUSTIFICATION, + TitledBorder.DEFAULT_POSITION, new Font("Dialog", + Font.BOLD, 12), new Color(51, 51, 51))); + sendReceivePanel.add(getSendRecButtonsPanel(), BorderLayout.NORTH); + sendReceivePanel.add(getSendDataPanel(), BorderLayout.SOUTH); + } + return sendReceivePanel; + } - private JPanel getSettingsPanel() { - if (settingsPanel == null) { - settingsPanel = new JPanel(); - settingsPanel.setLayout(new BoxLayout(getSettingsPanel(), - BoxLayout.Y_AXIS)); - settingsPanel.setBorder(BorderFactory.createTitledBorder(null, - "Device Settings", TitledBorder.DEFAULT_JUSTIFICATION, - TitledBorder.DEFAULT_POSITION, new Font("Dialog", - Font.BOLD, 12), new Color(51, 51, 51))); - settingsPanel.add(getSettingsPanelTop(), null); - settingsPanel.add(getSettingsPanelBottom(), null); - } - return settingsPanel; - } + private JPanel getSettingsPanel() { + if (settingsPanel == null) { + settingsPanel = new JPanel(); + settingsPanel.setLayout(new BoxLayout(getSettingsPanel(), + BoxLayout.Y_AXIS)); + settingsPanel.setBorder(BorderFactory.createTitledBorder(null, + "Device Settings", TitledBorder.DEFAULT_JUSTIFICATION, + TitledBorder.DEFAULT_POSITION, new Font("Dialog", + Font.BOLD, 12), new Color(51, 51, 51))); + settingsPanel.add(getSettingsPanelTop(), null); + settingsPanel.add(getSettingsPanelBottom(), null); + } + return settingsPanel; + } - private JButton getOpenDeviceButton() { - if (openDeviceButton == null) { - openDeviceButton = new JButton(); - openDeviceButton.setText("Open Device"); - openDeviceButton - .addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent e) { - // update values for the device - dev.setIdVendor((short) parseInt(vendorIDText - .getText().trim())); - dev.setIdProduct((short) parseInt(productIDText - .getText().trim())); - dev.setConfiguration(parseInt(configurationText - .getText().trim())); - dev.setInterface(parseInt(interfaceText.getText() - .trim())); - dev.setAltinterface(parseInt(altInterfaceText - .getText().trim())); - // opent the device - dev.openUsbDevice(); - } - }); - } - return openDeviceButton; - } + private JButton getOpenDeviceButton() { + if (openDeviceButton == null) { + openDeviceButton = new JButton(); + openDeviceButton.setText("Open Device"); + openDeviceButton + .addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent e) { + // update values for the device + dev.setIdVendor((short) parseInt(vendorIDText + .getText().trim())); + dev.setIdProduct((short) parseInt(productIDText + .getText().trim())); + dev.setConfiguration(parseInt(configurationText + .getText().trim())); + dev.setInterface(parseInt(interfaceText.getText() + .trim())); + dev.setAltinterface(parseInt(altInterfaceText + .getText().trim())); + // opent the device + dev.openUsbDevice(); + } + }); + } + return openDeviceButton; + } - private JButton getCloseDevice() { - if (closeDevice == null) { - closeDevice = new JButton(); - closeDevice.setText("Close Device"); - closeDevice.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent e) { - dev.closeUsbDevice(); - } - }); - } - return closeDevice; - } + private JButton getCloseDevice() { + if (closeDevice == null) { + closeDevice = new JButton(); + closeDevice.setText("Close Device"); + closeDevice.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent e) { + dev.closeUsbDevice(); + } + }); + } + return closeDevice; + } - private JButton getResetButton() { - if (resetButton == null) { - resetButton = new JButton(); - resetButton.setText("Reset Device"); - resetButton.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent e) { - dev.resetUsbDevice(); - } - }); - } - return resetButton; - } + private JButton getResetButton() { + if (resetButton == null) { + resetButton = new JButton(); + resetButton.setText("Reset Device"); + resetButton.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent e) { + dev.resetUsbDevice(); + } + }); + } + return resetButton; + } - private JPanel getSettingsPanelTop() { - if (settingsPanelTop == null) { - FlowLayout flowLayout = new FlowLayout(); - flowLayout.setVgap(1); - flowLayout.setAlignment(FlowLayout.LEFT); - settingsPanelTop = new JPanel(); - settingsPanelTop.setLayout(flowLayout); - settingsPanelTop.add(getVendorIDPanel(), null); - settingsPanelTop.add(getProductIDPanel(), null); - settingsPanelTop.add(getConfigurationPanel(), null); - settingsPanelTop.add(getInterfacePanel(), null); - settingsPanelTop.add(getAltInterfacePanel(), null); - } - return settingsPanelTop; - } + private JPanel getSettingsPanelTop() { + if (settingsPanelTop == null) { + FlowLayout flowLayout = new FlowLayout(); + flowLayout.setVgap(1); + flowLayout.setAlignment(FlowLayout.LEFT); + settingsPanelTop = new JPanel(); + settingsPanelTop.setLayout(flowLayout); + settingsPanelTop.add(getVendorIDPanel(), null); + settingsPanelTop.add(getProductIDPanel(), null); + settingsPanelTop.add(getConfigurationPanel(), null); + settingsPanelTop.add(getInterfacePanel(), null); + settingsPanelTop.add(getAltInterfacePanel(), null); + } + return settingsPanelTop; + } - private JPanel getSettingsPanelBottom() { - if (settingsPanelBottom == null) { - FlowLayout flowLayout1 = new FlowLayout(); - flowLayout1.setVgap(1); - flowLayout1.setHgap(0); - flowLayout1.setAlignment(FlowLayout.LEFT); - GridBagConstraints gridBagConstraints1 = new GridBagConstraints(); - gridBagConstraints1.gridx = -1; - gridBagConstraints1.gridy = -1; - settingsPanelBottom = new JPanel(); - settingsPanelBottom.setLayout(flowLayout1); - settingsPanelBottom.add(getSettingsPanelTop2Left(), null); - settingsPanelBottom.add(getSettingsPanelTop2Right(), null); - } - return settingsPanelBottom; - } + private JPanel getSettingsPanelBottom() { + if (settingsPanelBottom == null) { + FlowLayout flowLayout1 = new FlowLayout(); + flowLayout1.setVgap(1); + flowLayout1.setHgap(0); + flowLayout1.setAlignment(FlowLayout.LEFT); + GridBagConstraints gridBagConstraints1 = new GridBagConstraints(); + gridBagConstraints1.gridx = -1; + gridBagConstraints1.gridy = -1; + settingsPanelBottom = new JPanel(); + settingsPanelBottom.setLayout(flowLayout1); + settingsPanelBottom.add(getSettingsPanelTop2Left(), null); + settingsPanelBottom.add(getSettingsPanelTop2Right(), null); + } + return settingsPanelBottom; + } - private JTextField getVendorIDText() { - if (vendorIDText == null) { - vendorIDText = new JTextField(); - vendorIDText.setPreferredSize(new Dimension(100, 20)); - } - return vendorIDText; - } + private JTextField getVendorIDText() { + if (vendorIDText == null) { + vendorIDText = new JTextField(); + vendorIDText.setPreferredSize(new Dimension(100, 20)); + } + return vendorIDText; + } - private JTextField getProductIDText() { - if (productIDText == null) { - productIDText = new JTextField(); - productIDText.setPreferredSize(new Dimension(100, 20)); - } - return productIDText; - } + private JTextField getProductIDText() { + if (productIDText == null) { + productIDText = new JTextField(); + productIDText.setPreferredSize(new Dimension(100, 20)); + } + return productIDText; + } - private JPanel getVendorIDPanel() { - if (vendorIDPanel == null) { - GridBagConstraints gridBagConstraints3 = new GridBagConstraints(); - gridBagConstraints3.fill = GridBagConstraints.VERTICAL; - gridBagConstraints3.gridy = -1; - gridBagConstraints3.weightx = 1.0; - gridBagConstraints3.gridx = -1; - GridBagConstraints gridBagConstraints5 = new GridBagConstraints(); - gridBagConstraints5.gridx = -1; - gridBagConstraints5.gridy = -1; - vendorIDPanel = new JPanel(); - vendorIDPanel.setBorder(BorderFactory.createTitledBorder(null, - "VendorID", TitledBorder.DEFAULT_JUSTIFICATION, - TitledBorder.DEFAULT_POSITION, new Font("Dialog", - Font.BOLD, 12), new Color(51, 51, 51))); - vendorIDPanel.setLayout(new BoxLayout(getVendorIDPanel(), - BoxLayout.X_AXIS)); - vendorIDPanel.add(getVendorIDText(), null); - } - return vendorIDPanel; - } + private JPanel getVendorIDPanel() { + if (vendorIDPanel == null) { + GridBagConstraints gridBagConstraints3 = new GridBagConstraints(); + gridBagConstraints3.fill = GridBagConstraints.VERTICAL; + gridBagConstraints3.gridy = -1; + gridBagConstraints3.weightx = 1.0; + gridBagConstraints3.gridx = -1; + GridBagConstraints gridBagConstraints5 = new GridBagConstraints(); + gridBagConstraints5.gridx = -1; + gridBagConstraints5.gridy = -1; + vendorIDPanel = new JPanel(); + vendorIDPanel.setBorder(BorderFactory.createTitledBorder(null, + "VendorID", TitledBorder.DEFAULT_JUSTIFICATION, + TitledBorder.DEFAULT_POSITION, new Font("Dialog", + Font.BOLD, 12), new Color(51, 51, 51))); + vendorIDPanel.setLayout(new BoxLayout(getVendorIDPanel(), + BoxLayout.X_AXIS)); + vendorIDPanel.add(getVendorIDText(), null); + } + return vendorIDPanel; + } - private JPanel getProductIDPanel() { - if (productIDPanel == null) { - GridBagConstraints gridBagConstraints4 = new GridBagConstraints(); - gridBagConstraints4.fill = GridBagConstraints.VERTICAL; - gridBagConstraints4.gridy = -1; - gridBagConstraints4.weightx = 1.0; - gridBagConstraints4.gridx = -1; - productIDPanel = new JPanel(); - productIDPanel.setBorder(BorderFactory.createTitledBorder(null, - "ProductID", TitledBorder.DEFAULT_JUSTIFICATION, - TitledBorder.DEFAULT_POSITION, new Font("Dialog", - Font.BOLD, 12), new Color(51, 51, 51))); - productIDPanel.setLayout(new BoxLayout(getProductIDPanel(), - BoxLayout.X_AXIS)); - productIDPanel.add(getProductIDText(), null); - } - return productIDPanel; - } + private JPanel getProductIDPanel() { + if (productIDPanel == null) { + GridBagConstraints gridBagConstraints4 = new GridBagConstraints(); + gridBagConstraints4.fill = GridBagConstraints.VERTICAL; + gridBagConstraints4.gridy = -1; + gridBagConstraints4.weightx = 1.0; + gridBagConstraints4.gridx = -1; + productIDPanel = new JPanel(); + productIDPanel.setBorder(BorderFactory.createTitledBorder(null, + "ProductID", TitledBorder.DEFAULT_JUSTIFICATION, + TitledBorder.DEFAULT_POSITION, new Font("Dialog", + Font.BOLD, 12), new Color(51, 51, 51))); + productIDPanel.setLayout(new BoxLayout(getProductIDPanel(), + BoxLayout.X_AXIS)); + productIDPanel.add(getProductIDText(), null); + } + return productIDPanel; + } - private JPanel getConfigurationPanel() { - if (configurationPanel == null) { - configurationPanel = new JPanel(); - configurationPanel.setLayout(new BoxLayout(getConfigurationPanel(), - BoxLayout.X_AXIS)); - configurationPanel.setBorder(BorderFactory.createTitledBorder(null, - "Configuration", TitledBorder.DEFAULT_JUSTIFICATION, - TitledBorder.DEFAULT_POSITION, new Font("Dialog", - Font.BOLD, 12), new Color(51, 51, 51))); - configurationPanel.add(getConfigurationText(), null); - } - return configurationPanel; - } + private JPanel getConfigurationPanel() { + if (configurationPanel == null) { + configurationPanel = new JPanel(); + configurationPanel.setLayout(new BoxLayout(getConfigurationPanel(), + BoxLayout.X_AXIS)); + configurationPanel.setBorder(BorderFactory.createTitledBorder(null, + "Configuration", TitledBorder.DEFAULT_JUSTIFICATION, + TitledBorder.DEFAULT_POSITION, new Font("Dialog", + Font.BOLD, 12), new Color(51, 51, 51))); + configurationPanel.add(getConfigurationText(), null); + } + return configurationPanel; + } - private JTextField getConfigurationText() { - if (configurationText == null) { - configurationText = new JTextField(); - configurationText.setPreferredSize(new Dimension(100, 20)); - } - return configurationText; - } + private JTextField getConfigurationText() { + if (configurationText == null) { + configurationText = new JTextField(); + configurationText.setPreferredSize(new Dimension(100, 20)); + } + return configurationText; + } - private JPanel getInterfacePanel() { - if (interfacePanel == null) { - interfacePanel = new JPanel(); - interfacePanel.setLayout(new BoxLayout(getInterfacePanel(), - BoxLayout.X_AXIS)); - interfacePanel.setBorder(BorderFactory.createTitledBorder(null, - "Interface", TitledBorder.DEFAULT_JUSTIFICATION, - TitledBorder.DEFAULT_POSITION, new Font("Dialog", - Font.BOLD, 12), new Color(51, 51, 51))); - interfacePanel.add(getInterfaceText(), null); - } - return interfacePanel; - } + private JPanel getInterfacePanel() { + if (interfacePanel == null) { + interfacePanel = new JPanel(); + interfacePanel.setLayout(new BoxLayout(getInterfacePanel(), + BoxLayout.X_AXIS)); + interfacePanel.setBorder(BorderFactory.createTitledBorder(null, + "Interface", TitledBorder.DEFAULT_JUSTIFICATION, + TitledBorder.DEFAULT_POSITION, new Font("Dialog", + Font.BOLD, 12), new Color(51, 51, 51))); + interfacePanel.add(getInterfaceText(), null); + } + return interfacePanel; + } - private JTextField getInterfaceText() { - if (interfaceText == null) { - interfaceText = new JTextField(); - interfaceText.setPreferredSize(new Dimension(100, 20)); - } - return interfaceText; - } + private JTextField getInterfaceText() { + if (interfaceText == null) { + interfaceText = new JTextField(); + interfaceText.setPreferredSize(new Dimension(100, 20)); + } + return interfaceText; + } - private JPanel getAltInterfacePanel() { - if (altInterfacePanel == null) { - altInterfacePanel = new JPanel(); - altInterfacePanel.setLayout(new BoxLayout(getAltInterfacePanel(), - BoxLayout.X_AXIS)); - altInterfacePanel.setBorder(BorderFactory.createTitledBorder(null, - "Alternate Int", TitledBorder.DEFAULT_JUSTIFICATION, - TitledBorder.DEFAULT_POSITION, new Font("Dialog", - Font.BOLD, 12), new Color(51, 51, 51))); - altInterfacePanel.add(getAltInterfaceText(), null); - } - return altInterfacePanel; - } + private JPanel getAltInterfacePanel() { + if (altInterfacePanel == null) { + altInterfacePanel = new JPanel(); + altInterfacePanel.setLayout(new BoxLayout(getAltInterfacePanel(), + BoxLayout.X_AXIS)); + altInterfacePanel.setBorder(BorderFactory.createTitledBorder(null, + "Alternate Int", TitledBorder.DEFAULT_JUSTIFICATION, + TitledBorder.DEFAULT_POSITION, new Font("Dialog", + Font.BOLD, 12), new Color(51, 51, 51))); + altInterfacePanel.add(getAltInterfaceText(), null); + } + return altInterfacePanel; + } - private JTextField getAltInterfaceText() { - if (altInterfaceText == null) { - altInterfaceText = new JTextField(); - altInterfaceText.setPreferredSize(new Dimension(100, 20)); - } - return altInterfaceText; - } + private JTextField getAltInterfaceText() { + if (altInterfaceText == null) { + altInterfaceText = new JTextField(); + altInterfaceText.setPreferredSize(new Dimension(100, 20)); + } + return altInterfaceText; + } - private JPanel getSettingsPanelTop2Left() { - if (settingsPanelTop2Left == null) { - FlowLayout flowLayout2 = new FlowLayout(); - flowLayout2.setVgap(2); - flowLayout2.setAlignment(FlowLayout.LEFT); - flowLayout2.setHgap(5); - settingsPanelTop2Left = new JPanel(); - settingsPanelTop2Left.setLayout(flowLayout2); - settingsPanelTop2Left.add(getOutEpPanel(), null); - settingsPanelTop2Left.add(getInEpPanel(), null); - settingsPanelTop2Left.add(getTimeoutPanel(), null); - } - return settingsPanelTop2Left; - } + private JPanel getSettingsPanelTop2Left() { + if (settingsPanelTop2Left == null) { + FlowLayout flowLayout2 = new FlowLayout(); + flowLayout2.setVgap(2); + flowLayout2.setAlignment(FlowLayout.LEFT); + flowLayout2.setHgap(5); + settingsPanelTop2Left = new JPanel(); + settingsPanelTop2Left.setLayout(flowLayout2); + settingsPanelTop2Left.add(getOutEpPanel(), null); + settingsPanelTop2Left.add(getInEpPanel(), null); + settingsPanelTop2Left.add(getTimeoutPanel(), null); + } + return settingsPanelTop2Left; + } - private JPanel getSettingsPanelTop2Right() { - if (settingsPanelTop2Right == null) { - FlowLayout flowLayout3 = new FlowLayout(); - flowLayout3.setVgap(2); - settingsPanelTop2Right = new JPanel(); - settingsPanelTop2Right.setLayout(flowLayout3); - settingsPanelTop2Right.add(getOpenDeviceButton(), null); - settingsPanelTop2Right.add(getCloseDevice(), null); - settingsPanelTop2Right.add(getResetButton(), null); - } - return settingsPanelTop2Right; - } + private JPanel getSettingsPanelTop2Right() { + if (settingsPanelTop2Right == null) { + FlowLayout flowLayout3 = new FlowLayout(); + flowLayout3.setVgap(2); + settingsPanelTop2Right = new JPanel(); + settingsPanelTop2Right.setLayout(flowLayout3); + settingsPanelTop2Right.add(getOpenDeviceButton(), null); + settingsPanelTop2Right.add(getCloseDevice(), null); + settingsPanelTop2Right.add(getResetButton(), null); + } + return settingsPanelTop2Right; + } - private JPanel getOutEpPanel() { - if (outEpPanel == null) { - outEpPanel = new JPanel(); - outEpPanel.setLayout(new BoxLayout(getOutEpPanel(), - BoxLayout.X_AXIS)); - outEpPanel.setBorder(BorderFactory.createTitledBorder(null, - "OUT EP", TitledBorder.DEFAULT_JUSTIFICATION, - TitledBorder.DEFAULT_POSITION, new Font("Dialog", - Font.BOLD, 12), new Color(51, 51, 51))); - outEpPanel.add(getOutEpText(), null); - } - return outEpPanel; - } + private JPanel getOutEpPanel() { + if (outEpPanel == null) { + outEpPanel = new JPanel(); + outEpPanel.setLayout(new BoxLayout(getOutEpPanel(), + BoxLayout.X_AXIS)); + outEpPanel.setBorder(BorderFactory.createTitledBorder(null, + "OUT EP", TitledBorder.DEFAULT_JUSTIFICATION, + TitledBorder.DEFAULT_POSITION, new Font("Dialog", + Font.BOLD, 12), new Color(51, 51, 51))); + outEpPanel.add(getOutEpText(), null); + } + return outEpPanel; + } - private JTextField getOutEpText() { - if (outEpText == null) { - outEpText = new JTextField(); - outEpText.setPreferredSize(new Dimension(100, 20)); - } - return outEpText; - } + private JTextField getOutEpText() { + if (outEpText == null) { + outEpText = new JTextField(); + outEpText.setPreferredSize(new Dimension(100, 20)); + } + return outEpText; + } - private JPanel getInEpPanel() { - if (inEpPanel == null) { - inEpPanel = new JPanel(); - inEpPanel - .setLayout(new BoxLayout(getInEpPanel(), BoxLayout.X_AXIS)); - inEpPanel.setBorder(BorderFactory.createTitledBorder(null, "IN EP", - TitledBorder.DEFAULT_JUSTIFICATION, - TitledBorder.DEFAULT_POSITION, new Font("Dialog", - Font.BOLD, 12), new Color(51, 51, 51))); - inEpPanel.add(getInEpText(), null); - } - return inEpPanel; - } + private JPanel getInEpPanel() { + if (inEpPanel == null) { + inEpPanel = new JPanel(); + inEpPanel + .setLayout(new BoxLayout(getInEpPanel(), BoxLayout.X_AXIS)); + inEpPanel.setBorder(BorderFactory.createTitledBorder(null, "IN EP", + TitledBorder.DEFAULT_JUSTIFICATION, + TitledBorder.DEFAULT_POSITION, new Font("Dialog", + Font.BOLD, 12), new Color(51, 51, 51))); + inEpPanel.add(getInEpText(), null); + } + return inEpPanel; + } - private JTextField getInEpText() { - if (inEpText == null) { - inEpText = new JTextField(); - inEpText.setPreferredSize(new Dimension(100, 20)); - } - return inEpText; - } + private JTextField getInEpText() { + if (inEpText == null) { + inEpText = new JTextField(); + inEpText.setPreferredSize(new Dimension(100, 20)); + } + return inEpText; + } - private JPanel getTimeoutPanel() { - if (timeoutPanel == null) { - timeoutPanel = new JPanel(); - timeoutPanel.setLayout(new BoxLayout(getTimeoutPanel(), - BoxLayout.X_AXIS)); - timeoutPanel.setBorder(BorderFactory.createTitledBorder(null, - "Timeout", TitledBorder.DEFAULT_JUSTIFICATION, - TitledBorder.DEFAULT_POSITION, new Font("Dialog", - Font.BOLD, 12), new Color(51, 51, 51))); - timeoutPanel.add(getTimeoutText(), null); - } - return timeoutPanel; - } + private JPanel getTimeoutPanel() { + if (timeoutPanel == null) { + timeoutPanel = new JPanel(); + timeoutPanel.setLayout(new BoxLayout(getTimeoutPanel(), + BoxLayout.X_AXIS)); + timeoutPanel.setBorder(BorderFactory.createTitledBorder(null, + "Timeout", TitledBorder.DEFAULT_JUSTIFICATION, + TitledBorder.DEFAULT_POSITION, new Font("Dialog", + Font.BOLD, 12), new Color(51, 51, 51))); + timeoutPanel.add(getTimeoutText(), null); + } + return timeoutPanel; + } - private JTextField getTimeoutText() { - if (timeoutText == null) { - timeoutText = new JTextField(); - timeoutText.setPreferredSize(new Dimension(100, 20)); - } - return timeoutText; - } + private JTextField getTimeoutText() { + if (timeoutText == null) { + timeoutText = new JTextField(); + timeoutText.setPreferredSize(new Dimension(100, 20)); + } + return timeoutText; + } - private JPanel getSendDataPanel() { - if (sendDataPanel == null) { - FlowLayout flowLayout4 = new FlowLayout(); - flowLayout4.setAlignment(FlowLayout.LEFT); - sendDataPanel = new JPanel(); - sendDataPanel.setLayout(flowLayout4); - sendDataPanel.setBorder(BorderFactory.createTitledBorder(null, - "Data to send [hex]", TitledBorder.DEFAULT_JUSTIFICATION, - TitledBorder.DEFAULT_POSITION, new Font("Dialog", - Font.BOLD, 12), new Color(51, 51, 51))); - sendDataPanel.add(getSendRecDataText(), null); - } - return sendDataPanel; - } + private JPanel getSendDataPanel() { + if (sendDataPanel == null) { + FlowLayout flowLayout4 = new FlowLayout(); + flowLayout4.setAlignment(FlowLayout.LEFT); + sendDataPanel = new JPanel(); + sendDataPanel.setLayout(flowLayout4); + sendDataPanel.setBorder(BorderFactory.createTitledBorder(null, + "Data to send [hex]", TitledBorder.DEFAULT_JUSTIFICATION, + TitledBorder.DEFAULT_POSITION, new Font("Dialog", + Font.BOLD, 12), new Color(51, 51, 51))); + sendDataPanel.add(getSendRecDataText(), null); + } + return sendDataPanel; + } - private JPanel getSendRecButtonsPanel() { - if (sendRecButtonsPanel == null) { - FlowLayout flowLayout5 = new FlowLayout(); - flowLayout5.setAlignment(FlowLayout.LEFT); - flowLayout5.setVgap(0); - sendRecButtonsPanel = new JPanel(); - sendRecButtonsPanel.setLayout(flowLayout5); - sendRecButtonsPanel.add(getSendRecButtonsPanelTop(), null); - sendRecButtonsPanel.add(getSendRecButtonsPanelBottom(), null); - } - return sendRecButtonsPanel; - } + private JPanel getSendRecButtonsPanel() { + if (sendRecButtonsPanel == null) { + FlowLayout flowLayout5 = new FlowLayout(); + flowLayout5.setAlignment(FlowLayout.LEFT); + flowLayout5.setVgap(0); + sendRecButtonsPanel = new JPanel(); + sendRecButtonsPanel.setLayout(flowLayout5); + sendRecButtonsPanel.add(getSendRecButtonsPanelTop(), null); + sendRecButtonsPanel.add(getSendRecButtonsPanelBottom(), null); + } + return sendRecButtonsPanel; + } - private JButton getSendButton() { - if (sendButton == null) { - sendButton = new JButton(); - sendButton.setText("Send"); - sendButton.setName("sendButton"); - sendButton.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent e) { - int index = sendTypeComboBox.getSelectedIndex(); - if (index == TestDevice.TransferMode.Bulk.ordinal()) { - dev.setOutEPBulk(parseInt(outEpText.getText().trim())); - dev.setMode(TestDevice.TransferMode.Bulk); - } else if (index == TestDevice.TransferMode.Interrupt - .ordinal()) { - dev.setOutEPInt(parseInt(outEpText.getText().trim())); - dev.setMode(TestDevice.TransferMode.Interrupt); - } - byte[] data = parseByteArray(sendDataText.getText().trim()); - dev.write(data, data.length); - } - }); - } - return sendButton; - } + private JButton getSendButton() { + if (sendButton == null) { + sendButton = new JButton(); + sendButton.setText("Send"); + sendButton.setName("sendButton"); + sendButton.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent e) { + int index = sendTypeComboBox.getSelectedIndex(); + if (index == TestDevice.TransferMode.Bulk.ordinal()) { + dev.setOutEPBulk(parseInt(outEpText.getText().trim())); + dev.setMode(TestDevice.TransferMode.Bulk); + } else if (index == TestDevice.TransferMode.Interrupt + .ordinal()) { + dev.setOutEPInt(parseInt(outEpText.getText().trim())); + dev.setMode(TestDevice.TransferMode.Interrupt); + } + byte[] data = parseByteArray(sendDataText.getText().trim()); + dev.write(data, data.length); + } + }); + } + return sendButton; + } - private JButton getRecButton() { - if (recButton == null) { - recButton = new JButton(); - recButton.setText("Receive"); - recButton.setName("recButton"); - recButton.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent e) { - int index = sendTypeComboBox.getSelectedIndex(); - if (index == TestDevice.TransferMode.Bulk.ordinal()) { - dev.setInEPBulk(parseInt(inEpText.getText().trim())); - dev.setMode(TestDevice.TransferMode.Bulk); - } else if (index == TestDevice.TransferMode.Interrupt - .ordinal()) { - dev.setInEPInt(parseInt(inEpText.getText().trim())); - dev.setMode(TestDevice.TransferMode.Interrupt); - } - dev.read(); - } - }); - } - return recButton; - } + private JButton getRecButton() { + if (recButton == null) { + recButton = new JButton(); + recButton.setText("Receive"); + recButton.setName("recButton"); + recButton.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent e) { + int index = sendTypeComboBox.getSelectedIndex(); + if (index == TestDevice.TransferMode.Bulk.ordinal()) { + dev.setInEPBulk(parseInt(inEpText.getText().trim())); + dev.setMode(TestDevice.TransferMode.Bulk); + } else if (index == TestDevice.TransferMode.Interrupt + .ordinal()) { + dev.setInEPInt(parseInt(inEpText.getText().trim())); + dev.setMode(TestDevice.TransferMode.Interrupt); + } + dev.read(); + } + }); + } + return recButton; + } - private JTextField getSendRecDataText() { - if (sendDataText == null) { - sendDataText = new JTextField(); - sendDataText.setPreferredSize(new Dimension(650, 20)); - } - return sendDataText; - } + private JTextField getSendRecDataText() { + if (sendDataText == null) { + sendDataText = new JTextField(); + sendDataText.setPreferredSize(new Dimension(650, 20)); + } + return sendDataText; + } - int parseInt(String s) { - if (s == "") - return 0; - if (s.indexOf('x') > 0) { - // is hex number - if (s.length() <= 2) { // exception for "0x" - return 0; - } - return Integer.parseInt( - s.substring(s.indexOf('x') + 1, s.length()), 16); - } - // is decimal number - return Integer.parseInt(s); - } + int parseInt(String s) { + if (s == "") + return 0; + if (s.indexOf('x') > 0) { + // is hex number + if (s.length() <= 2) { // exception for "0x" + return 0; + } + return Integer.parseInt( + s.substring(s.indexOf('x') + 1, s.length()), 16); + } + // is decimal number + return Integer.parseInt(s); + } - byte[] parseByteArray(String s) { - final int HEX_WIDTH = 5; + byte[] parseByteArray(String s) { + final int HEX_WIDTH = 5; - StringBuffer sb = new StringBuffer(); - int stringIndex = 0, spaceIndex = 0; - String ss; - while (stringIndex + 3 < s.length()) { - ss = s.substring(spaceIndex, spaceIndex + 4); - spaceIndex = s.indexOf(' ', stringIndex) + 1; - sb.append((char) parseInt(ss)); - stringIndex += HEX_WIDTH; - } - return sb.toString().getBytes(); - } + StringBuffer sb = new StringBuffer(); + int stringIndex = 0, spaceIndex = 0; + String ss; + while (stringIndex + 3 < s.length()) { + ss = s.substring(spaceIndex, spaceIndex + 4); + spaceIndex = s.indexOf(' ', stringIndex) + 1; + sb.append((char) parseInt(ss)); + stringIndex += HEX_WIDTH; + } + return sb.toString().getBytes(); + } - private static String toHexString(int value) { - return "0x" + Integer.toHexString(value); - } + private static String toHexString(int value) { + return "0x" + Integer.toHexString(value); + } - /** - * This method initializes sendTypeComboBox - * - * @return javax.swing.JComboBox - */ - private JComboBox getSendTypeComboBox() { - if (sendTypeComboBox == null) { - sendTypeComboBox = new JComboBox(dev.getTransferTypes()); - sendTypeComboBox.setSelectedIndex(dev.getOutMode().ordinal()); - sendTypeComboBox.addItemListener(new java.awt.event.ItemListener() { - public void itemStateChanged(java.awt.event.ItemEvent e) { - if (e.getStateChange() == ItemEvent.SELECTED) { - String mode = (String) e.getItem(); - if (mode.equalsIgnoreCase("Bulk")) { - dev.setOutMode(TestDevice.TransferMode.Bulk); - setOutEpAddr(); - } else if (mode.equalsIgnoreCase("Interrupt")) { - dev.setOutMode(TestDevice.TransferMode.Interrupt); - setOutEpAddr(); - } - } - } - }); - } - return sendTypeComboBox; - } + /** + * This method initializes sendTypeComboBox + * + * @return javax.swing.JComboBox + */ + private JComboBox getSendTypeComboBox() { + if (sendTypeComboBox == null) { + sendTypeComboBox = new JComboBox(dev.getTransferTypes()); + sendTypeComboBox.setSelectedIndex(dev.getOutMode().ordinal()); + sendTypeComboBox.addItemListener(new java.awt.event.ItemListener() { + public void itemStateChanged(java.awt.event.ItemEvent e) { + if (e.getStateChange() == ItemEvent.SELECTED) { + String mode = (String) e.getItem(); + if (mode.equalsIgnoreCase("Bulk")) { + dev.setOutMode(TestDevice.TransferMode.Bulk); + setOutEpAddr(); + } else if (mode.equalsIgnoreCase("Interrupt")) { + dev.setOutMode(TestDevice.TransferMode.Interrupt); + setOutEpAddr(); + } + } + } + }); + } + return sendTypeComboBox; + } - /** - * This method initializes recTypeComboBox - * - * @return javax.swing.JComboBox - */ - private JComboBox getRecTypeComboBox() { - if (recTypeComboBox == null) { - recTypeComboBox = new JComboBox(dev.getTransferTypes()); - recTypeComboBox.setSelectedIndex(dev.getInMode().ordinal()); - recTypeComboBox.addItemListener(new java.awt.event.ItemListener() { - public void itemStateChanged(java.awt.event.ItemEvent e) { - if (e.getStateChange() == ItemEvent.SELECTED) { - String mode = (String) e.getItem(); - if (mode.equalsIgnoreCase("Bulk")) { - dev.setInMode(TestDevice.TransferMode.Bulk); - setInEpAddr(); - } else if (mode.equalsIgnoreCase("Interrupt")) { - dev.setInMode(TestDevice.TransferMode.Interrupt); - setInEpAddr(); - } - } - } - }); - // recTypeComboBox.addActionListener(new - // java.awt.event.ActionListener() { - // public void actionPerformed(java.awt.event.ActionEvent e) { - // JComboBox source = (JComboBox) e.getSource(); - // String mode = ""; - // } if (mode.equalsIgnoreCase("Bulk")) { - // dev.setInMode(TestDevice.TransferMode.Bulk); - // setInEpAddr(); - // } else if (mode.equalsIgnoreCase("Interrupt")) { - // dev.setInMode(TestDevice.TransferMode.Interrupt); - // setInEpAddr(); - // } - // - // }); - } - return recTypeComboBox; - } + /** + * This method initializes recTypeComboBox + * + * @return javax.swing.JComboBox + */ + private JComboBox getRecTypeComboBox() { + if (recTypeComboBox == null) { + recTypeComboBox = new JComboBox(dev.getTransferTypes()); + recTypeComboBox.setSelectedIndex(dev.getInMode().ordinal()); + recTypeComboBox.addItemListener(new java.awt.event.ItemListener() { + public void itemStateChanged(java.awt.event.ItemEvent e) { + if (e.getStateChange() == ItemEvent.SELECTED) { + String mode = (String) e.getItem(); + if (mode.equalsIgnoreCase("Bulk")) { + dev.setInMode(TestDevice.TransferMode.Bulk); + setInEpAddr(); + } else if (mode.equalsIgnoreCase("Interrupt")) { + dev.setInMode(TestDevice.TransferMode.Interrupt); + setInEpAddr(); + } + } + } + }); + // recTypeComboBox.addActionListener(new + // java.awt.event.ActionListener() { + // public void actionPerformed(java.awt.event.ActionEvent e) { + // JComboBox source = (JComboBox) e.getSource(); + // String mode = ""; + // } if (mode.equalsIgnoreCase("Bulk")) { + // dev.setInMode(TestDevice.TransferMode.Bulk); + // setInEpAddr(); + // } else if (mode.equalsIgnoreCase("Interrupt")) { + // dev.setInMode(TestDevice.TransferMode.Interrupt); + // setInEpAddr(); + // } + // + // }); + } + return recTypeComboBox; + } - /** - * This method initializes sendRecButtonsPanelTop - * - * @return javax.swing.JPanel - */ - private JPanel getSendRecButtonsPanelTop() { - if (sendRecButtonsPanelTop == null) { - BorderLayout borderLayout1 = new BorderLayout(); - borderLayout1.setHgap(5); - sendRecButtonsPanelTop = new JPanel(); - sendRecButtonsPanelTop.setBorder(BorderFactory.createTitledBorder( - null, "OUT", TitledBorder.DEFAULT_JUSTIFICATION, - TitledBorder.DEFAULT_POSITION, new Font("Dialog", - Font.BOLD, 12), new Color(51, 51, 51))); - sendRecButtonsPanelTop.setLayout(borderLayout1); - sendRecButtonsPanelTop.add(getSendButton(), BorderLayout.EAST); - sendRecButtonsPanelTop - .add(getSendTypeComboBox(), BorderLayout.WEST); - } - return sendRecButtonsPanelTop; - } + /** + * This method initializes sendRecButtonsPanelTop + * + * @return javax.swing.JPanel + */ + private JPanel getSendRecButtonsPanelTop() { + if (sendRecButtonsPanelTop == null) { + BorderLayout borderLayout1 = new BorderLayout(); + borderLayout1.setHgap(5); + sendRecButtonsPanelTop = new JPanel(); + sendRecButtonsPanelTop.setBorder(BorderFactory.createTitledBorder( + null, "OUT", TitledBorder.DEFAULT_JUSTIFICATION, + TitledBorder.DEFAULT_POSITION, new Font("Dialog", + Font.BOLD, 12), new Color(51, 51, 51))); + sendRecButtonsPanelTop.setLayout(borderLayout1); + sendRecButtonsPanelTop.add(getSendButton(), BorderLayout.EAST); + sendRecButtonsPanelTop + .add(getSendTypeComboBox(), BorderLayout.WEST); + } + return sendRecButtonsPanelTop; + } - /** - * This method initializes sendRecButtonsPanelBottom - * - * @return javax.swing.JPanel - */ - private JPanel getSendRecButtonsPanelBottom() { - if (sendRecButtonsPanelBottom == null) { - BorderLayout borderLayout = new BorderLayout(); - borderLayout.setHgap(5); - sendRecButtonsPanelBottom = new JPanel(); - sendRecButtonsPanelBottom.setBorder(BorderFactory - .createTitledBorder(null, "IN", - TitledBorder.DEFAULT_JUSTIFICATION, - TitledBorder.DEFAULT_POSITION, new Font("Dialog", - Font.BOLD, 12), new Color(51, 51, 51))); - sendRecButtonsPanelBottom.setLayout(borderLayout); - sendRecButtonsPanelBottom.add(getRecButton(), BorderLayout.EAST); - sendRecButtonsPanelBottom.add(getRecTypeComboBox(), - BorderLayout.WEST); - } - return sendRecButtonsPanelBottom; - } + /** + * This method initializes sendRecButtonsPanelBottom + * + * @return javax.swing.JPanel + */ + private JPanel getSendRecButtonsPanelBottom() { + if (sendRecButtonsPanelBottom == null) { + BorderLayout borderLayout = new BorderLayout(); + borderLayout.setHgap(5); + sendRecButtonsPanelBottom = new JPanel(); + sendRecButtonsPanelBottom.setBorder(BorderFactory + .createTitledBorder(null, "IN", + TitledBorder.DEFAULT_JUSTIFICATION, + TitledBorder.DEFAULT_POSITION, new Font("Dialog", + Font.BOLD, 12), new Color(51, 51, 51))); + sendRecButtonsPanelBottom.setLayout(borderLayout); + sendRecButtonsPanelBottom.add(getRecButton(), BorderLayout.EAST); + sendRecButtonsPanelBottom.add(getRecTypeComboBox(), + BorderLayout.WEST); + } + return sendRecButtonsPanelBottom; + } - public static void main(String[] args) { - // set LookAndFeel - try { - UIManager - .setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel"); - } catch (Exception e) { - e.printStackTrace(); - } - TestApp app = new TestApp(new TestDevice()); - app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); - } + public static void main(String[] args) { + // set LookAndFeel + try { + UIManager + .setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel"); + } catch (Exception e) { + e.printStackTrace(); + } + TestApp app = new TestApp(new TestDevice()); + app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + } } diff --git a/src/app/java/ch/ntb/usb/testApp/TestDevice.java b/src/app/java/ch/ntb/usb/testApp/TestDevice.java index 62dd19a..ae30f7a 100644 --- a/src/app/java/ch/ntb/usb/testApp/TestDevice.java +++ b/src/app/java/ch/ntb/usb/testApp/TestDevice.java @@ -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 transferTypes; + private Vector 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(); - 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(); + 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 getTransferTypes() { - return transferTypes; - } + public Vector 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; + } } diff --git a/src/app/java/ch/ntb/usb/usbView/UsbTreeModel.java b/src/app/java/ch/ntb/usb/usbView/UsbTreeModel.java index 4741121..646aa5b 100644 --- a/src/app/java/ch/ntb/usb/usbView/UsbTreeModel.java +++ b/src/app/java/ch/ntb/usb/usbView/UsbTreeModel.java @@ -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 treeModelListeners = new Vector(); + private Vector treeModelListeners = new Vector(); - /** - * Default constructor.
- * - * @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.
+ * + * @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; + } } diff --git a/src/app/java/ch/ntb/usb/usbView/UsbView.java b/src/app/java/ch/ntb/usb/usbView/UsbView.java index e8847bf..ede31a6 100644 --- a/src/app/java/ch/ntb/usb/usbView/UsbView.java +++ b/src/app/java/ch/ntb/usb/usbView/UsbView.java @@ -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); + } + } } diff --git a/src/demo/java/ch/ntb/usb/demo/LogBus.java b/src/demo/java/ch/ntb/usb/demo/LogBus.java index 564c582..a693cb8 100644 --- a/src/demo/java/ch/ntb/usb/demo/LogBus.java +++ b/src/demo/java/ch/ntb/usb/demo/LogBus.java @@ -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(); + } } diff --git a/src/demo/java/ch/ntb/usb/demo/ReadWrite.java b/src/demo/java/ch/ntb/usb/demo/ReadWrite.java index de74950..44f6df7 100644 --- a/src/demo/java/ch/ntb/usb/demo/ReadWrite.java +++ b/src/demo/java/ch/ntb/usb/demo/ReadWrite.java @@ -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(); + } + } } diff --git a/src/main/cpp/CuTest.cpp b/src/main/cpp/CuTest.cpp index 8f61199..1af7ab2 100644 --- a/src/main/cpp/CuTest.cpp +++ b/src/main/cpp/CuTest.cpp @@ -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); + } } diff --git a/src/main/cpp/LibusbJava.cpp b/src/main/cpp/LibusbJava.cpp index caa7431..ccb3253 100644 --- a/src/main/cpp/LibusbJava.cpp +++ b/src/main/cpp/LibusbJava.cpp @@ -1,27 +1,27 @@ -/*! \file - * \brief Java libusb1.0 wrapper +/*! \file + * \brief Java libusb1.0 wrapper * - * \copyright 2010-2012 NTB Interstate University of Applied Sciences of Technology Buchs - * This libary is covered by the LGPL, read LGPL.txt for details + * \copyright 2010-2012 NTB Interstate University of Applied Sciences of Technology Buchs + * This libary is covered by the LGPL, read LGPL.txt for details * - * \author Roger Millischer (original author) - * \author Ueli Niederer (modifications and enhancements) + * \author Roger Millischer (original author) + * \author Ueli Niederer (modifications and enhancements) * - * \todo Currently all the pointers and handles passed to and received from libusb are coded - * in long values to get them in JVM. - * Clebert Suconic ( http://planet.jboss.org/post/pointers_in_jni_c ) suggests a - * possibly more elegant way to deal with this issue: - * Make use of the ByteBuffer-Class delivered by with the native IO package. - * (java.nio). As this class is made to store the start pointer to native buffers - * we could create a "ByteBuffer" of length 0 where the start address represents - * e.g. the handle. This can be done using the following JNI Call: - * env->NewDirectByteBuffer(myPointer, 0); // size = 0, you don't want anyone to - * // change the data you are pointing to... + * \todo Currently all the pointers and handles passed to and received from libusb are coded + * in long values to get them in JVM. + * Clebert Suconic ( http://planet.jboss.org/post/pointers_in_jni_c ) suggests a + * possibly more elegant way to deal with this issue: + * Make use of the ByteBuffer-Class delivered by with the native IO package. + * (java.nio). As this class is made to store the start pointer to native buffers + * we could create a "ByteBuffer" of length 0 where the start address represents + * e.g. the handle. This can be done using the following JNI Call: + * env->NewDirectByteBuffer(myPointer, 0); // size = 0, you don't want anyone to + * // change the data you are pointing to... */ /******************************************************************************************** * - * Includes + * Includes * *******************************************************************************************/ #include @@ -31,9 +31,9 @@ #include #ifdef DO_UNIT_TEST -# include +# include -# define TEST_CASE(name) static void name(CuTest *tc) +# define TEST_CASE(name) static void name(CuTest *tc) #endif #include @@ -46,44 +46,44 @@ //#define DEBUGON typedef struct JNIObject { - int (*connect)(JNIEnv *env); - void (*disconnect)(JNIEnv *env); + int (*connect)(JNIEnv *env); + void (*disconnect)(JNIEnv *env); }tJNIObject; -#define ERROR_JAVA_REFERENCES_NOT_LOADED -100 -#define ERROR_JAVA_WRONG_ENVIRONMENT -101 -#define ERROR_JAVA_ILEGAL_DEVICE_HANDLE -102 +#define ERROR_JAVA_REFERENCES_NOT_LOADED -100 +#define ERROR_JAVA_WRONG_ENVIRONMENT -101 +#define ERROR_JAVA_ILEGAL_DEVICE_HANDLE -102 -#define OBJ(name) { name ## _connect, name ## _disconnect } +#define OBJ(name) { name ## _connect, name ## _disconnect } -/*! \brief Structure holding all the global information needed. */ +/*! \brief Structure holding all the global information needed. */ typedef struct LUJ_Instance { - struct JNI{ + struct JNI{ #ifdef DO_UNIT_TEST - int onLoadCalled; /*!< Set after OnLoad is called, reset after OnUnload was called. Only - used for unit tests */ + int onLoadCalled; /*!< Set after OnLoad is called, reset after OnUnload was called. Only + used for unit tests */ #endif - int refs_loaded; /*!< 0 if references are NOT loaded. */ - const tJNIObject * objects; /*!< Points to the table of connect/disconnect calls - that are perfomed while loading/unloading */ - }jni; + int refs_loaded; /*!< 0 if references are NOT loaded. */ + const tJNIObject * objects; /*!< Points to the table of connect/disconnect calls + that are perfomed while loading/unloading */ + }jni; }tLUJ_Instance; /******************************************************************************************** * - * Globals + * Globals * *******************************************************************************************/ /* if > 0 an LibusbJava specific error string is set*/ static char *libusbJavaError = NULL; static const tJNIObject jniObjects[] = { - OBJ(Usb_Device), - { NULL, NULL} + OBJ(Usb_Device), + { NULL, NULL} }; /******************************************************************************************** * - * Macros + * Macros * *******************************************************************************************/ /* to set and clear LibusbJava specific errors*/ @@ -92,13 +92,13 @@ static const tJNIObject jniObjects[] = { /******************************************************************************************** * - * Prototyp and define for callback-function + * Prototyp and define for callback-function * *******************************************************************************************/ static void LIBUSB_CALL transfer_callback(struct libusb_transfer *transfer); static void - LIBUSB_CALL fd_added_callback(int fd, short events, void *user_data); + LIBUSB_CALL fd_added_callback(int fd, short events, void *user_data); static void LIBUSB_CALL fd_removed_callback(int fd, void *user_data); @@ -107,148 +107,148 @@ static void LIBUSB_CALL fd_removed_callback(int fd, void *user_data); * Local helper functions * *******************************************************************************************/ -static __inline int ReferencesCheck(tLUJ_Instance *instance, JNIEnv *env); -static __inline int ReferencesLoad(tLUJ_Instance *instance, JNIEnv *env, const tJNIObject *objects); -static __inline void ReferencesUnload(tLUJ_Instance *instance, JNIEnv *env); -static __inline jbyteArray JNICALL to_byteArray(JNIEnv *env, const void *data, size_t len); -static __inline void JNICALL ThrowIfUnsuccessful(JNIEnv *env, int libusb_result); -static __inline void JNICALL ThrowLibusbError(JNIEnv *env, jint code); +static __inline int ReferencesCheck(tLUJ_Instance *instance, JNIEnv *env); +static __inline int ReferencesLoad(tLUJ_Instance *instance, JNIEnv *env, const tJNIObject *objects); +static __inline void ReferencesUnload(tLUJ_Instance *instance, JNIEnv *env); +static __inline jbyteArray JNICALL to_byteArray(JNIEnv *env, const void *data, size_t len); +static __inline void JNICALL ThrowIfUnsuccessful(JNIEnv *env, int libusb_result); +static __inline void JNICALL ThrowLibusbError(JNIEnv *env, jint code); /******************************************************************************************** * - * References + * References * *******************************************************************************************/ /* class references*/ static jclass usb_devDescClazz, usb_confDescClazz, usb_intClazz, - usb_intDescClazz, usb_epDescClazz, usb_cb_clazz, usb_pollfd_clazz; + usb_intDescClazz, usb_epDescClazz, usb_cb_clazz, usb_pollfd_clazz; /* method ID references*/ static jmethodID usb_devDescMid, usb_confDescMid, usb_intMid, - usb_intDescMid, usb_epDescMid, usb_transfer_cb_Mid, - usb_fd_added_cb_Mid, usb_fd_removed_cb_Mid, usb_pollfd_Mid; + usb_intDescMid, usb_epDescMid, usb_transfer_cb_Mid, + usb_fd_added_cb_Mid, usb_fd_removed_cb_Mid, usb_pollfd_Mid; /* field ID references*/ /* usb_deviceDescriptor */ static jfieldID usb_devDescFID_bLength, usb_devDescFID_bDescriptorType, - usb_devDescFID_bcdUSB, usb_devDescFID_bDeviceClass, - usb_devDescFID_bDeviceSubClass, usb_devDescFID_bDeviceProtocol, - usb_devDescFID_bMaxPacketSize0, usb_devDescFID_idVendor, - usb_devDescFID_idProduct, usb_devDescFID_bcdDevice, - usb_devDescFID_iManufacturer, usb_devDescFID_iProduct, - usb_devDescFID_iSerialNumber, usb_devDescFID_bNumConfigurations; + usb_devDescFID_bcdUSB, usb_devDescFID_bDeviceClass, + usb_devDescFID_bDeviceSubClass, usb_devDescFID_bDeviceProtocol, + usb_devDescFID_bMaxPacketSize0, usb_devDescFID_idVendor, + usb_devDescFID_idProduct, usb_devDescFID_bcdDevice, + usb_devDescFID_iManufacturer, usb_devDescFID_iProduct, + usb_devDescFID_iSerialNumber, usb_devDescFID_bNumConfigurations; /* usb_configurationDescriptor*/ static jfieldID usb_confDescFID_bLength, usb_confDescFID_bDescriptorType, - usb_confDescFID_wTotalLength, usb_confDescFID_bNumInterfaces, - usb_confDescFID_bConfigurationValue, usb_confDescFID_iConfiguration, - usb_confDescFID_bmAttributes, usb_confDescFID_MaxPower, - usb_confDescFID_interface_, usb_confDescFID_extra, - usb_confDescFID_extralen; + usb_confDescFID_wTotalLength, usb_confDescFID_bNumInterfaces, + usb_confDescFID_bConfigurationValue, usb_confDescFID_iConfiguration, + usb_confDescFID_bmAttributes, usb_confDescFID_MaxPower, + usb_confDescFID_interface_, usb_confDescFID_extra, + usb_confDescFID_extralen; /* usb_interface*/ static jfieldID usb_intFID_altsetting, usb_intFID_num_altsetting; /* usb_intDesc*/ static jfieldID usb_intDescFID_bLength, usb_intDescFID_bDescriptorType, - usb_intDescFID_bInterfaceNumber, usb_intDescFID_bAlternateSetting, - usb_intDescFID_bNumEndpoints, usb_intDescFID_bInterfaceClass, - usb_intDescFID_bInterfaceSubClass, usb_intDescFID_bInterfaceProtocol, - usb_intDescFID_iInterface, usb_intDescFID_endpoint, - usb_intDescFID_extra, usb_intDescFID_extralen; + usb_intDescFID_bInterfaceNumber, usb_intDescFID_bAlternateSetting, + usb_intDescFID_bNumEndpoints, usb_intDescFID_bInterfaceClass, + usb_intDescFID_bInterfaceSubClass, usb_intDescFID_bInterfaceProtocol, + usb_intDescFID_iInterface, usb_intDescFID_endpoint, + usb_intDescFID_extra, usb_intDescFID_extralen; /* usb_endpointDescriptor*/ static jfieldID usb_epDescFID_bLength, usb_epDescFID_bDescriptorType, - usb_epDescFID_bEndpointAddress, usb_epDescFID_bmAttributes, - usb_epDescFID_wMaxPacketSize, usb_epDescFID_bInterval, - usb_epDescFID_bRefresh, usb_epDescFID_bSynchAddress, - usb_epDescFID_extra, usb_epDescFID_extralen; + usb_epDescFID_bEndpointAddress, usb_epDescFID_bmAttributes, + usb_epDescFID_wMaxPacketSize, usb_epDescFID_bInterval, + usb_epDescFID_bRefresh, usb_epDescFID_bSynchAddress, + usb_epDescFID_extra, usb_epDescFID_extralen; /*Libusb_pollfd*/ static jfieldID usb_pollfdFID_fd, usb_pollfdFID_events; #ifdef DO_UNIT_TEST - static struct TestContext - { - JNIEnv *env; - }test_context = { NULL }; + static struct TestContext + { + JNIEnv *env; + }test_context = { NULL }; - # define TEST_CONTEXT() JNIEnv *env = test_context.env + # define TEST_CONTEXT() JNIEnv *env = test_context.env #endif static tLUJ_Instance info = {{0}}; /******************************************************************************************** * - * Library Events + * Library Events * *******************************************************************************************/ -/*! \brief The VM calls JNI_OnLoad when the native library is loaded (for example, through - * System.loadLibrary). +/*! \brief The VM calls JNI_OnLoad when the native library is loaded (for example, through + * System.loadLibrary). * - * \see http://docs.oracle.com/javase/6/docs/technotes/guides/jni/spec/invocation.html#JNI_OnLoad + * \see http://docs.oracle.com/javase/6/docs/technotes/guides/jni/spec/invocation.html#JNI_OnLoad * - * \return The JNI version needed by the native library (use constants as JNI_VERSION_X_Y). + * \return The JNI version needed by the native library (use constants as JNI_VERSION_X_Y). */ jint JNI_OnLoad(JavaVM *vm, void *reserved) { - JNIEnv* env = NULL; + JNIEnv* env = NULL; #ifdef DO_UNIT_TEST - info.jni.onLoadCalled = -1; + info.jni.onLoadCalled = -1; #endif - if (vm->GetEnv(reinterpret_cast(&env), JNI_VERSION_1_1) != JNI_OK) { - return -1; - } + if (vm->GetEnv(reinterpret_cast(&env), JNI_VERSION_1_1) != JNI_OK) { + return -1; + } - ReferencesLoad(&info, env, jniObjects); + ReferencesLoad(&info, env, jniObjects); - return JNI_VERSION_1_1; + return JNI_VERSION_1_1; } #if defined(DO_UNIT_TEST) - TEST_CASE(JNI_OnLoad_test) - { - TEST_CONTEXT(); + TEST_CASE(JNI_OnLoad_test) + { + TEST_CONTEXT(); - CuAssert(tc, "correct initialization", info.jni.onLoadCalled == 0); - info.jni.onLoadCalled=10; + CuAssert(tc, "correct initialization", info.jni.onLoadCalled == 0); + info.jni.onLoadCalled=10; - /* Load the LibusbJava1 class to force the initialization of the library */ - jclass clazz = env->FindClass("ch/ntb/usb/LibusbJava1"); - CuAssert(tc, "ch/ntb/usb/LibusbJava1 loaded", clazz != NULL); + /* Load the LibusbJava1 class to force the initialization of the library */ + jclass clazz = env->FindClass("ch/ntb/usb/LibusbJava1"); + CuAssert(tc, "ch/ntb/usb/LibusbJava1 loaded", clazz != NULL); - CuAssert(tc, "JNI_OnLoad was executed", info.jni.onLoadCalled != 0); - env->DeleteLocalRef(clazz); + CuAssert(tc, "JNI_OnLoad was executed", info.jni.onLoadCalled != 0); + env->DeleteLocalRef(clazz); - /* As garbage collection is not necessarily run after freeing a reference - * and there is no way to force the run of GC, we can't test this here. */ -// CuAssert(tc, "JNI_OnUnload was executed", info.jni.onLoadCalled == 0); - } + /* As garbage collection is not necessarily run after freeing a reference + * and there is no way to force the run of GC, we can't test this here. */ +// CuAssert(tc, "JNI_OnUnload was executed", info.jni.onLoadCalled == 0); + } #endif -/*! \brief The VM calls JNI_OnUnload when the class loader containing the native library is +/*! \brief The VM calls JNI_OnUnload when the class loader containing the native library is * garbage collected. * - * This function can be used to perform cleanup operations. Because this function is - * called in an unknown context (such as from a finalizer), the programmer should be - * conservative on using Java VM services, and refrain from arbitrary Java call-backs. + * This function can be used to perform cleanup operations. Because this function is + * called in an unknown context (such as from a finalizer), the programmer should be + * conservative on using Java VM services, and refrain from arbitrary Java call-backs. * - * \see http://docs.oracle.com/javase/6/docs/technotes/guides/jni/spec/invocation.html#JNI_OnUnload + * \see http://docs.oracle.com/javase/6/docs/technotes/guides/jni/spec/invocation.html#JNI_OnUnload */ void JNI_OnUnload(JavaVM *vm, void *reserved) { - JNIEnv* env = NULL; + JNIEnv* env = NULL; - if (vm->GetEnv(reinterpret_cast(&env), JNI_VERSION_1_1) == JNI_OK) { - ReferencesUnload(&info, env); - } + if (vm->GetEnv(reinterpret_cast(&env), JNI_VERSION_1_1) == JNI_OK) { + ReferencesUnload(&info, env); + } #ifdef DO_UNIT_TEST - info.jni.onLoadCalled = 0; + info.jni.onLoadCalled = 0; #endif } /******************************************************************************************** * - * Methods + * Methods * *******************************************************************************************/ @@ -258,12 +258,12 @@ void JNI_OnUnload(JavaVM *vm, void *reserved) * Signature: (JI)V ********************************************************************************************/ JNIEXPORT void JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1set_1debug( JNIEnv *env, jclass obj, jlong ctx, jint level) { - clearLibusbJavaError(); - libusb_context *context = NULL; - if (ctx) { - context = (libusb_context*) ((unsigned long) ctx); - } - libusb_set_debug(context, level); + clearLibusbJavaError(); + libusb_context *context = NULL; + if (ctx) { + context = (libusb_context*) ((unsigned long) ctx); + } + libusb_set_debug(context, level); } /******************************************************************************************** @@ -272,27 +272,27 @@ JNIEXPORT void JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1set_1debug( JNIEnv *e * Signature: ()J ********************************************************************************************/ JNIEXPORT jlong JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1init( JNIEnv *env, jclass obj) { - int res; - libusb_context *context; - clearLibusbJavaError(); + int res; + libusb_context *context; + clearLibusbJavaError(); - res = libusb_init(&context); + res = libusb_init(&context); - #ifdef DEBUGON - printf("res = %i \n", res); - printf("env = %p\n", env); - printf("context = %p\n", &context); - #endif + #ifdef DEBUGON + printf("res = %i \n", res); + printf("env = %p\n", env); + printf("context = %p\n", &context); + #endif - if (res != 0) - { - ThrowLibusbError(env, res); - return 0; - } - else - { - return (jlong) context; - } + if (res != 0) + { + ThrowLibusbError(env, res); + return 0; + } + else + { + return (jlong) context; + } } /******************************************************************************************** @@ -301,12 +301,12 @@ JNIEXPORT jlong JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1init( JNIEnv *env, j * Signature: (J)V *******************************************************************************************/ JNIEXPORT void JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1exit(JNIEnv *env, jclass obj, jlong ctx) { - libusb_context *context = NULL; - clearLibusbJavaError(); - if (ctx) { - context = (libusb_context*) ((unsigned long) ctx); - } - libusb_exit(context); + libusb_context *context = NULL; + clearLibusbJavaError(); + if (ctx) { + context = (libusb_context*) ((unsigned long) ctx); + } + libusb_exit(context); } /******************************************************************************************** @@ -315,264 +315,264 @@ JNIEXPORT void JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1exit(JNIEnv *env, jcl * Signature: (J)Lch/ntb/usb/Usb_Device; ********************************************************************************************/ JNIEXPORT jobject JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1get_1device_1list( JNIEnv *env, jclass obj, jlong ctx) { - libusb_device **devs; - libusb_context *context = (ctx != 0) ? (libusb_context*)ctx : NULL; - ssize_t cnt; - int res, a, i; - uint8_t c, h, e; + libusb_device **devs; + libusb_context *context = (ctx != 0) ? (libusb_context*)ctx : NULL; + ssize_t cnt; + int res, a, i; + uint8_t c, h, e; - if (ReferencesCheck(&info, env) != 0) return NULL; + if (ReferencesCheck(&info, env) != 0) return NULL; - /* objects*/ - jobject root_usb_devObj, usb_devObj, usb_devObj_next, usb_devObj_prev, - usb_devDescObj, usb_confDescObj, usb_intObj, usb_intDescObj, - usb_epDescObj; + /* objects*/ + jobject root_usb_devObj, usb_devObj, usb_devObj_next, usb_devObj_prev, + usb_devDescObj, usb_confDescObj, usb_intObj, usb_intDescObj, + usb_epDescObj; - jobjectArray usb_confDescObjArray, usb_intObjArray, usb_intDescObjArray, - usb_epDescObjArray; - clearLibusbJavaError(); + jobjectArray usb_confDescObjArray, usb_intObjArray, usb_intDescObjArray, + usb_epDescObjArray; + clearLibusbJavaError(); - libusb_config_descriptor *conf_desc; + libusb_config_descriptor *conf_desc; - cnt = libusb_get_device_list(context, &devs); - if (cnt < 0) { - setLibusbJavaError("libusb_get_device_list: Error on Memory allocation"); - libusb_free_device_list(devs, 1); - return NULL; - } - else if (cnt == 0) { - libusb_free_device_list(devs, 1); - return NULL; - } + cnt = libusb_get_device_list(context, &devs); + if (cnt < 0) { + setLibusbJavaError("libusb_get_device_list: Error on Memory allocation"); + libusb_free_device_list(devs, 1); + return NULL; + } + else if (cnt == 0) { + libusb_free_device_list(devs, 1); + return NULL; + } - usb_devObj = NULL; - usb_devObj_next = NULL; - usb_devObj_prev = NULL; + usb_devObj = NULL; + usb_devObj_next = NULL; + usb_devObj_prev = NULL; - /* create a new object for every device */ - for (i = 0; i < cnt; i++) { + /* create a new object for every device */ + for (i = 0; i < cnt; i++) { #ifdef DEBUGON - printf("libusb_get_device_list: dev %u \n", i); + printf("libusb_get_device_list: dev %u \n", i); #endif - libusb_device_descriptor dev_desc; - res = libusb_get_device_descriptor(devs[i], &dev_desc); + libusb_device_descriptor dev_desc; + res = libusb_get_device_descriptor(devs[i], &dev_desc); - if (res) { - /* this shouldn't happen*/ - printf("\t libusb_get _device_list: dev %u coudn't read Devicedescriptor\n",i); - continue; - } + if (res) { + /* this shouldn't happen*/ + printf("\t libusb_get _device_list: dev %u coudn't read Devicedescriptor\n",i); + continue; + } - if (dev_desc.bLength != 18) { - printf("Corrupt Devicedescriptor dev %d\n", i); - continue; - } + if (dev_desc.bLength != 18) { + printf("Corrupt Devicedescriptor dev %d\n", i); + continue; + } - usb_devObj = Usb_Device_create(env, devs[i], libusb_get_device_address(devs[i])); - if (usb_devObj == NULL) { - setLibusbJavaError("shared library error: Error NewObject (usb_devObj)"); - return NULL; - } + usb_devObj = Usb_Device_create(env, devs[i], libusb_get_device_address(devs[i])); + if (usb_devObj == NULL) { + setLibusbJavaError("shared library error: Error NewObject (usb_devObj)"); + return NULL; + } - /* If it's the root element (no previous elements available) we set the root value */ - if (usb_devObj_prev == NULL) { - root_usb_devObj = usb_devObj; - } - else { - /* If it's not the root element, simply enqueue the newly created device */ - Usb_Device_NextSet(env, usb_devObj_prev, usb_devObj); - } + /* If it's the root element (no previous elements available) we set the root value */ + if (usb_devObj_prev == NULL) { + root_usb_devObj = usb_devObj; + } + else { + /* If it's not the root element, simply enqueue the newly created device */ + Usb_Device_NextSet(env, usb_devObj_prev, usb_devObj); + } - /* Fill the fields of the object */ - Usb_Device_NextSet(env, usb_devObj, usb_devObj_next); - Usb_Device_PrevSet(env, usb_devObj, usb_devObj_prev); + /* Fill the fields of the object */ + Usb_Device_NextSet(env, usb_devObj, usb_devObj_next); + Usb_Device_PrevSet(env, usb_devObj, usb_devObj_prev); - /*device Descriptor*/ - usb_devDescObj = env->NewObject(usb_devDescClazz, usb_devDescMid); - if (!usb_devDescObj) { - setLibusbJavaError("shared library error: Error NewObject (usb_devDescObj)"); - return NULL; - } - env->SetByteField(usb_devDescObj, usb_devDescFID_bLength, dev_desc.bLength); - env->SetByteField(usb_devDescObj, usb_devDescFID_bDescriptorType, dev_desc.bDescriptorType); - env->SetShortField(usb_devDescObj, usb_devDescFID_bcdUSB, dev_desc.bcdUSB); - env->SetByteField(usb_devDescObj, usb_devDescFID_bDeviceClass, dev_desc.bDeviceClass); - env->SetByteField(usb_devDescObj, usb_devDescFID_bDeviceSubClass, dev_desc.bDeviceSubClass); - env->SetByteField(usb_devDescObj, usb_devDescFID_bDeviceProtocol, dev_desc.bDeviceProtocol); - env->SetByteField(usb_devDescObj, usb_devDescFID_bMaxPacketSize0, dev_desc.bMaxPacketSize0); - env->SetShortField(usb_devDescObj, usb_devDescFID_idVendor, dev_desc.idVendor); - env->SetShortField(usb_devDescObj, usb_devDescFID_idProduct, dev_desc.idProduct); - env->SetShortField(usb_devDescObj, usb_devDescFID_bcdDevice, dev_desc.bcdDevice); - env->SetByteField(usb_devDescObj, usb_devDescFID_iManufacturer, dev_desc.iManufacturer); - env->SetByteField(usb_devDescObj, usb_devDescFID_iProduct, dev_desc.iProduct); - env->SetByteField(usb_devDescObj, usb_devDescFID_iSerialNumber, dev_desc.iSerialNumber); - env->SetByteField(usb_devDescObj, usb_devDescFID_bNumConfigurations, dev_desc.bNumConfigurations); - // TODO @NIUE: Why a reference on itself?! And why should we use a field ID from the Usb_Device class - // for an instance of the Descriptor object? - // env->SetObjectField(usb_devDescObj, usb_devFID_descriptor, usb_devDescObj); - Usb_Device_DescriptorSet(env, usb_devObj, usb_devDescObj); + /*device Descriptor*/ + usb_devDescObj = env->NewObject(usb_devDescClazz, usb_devDescMid); + if (!usb_devDescObj) { + setLibusbJavaError("shared library error: Error NewObject (usb_devDescObj)"); + return NULL; + } + env->SetByteField(usb_devDescObj, usb_devDescFID_bLength, dev_desc.bLength); + env->SetByteField(usb_devDescObj, usb_devDescFID_bDescriptorType, dev_desc.bDescriptorType); + env->SetShortField(usb_devDescObj, usb_devDescFID_bcdUSB, dev_desc.bcdUSB); + env->SetByteField(usb_devDescObj, usb_devDescFID_bDeviceClass, dev_desc.bDeviceClass); + env->SetByteField(usb_devDescObj, usb_devDescFID_bDeviceSubClass, dev_desc.bDeviceSubClass); + env->SetByteField(usb_devDescObj, usb_devDescFID_bDeviceProtocol, dev_desc.bDeviceProtocol); + env->SetByteField(usb_devDescObj, usb_devDescFID_bMaxPacketSize0, dev_desc.bMaxPacketSize0); + env->SetShortField(usb_devDescObj, usb_devDescFID_idVendor, dev_desc.idVendor); + env->SetShortField(usb_devDescObj, usb_devDescFID_idProduct, dev_desc.idProduct); + env->SetShortField(usb_devDescObj, usb_devDescFID_bcdDevice, dev_desc.bcdDevice); + env->SetByteField(usb_devDescObj, usb_devDescFID_iManufacturer, dev_desc.iManufacturer); + env->SetByteField(usb_devDescObj, usb_devDescFID_iProduct, dev_desc.iProduct); + env->SetByteField(usb_devDescObj, usb_devDescFID_iSerialNumber, dev_desc.iSerialNumber); + env->SetByteField(usb_devDescObj, usb_devDescFID_bNumConfigurations, dev_desc.bNumConfigurations); + // TODO @NIUE: Why a reference on itself?! And why should we use a field ID from the Usb_Device class + // for an instance of the Descriptor object? + // env->SetObjectField(usb_devDescObj, usb_devFID_descriptor, usb_devDescObj); + Usb_Device_DescriptorSet(env, usb_devObj, usb_devDescObj); - /*configuration descriptor*/ - /*Loop through all of the configurations*/ - usb_confDescObjArray = (jobjectArray) env->NewObjectArray(dev_desc.bNumConfigurations, usb_confDescClazz, NULL); - if (!usb_confDescObjArray) { - setLibusbJavaError("shared library error: Error NewOjectArray"); - return NULL; - } - for (c = 0; c < dev_desc.bNumConfigurations; c++) { + /*configuration descriptor*/ + /*Loop through all of the configurations*/ + usb_confDescObjArray = (jobjectArray) env->NewObjectArray(dev_desc.bNumConfigurations, usb_confDescClazz, NULL); + if (!usb_confDescObjArray) { + setLibusbJavaError("shared library error: Error NewOjectArray"); + return NULL; + } + for (c = 0; c < dev_desc.bNumConfigurations; c++) { #ifdef DEBUGON - printf("\t\tlibusb_get_device_list: configuration %u, Dev: %d \n", c, i); + printf("\t\tlibusb_get_device_list: configuration %u, Dev: %d \n", c, i); #endif - res = libusb_get_config_descriptor(devs[i], c, &conf_desc); - if (res) { - continue; - } - usb_confDescObj = env->NewObject(usb_confDescClazz, usb_confDescMid); - if (!usb_confDescObj) { - setLibusbJavaError("shared library error: Error NewObject (usb_confDescObj)"); - return NULL; - } - env->SetObjectArrayElement(usb_confDescObjArray, c, usb_confDescObj);/*add it to the Array*/ - /*fill the fields*/ - env->SetByteField(usb_confDescObj, usb_confDescFID_bLength, conf_desc->bLength); - env->SetByteField(usb_confDescObj, usb_confDescFID_bDescriptorType, conf_desc->bDescriptorType); - env->SetShortField(usb_confDescObj, usb_confDescFID_wTotalLength, conf_desc->wTotalLength); - env->SetByteField(usb_confDescObj, usb_confDescFID_bNumInterfaces, conf_desc->bNumInterfaces); - env->SetByteField(usb_confDescObj, usb_confDescFID_bConfigurationValue, conf_desc->bConfigurationValue); - env->SetByteField(usb_confDescObj, usb_confDescFID_iConfiguration, conf_desc->iConfiguration); - env->SetByteField(usb_confDescObj, usb_confDescFID_bmAttributes, conf_desc->bmAttributes); - env->SetByteField(usb_confDescObj, usb_confDescFID_MaxPower, conf_desc->MaxPower); - env->SetIntField(usb_confDescObj, usb_confDescFID_extralen, conf_desc->extra_length); - if (conf_desc->extra) { - jbyteArray jbExtraDesc = to_byteArray(env, conf_desc->extra, conf_desc->extra_length); - env->SetObjectField(usb_confDescObj, usb_confDescFID_extra, jbExtraDesc); - } else { - env->SetObjectField(usb_confDescObj, usb_confDescFID_extra, NULL); - } - /*interface*/ - usb_intObjArray = (jobjectArray) env->NewObjectArray(conf_desc->bNumInterfaces, usb_intClazz, NULL); - if (!usb_intObjArray) { - setLibusbJavaError("shared library error: Error NewObjectArray (usb_intObjArray)"); - return NULL; - } - for (h = 0; h < conf_desc->bNumInterfaces; h++) { + res = libusb_get_config_descriptor(devs[i], c, &conf_desc); + if (res) { + continue; + } + usb_confDescObj = env->NewObject(usb_confDescClazz, usb_confDescMid); + if (!usb_confDescObj) { + setLibusbJavaError("shared library error: Error NewObject (usb_confDescObj)"); + return NULL; + } + env->SetObjectArrayElement(usb_confDescObjArray, c, usb_confDescObj);/*add it to the Array*/ + /*fill the fields*/ + env->SetByteField(usb_confDescObj, usb_confDescFID_bLength, conf_desc->bLength); + env->SetByteField(usb_confDescObj, usb_confDescFID_bDescriptorType, conf_desc->bDescriptorType); + env->SetShortField(usb_confDescObj, usb_confDescFID_wTotalLength, conf_desc->wTotalLength); + env->SetByteField(usb_confDescObj, usb_confDescFID_bNumInterfaces, conf_desc->bNumInterfaces); + env->SetByteField(usb_confDescObj, usb_confDescFID_bConfigurationValue, conf_desc->bConfigurationValue); + env->SetByteField(usb_confDescObj, usb_confDescFID_iConfiguration, conf_desc->iConfiguration); + env->SetByteField(usb_confDescObj, usb_confDescFID_bmAttributes, conf_desc->bmAttributes); + env->SetByteField(usb_confDescObj, usb_confDescFID_MaxPower, conf_desc->MaxPower); + env->SetIntField(usb_confDescObj, usb_confDescFID_extralen, conf_desc->extra_length); + if (conf_desc->extra) { + jbyteArray jbExtraDesc = to_byteArray(env, conf_desc->extra, conf_desc->extra_length); + env->SetObjectField(usb_confDescObj, usb_confDescFID_extra, jbExtraDesc); + } else { + env->SetObjectField(usb_confDescObj, usb_confDescFID_extra, NULL); + } + /*interface*/ + usb_intObjArray = (jobjectArray) env->NewObjectArray(conf_desc->bNumInterfaces, usb_intClazz, NULL); + if (!usb_intObjArray) { + setLibusbJavaError("shared library error: Error NewObjectArray (usb_intObjArray)"); + return NULL; + } + for (h = 0; h < conf_desc->bNumInterfaces; h++) { #ifdef DEBUGON - printf("\t\t\tlibusb_get_device_list: interface %u \n", h); + printf("\t\t\tlibusb_get_device_list: interface %u \n", h); #endif - if (conf_desc->interface == NULL) { - /* this shouldn't happen*/ - printf("(*conf_desc)->usb_interface == NULL"); - continue; - } - usb_intObj = env->NewObject(usb_intClazz, usb_intMid); - if (!usb_intObj) { - setLibusbJavaError("shared library error: Error NewObject (usb_intObj)"); - return NULL; - } - env->SetObjectArrayElement(usb_intObjArray, h, usb_intObj); - env->SetIntField(usb_intObj, usb_intFID_num_altsetting, conf_desc->interface[h].num_altsetting); - // interface descriptor - usb_intDescObjArray = (jobjectArray) env->NewObjectArray( conf_desc->interface[h].num_altsetting, usb_intDescClazz, NULL); - if (!usb_intDescObjArray) { - setLibusbJavaError("shared library error: Error NewObjectArray (usb_intDescObjArray)"); - return NULL; - } - for (a = 0; a < conf_desc->interface[h].num_altsetting; a++) { + if (conf_desc->interface == NULL) { + /* this shouldn't happen*/ + printf("(*conf_desc)->usb_interface == NULL"); + continue; + } + usb_intObj = env->NewObject(usb_intClazz, usb_intMid); + if (!usb_intObj) { + setLibusbJavaError("shared library error: Error NewObject (usb_intObj)"); + return NULL; + } + env->SetObjectArrayElement(usb_intObjArray, h, usb_intObj); + env->SetIntField(usb_intObj, usb_intFID_num_altsetting, conf_desc->interface[h].num_altsetting); + // interface descriptor + usb_intDescObjArray = (jobjectArray) env->NewObjectArray( conf_desc->interface[h].num_altsetting, usb_intDescClazz, NULL); + if (!usb_intDescObjArray) { + setLibusbJavaError("shared library error: Error NewObjectArray (usb_intDescObjArray)"); + return NULL; + } + for (a = 0; a < conf_desc->interface[h].num_altsetting; a++) { #ifdef DEBUGON - printf("\t\t\t\tlibusb_get_device_list: interface descriptor %u \n", a); + printf("\t\t\t\tlibusb_get_device_list: interface descriptor %u \n", a); #endif - if (conf_desc->interface[h].altsetting == NULL) { - // this shouldn't happen - printf("LibusbJava: libusb_get_device_list: (*conf_desc)->interface->altsetting == NULL\n"); - continue; - } - usb_intDescObj = env->NewObject(usb_intDescClazz, usb_intDescMid); - if (!usb_intDescObj) { - setLibusbJavaError("shared library error: Error NewObject (usb_intDescObj)"); - return NULL; - } - env->SetObjectArrayElement(usb_intDescObjArray, a, usb_intDescObj); - /*fill fields*/ - env->SetByteField(usb_intDescObj, usb_intDescFID_bLength, conf_desc->interface[h].altsetting[a].bLength); - env->SetByteField(usb_intDescObj, usb_intDescFID_bDescriptorType, conf_desc->interface[h].altsetting[a].bDescriptorType); - env->SetByteField(usb_intDescObj, usb_intDescFID_bInterfaceNumber, conf_desc->interface[h].altsetting[a].bInterfaceNumber); - env->SetByteField(usb_intDescObj, usb_intDescFID_bAlternateSetting, conf_desc->interface[h].altsetting[a].bAlternateSetting); - env->SetByteField(usb_intDescObj, usb_intDescFID_bNumEndpoints, conf_desc->interface[h].altsetting[a].bNumEndpoints); - env->SetByteField(usb_intDescObj, usb_intDescFID_bInterfaceClass, conf_desc->interface[h].altsetting[a].bInterfaceClass); - env->SetByteField(usb_intDescObj, usb_intDescFID_bInterfaceSubClass, conf_desc->interface[h].altsetting[a].bInterfaceSubClass); - env->SetByteField(usb_intDescObj, usb_intDescFID_bInterfaceProtocol, conf_desc->interface[h].altsetting[a].bInterfaceProtocol); - env->SetByteField(usb_intDescObj, usb_intDescFID_iInterface, conf_desc->interface[h].altsetting[a].iInterface); - env->SetIntField(usb_intDescObj, usb_intDescFID_extralen, conf_desc->interface[h].altsetting[a].extra_length); - if (conf_desc->interface[h].altsetting[a].extra) { - jbyteArray jbExtraDesc = to_byteArray(env, conf_desc->interface[h].altsetting[a].extra, conf_desc->interface[h].altsetting[a].extra_length); - env->SetObjectField(usb_intDescObj, usb_intDescFID_extra, jbExtraDesc); - } else { - env->SetObjectField(usb_intDescObj, usb_intDescFID_extra, NULL); - } - /*endpoint descriptor*/ - usb_epDescObjArray = (jobjectArray) env->NewObjectArray( conf_desc->interface[h].altsetting[a].bNumEndpoints, usb_epDescClazz, NULL); - if (!usb_epDescObjArray) { - setLibusbJavaError("shared library error: Error NewObjectArray (usb_epDescObjArray)"); - return NULL; - } - for (e = 0; e < conf_desc->interface[h].altsetting[a].bNumEndpoints; e++) { + if (conf_desc->interface[h].altsetting == NULL) { + // this shouldn't happen + printf("LibusbJava: libusb_get_device_list: (*conf_desc)->interface->altsetting == NULL\n"); + continue; + } + usb_intDescObj = env->NewObject(usb_intDescClazz, usb_intDescMid); + if (!usb_intDescObj) { + setLibusbJavaError("shared library error: Error NewObject (usb_intDescObj)"); + return NULL; + } + env->SetObjectArrayElement(usb_intDescObjArray, a, usb_intDescObj); + /*fill fields*/ + env->SetByteField(usb_intDescObj, usb_intDescFID_bLength, conf_desc->interface[h].altsetting[a].bLength); + env->SetByteField(usb_intDescObj, usb_intDescFID_bDescriptorType, conf_desc->interface[h].altsetting[a].bDescriptorType); + env->SetByteField(usb_intDescObj, usb_intDescFID_bInterfaceNumber, conf_desc->interface[h].altsetting[a].bInterfaceNumber); + env->SetByteField(usb_intDescObj, usb_intDescFID_bAlternateSetting, conf_desc->interface[h].altsetting[a].bAlternateSetting); + env->SetByteField(usb_intDescObj, usb_intDescFID_bNumEndpoints, conf_desc->interface[h].altsetting[a].bNumEndpoints); + env->SetByteField(usb_intDescObj, usb_intDescFID_bInterfaceClass, conf_desc->interface[h].altsetting[a].bInterfaceClass); + env->SetByteField(usb_intDescObj, usb_intDescFID_bInterfaceSubClass, conf_desc->interface[h].altsetting[a].bInterfaceSubClass); + env->SetByteField(usb_intDescObj, usb_intDescFID_bInterfaceProtocol, conf_desc->interface[h].altsetting[a].bInterfaceProtocol); + env->SetByteField(usb_intDescObj, usb_intDescFID_iInterface, conf_desc->interface[h].altsetting[a].iInterface); + env->SetIntField(usb_intDescObj, usb_intDescFID_extralen, conf_desc->interface[h].altsetting[a].extra_length); + if (conf_desc->interface[h].altsetting[a].extra) { + jbyteArray jbExtraDesc = to_byteArray(env, conf_desc->interface[h].altsetting[a].extra, conf_desc->interface[h].altsetting[a].extra_length); + env->SetObjectField(usb_intDescObj, usb_intDescFID_extra, jbExtraDesc); + } else { + env->SetObjectField(usb_intDescObj, usb_intDescFID_extra, NULL); + } + /*endpoint descriptor*/ + usb_epDescObjArray = (jobjectArray) env->NewObjectArray( conf_desc->interface[h].altsetting[a].bNumEndpoints, usb_epDescClazz, NULL); + if (!usb_epDescObjArray) { + setLibusbJavaError("shared library error: Error NewObjectArray (usb_epDescObjArray)"); + return NULL; + } + for (e = 0; e < conf_desc->interface[h].altsetting[a].bNumEndpoints; e++) { #ifdef DEBUGON - printf("\t\t\t\t\tLibusb_get_device_list: endpoint descriptor %u \n",e); + printf("\t\t\t\t\tLibusb_get_device_list: endpoint descriptor %u \n",e); #endif - if (conf_desc->interface[h].altsetting[a].endpoint == NULL) { - printf( "LibusbJava: usb_get_busses: (*conf_desc)->interface->altsetting->endpoint == NULL\n"); - return root_usb_devObj; - } - usb_epDescObj = env->NewObject(usb_epDescClazz, usb_epDescMid); - if (!usb_epDescObj) { - setLibusbJavaError("shared library error: Error NewObject (usb_epDescObj)"); - return NULL; - } - env->SetObjectArrayElement(usb_epDescObjArray, e, usb_epDescObj); - env->SetByteField(usb_epDescObj, usb_epDescFID_bLength, conf_desc->interface[h].altsetting[a].endpoint[e].bLength); - env->SetByteField(usb_epDescObj, usb_epDescFID_bDescriptorType, conf_desc->interface[h].altsetting[a].endpoint[e].bDescriptorType); - env->SetByteField(usb_epDescObj, usb_epDescFID_bEndpointAddress, conf_desc->interface[h].altsetting[a].endpoint[e].bEndpointAddress); - env->SetByteField(usb_epDescObj, usb_epDescFID_bmAttributes, conf_desc->interface[h].altsetting[a].endpoint[e].bmAttributes); - env->SetShortField(usb_epDescObj, usb_epDescFID_wMaxPacketSize, conf_desc->interface[h].altsetting[a].endpoint[e].wMaxPacketSize); - env->SetByteField(usb_epDescObj, usb_epDescFID_bInterval, conf_desc->interface[h].altsetting[a].endpoint[e].bInterval); - env->SetByteField(usb_epDescObj, usb_epDescFID_bRefresh, conf_desc->interface[h].altsetting[a].endpoint[e].bRefresh); - env->SetByteField(usb_epDescObj, usb_epDescFID_bSynchAddress, conf_desc->interface[h].altsetting[a].endpoint[e].bSynchAddress); - env->SetIntField(usb_epDescObj, usb_epDescFID_extralen, conf_desc->interface[h].altsetting[a].endpoint[e].extra_length); - if (conf_desc->interface[h].altsetting[a].endpoint[e].extra) { - jbyteArray jbExtraDesc = to_byteArray(env, conf_desc->interface[h].altsetting[a].endpoint[e].extra, conf_desc->interface[h].altsetting[a].endpoint[e].extra_length); - env->SetObjectField(usb_epDescObj, usb_epDescFID_extra, jbExtraDesc); - } else { - env->SetObjectField(usb_epDescObj, usb_epDescFID_extra, NULL); - } - } - env->SetObjectField(usb_intDescObj, usb_intDescFID_endpoint, usb_epDescObjArray); - } - env->SetObjectField(usb_intObj, usb_intFID_altsetting, usb_intDescObjArray); - } - env->SetObjectField(usb_confDescObj, usb_confDescFID_interface_, usb_intObjArray); - libusb_free_config_descriptor(conf_desc); - } + if (conf_desc->interface[h].altsetting[a].endpoint == NULL) { + printf( "LibusbJava: usb_get_busses: (*conf_desc)->interface->altsetting->endpoint == NULL\n"); + return root_usb_devObj; + } + usb_epDescObj = env->NewObject(usb_epDescClazz, usb_epDescMid); + if (!usb_epDescObj) { + setLibusbJavaError("shared library error: Error NewObject (usb_epDescObj)"); + return NULL; + } + env->SetObjectArrayElement(usb_epDescObjArray, e, usb_epDescObj); + env->SetByteField(usb_epDescObj, usb_epDescFID_bLength, conf_desc->interface[h].altsetting[a].endpoint[e].bLength); + env->SetByteField(usb_epDescObj, usb_epDescFID_bDescriptorType, conf_desc->interface[h].altsetting[a].endpoint[e].bDescriptorType); + env->SetByteField(usb_epDescObj, usb_epDescFID_bEndpointAddress, conf_desc->interface[h].altsetting[a].endpoint[e].bEndpointAddress); + env->SetByteField(usb_epDescObj, usb_epDescFID_bmAttributes, conf_desc->interface[h].altsetting[a].endpoint[e].bmAttributes); + env->SetShortField(usb_epDescObj, usb_epDescFID_wMaxPacketSize, conf_desc->interface[h].altsetting[a].endpoint[e].wMaxPacketSize); + env->SetByteField(usb_epDescObj, usb_epDescFID_bInterval, conf_desc->interface[h].altsetting[a].endpoint[e].bInterval); + env->SetByteField(usb_epDescObj, usb_epDescFID_bRefresh, conf_desc->interface[h].altsetting[a].endpoint[e].bRefresh); + env->SetByteField(usb_epDescObj, usb_epDescFID_bSynchAddress, conf_desc->interface[h].altsetting[a].endpoint[e].bSynchAddress); + env->SetIntField(usb_epDescObj, usb_epDescFID_extralen, conf_desc->interface[h].altsetting[a].endpoint[e].extra_length); + if (conf_desc->interface[h].altsetting[a].endpoint[e].extra) { + jbyteArray jbExtraDesc = to_byteArray(env, conf_desc->interface[h].altsetting[a].endpoint[e].extra, conf_desc->interface[h].altsetting[a].endpoint[e].extra_length); + env->SetObjectField(usb_epDescObj, usb_epDescFID_extra, jbExtraDesc); + } else { + env->SetObjectField(usb_epDescObj, usb_epDescFID_extra, NULL); + } + } + env->SetObjectField(usb_intDescObj, usb_intDescFID_endpoint, usb_epDescObjArray); + } + env->SetObjectField(usb_intObj, usb_intFID_altsetting, usb_intDescObjArray); + } + env->SetObjectField(usb_confDescObj, usb_confDescFID_interface_, usb_intObjArray); + libusb_free_config_descriptor(conf_desc); + } - if (res) { - Usb_Device_HandleSet(env, usb_devObj, NULL); - continue; - } - Usb_Device_ConfigSet(env, usb_devObj, usb_confDescObjArray); - usb_devObj_prev = usb_devObj; - } + if (res) { + Usb_Device_HandleSet(env, usb_devObj, NULL); + continue; + } + Usb_Device_ConfigSet(env, usb_devObj, usb_confDescObjArray); + usb_devObj_prev = usb_devObj; + } - //Eliminate empty last device - Usb_Device_NextSet(env, usb_devObj_prev, NULL); + //Eliminate empty last device + Usb_Device_NextSet(env, usb_devObj_prev, NULL); -// free(dev_desc); - libusb_free_device_list(devs, 0); +// free(dev_desc); + libusb_free_device_list(devs, 0); #ifdef DEBUGON - printf("libusb_get_device_list: done\n"); + printf("libusb_get_device_list: done\n"); #endif - return root_usb_devObj; + return root_usb_devObj; } /******************************************************************************************** @@ -581,17 +581,17 @@ JNIEXPORT jobject JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1get_1device_1list( * Signature: (Lch/ntb/usb/Usb_Device;)S ********************************************************************************************/ JNIEXPORT jshort JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1get_1bus_1number( JNIEnv *env, jclass obj, jobject dev) { - clearLibusbJavaError(); + clearLibusbJavaError(); - if (ReferencesCheck(&info, env) != 0) return 0; + if (ReferencesCheck(&info, env) != 0) return 0; - libusb_device *libusb_dev = Usb_Device_HandleGet(env, dev); - if (libusb_dev == NULL) { - ThrowLibusbError(env, ERROR_JAVA_ILEGAL_DEVICE_HANDLE); - return 0; - } + libusb_device *libusb_dev = Usb_Device_HandleGet(env, dev); + if (libusb_dev == NULL) { + ThrowLibusbError(env, ERROR_JAVA_ILEGAL_DEVICE_HANDLE); + return 0; + } - return libusb_get_bus_number(libusb_dev); + return libusb_get_bus_number(libusb_dev); } /******************************************************************************************** @@ -601,17 +601,17 @@ JNIEXPORT jshort JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1get_1bus_1number( J ********************************************************************************************/ JNIEXPORT jint JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1get_1max_1iso_1packet_1size( JNIEnv *env, jclass obj, jobject dev, jshort epAddr) { - clearLibusbJavaError(); + clearLibusbJavaError(); - if (ReferencesCheck(&info, env) != 0) return 0; + if (ReferencesCheck(&info, env) != 0) return 0; - libusb_device *libusb_dev = Usb_Device_HandleGet(env, dev); - if (libusb_dev == NULL) { - ThrowLibusbError(env, ERROR_JAVA_ILEGAL_DEVICE_HANDLE); - return 0; - } + libusb_device *libusb_dev = Usb_Device_HandleGet(env, dev); + if (libusb_dev == NULL) { + ThrowLibusbError(env, ERROR_JAVA_ILEGAL_DEVICE_HANDLE); + return 0; + } - return libusb_get_max_iso_packet_size(libusb_dev, epAddr); + return libusb_get_max_iso_packet_size(libusb_dev, epAddr); } /******************************************************************************************** @@ -620,18 +620,18 @@ JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1get_1max_1iso_1packet_1size( JNIEnv * Signature: (Lch/ntb/usb/Usb_Device;)Lch/ntb/usb/Usb_Device; ********************************************************************************************/ JNIEXPORT jobject JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1ref_1device(JNIEnv *env, jclass obj, jobject dev) { - clearLibusbJavaError(); + clearLibusbJavaError(); - if (ReferencesCheck(&info, env) != 0) return NULL; + if (ReferencesCheck(&info, env) != 0) return NULL; - libusb_device *libusb_dev = Usb_Device_HandleGet(env, dev); - if (libusb_dev == NULL) { - ThrowLibusbError(env, ERROR_JAVA_ILEGAL_DEVICE_HANDLE); - return NULL; - } + libusb_device *libusb_dev = Usb_Device_HandleGet(env, dev); + if (libusb_dev == NULL) { + ThrowLibusbError(env, ERROR_JAVA_ILEGAL_DEVICE_HANDLE); + return NULL; + } - libusb_ref_device(libusb_dev); - return dev; + libusb_ref_device(libusb_dev); + return dev; } /******************************************************************************************** @@ -640,15 +640,15 @@ JNIEXPORT jobject JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1ref_1device(JNIEnv * Signature: (Lch/ntb/usb/Usb_Device;)V ********************************************************************************************/ JNIEXPORT void JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1unref_1device(JNIEnv *env, jclass obj, jobject dev) { - clearLibusbJavaError(); - if (ReferencesCheck(&info, env) != 0) return; - libusb_device *libusb_dev = Usb_Device_HandleGet(env, dev); - if (libusb_dev == NULL) { - ThrowLibusbError(env, ERROR_JAVA_ILEGAL_DEVICE_HANDLE); - return; - } + clearLibusbJavaError(); + if (ReferencesCheck(&info, env) != 0) return; + libusb_device *libusb_dev = Usb_Device_HandleGet(env, dev); + if (libusb_dev == NULL) { + ThrowLibusbError(env, ERROR_JAVA_ILEGAL_DEVICE_HANDLE); + return; + } - libusb_unref_device(libusb_dev); + libusb_unref_device(libusb_dev); } /******************************************************************************************** @@ -657,24 +657,24 @@ JNIEXPORT void JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1unref_1device(JNIEnv * Signature: (Lch/ntb/usb/Usb_Device;)J ********************************************************************************************/ JNIEXPORT jlong JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1open( JNIEnv *env, jclass obj, jobject dev) { - clearLibusbJavaError(); - libusb_device_handle *handle = NULL; - if (ReferencesCheck(&info, env) != 0) return 0; - libusb_device *libusb_dev = Usb_Device_HandleGet(env, dev); - if (libusb_dev == NULL) { - ThrowLibusbError(env, ERROR_JAVA_ILEGAL_DEVICE_HANDLE); - return 0; - } + clearLibusbJavaError(); + libusb_device_handle *handle = NULL; + if (ReferencesCheck(&info, env) != 0) return 0; + libusb_device *libusb_dev = Usb_Device_HandleGet(env, dev); + if (libusb_dev == NULL) { + ThrowLibusbError(env, ERROR_JAVA_ILEGAL_DEVICE_HANDLE); + return 0; + } - int res = libusb_open(libusb_dev, &handle); + int res = libusb_open(libusb_dev, &handle); - if(res != 0) - { - ThrowLibusbError(env, res); - handle = NULL; - } + if(res != 0) + { + ThrowLibusbError(env, res); + handle = NULL; + } - return (jlong)handle; + return (jlong)handle; } /******************************************************************************************** @@ -684,8 +684,8 @@ JNIEXPORT jlong JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1open( JNIEnv *env, j ********************************************************************************************/ JNIEXPORT jlong JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1open_1device_1with_1vid_1pid(JNIEnv *env, jclass obj, jlong ctx, jint vendor_id, jint product_id) { - clearLibusbJavaError(); - return (jlong) libusb_open_device_with_vid_pid((libusb_context*) (unsigned long) ctx, vendor_id, product_id); + clearLibusbJavaError(); + return (jlong) libusb_open_device_with_vid_pid((libusb_context*) (unsigned long) ctx, vendor_id, product_id); } /******************************************************************************************** @@ -694,8 +694,8 @@ JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1open_1device_1with_1vid_1pid(JNIEnv * Signature: (J)V ********************************************************************************************/ JNIEXPORT void JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1close(JNIEnv *env, jclass obj, jlong dev_handle) { - clearLibusbJavaError(); - libusb_close((libusb_device_handle*) (unsigned long) dev_handle); + clearLibusbJavaError(); + libusb_close((libusb_device_handle*) (unsigned long) dev_handle); } /******************************************************************************************** @@ -704,210 +704,210 @@ JNIEXPORT void JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1close(JNIEnv *env, jc * Signature: (J)Lch/ntb/usb/Usb_Device; ********************************************************************************************/ JNIEXPORT jobject JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1get_1device(JNIEnv *env, jclass obj, jlong handle) { - int res, a; - uint8_t c, h, e; - clearLibusbJavaError(); - if (ReferencesCheck(&info, env) != 0) return NULL; + int res, a; + uint8_t c, h, e; + clearLibusbJavaError(); + if (ReferencesCheck(&info, env) != 0) return NULL; - libusb_config_descriptor *conf_desc; - struct libusb_device_descriptor dev_desc; + libusb_config_descriptor *conf_desc; + struct libusb_device_descriptor dev_desc; - libusb_device *lib_dev = libusb_get_device((libusb_device_handle*) (unsigned long) handle); + libusb_device *lib_dev = libusb_get_device((libusb_device_handle*) (unsigned long) handle); - /* objects*/ - jobject usb_devObj, usb_devDescObj, usb_confDescObj, usb_intObj, usb_intDescObj, usb_epDescObj; - jobjectArray usb_confDescObjArray, usb_intObjArray, usb_intDescObjArray, usb_epDescObjArray; + /* objects*/ + jobject usb_devObj, usb_devDescObj, usb_confDescObj, usb_intObj, usb_intDescObj, usb_epDescObj; + jobjectArray usb_confDescObjArray, usb_intObjArray, usb_intDescObjArray, usb_epDescObjArray; - /* create a new object for device*/ - usb_devObj = Usb_Device_create(env, lib_dev, libusb_get_device_address(lib_dev)); - if (usb_devObj == NULL) { - setLibusbJavaError("shared library error: Could not create new Usb_Device!"); - return NULL; - } + /* create a new object for device*/ + usb_devObj = Usb_Device_create(env, lib_dev, libusb_get_device_address(lib_dev)); + if (usb_devObj == NULL) { + setLibusbJavaError("shared library error: Could not create new Usb_Device!"); + return NULL; + } - /*fill the fields of the object*/ - Usb_Device_NextSet(env, usb_devObj, NULL); - Usb_Device_PrevSet(env, usb_devObj, NULL); + /*fill the fields of the object*/ + Usb_Device_NextSet(env, usb_devObj, NULL); + Usb_Device_PrevSet(env, usb_devObj, NULL); - /*device Descriptor*/ - libusb_get_device_descriptor(lib_dev, &dev_desc); - usb_devDescObj = env->NewObject(usb_devDescClazz, usb_devDescMid); - if (!usb_devDescObj) { - setLibusbJavaError("shared library error: Error NewObject (usb_devDescObj)"); - return NULL; - } + /*device Descriptor*/ + libusb_get_device_descriptor(lib_dev, &dev_desc); + usb_devDescObj = env->NewObject(usb_devDescClazz, usb_devDescMid); + if (!usb_devDescObj) { + setLibusbJavaError("shared library error: Error NewObject (usb_devDescObj)"); + return NULL; + } - env->SetByteField(usb_devDescObj, usb_devDescFID_bLength, dev_desc.bLength); - env->SetByteField(usb_devDescObj, usb_devDescFID_bDescriptorType, dev_desc.bDescriptorType); - env->SetShortField(usb_devDescObj, usb_devDescFID_bcdUSB, dev_desc.bcdUSB); - env->SetByteField(usb_devDescObj, usb_devDescFID_bDeviceClass, dev_desc.bDeviceClass); - env->SetByteField(usb_devDescObj, usb_devDescFID_bDeviceSubClass, dev_desc.bDeviceSubClass); - env->SetByteField(usb_devDescObj, usb_devDescFID_bDeviceProtocol, dev_desc.bDeviceProtocol); - env->SetByteField(usb_devDescObj, usb_devDescFID_bMaxPacketSize0, dev_desc.bMaxPacketSize0); - env->SetShortField(usb_devDescObj, usb_devDescFID_idVendor, dev_desc.idVendor); - env->SetShortField(usb_devDescObj, usb_devDescFID_idProduct, dev_desc.idProduct); - env->SetShortField(usb_devDescObj, usb_devDescFID_bcdDevice, dev_desc.bcdDevice); - env->SetByteField(usb_devDescObj, usb_devDescFID_iManufacturer, dev_desc.iManufacturer); - env->SetByteField(usb_devDescObj, usb_devDescFID_iProduct, dev_desc.iProduct); - env->SetByteField(usb_devDescObj, usb_devDescFID_iSerialNumber, dev_desc.iSerialNumber); - env->SetByteField(usb_devDescObj, usb_devDescFID_bNumConfigurations, dev_desc.bNumConfigurations); - // TODO @NIUE: Why a reference on itself?! And why should we use a field ID from the Usb_Device class - // for an instance of the Descriptor object? - // env->SetObjectField(usb_devDescObj, usb_devFID_descriptor, usb_devDescObj); - Usb_Device_DescriptorSet(env, usb_devObj, usb_devDescObj); + env->SetByteField(usb_devDescObj, usb_devDescFID_bLength, dev_desc.bLength); + env->SetByteField(usb_devDescObj, usb_devDescFID_bDescriptorType, dev_desc.bDescriptorType); + env->SetShortField(usb_devDescObj, usb_devDescFID_bcdUSB, dev_desc.bcdUSB); + env->SetByteField(usb_devDescObj, usb_devDescFID_bDeviceClass, dev_desc.bDeviceClass); + env->SetByteField(usb_devDescObj, usb_devDescFID_bDeviceSubClass, dev_desc.bDeviceSubClass); + env->SetByteField(usb_devDescObj, usb_devDescFID_bDeviceProtocol, dev_desc.bDeviceProtocol); + env->SetByteField(usb_devDescObj, usb_devDescFID_bMaxPacketSize0, dev_desc.bMaxPacketSize0); + env->SetShortField(usb_devDescObj, usb_devDescFID_idVendor, dev_desc.idVendor); + env->SetShortField(usb_devDescObj, usb_devDescFID_idProduct, dev_desc.idProduct); + env->SetShortField(usb_devDescObj, usb_devDescFID_bcdDevice, dev_desc.bcdDevice); + env->SetByteField(usb_devDescObj, usb_devDescFID_iManufacturer, dev_desc.iManufacturer); + env->SetByteField(usb_devDescObj, usb_devDescFID_iProduct, dev_desc.iProduct); + env->SetByteField(usb_devDescObj, usb_devDescFID_iSerialNumber, dev_desc.iSerialNumber); + env->SetByteField(usb_devDescObj, usb_devDescFID_bNumConfigurations, dev_desc.bNumConfigurations); + // TODO @NIUE: Why a reference on itself?! And why should we use a field ID from the Usb_Device class + // for an instance of the Descriptor object? + // env->SetObjectField(usb_devDescObj, usb_devFID_descriptor, usb_devDescObj); + Usb_Device_DescriptorSet(env, usb_devObj, usb_devDescObj); - /*configuration descriptor*/ - /*Loop through all of the configurations*/ - usb_confDescObjArray = (jobjectArray) env->NewObjectArray( - dev_desc.bNumConfigurations, usb_confDescClazz, NULL); - if (!usb_confDescObjArray) { - setLibusbJavaError("shared library error: Error NewOjectArray"); - return NULL; - } - for (c = 0; c < dev_desc.bNumConfigurations; c++) { + /*configuration descriptor*/ + /*Loop through all of the configurations*/ + usb_confDescObjArray = (jobjectArray) env->NewObjectArray( + dev_desc.bNumConfigurations, usb_confDescClazz, NULL); + if (!usb_confDescObjArray) { + setLibusbJavaError("shared library error: Error NewOjectArray"); + return NULL; + } + for (c = 0; c < dev_desc.bNumConfigurations; c++) { #ifdef DEBUGON - printf("\t\tlibusb_get_device: configuration %u \n", c); + printf("\t\tlibusb_get_device: configuration %u \n", c); #endif - res = libusb_get_config_descriptor(lib_dev, c, &conf_desc); - if (res) { - setLibusbJavaError("shared library error: read conf_desc failed"); - return usb_devObj; - } + res = libusb_get_config_descriptor(lib_dev, c, &conf_desc); + if (res) { + setLibusbJavaError("shared library error: read conf_desc failed"); + return usb_devObj; + } - usb_confDescObj = env->NewObject(usb_confDescClazz, usb_confDescMid); - if (!usb_confDescObj) { - setLibusbJavaError("shared library error: Error NewObject (usb_confDescObj)"); - return NULL; - } - env->SetObjectArrayElement(usb_confDescObjArray, c, usb_confDescObj);/*add it to the Array*/ - /*fill the fields*/ - env->SetByteField(usb_confDescObj, usb_confDescFID_bLength, conf_desc->bLength); - env->SetByteField(usb_confDescObj, usb_confDescFID_bDescriptorType, conf_desc->bDescriptorType); - env->SetShortField(usb_confDescObj, usb_confDescFID_wTotalLength, conf_desc->wTotalLength); - env->SetByteField(usb_confDescObj, usb_confDescFID_bNumInterfaces, conf_desc->bNumInterfaces); - env->SetByteField(usb_confDescObj, usb_confDescFID_bConfigurationValue, conf_desc->bConfigurationValue); - env->SetByteField(usb_confDescObj, usb_confDescFID_iConfiguration, conf_desc->iConfiguration); - env->SetByteField(usb_confDescObj, usb_confDescFID_bmAttributes, conf_desc->bmAttributes); - env->SetByteField(usb_confDescObj, usb_confDescFID_MaxPower, conf_desc->MaxPower); - env->SetIntField(usb_confDescObj, usb_confDescFID_extralen, conf_desc->extra_length); - if (conf_desc->extra) { - jbyteArray jbExtraDesc = to_byteArray(env, conf_desc->extra, conf_desc->extra_length); - env->SetObjectField(usb_confDescObj, usb_confDescFID_extra, jbExtraDesc); - } else { - env->SetObjectField(usb_confDescObj, usb_confDescFID_extra, NULL); - } - /*interface*/ - usb_intObjArray = (jobjectArray) env->NewObjectArray(conf_desc->bNumInterfaces, usb_intClazz, NULL); - if (!usb_intObjArray) { - setLibusbJavaError("shared library error: Error NewObjectArray (usb_intObjArray)"); - return NULL; - } - for (h = 0; h < conf_desc->bNumInterfaces; h++) { + usb_confDescObj = env->NewObject(usb_confDescClazz, usb_confDescMid); + if (!usb_confDescObj) { + setLibusbJavaError("shared library error: Error NewObject (usb_confDescObj)"); + return NULL; + } + env->SetObjectArrayElement(usb_confDescObjArray, c, usb_confDescObj);/*add it to the Array*/ + /*fill the fields*/ + env->SetByteField(usb_confDescObj, usb_confDescFID_bLength, conf_desc->bLength); + env->SetByteField(usb_confDescObj, usb_confDescFID_bDescriptorType, conf_desc->bDescriptorType); + env->SetShortField(usb_confDescObj, usb_confDescFID_wTotalLength, conf_desc->wTotalLength); + env->SetByteField(usb_confDescObj, usb_confDescFID_bNumInterfaces, conf_desc->bNumInterfaces); + env->SetByteField(usb_confDescObj, usb_confDescFID_bConfigurationValue, conf_desc->bConfigurationValue); + env->SetByteField(usb_confDescObj, usb_confDescFID_iConfiguration, conf_desc->iConfiguration); + env->SetByteField(usb_confDescObj, usb_confDescFID_bmAttributes, conf_desc->bmAttributes); + env->SetByteField(usb_confDescObj, usb_confDescFID_MaxPower, conf_desc->MaxPower); + env->SetIntField(usb_confDescObj, usb_confDescFID_extralen, conf_desc->extra_length); + if (conf_desc->extra) { + jbyteArray jbExtraDesc = to_byteArray(env, conf_desc->extra, conf_desc->extra_length); + env->SetObjectField(usb_confDescObj, usb_confDescFID_extra, jbExtraDesc); + } else { + env->SetObjectField(usb_confDescObj, usb_confDescFID_extra, NULL); + } + /*interface*/ + usb_intObjArray = (jobjectArray) env->NewObjectArray(conf_desc->bNumInterfaces, usb_intClazz, NULL); + if (!usb_intObjArray) { + setLibusbJavaError("shared library error: Error NewObjectArray (usb_intObjArray)"); + return NULL; + } + for (h = 0; h < conf_desc->bNumInterfaces; h++) { #ifdef DEBUGON - printf("\t\t\tlibusb_get_device: interface %u \n", h); + printf("\t\t\tlibusb_get_device: interface %u \n", h); #endif - if (conf_desc->interface == NULL) { - // this shouldn't happen - printf("(*conf_desc)->usb_interface == NULL"); - continue; - } - usb_intObj = env->NewObject(usb_intClazz, usb_intMid); - if (!usb_intObj) { - setLibusbJavaError("shared library error: Error NewObject (usb_intObj)"); - return NULL; - } - env->SetObjectArrayElement(usb_intObjArray, h, usb_intObj); - env->SetIntField(usb_intObj, usb_intFID_num_altsetting, conf_desc->interface[h].num_altsetting); - // interface descriptor - usb_intDescObjArray = (jobjectArray) env->NewObjectArray(conf_desc->interface[h].num_altsetting, usb_intDescClazz, NULL); - if (!usb_intDescObjArray) { - setLibusbJavaError("shared library error: Error NewObjectArray (usb_intDescObjArray)"); - return NULL; - } - for (a = 0; a < conf_desc->interface[h].num_altsetting; a++) { + if (conf_desc->interface == NULL) { + // this shouldn't happen + printf("(*conf_desc)->usb_interface == NULL"); + continue; + } + usb_intObj = env->NewObject(usb_intClazz, usb_intMid); + if (!usb_intObj) { + setLibusbJavaError("shared library error: Error NewObject (usb_intObj)"); + return NULL; + } + env->SetObjectArrayElement(usb_intObjArray, h, usb_intObj); + env->SetIntField(usb_intObj, usb_intFID_num_altsetting, conf_desc->interface[h].num_altsetting); + // interface descriptor + usb_intDescObjArray = (jobjectArray) env->NewObjectArray(conf_desc->interface[h].num_altsetting, usb_intDescClazz, NULL); + if (!usb_intDescObjArray) { + setLibusbJavaError("shared library error: Error NewObjectArray (usb_intDescObjArray)"); + return NULL; + } + for (a = 0; a < conf_desc->interface[h].num_altsetting; a++) { #ifdef DEBUGON - printf("\t\t\t\tlibusb_get_device: interface descriptor %u \n", a); + printf("\t\t\t\tlibusb_get_device: interface descriptor %u \n", a); #endif - if (conf_desc->interface[h].altsetting == NULL) { - // this shouldn't happen - printf("LibusbJava: libusb_get_device_list: altsetting == NULL\n"); - continue; - } - usb_intDescObj = env->NewObject(usb_intDescClazz, usb_intDescMid); - if (!usb_intDescObj) { - setLibusbJavaError("shared library error: Error NewObject (usb_intDescObj)"); - return NULL; - } - env->SetObjectArrayElement(usb_intDescObjArray, a, usb_intDescObj); - /*fill fields*/ - env->SetByteField(usb_intDescObj, usb_intDescFID_bLength, conf_desc->interface[h].altsetting[a].bLength); - env->SetByteField(usb_intDescObj, usb_intDescFID_bDescriptorType, conf_desc->interface[h].altsetting[a].bDescriptorType); - env->SetByteField(usb_intDescObj, usb_intDescFID_bInterfaceNumber, conf_desc->interface[h].altsetting[a].bInterfaceNumber); - env->SetByteField(usb_intDescObj, usb_intDescFID_bAlternateSetting, conf_desc->interface[h].altsetting[a].bAlternateSetting); - env->SetByteField(usb_intDescObj, usb_intDescFID_bNumEndpoints, conf_desc->interface[h].altsetting[a].bNumEndpoints); - env->SetByteField(usb_intDescObj, usb_intDescFID_bInterfaceClass, conf_desc->interface[h].altsetting[a].bInterfaceClass); - env->SetByteField(usb_intDescObj, usb_intDescFID_bInterfaceSubClass, conf_desc->interface[h].altsetting[a].bInterfaceSubClass); - env->SetByteField(usb_intDescObj, usb_intDescFID_bInterfaceProtocol, conf_desc->interface[h].altsetting[a].bInterfaceProtocol); - env->SetByteField(usb_intDescObj, usb_intDescFID_iInterface, conf_desc->interface[h].altsetting[a].iInterface); - env->SetIntField(usb_intDescObj, usb_intDescFID_extralen, conf_desc->interface[h].altsetting[a].extra_length); - if (conf_desc->interface[h].altsetting[a].extra) { - jbyteArray jbExtraDesc = to_byteArray(env, conf_desc->interface[h].altsetting[a].extra, conf_desc->interface[h].altsetting[a].extra_length); - env->SetObjectField(usb_intDescObj, usb_intDescFID_extra, jbExtraDesc); - } else { - env->SetObjectField(usb_intDescObj, usb_intDescFID_extra, NULL); - } - /*endpoint descriptor*/ - usb_epDescObjArray = (jobjectArray) env->NewObjectArray(conf_desc->interface[h].altsetting[a].bNumEndpoints, usb_epDescClazz, NULL); - if (!usb_epDescObjArray) { - setLibusbJavaError("shared library error: Error NewObjectArray (usb_epDescObjArray)"); - return NULL; - } - for (e = 0; e < conf_desc->interface[h].altsetting[a].bNumEndpoints; e++) { + if (conf_desc->interface[h].altsetting == NULL) { + // this shouldn't happen + printf("LibusbJava: libusb_get_device_list: altsetting == NULL\n"); + continue; + } + usb_intDescObj = env->NewObject(usb_intDescClazz, usb_intDescMid); + if (!usb_intDescObj) { + setLibusbJavaError("shared library error: Error NewObject (usb_intDescObj)"); + return NULL; + } + env->SetObjectArrayElement(usb_intDescObjArray, a, usb_intDescObj); + /*fill fields*/ + env->SetByteField(usb_intDescObj, usb_intDescFID_bLength, conf_desc->interface[h].altsetting[a].bLength); + env->SetByteField(usb_intDescObj, usb_intDescFID_bDescriptorType, conf_desc->interface[h].altsetting[a].bDescriptorType); + env->SetByteField(usb_intDescObj, usb_intDescFID_bInterfaceNumber, conf_desc->interface[h].altsetting[a].bInterfaceNumber); + env->SetByteField(usb_intDescObj, usb_intDescFID_bAlternateSetting, conf_desc->interface[h].altsetting[a].bAlternateSetting); + env->SetByteField(usb_intDescObj, usb_intDescFID_bNumEndpoints, conf_desc->interface[h].altsetting[a].bNumEndpoints); + env->SetByteField(usb_intDescObj, usb_intDescFID_bInterfaceClass, conf_desc->interface[h].altsetting[a].bInterfaceClass); + env->SetByteField(usb_intDescObj, usb_intDescFID_bInterfaceSubClass, conf_desc->interface[h].altsetting[a].bInterfaceSubClass); + env->SetByteField(usb_intDescObj, usb_intDescFID_bInterfaceProtocol, conf_desc->interface[h].altsetting[a].bInterfaceProtocol); + env->SetByteField(usb_intDescObj, usb_intDescFID_iInterface, conf_desc->interface[h].altsetting[a].iInterface); + env->SetIntField(usb_intDescObj, usb_intDescFID_extralen, conf_desc->interface[h].altsetting[a].extra_length); + if (conf_desc->interface[h].altsetting[a].extra) { + jbyteArray jbExtraDesc = to_byteArray(env, conf_desc->interface[h].altsetting[a].extra, conf_desc->interface[h].altsetting[a].extra_length); + env->SetObjectField(usb_intDescObj, usb_intDescFID_extra, jbExtraDesc); + } else { + env->SetObjectField(usb_intDescObj, usb_intDescFID_extra, NULL); + } + /*endpoint descriptor*/ + usb_epDescObjArray = (jobjectArray) env->NewObjectArray(conf_desc->interface[h].altsetting[a].bNumEndpoints, usb_epDescClazz, NULL); + if (!usb_epDescObjArray) { + setLibusbJavaError("shared library error: Error NewObjectArray (usb_epDescObjArray)"); + return NULL; + } + for (e = 0; e < conf_desc->interface[h].altsetting[a].bNumEndpoints; e++) { #ifdef DEBUGON - printf("\t\t\t\t\tLibusb_get_device: endpoint descriptor %u \n", e); + printf("\t\t\t\t\tLibusb_get_device: endpoint descriptor %u \n", e); #endif - if (conf_desc->interface[h].altsetting[a].endpoint == NULL) { - printf("LibusbJava: usb_get_busses: endpoint == NULL\n"); - return usb_devObj; - } - usb_epDescObj = env->NewObject(usb_epDescClazz, usb_epDescMid); - if (!usb_epDescObj) { - setLibusbJavaError("shared library error: Error NewObject (usb_epDescObj)"); - return NULL; - } - env->SetObjectArrayElement(usb_epDescObjArray, e, usb_epDescObj); - env->SetByteField(usb_epDescObj, usb_epDescFID_bLength, conf_desc->interface[h].altsetting[a].endpoint[e].bLength); - env->SetByteField(usb_epDescObj, usb_epDescFID_bDescriptorType, conf_desc->interface[h].altsetting[a].endpoint[e].bDescriptorType); - env->SetByteField(usb_epDescObj, usb_epDescFID_bEndpointAddress, conf_desc->interface[h].altsetting[a].endpoint[e].bEndpointAddress); - env->SetByteField(usb_epDescObj, usb_epDescFID_bmAttributes, conf_desc->interface[h].altsetting[a].endpoint[e].bmAttributes); - env->SetShortField(usb_epDescObj, usb_epDescFID_wMaxPacketSize, conf_desc->interface[h].altsetting[a].endpoint[e].wMaxPacketSize); - env->SetByteField(usb_epDescObj, usb_epDescFID_bInterval, conf_desc->interface[h].altsetting[a].endpoint[e].bInterval); - env->SetByteField(usb_epDescObj, usb_epDescFID_bRefresh, conf_desc->interface[h].altsetting[a].endpoint[e].bRefresh); - env->SetByteField(usb_epDescObj, usb_epDescFID_bSynchAddress, conf_desc->interface[h].altsetting[a].endpoint[e].bSynchAddress); - env->SetIntField(usb_epDescObj, usb_epDescFID_extralen, conf_desc->interface[h].altsetting[a].endpoint[e].extra_length); - if (conf_desc->interface[h].altsetting[a].endpoint[e].extra) { - jbyteArray jbExtraDesc = to_byteArray(env, conf_desc->interface[h].altsetting[a].endpoint[e].extra, conf_desc->interface[h].altsetting[a].endpoint[e].extra_length); - env->SetObjectField(usb_epDescObj, usb_epDescFID_extra, jbExtraDesc); - } else { - env->SetObjectField(usb_epDescObj, usb_epDescFID_extra, NULL); - } - } - env->SetObjectField(usb_intDescObj, usb_intDescFID_endpoint, usb_epDescObjArray); - } - env->SetObjectField(usb_intObj, usb_intFID_altsetting, usb_intDescObjArray); - } - env->SetObjectField(usb_confDescObj, usb_confDescFID_interface_, usb_intObjArray); - libusb_free_config_descriptor(conf_desc); - } - Usb_Device_ConfigSet(env, usb_devObj, usb_confDescObjArray); + if (conf_desc->interface[h].altsetting[a].endpoint == NULL) { + printf("LibusbJava: usb_get_busses: endpoint == NULL\n"); + return usb_devObj; + } + usb_epDescObj = env->NewObject(usb_epDescClazz, usb_epDescMid); + if (!usb_epDescObj) { + setLibusbJavaError("shared library error: Error NewObject (usb_epDescObj)"); + return NULL; + } + env->SetObjectArrayElement(usb_epDescObjArray, e, usb_epDescObj); + env->SetByteField(usb_epDescObj, usb_epDescFID_bLength, conf_desc->interface[h].altsetting[a].endpoint[e].bLength); + env->SetByteField(usb_epDescObj, usb_epDescFID_bDescriptorType, conf_desc->interface[h].altsetting[a].endpoint[e].bDescriptorType); + env->SetByteField(usb_epDescObj, usb_epDescFID_bEndpointAddress, conf_desc->interface[h].altsetting[a].endpoint[e].bEndpointAddress); + env->SetByteField(usb_epDescObj, usb_epDescFID_bmAttributes, conf_desc->interface[h].altsetting[a].endpoint[e].bmAttributes); + env->SetShortField(usb_epDescObj, usb_epDescFID_wMaxPacketSize, conf_desc->interface[h].altsetting[a].endpoint[e].wMaxPacketSize); + env->SetByteField(usb_epDescObj, usb_epDescFID_bInterval, conf_desc->interface[h].altsetting[a].endpoint[e].bInterval); + env->SetByteField(usb_epDescObj, usb_epDescFID_bRefresh, conf_desc->interface[h].altsetting[a].endpoint[e].bRefresh); + env->SetByteField(usb_epDescObj, usb_epDescFID_bSynchAddress, conf_desc->interface[h].altsetting[a].endpoint[e].bSynchAddress); + env->SetIntField(usb_epDescObj, usb_epDescFID_extralen, conf_desc->interface[h].altsetting[a].endpoint[e].extra_length); + if (conf_desc->interface[h].altsetting[a].endpoint[e].extra) { + jbyteArray jbExtraDesc = to_byteArray(env, conf_desc->interface[h].altsetting[a].endpoint[e].extra, conf_desc->interface[h].altsetting[a].endpoint[e].extra_length); + env->SetObjectField(usb_epDescObj, usb_epDescFID_extra, jbExtraDesc); + } else { + env->SetObjectField(usb_epDescObj, usb_epDescFID_extra, NULL); + } + } + env->SetObjectField(usb_intDescObj, usb_intDescFID_endpoint, usb_epDescObjArray); + } + env->SetObjectField(usb_intObj, usb_intFID_altsetting, usb_intDescObjArray); + } + env->SetObjectField(usb_confDescObj, usb_confDescFID_interface_, usb_intObjArray); + libusb_free_config_descriptor(conf_desc); + } + Usb_Device_ConfigSet(env, usb_devObj, usb_confDescObjArray); #ifdef DEBUGON - printf("libusb_get_device: done\n"); + printf("libusb_get_device: done\n"); #endif - return usb_devObj; + return usb_devObj; } /******************************************************************************************** * Class: ch_ntb_usb_LibusbJava1 @@ -915,19 +915,19 @@ JNIEXPORT jobject JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1get_1device(JNIEnv * Signature: (J)I ********************************************************************************************/ JNIEXPORT jint JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1get_1configuration(JNIEnv *env, jclass obj, jlong handle) { - int config = 0; - int libusb_result = 0; + int config = 0; + int libusb_result = 0; - clearLibusbJavaError(); - libusb_result = libusb_get_configuration((libusb_device_handle*) (unsigned long) handle, &config); + clearLibusbJavaError(); + libusb_result = libusb_get_configuration((libusb_device_handle*) (unsigned long) handle, &config); - if (libusb_result != 0) { - setLibusbJavaError("shared library error: get_configuration failed"); - ThrowLibusbError(env, libusb_result); - config = 0; - } + if (libusb_result != 0) { + setLibusbJavaError("shared library error: get_configuration failed"); + ThrowLibusbError(env, libusb_result); + config = 0; + } - return config; + return config; } /******************************************************************************************** @@ -936,8 +936,8 @@ JNIEXPORT jint JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1get_1configuration(JN * Signature: (JI)V ********************************************************************************************/ JNIEXPORT void JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1set_1configuration(JNIEnv *env, jclass obj, jlong handle, jint config) { - clearLibusbJavaError(); - ThrowIfUnsuccessful(env, libusb_set_configuration((libusb_device_handle*) (unsigned long) handle, config)); + clearLibusbJavaError(); + ThrowIfUnsuccessful(env, libusb_set_configuration((libusb_device_handle*) (unsigned long) handle, config)); } /******************************************************************************************** @@ -946,8 +946,8 @@ JNIEXPORT void JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1set_1configuration(JN * Signature: (JI)V ********************************************************************************************/ JNIEXPORT void JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1claim_1interface(JNIEnv *env, jclass obj, jlong handle, jint iNumber) { - clearLibusbJavaError(); - ThrowIfUnsuccessful(env, libusb_claim_interface((libusb_device_handle*) (unsigned long) handle, iNumber)); + clearLibusbJavaError(); + ThrowIfUnsuccessful(env, libusb_claim_interface((libusb_device_handle*) (unsigned long) handle, iNumber)); } /******************************************************************************************** @@ -956,8 +956,8 @@ JNIEXPORT void JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1claim_1interface(JNIE * Signature: (JI)V ********************************************************************************************/ JNIEXPORT void JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1release_1interface(JNIEnv *env, jclass obj, jlong handle, jint iNumber) { - clearLibusbJavaError(); - ThrowIfUnsuccessful(env, libusb_release_interface((libusb_device_handle*) (unsigned long) handle, iNumber)); + clearLibusbJavaError(); + ThrowIfUnsuccessful(env, libusb_release_interface((libusb_device_handle*) (unsigned long) handle, iNumber)); } /******************************************************************************************** @@ -966,8 +966,8 @@ JNIEXPORT void JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1release_1interface(JN * Signature: (JII)V ********************************************************************************************/ JNIEXPORT void JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1set_1interface_1alt_1setting(JNIEnv *env, jclass obj, jlong handle, jint iNumber, jint altSet) { - clearLibusbJavaError(); - ThrowIfUnsuccessful(env, libusb_set_interface_alt_setting((libusb_device_handle*) (unsigned long) handle, iNumber, altSet)); + clearLibusbJavaError(); + ThrowIfUnsuccessful(env, libusb_set_interface_alt_setting((libusb_device_handle*) (unsigned long) handle, iNumber, altSet)); } /******************************************************************************************** @@ -976,8 +976,8 @@ JNIEXPORT void JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1set_1interface_1alt_1 * Signature: (JS)V ********************************************************************************************/ JNIEXPORT void JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1clear_1halt(JNIEnv *env, jclass obj, jlong handle, jshort ep) { - clearLibusbJavaError(); - ThrowIfUnsuccessful(env, libusb_clear_halt((libusb_device_handle*) (unsigned long) handle, ep)); + clearLibusbJavaError(); + ThrowIfUnsuccessful(env, libusb_clear_halt((libusb_device_handle*) (unsigned long) handle, ep)); } /******************************************************************************************** @@ -986,8 +986,8 @@ JNIEXPORT void JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1clear_1halt(JNIEnv *e * Signature: (J)V ********************************************************************************************/ JNIEXPORT void JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1reset_1device(JNIEnv *env, jclass obj, jlong handle) { - clearLibusbJavaError(); - ThrowIfUnsuccessful(env, libusb_reset_device((libusb_device_handle*) (unsigned long) handle)); + clearLibusbJavaError(); + ThrowIfUnsuccessful(env, libusb_reset_device((libusb_device_handle*) (unsigned long) handle)); } /******************************************************************************************** @@ -996,18 +996,18 @@ JNIEXPORT void JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1reset_1device(JNIEnv * Signature: (JI)I ********************************************************************************************/ JNIEXPORT jint JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1kernel_1driver_1active(JNIEnv *env, jclass obj, jlong handle, jint iNumber) { - int libusb_result = 0; + int libusb_result = 0; - clearLibusbJavaError(); - libusb_result = libusb_kernel_driver_active((libusb_device_handle*) (unsigned long) handle, iNumber); + clearLibusbJavaError(); + libusb_result = libusb_kernel_driver_active((libusb_device_handle*) (unsigned long) handle, iNumber); - if (libusb_result < 0) - { - ThrowLibusbError(env, libusb_result); - libusb_result = 0; - } + if (libusb_result < 0) + { + ThrowLibusbError(env, libusb_result); + libusb_result = 0; + } - return libusb_result; + return libusb_result; } /******************************************************************************************** @@ -1016,8 +1016,8 @@ JNIEXPORT jint JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1kernel_1driver_1activ * Signature: (JI)V ********************************************************************************************/ JNIEXPORT void JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1detach_1kernel_1driver(JNIEnv *env, jclass obj, jlong handle, jint iNumber) { - clearLibusbJavaError(); - ThrowIfUnsuccessful(env, libusb_detach_kernel_driver((libusb_device_handle*) (unsigned long) handle, iNumber)); + clearLibusbJavaError(); + ThrowIfUnsuccessful(env, libusb_detach_kernel_driver((libusb_device_handle*) (unsigned long) handle, iNumber)); } /******************************************************************************************** @@ -1026,8 +1026,8 @@ JNIEXPORT void JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1detach_1kernel_1drive * Signature: (JI)V ********************************************************************************************/ JNIEXPORT void JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1attach_1kernel_1driver(JNIEnv *env, jclass obj, jlong handle, jint iNumber) { - clearLibusbJavaError(); - ThrowIfUnsuccessful(env, libusb_attach_kernel_driver((libusb_device_handle*) (unsigned long) handle, iNumber)); + clearLibusbJavaError(); + ThrowIfUnsuccessful(env, libusb_attach_kernel_driver((libusb_device_handle*) (unsigned long) handle, iNumber)); } /******************************************************************************************** @@ -1036,152 +1036,152 @@ JNIEXPORT void JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1attach_1kernel_1drive * Signature: (Lch/ntb/usb/Usb_Device;)Lch/ntb/usb/Usb_Config_Descriptor; ********************************************************************************************/ JNIEXPORT jobject JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1get_1active_1config_1descriptor(JNIEnv *env, jclass obj, jobject dev) { - uint8_t a, e; - clearLibusbJavaError(); - if (ReferencesCheck(&info, env) != 0) return NULL; - libusb_device *libusb_dev = Usb_Device_HandleGet(env, dev); - if (libusb_dev == NULL) { - ThrowLibusbError(env, ERROR_JAVA_ILEGAL_DEVICE_HANDLE); - return NULL; - } + uint8_t a, e; + clearLibusbJavaError(); + if (ReferencesCheck(&info, env) != 0) return NULL; + libusb_device *libusb_dev = Usb_Device_HandleGet(env, dev); + if (libusb_dev == NULL) { + ThrowLibusbError(env, ERROR_JAVA_ILEGAL_DEVICE_HANDLE); + return NULL; + } - libusb_config_descriptor *conf_desc; - jobject usb_confDescObj, usb_intObj, usb_intDescObj, usb_epDescObj; - jobjectArray usb_intObjArray, usb_intDescObjArray, usb_epDescObjArray; + libusb_config_descriptor *conf_desc; + jobject usb_confDescObj, usb_intObj, usb_intDescObj, usb_epDescObj; + jobjectArray usb_intObjArray, usb_intDescObjArray, usb_epDescObjArray; - libusb_device *lib_dev = Usb_Device_HandleGet(env, dev); - if (lib_dev == NULL) return NULL; + libusb_device *lib_dev = Usb_Device_HandleGet(env, dev); + if (lib_dev == NULL) return NULL; - if (libusb_get_active_config_descriptor(lib_dev, &conf_desc)) { - setLibusbJavaError("shared library error: get_configuration failed"); - return NULL; - } - usb_confDescObj = env->NewObject(usb_confDescClazz, usb_confDescMid); - if (!usb_confDescObj) { - setLibusbJavaError("shared library error: Error NewObject (usb_confDescObj)"); - return NULL; - } - /*fill the fields*/ - env->SetByteField(usb_confDescObj, usb_confDescFID_bLength, conf_desc->bLength); - env->SetByteField(usb_confDescObj, usb_confDescFID_bDescriptorType, conf_desc->bDescriptorType); - env->SetShortField(usb_confDescObj, usb_confDescFID_wTotalLength, conf_desc->wTotalLength); - env->SetByteField(usb_confDescObj, usb_confDescFID_bNumInterfaces, conf_desc->bNumInterfaces); - env->SetByteField(usb_confDescObj, usb_confDescFID_bConfigurationValue, conf_desc->bConfigurationValue); - env->SetByteField(usb_confDescObj, usb_confDescFID_iConfiguration, conf_desc->iConfiguration); - env->SetByteField(usb_confDescObj, usb_confDescFID_bmAttributes, conf_desc->bmAttributes); - env->SetByteField(usb_confDescObj, usb_confDescFID_MaxPower, conf_desc->MaxPower); - env->SetIntField(usb_confDescObj, usb_confDescFID_extralen, conf_desc->extra_length); - if (conf_desc->extra) { - jbyteArray jbExtraDesc = to_byteArray(env, conf_desc->extra, conf_desc->extra_length); - env->SetObjectField(usb_confDescObj, usb_confDescFID_extra, jbExtraDesc); - } else { - env->SetObjectField(usb_confDescObj, usb_confDescFID_extra, NULL); - } - /*interface*/ - usb_intObjArray = (jobjectArray) env->NewObjectArray(conf_desc->bNumInterfaces, usb_intClazz, NULL); - if (!usb_intObjArray) { - setLibusbJavaError("shared library error: Error NewObjectArray (usb_intObjArray)"); - return NULL; - } - for (int i = 0; i < conf_desc->bNumInterfaces; i++) { + if (libusb_get_active_config_descriptor(lib_dev, &conf_desc)) { + setLibusbJavaError("shared library error: get_configuration failed"); + return NULL; + } + usb_confDescObj = env->NewObject(usb_confDescClazz, usb_confDescMid); + if (!usb_confDescObj) { + setLibusbJavaError("shared library error: Error NewObject (usb_confDescObj)"); + return NULL; + } + /*fill the fields*/ + env->SetByteField(usb_confDescObj, usb_confDescFID_bLength, conf_desc->bLength); + env->SetByteField(usb_confDescObj, usb_confDescFID_bDescriptorType, conf_desc->bDescriptorType); + env->SetShortField(usb_confDescObj, usb_confDescFID_wTotalLength, conf_desc->wTotalLength); + env->SetByteField(usb_confDescObj, usb_confDescFID_bNumInterfaces, conf_desc->bNumInterfaces); + env->SetByteField(usb_confDescObj, usb_confDescFID_bConfigurationValue, conf_desc->bConfigurationValue); + env->SetByteField(usb_confDescObj, usb_confDescFID_iConfiguration, conf_desc->iConfiguration); + env->SetByteField(usb_confDescObj, usb_confDescFID_bmAttributes, conf_desc->bmAttributes); + env->SetByteField(usb_confDescObj, usb_confDescFID_MaxPower, conf_desc->MaxPower); + env->SetIntField(usb_confDescObj, usb_confDescFID_extralen, conf_desc->extra_length); + if (conf_desc->extra) { + jbyteArray jbExtraDesc = to_byteArray(env, conf_desc->extra, conf_desc->extra_length); + env->SetObjectField(usb_confDescObj, usb_confDescFID_extra, jbExtraDesc); + } else { + env->SetObjectField(usb_confDescObj, usb_confDescFID_extra, NULL); + } + /*interface*/ + usb_intObjArray = (jobjectArray) env->NewObjectArray(conf_desc->bNumInterfaces, usb_intClazz, NULL); + if (!usb_intObjArray) { + setLibusbJavaError("shared library error: Error NewObjectArray (usb_intObjArray)"); + return NULL; + } + for (int i = 0; i < conf_desc->bNumInterfaces; i++) { #ifdef DEBUGON - printf("\t\t\tlibusb_get_activ_config_descriptor: interface %u \n", i); + printf("\t\t\tlibusb_get_activ_config_descriptor: interface %u \n", i); #endif - if (conf_desc->interface == NULL) { - // this shouldn't happen - printf("conf_des->interface == NULL"); - continue; - } - usb_intObj = env->NewObject(usb_intClazz, usb_intMid); - if (!usb_intObj) { - setLibusbJavaError("shared library error: Error NewObject (usb_intObj)"); - return NULL; - } - env->SetObjectArrayElement(usb_intObjArray, i, usb_intObj); - env->SetIntField(usb_intObj, usb_intFID_num_altsetting, conf_desc->interface[i].num_altsetting); - // interface descriptor - usb_intDescObjArray = (jobjectArray) env->NewObjectArray(conf_desc->interface[i].num_altsetting, usb_intDescClazz, NULL); - if (!usb_intDescObjArray) { - setLibusbJavaError("shared library error: Error NewObjectArray (usb_intDescObjArray)"); - return NULL; - } - for (a = 0; a < conf_desc->interface[i].num_altsetting; a++) { + if (conf_desc->interface == NULL) { + // this shouldn't happen + printf("conf_des->interface == NULL"); + continue; + } + usb_intObj = env->NewObject(usb_intClazz, usb_intMid); + if (!usb_intObj) { + setLibusbJavaError("shared library error: Error NewObject (usb_intObj)"); + return NULL; + } + env->SetObjectArrayElement(usb_intObjArray, i, usb_intObj); + env->SetIntField(usb_intObj, usb_intFID_num_altsetting, conf_desc->interface[i].num_altsetting); + // interface descriptor + usb_intDescObjArray = (jobjectArray) env->NewObjectArray(conf_desc->interface[i].num_altsetting, usb_intDescClazz, NULL); + if (!usb_intDescObjArray) { + setLibusbJavaError("shared library error: Error NewObjectArray (usb_intDescObjArray)"); + return NULL; + } + for (a = 0; a < conf_desc->interface[i].num_altsetting; a++) { #ifdef DEBUGON - printf("\t\t\t\tlibusb_get__activ_config_descriptor: interface descriptor %u \n", a); + printf("\t\t\t\tlibusb_get__activ_config_descriptor: interface descriptor %u \n", a); #endif - if (conf_desc->interface[i].altsetting == NULL) { - // this shouldn't happen - printf("LibusbJava: libusb_get__activ_config_descriptor: altsetting == NULL\n"); - continue; - } - usb_intDescObj = env->NewObject(usb_intDescClazz, usb_intDescMid); - if (!usb_intDescObj) { - setLibusbJavaError("shared library error: Error NewObject (usb_intDescObj)"); - return NULL; - } - env->SetObjectArrayElement(usb_intDescObjArray, a, usb_intDescObj); - /*fill fields*/ - env->SetByteField(usb_intDescObj, usb_intDescFID_bLength, conf_desc->interface[i].altsetting[a].bLength); - env->SetByteField(usb_intDescObj, usb_intDescFID_bDescriptorType, conf_desc->interface[i].altsetting[a].bDescriptorType); - env->SetByteField(usb_intDescObj, usb_intDescFID_bInterfaceNumber, conf_desc->interface[i].altsetting[a].bInterfaceNumber); - env->SetByteField(usb_intDescObj, usb_intDescFID_bAlternateSetting, conf_desc->interface[i].altsetting[a].bAlternateSetting); - env->SetByteField(usb_intDescObj, usb_intDescFID_bNumEndpoints, conf_desc->interface[i].altsetting[a].bNumEndpoints); - env->SetByteField(usb_intDescObj, usb_intDescFID_bInterfaceClass, conf_desc->interface[i].altsetting[a].bInterfaceClass); - env->SetByteField(usb_intDescObj, usb_intDescFID_bInterfaceSubClass, conf_desc->interface[i].altsetting[a].bInterfaceSubClass); - env->SetByteField(usb_intDescObj, usb_intDescFID_bInterfaceProtocol, conf_desc->interface[i].altsetting[a].bInterfaceProtocol); - env->SetByteField(usb_intDescObj, usb_intDescFID_iInterface, conf_desc->interface[i].altsetting[a].iInterface); - env->SetIntField(usb_intDescObj, usb_intDescFID_extralen, conf_desc->interface[i].altsetting[a].extra_length); - if (conf_desc->interface[i].altsetting[a].extra) { - jbyteArray jbExtraDesc = to_byteArray(env, conf_desc->interface[i].altsetting[a].extra, conf_desc->interface[i].altsetting[a].extra_length); - env->SetObjectField(usb_intDescObj, usb_intDescFID_extra, jbExtraDesc); - } else { - env->SetObjectField(usb_intDescObj, usb_intDescFID_extra, NULL); - } - /*endpoint descriptor*/ - usb_epDescObjArray = (jobjectArray) env->NewObjectArray(conf_desc->interface[i].altsetting[a].bNumEndpoints, usb_epDescClazz, NULL); - if (!usb_epDescObjArray) { - setLibusbJavaError("shared library error: Error NewObjectArray (usb_epDescObjArray)"); - return NULL; - } - for (e = 0; e < conf_desc->interface[i].altsetting[a].bNumEndpoints; e++) { + if (conf_desc->interface[i].altsetting == NULL) { + // this shouldn't happen + printf("LibusbJava: libusb_get__activ_config_descriptor: altsetting == NULL\n"); + continue; + } + usb_intDescObj = env->NewObject(usb_intDescClazz, usb_intDescMid); + if (!usb_intDescObj) { + setLibusbJavaError("shared library error: Error NewObject (usb_intDescObj)"); + return NULL; + } + env->SetObjectArrayElement(usb_intDescObjArray, a, usb_intDescObj); + /*fill fields*/ + env->SetByteField(usb_intDescObj, usb_intDescFID_bLength, conf_desc->interface[i].altsetting[a].bLength); + env->SetByteField(usb_intDescObj, usb_intDescFID_bDescriptorType, conf_desc->interface[i].altsetting[a].bDescriptorType); + env->SetByteField(usb_intDescObj, usb_intDescFID_bInterfaceNumber, conf_desc->interface[i].altsetting[a].bInterfaceNumber); + env->SetByteField(usb_intDescObj, usb_intDescFID_bAlternateSetting, conf_desc->interface[i].altsetting[a].bAlternateSetting); + env->SetByteField(usb_intDescObj, usb_intDescFID_bNumEndpoints, conf_desc->interface[i].altsetting[a].bNumEndpoints); + env->SetByteField(usb_intDescObj, usb_intDescFID_bInterfaceClass, conf_desc->interface[i].altsetting[a].bInterfaceClass); + env->SetByteField(usb_intDescObj, usb_intDescFID_bInterfaceSubClass, conf_desc->interface[i].altsetting[a].bInterfaceSubClass); + env->SetByteField(usb_intDescObj, usb_intDescFID_bInterfaceProtocol, conf_desc->interface[i].altsetting[a].bInterfaceProtocol); + env->SetByteField(usb_intDescObj, usb_intDescFID_iInterface, conf_desc->interface[i].altsetting[a].iInterface); + env->SetIntField(usb_intDescObj, usb_intDescFID_extralen, conf_desc->interface[i].altsetting[a].extra_length); + if (conf_desc->interface[i].altsetting[a].extra) { + jbyteArray jbExtraDesc = to_byteArray(env, conf_desc->interface[i].altsetting[a].extra, conf_desc->interface[i].altsetting[a].extra_length); + env->SetObjectField(usb_intDescObj, usb_intDescFID_extra, jbExtraDesc); + } else { + env->SetObjectField(usb_intDescObj, usb_intDescFID_extra, NULL); + } + /*endpoint descriptor*/ + usb_epDescObjArray = (jobjectArray) env->NewObjectArray(conf_desc->interface[i].altsetting[a].bNumEndpoints, usb_epDescClazz, NULL); + if (!usb_epDescObjArray) { + setLibusbJavaError("shared library error: Error NewObjectArray (usb_epDescObjArray)"); + return NULL; + } + for (e = 0; e < conf_desc->interface[i].altsetting[a].bNumEndpoints; e++) { #ifdef DEBUGON - printf("\t\t\t\t\tLibusb_get__activ_config_descriptor: endpoint descriptor %u \n", e); + printf("\t\t\t\t\tLibusb_get__activ_config_descriptor: endpoint descriptor %u \n", e); #endif - if (conf_desc->interface[i].altsetting[a].endpoint == NULL) { - printf("LibusbJava: usb_get__activ_config_descriptor: endpoint == NULL\n"); - return usb_confDescObj; - } - usb_epDescObj = env->NewObject(usb_epDescClazz, usb_epDescMid); - if (!usb_epDescObj) { - setLibusbJavaError("shared library error: Error NewObject (usb_epDescObj)"); - return NULL; - } - env->SetObjectArrayElement(usb_epDescObjArray, e, usb_epDescObj); - env->SetByteField(usb_epDescObj, usb_epDescFID_bLength, conf_desc->interface[i].altsetting[a].endpoint[e].bLength); - env->SetByteField(usb_epDescObj, usb_epDescFID_bDescriptorType, conf_desc->interface[i].altsetting[a].endpoint[e].bDescriptorType); - env->SetByteField(usb_epDescObj, usb_epDescFID_bEndpointAddress, conf_desc->interface[i].altsetting[a].endpoint[e].bEndpointAddress); - env->SetByteField(usb_epDescObj, usb_epDescFID_bmAttributes, conf_desc->interface[i].altsetting[a].endpoint[e].bmAttributes); - env->SetShortField(usb_epDescObj, usb_epDescFID_wMaxPacketSize, conf_desc->interface[i].altsetting[a].endpoint[e].wMaxPacketSize); - env->SetByteField(usb_epDescObj, usb_epDescFID_bInterval, conf_desc->interface[i].altsetting[a].endpoint[e].bInterval); - env->SetByteField(usb_epDescObj, usb_epDescFID_bRefresh, conf_desc->interface[i].altsetting[a].endpoint[e].bRefresh); - env->SetByteField(usb_epDescObj, usb_epDescFID_bSynchAddress, conf_desc->interface[i].altsetting[a].endpoint[e].bSynchAddress); - env->SetIntField(usb_epDescObj, usb_epDescFID_extralen, conf_desc->interface[i].altsetting[a].endpoint[e].extra_length); - if (conf_desc->interface[i].altsetting[a].endpoint[e].extra) { - jbyteArray jbExtraDesc = to_byteArray(env, conf_desc->interface[i].altsetting[a].endpoint[e].extra, conf_desc->interface[i].altsetting[a].endpoint[e].extra_length); - env->SetObjectField(usb_epDescObj, usb_epDescFID_extra, jbExtraDesc); - } else { - env->SetObjectField(usb_epDescObj, usb_epDescFID_extra, NULL); - } - } - env->SetObjectField(usb_intDescObj, usb_intDescFID_endpoint, usb_epDescObjArray); - } - env->SetObjectField(usb_intObj, usb_intFID_altsetting, usb_intDescObjArray); - } - env->SetObjectField(usb_confDescObj, usb_confDescFID_interface_, usb_intObjArray); - libusb_free_config_descriptor(conf_desc); + if (conf_desc->interface[i].altsetting[a].endpoint == NULL) { + printf("LibusbJava: usb_get__activ_config_descriptor: endpoint == NULL\n"); + return usb_confDescObj; + } + usb_epDescObj = env->NewObject(usb_epDescClazz, usb_epDescMid); + if (!usb_epDescObj) { + setLibusbJavaError("shared library error: Error NewObject (usb_epDescObj)"); + return NULL; + } + env->SetObjectArrayElement(usb_epDescObjArray, e, usb_epDescObj); + env->SetByteField(usb_epDescObj, usb_epDescFID_bLength, conf_desc->interface[i].altsetting[a].endpoint[e].bLength); + env->SetByteField(usb_epDescObj, usb_epDescFID_bDescriptorType, conf_desc->interface[i].altsetting[a].endpoint[e].bDescriptorType); + env->SetByteField(usb_epDescObj, usb_epDescFID_bEndpointAddress, conf_desc->interface[i].altsetting[a].endpoint[e].bEndpointAddress); + env->SetByteField(usb_epDescObj, usb_epDescFID_bmAttributes, conf_desc->interface[i].altsetting[a].endpoint[e].bmAttributes); + env->SetShortField(usb_epDescObj, usb_epDescFID_wMaxPacketSize, conf_desc->interface[i].altsetting[a].endpoint[e].wMaxPacketSize); + env->SetByteField(usb_epDescObj, usb_epDescFID_bInterval, conf_desc->interface[i].altsetting[a].endpoint[e].bInterval); + env->SetByteField(usb_epDescObj, usb_epDescFID_bRefresh, conf_desc->interface[i].altsetting[a].endpoint[e].bRefresh); + env->SetByteField(usb_epDescObj, usb_epDescFID_bSynchAddress, conf_desc->interface[i].altsetting[a].endpoint[e].bSynchAddress); + env->SetIntField(usb_epDescObj, usb_epDescFID_extralen, conf_desc->interface[i].altsetting[a].endpoint[e].extra_length); + if (conf_desc->interface[i].altsetting[a].endpoint[e].extra) { + jbyteArray jbExtraDesc = to_byteArray(env, conf_desc->interface[i].altsetting[a].endpoint[e].extra, conf_desc->interface[i].altsetting[a].endpoint[e].extra_length); + env->SetObjectField(usb_epDescObj, usb_epDescFID_extra, jbExtraDesc); + } else { + env->SetObjectField(usb_epDescObj, usb_epDescFID_extra, NULL); + } + } + env->SetObjectField(usb_intDescObj, usb_intDescFID_endpoint, usb_epDescObjArray); + } + env->SetObjectField(usb_intObj, usb_intFID_altsetting, usb_intDescObjArray); + } + env->SetObjectField(usb_confDescObj, usb_confDescFID_interface_, usb_intObjArray); + libusb_free_config_descriptor(conf_desc); - return usb_confDescObj; + return usb_confDescObj; } /******************************************************************************************** @@ -1190,25 +1190,25 @@ JNIEXPORT jobject JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1get_1active_1confi * Signature: (JSI)Ljava/lang/String; ********************************************************************************************/ JNIEXPORT jstring JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1get_1string_1descriptor_1ascii( JNIEnv *env, jclass obj, jlong handle, jshort desc_index, jint length) { - jstring string; - int res = 0; - clearLibusbJavaError(); - unsigned char data[(int)length + 1]; + jstring string; + int res = 0; + clearLibusbJavaError(); + unsigned char data[(int)length + 1]; - res = libusb_get_string_descriptor_ascii((libusb_device_handle*) (unsigned long) handle, desc_index, data, (int)length); + res = libusb_get_string_descriptor_ascii((libusb_device_handle*) (unsigned long) handle, desc_index, data, (int)length); - if (res >= 0) - { - data[res] = '\0'; - string = env->NewStringUTF((const char*)data); - } - else - { - setLibusbJavaError("get_string_descriptor_ascii: retrieve String failed"); - string = NULL; - ThrowLibusbError(env, res); - } - return string; + if (res >= 0) + { + data[res] = '\0'; + string = env->NewStringUTF((const char*)data); + } + else + { + setLibusbJavaError("get_string_descriptor_ascii: retrieve String failed"); + string = NULL; + ThrowLibusbError(env, res); + } + return string; } /******************************************************************************************** * Class: ch_ntb_usb_LibusbJava1 @@ -1217,21 +1217,21 @@ JNIEXPORT jstring JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1get_1string_1descr ********************************************************************************************/ JNIEXPORT jbyteArray JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1get_1descriptor( - JNIEnv *env, jclass obj, jlong handle, jint desc_type, - jshort desc_index, jint size) { + JNIEnv *env, jclass obj, jlong handle, jint desc_type, + jshort desc_index, jint size) { - clearLibusbJavaError(); - int res; - unsigned char data[255]; + clearLibusbJavaError(); + int res; + unsigned char data[255]; - res = libusb_get_descriptor((libusb_device_handle*) (unsigned long) handle, desc_type, desc_index, data, size); - if (res < 0) { - setLibusbJavaError("libusb_get_descriptor: retrieve data failed"); - ThrowLibusbError(env, res); - return NULL; - } + res = libusb_get_descriptor((libusb_device_handle*) (unsigned long) handle, desc_type, desc_index, data, size); + if (res < 0) { + setLibusbJavaError("libusb_get_descriptor: retrieve data failed"); + ThrowLibusbError(env, res); + return NULL; + } - return to_byteArray(env, data, res); + return to_byteArray(env, data, res); } /******************************************************************************************** * Class: ch_ntb_usb_LibusbJava1 @@ -1240,23 +1240,23 @@ JNIEXPORT jbyteArray JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1get_1descriptor ********************************************************************************************/ JNIEXPORT jstring JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1get_1string_1descriptor(JNIEnv *env, jclass obj, jlong handle, jshort desc_index, jint langid, jint size) { - clearLibusbJavaError(); - int res; - jstring string; - unsigned char data[(int)size + 1]; + clearLibusbJavaError(); + int res; + jstring string; + unsigned char data[(int)size + 1]; - res = libusb_get_string_descriptor((libusb_device_handle*) (unsigned long) handle, desc_index, langid, data, size); + res = libusb_get_string_descriptor((libusb_device_handle*) (unsigned long) handle, desc_index, langid, data, size); - if (res >= 0) { - data[res] = '\0'; - string = env->NewStringUTF((const char*) data); - } else { - setLibusbJavaError("get_string_descriptor: retrieve String failed"); - string = NULL; - ThrowLibusbError(env, res); - } + if (res >= 0) { + data[res] = '\0'; + string = env->NewStringUTF((const char*) data); + } else { + setLibusbJavaError("get_string_descriptor: retrieve String failed"); + string = NULL; + ThrowLibusbError(env, res); + } - return string; + return string; } /******************************************************************************************** @@ -1265,8 +1265,8 @@ JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1get_1string_1descriptor(JNIEnv *env, * Signature: (I)J ********************************************************************************************/ JNIEXPORT jlong JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1alloc_1transfer( JNIEnv *env, jclass obj, jint iso_packets) { - clearLibusbJavaError(); - return (jlong) libusb_alloc_transfer(iso_packets); + clearLibusbJavaError(); + return (jlong) libusb_alloc_transfer(iso_packets); } /******************************************************************************************** @@ -1275,8 +1275,8 @@ JNIEXPORT jlong JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1alloc_1transfer( JNI * Signature: (J)V ********************************************************************************************/ JNIEXPORT void JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1free_1transfer( JNIEnv *env, jclass obj, jlong transfernumber) { - clearLibusbJavaError(); - libusb_free_transfer((libusb_transfer*) (unsigned long) transfernumber); + clearLibusbJavaError(); + libusb_free_transfer((libusb_transfer*) (unsigned long) transfernumber); } /******************************************************************************************** @@ -1285,8 +1285,8 @@ JNIEXPORT void JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1free_1transfer( JNIEn * Signature: (J)V ********************************************************************************************/ JNIEXPORT void JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1submit_1transfer(JNIEnv *env, jclass obj, jlong transfernumber) { - clearLibusbJavaError(); - ThrowIfUnsuccessful(env, libusb_submit_transfer((libusb_transfer*) (unsigned long) transfernumber)); + clearLibusbJavaError(); + ThrowIfUnsuccessful(env, libusb_submit_transfer((libusb_transfer*) (unsigned long) transfernumber)); } /******************************************************************************************** @@ -1295,8 +1295,8 @@ JNIEXPORT void JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1submit_1transfer(JNIE * Signature: (J)V ********************************************************************************************/ JNIEXPORT void JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1cancel_1transfer(JNIEnv *env, jclass obj, jlong transfernumber) { - clearLibusbJavaError(); - ThrowIfUnsuccessful(env, libusb_cancel_transfer((libusb_transfer*) (unsigned long) transfernumber)); + clearLibusbJavaError(); + ThrowIfUnsuccessful(env, libusb_cancel_transfer((libusb_transfer*) (unsigned long) transfernumber)); } /******************************************************************************************** * Class: ch_ntb_usb_LibusbJava1 @@ -1304,15 +1304,15 @@ JNIEXPORT void JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1cancel_1transfer(JNIE * Signature: (J)[B ********************************************************************************************/ JNIEXPORT jbyteArray JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1control_1transfer_1get_1data(JNIEnv *env, jclass obj, jlong transfernumber) { - clearLibusbJavaError(); - unsigned char *data; - libusb_transfer* trans = (libusb_transfer*) (unsigned long) transfernumber; + clearLibusbJavaError(); + unsigned char *data; + libusb_transfer* trans = (libusb_transfer*) (unsigned long) transfernumber; - if (trans == NULL) - return NULL; + if (trans == NULL) + return NULL; - data = libusb_control_transfer_get_data(trans); - return to_byteArray(env, data, trans->actual_length - LIBUSB_CONTROL_SETUP_SIZE ); + data = libusb_control_transfer_get_data(trans); + return to_byteArray(env, data, trans->actual_length - LIBUSB_CONTROL_SETUP_SIZE ); } /********************************************************************************************* @@ -1321,17 +1321,17 @@ JNIEXPORT jbyteArray JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1control_1transf * Signature: (J)[B ********************************************************************************************/ JNIEXPORT jbyteArray JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1control_1transfer_1get_1setup(JNIEnv *env, jclass obj, jlong transfernumber) { - clearLibusbJavaError(); - unsigned char *data; - libusb_transfer* trans = (libusb_transfer*) (unsigned long) transfernumber; + clearLibusbJavaError(); + unsigned char *data; + libusb_transfer* trans = (libusb_transfer*) (unsigned long) transfernumber; - if (trans == NULL) { - return NULL; - } + if (trans == NULL) { + return NULL; + } - data = (unsigned char*)libusb_control_transfer_get_setup(trans); + data = (unsigned char*)libusb_control_transfer_get_setup(trans); - return to_byteArray(env, data, 8); + return to_byteArray(env, data, 8); } /******************************************************************************************** * Class: ch_ntb_usb_LibusbJava1 @@ -1339,12 +1339,12 @@ JNIEXPORT jbyteArray JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1control_1transf * Signature: (IIIII)[B ********************************************************************************************/ JNIEXPORT jbyteArray JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1fill_1control_1setup(JNIEnv *env, jclass obj, jint bmRequestType, jint bRequest, jint wValue, jint wIndex, jint wLength) { - clearLibusbJavaError(); - unsigned char setup[8]; + clearLibusbJavaError(); + unsigned char setup[8]; - libusb_fill_control_setup(setup, bmRequestType, bRequest, wValue, wIndex, wLength); + libusb_fill_control_setup(setup, bmRequestType, bRequest, wValue, wIndex, wLength); - return to_byteArray(env, setup, 8); + return to_byteArray(env, setup, 8); } /******************************************************************************************** @@ -1353,10 +1353,10 @@ JNIEXPORT jbyteArray JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1fill_1control_1 * Signature: (JJ[BI)V ********************************************************************************************/ JNIEXPORT void JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1fill_1control_1transfer(JNIEnv *env, jclass obj, jlong transfernumber, jlong handle, jbyteArray buffer, jint timeout) { - clearLibusbJavaError(); - jbyte *byteArrayElements = env->GetByteArrayElements(buffer, NULL); - libusb_fill_control_transfer((libusb_transfer*) (unsigned long) transfernumber,(libusb_device_handle*) (unsigned long) handle,(unsigned char*) byteArrayElements, transfer_callback, env,(unsigned int) timeout); - env->ReleaseByteArrayElements(buffer, byteArrayElements, 0); + clearLibusbJavaError(); + jbyte *byteArrayElements = env->GetByteArrayElements(buffer, NULL); + libusb_fill_control_transfer((libusb_transfer*) (unsigned long) transfernumber,(libusb_device_handle*) (unsigned long) handle,(unsigned char*) byteArrayElements, transfer_callback, env,(unsigned int) timeout); + env->ReleaseByteArrayElements(buffer, byteArrayElements, 0); } /******************************************************************************************** @@ -1364,11 +1364,11 @@ JNIEXPORT void JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1fill_1control_1transf * Method: libusb_fill_bulk_transfer * Signature: (JJB[BII)V ********************************************************************************************/ -JNIEXPORT void JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1fill_1bulk_1transfer(JNIEnv *env, jclass obj, jlong transfernumber, jlong handle, jbyte endpoint, jbyteArray buffer, jint length, jint timeout) { - clearLibusbJavaError(); - jbyte *byteArrayElements = env->GetByteArrayElements(buffer, NULL); - libusb_fill_bulk_transfer((libusb_transfer*) (unsigned long) transfernumber,(libusb_device_handle*) (unsigned long) handle, endpoint,(unsigned char*) byteArrayElements, length, transfer_callback, env,(unsigned int) timeout); - env->ReleaseByteArrayElements(buffer, byteArrayElements, 0); +JNIEXPORT void JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1fill_1bulk_1transfer(JNIEnv *env, jclass obj, jlong transfernumber, jlong handle, jbyte endpoint, jbyteArray buffer, jint length, jint timeout) { + clearLibusbJavaError(); + jbyte *byteArrayElements = env->GetByteArrayElements(buffer, NULL); + libusb_fill_bulk_transfer((libusb_transfer*) (unsigned long) transfernumber,(libusb_device_handle*) (unsigned long) handle, endpoint,(unsigned char*) byteArrayElements, length, transfer_callback, env,(unsigned int) timeout); + env->ReleaseByteArrayElements(buffer, byteArrayElements, 0); } /******************************************************************************************** @@ -1377,10 +1377,10 @@ JNIEXPORT void JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1fill_1bulk_1transfer( * Signature: (JJB[BII)V ********************************************************************************************/ JNIEXPORT void JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1fill_1interrupt_1transfer(JNIEnv *env, jclass obj, jlong transfernumber, jlong handle,jbyte endpoint, jbyteArray buffer, jint length, jint timeout) { - clearLibusbJavaError(); - jbyte *byteArrayElements = env->GetByteArrayElements(buffer, NULL); - libusb_fill_interrupt_transfer((libusb_transfer*) (unsigned long) transfernumber,(libusb_device_handle*) (unsigned long) handle, endpoint,(unsigned char*) byteArrayElements, length, transfer_callback, env, timeout); - env->ReleaseByteArrayElements(buffer, byteArrayElements, 0); + clearLibusbJavaError(); + jbyte *byteArrayElements = env->GetByteArrayElements(buffer, NULL); + libusb_fill_interrupt_transfer((libusb_transfer*) (unsigned long) transfernumber,(libusb_device_handle*) (unsigned long) handle, endpoint,(unsigned char*) byteArrayElements, length, transfer_callback, env, timeout); + env->ReleaseByteArrayElements(buffer, byteArrayElements, 0); } /******************************************************************************************** @@ -1389,10 +1389,10 @@ JNIEXPORT void JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1fill_1interrupt_1tran * Signature: (JJB[BIII)V ********************************************************************************************/ JNIEXPORT void JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1fill_1iso_1transfer(JNIEnv *env, jclass obj, jlong transfernumber, jlong handle, jbyte endpoint, jbyteArray buffer, jint length, jint num_iso_packets, jint timeout) { - clearLibusbJavaError(); - jbyte *byteArrayElements = env->GetByteArrayElements(buffer, NULL); - libusb_fill_iso_transfer((libusb_transfer*) (unsigned long) transfernumber, (libusb_device_handle*) (unsigned long) handle, endpoint, (unsigned char*) byteArrayElements, length, num_iso_packets, transfer_callback, env, timeout); - env->ReleaseByteArrayElements(buffer, byteArrayElements, 0); + clearLibusbJavaError(); + jbyte *byteArrayElements = env->GetByteArrayElements(buffer, NULL); + libusb_fill_iso_transfer((libusb_transfer*) (unsigned long) transfernumber, (libusb_device_handle*) (unsigned long) handle, endpoint, (unsigned char*) byteArrayElements, length, num_iso_packets, transfer_callback, env, timeout); + env->ReleaseByteArrayElements(buffer, byteArrayElements, 0); } /******************************************************************************************** @@ -1401,8 +1401,8 @@ JNIEXPORT void JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1fill_1iso_1transfer(J * Signature: (JI)V ********************************************************************************************/ JNIEXPORT void JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1set_1iso_1packet_1lengths(JNIEnv *env, jclass obj, jlong transfernumber, jint length) { - clearLibusbJavaError(); - libusb_set_iso_packet_lengths((libusb_transfer*) (unsigned long) transfernumber, length); + clearLibusbJavaError(); + libusb_set_iso_packet_lengths((libusb_transfer*) (unsigned long) transfernumber, length); } /******************************************************************************************** @@ -1412,27 +1412,27 @@ JNIEXPORT void JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1set_1iso_1packet_1len ********************************************************************************************/ JNIEXPORT jbyteArray JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1get_1iso_1packet_1buffer(JNIEnv *env, jclass obj, jlong transfernumber, jint packet) { - clearLibusbJavaError(); - int size = 0; - unsigned char *data = NULL; - libusb_transfer* transfer = (libusb_transfer*) (unsigned long) transfernumber; + clearLibusbJavaError(); + int size = 0; + unsigned char *data = NULL; + libusb_transfer* transfer = (libusb_transfer*) (unsigned long) transfernumber; - if (transfer == NULL) { - setLibusbJavaError("libusb_get_iso_packet_buffer: ilegal transfernumber"); - return NULL; - } + if (transfer == NULL) { + setLibusbJavaError("libusb_get_iso_packet_buffer: ilegal transfernumber"); + return NULL; + } - if (packet < transfer->num_iso_packets) { - size = transfer->iso_packet_desc[packet].actual_length; - } + if (packet < transfer->num_iso_packets) { + size = transfer->iso_packet_desc[packet].actual_length; + } - data = libusb_get_iso_packet_buffer((libusb_transfer*) (unsigned long) transfernumber, packet); - if (data == NULL) { - setLibusbJavaError("libusb_get_iso_packet_buffer: packet does not exist"); - return NULL; - } + data = libusb_get_iso_packet_buffer((libusb_transfer*) (unsigned long) transfernumber, packet); + if (data == NULL) { + setLibusbJavaError("libusb_get_iso_packet_buffer: packet does not exist"); + return NULL; + } - return to_byteArray(env, data, size); + return to_byteArray(env, data, size); } /******************************************************************************************** @@ -1441,28 +1441,28 @@ JNIEXPORT jbyteArray JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1get_1iso_1packe * Signature: (JI)[B ********************************************************************************************/ JNIEXPORT jbyteArray JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1get_1iso_1packet_1buffer_1simple(JNIEnv *env, jclass obj, jlong transfernumber, jint packet) { - clearLibusbJavaError(); - int size = 0; - unsigned char *data = NULL; - libusb_transfer* transfer = (libusb_transfer*) (unsigned long) transfernumber; + clearLibusbJavaError(); + int size = 0; + unsigned char *data = NULL; + libusb_transfer* transfer = (libusb_transfer*) (unsigned long) transfernumber; - if (transfer == NULL) { - setLibusbJavaError("libusb_get_iso_packet_buffer_simple: ilegal transfernumber"); - return NULL; - } + if (transfer == NULL) { + setLibusbJavaError("libusb_get_iso_packet_buffer_simple: ilegal transfernumber"); + return NULL; + } - if (packet < transfer->num_iso_packets) { - size = transfer->iso_packet_desc[packet].actual_length; - } + if (packet < transfer->num_iso_packets) { + size = transfer->iso_packet_desc[packet].actual_length; + } - data = libusb_get_iso_packet_buffer_simple((libusb_transfer*) (unsigned long) transfernumber, packet); + data = libusb_get_iso_packet_buffer_simple((libusb_transfer*) (unsigned long) transfernumber, packet); - if (data == NULL) { - setLibusbJavaError("libusb_get_iso_packet_buffer_simple: packet does not exist"); - return NULL; - } + if (data == NULL) { + setLibusbJavaError("libusb_get_iso_packet_buffer_simple: packet does not exist"); + return NULL; + } - return to_byteArray(env, data, size); + return to_byteArray(env, data, size); } /******************************************************************************************** @@ -1471,9 +1471,9 @@ JNIEXPORT jbyteArray JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1get_1iso_1packe * Signature: (J)I ********************************************************************************************/ JNIEXPORT jint JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1try_1lock_1events(JNIEnv *env, jclass obj, jlong ctx) { - clearLibusbJavaError(); - return libusb_try_lock_events((libusb_context*) (unsigned long) ctx); -// return libusb_try_lock_events(NULL); + clearLibusbJavaError(); + return libusb_try_lock_events((libusb_context*) (unsigned long) ctx); +// return libusb_try_lock_events(NULL); } /******************************************************************************************** @@ -1482,8 +1482,8 @@ JNIEXPORT jint JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1try_1lock_1events(JNI * Signature: (J)V ********************************************************************************************/ JNIEXPORT void JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1lock_1events(JNIEnv *env, jclass obj, jlong ctx) { - libusb_lock_events((libusb_context*) (unsigned long) ctx); -// libusb_lock_events(NULL); + libusb_lock_events((libusb_context*) (unsigned long) ctx); +// libusb_lock_events(NULL); } /******************************************************************************************** @@ -1492,8 +1492,8 @@ JNIEXPORT void JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1lock_1events(JNIEnv * * Signature: (J)V ********************************************************************************************/ JNIEXPORT void JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1unlock_1events(JNIEnv *env, jclass obj, jlong ctx) { - clearLibusbJavaError(); - libusb_unlock_events((libusb_context*) (unsigned long) ctx); + clearLibusbJavaError(); + libusb_unlock_events((libusb_context*) (unsigned long) ctx); } /******************************************************************************************** @@ -1502,8 +1502,8 @@ JNIEXPORT void JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1unlock_1events(JNIEnv * Signature: (J)I ********************************************************************************************/ JNIEXPORT jint JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1event_1handling_1ok(JNIEnv *env, jclass obj, jlong ctx) { - clearLibusbJavaError(); - return libusb_event_handling_ok((libusb_context*) (unsigned long) ctx); + clearLibusbJavaError(); + return libusb_event_handling_ok((libusb_context*) (unsigned long) ctx); } /******************************************************************************************** @@ -1512,8 +1512,8 @@ JNIEXPORT jint JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1event_1handling_1ok(J * Signature: (J)I ********************************************************************************************/ JNIEXPORT jint JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1event_1handler_1active(JNIEnv *env, jclass obj, jlong ctx) { - clearLibusbJavaError(); - return libusb_event_handler_active((libusb_context*) (unsigned long) ctx); + clearLibusbJavaError(); + return libusb_event_handler_active((libusb_context*) (unsigned long) ctx); } /******************************************************************************************** @@ -1522,8 +1522,8 @@ JNIEXPORT jint JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1event_1handler_1activ * Signature: (J)V ********************************************************************************************/ JNIEXPORT void JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1lock_1event_1waiters(JNIEnv *env, jclass obj, jlong ctx) { - clearLibusbJavaError(); - libusb_lock_event_waiters((libusb_context*) (unsigned long) ctx); + clearLibusbJavaError(); + libusb_lock_event_waiters((libusb_context*) (unsigned long) ctx); } /******************************************************************************************** @@ -1532,8 +1532,8 @@ JNIEXPORT void JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1lock_1event_1waiters( * Signature: (J)V ********************************************************************************************/ JNIEXPORT void JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1unlock_1event_1waiters(JNIEnv *env, jclass obj, jlong ctx) { - clearLibusbJavaError(); - libusb_unlock_event_waiters((libusb_context*) (unsigned long) ctx); + clearLibusbJavaError(); + libusb_unlock_event_waiters((libusb_context*) (unsigned long) ctx); } /******************************************************************************************** @@ -1542,14 +1542,14 @@ JNIEXPORT void JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1unlock_1event_1waiter * Signature: (JJ)I ********************************************************************************************/ JNIEXPORT jint JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1wait_1for_1event(JNIEnv *env, jclass obj, jlong ctx, jlong timevalue) { - clearLibusbJavaError(); - if (timevalue) { - timeval tv; - tv.tv_sec = timevalue; - tv.tv_usec = 0; - return libusb_wait_for_event((libusb_context*) (unsigned long) ctx, &tv); - } - return libusb_wait_for_event((libusb_context*) (unsigned long) ctx, NULL); + clearLibusbJavaError(); + if (timevalue) { + timeval tv; + tv.tv_sec = timevalue; + tv.tv_usec = 0; + return libusb_wait_for_event((libusb_context*) (unsigned long) ctx, &tv); + } + return libusb_wait_for_event((libusb_context*) (unsigned long) ctx, NULL); } /******************************************************************************************** @@ -1558,18 +1558,18 @@ JNIEXPORT jint JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1wait_1for_1event(JNIE * Signature: (JJ)V ********************************************************************************************/ JNIEXPORT void JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1handle_1events_1timeout(JNIEnv *env, jclass obj, jlong ctx, jlong timevalue) { - clearLibusbJavaError(); - if (timevalue != 0) - { - timeval tv; - tv.tv_sec = timevalue; - tv.tv_usec = 0; - ThrowIfUnsuccessful(env, libusb_handle_events_timeout((libusb_context*) (unsigned long) ctx, &tv)); - } - else - { - ThrowIfUnsuccessful(env, libusb_handle_events_timeout((libusb_context*) (unsigned long) ctx, NULL)); - } + clearLibusbJavaError(); + if (timevalue != 0) + { + timeval tv; + tv.tv_sec = timevalue; + tv.tv_usec = 0; + ThrowIfUnsuccessful(env, libusb_handle_events_timeout((libusb_context*) (unsigned long) ctx, &tv)); + } + else + { + ThrowIfUnsuccessful(env, libusb_handle_events_timeout((libusb_context*) (unsigned long) ctx, NULL)); + } } /******************************************************************************************** @@ -1578,8 +1578,8 @@ JNIEXPORT void JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1handle_1events_1timeo * Signature: (J)V ********************************************************************************************/ JNIEXPORT void JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1handle_1events(JNIEnv *env, jclass obj, jlong ctx) { - clearLibusbJavaError(); - ThrowIfUnsuccessful(env, libusb_handle_events((libusb_context*) (unsigned long) ctx)); + clearLibusbJavaError(); + ThrowIfUnsuccessful(env, libusb_handle_events((libusb_context*) (unsigned long) ctx)); } /******************************************************************************************** @@ -1588,17 +1588,17 @@ JNIEXPORT void JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1handle_1events(JNIEnv * Signature: (JJ)V ********************************************************************************************/ JNIEXPORT void JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1handle_1events_1locked(JNIEnv *env, jclass obj, jlong ctx, jlong timevalue) { - clearLibusbJavaError(); - if (timevalue) { - timeval tv; - tv.tv_sec = timevalue; - tv.tv_usec = 0; - ThrowIfUnsuccessful(env, libusb_handle_events_locked((libusb_context*) (unsigned long) ctx, &tv)); - } - else - { - ThrowIfUnsuccessful(env, libusb_handle_events_locked((libusb_context*) (unsigned long) ctx, NULL)); - } + clearLibusbJavaError(); + if (timevalue) { + timeval tv; + tv.tv_sec = timevalue; + tv.tv_usec = 0; + ThrowIfUnsuccessful(env, libusb_handle_events_locked((libusb_context*) (unsigned long) ctx, &tv)); + } + else + { + ThrowIfUnsuccessful(env, libusb_handle_events_locked((libusb_context*) (unsigned long) ctx, NULL)); + } } /******************************************************************************************** @@ -1607,8 +1607,8 @@ JNIEXPORT void JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1handle_1events_1locke * Signature: (J)I ********************************************************************************************/ JNIEXPORT jint JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1pollfds_1handle_1timeouts(JNIEnv *env, jclass obj, jlong ctx) { - clearLibusbJavaError(); - return libusb_pollfds_handle_timeouts((libusb_context*) (unsigned long) ctx); + clearLibusbJavaError(); + return libusb_pollfds_handle_timeouts((libusb_context*) (unsigned long) ctx); } /******************************************************************************************** @@ -1617,29 +1617,29 @@ JNIEXPORT jint JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1pollfds_1handle_1time * Signature: (J)I ********************************************************************************************/ JNIEXPORT jint JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1get_1next_1timeout(JNIEnv *env, jclass obj, jlong ctx) { - clearLibusbJavaError(); - int res; - timeval tv; + clearLibusbJavaError(); + int res; + timeval tv; - /*! \todo Is this code working correctly if we use it in a 64-Bit environment? Actually - * it's unlikely to have a timeout of more than 2^(31)-1 seconds. But still it is a - * possible value. */ - res = libusb_get_next_timeout((libusb_context*) (unsigned long) ctx, &tv); + /*! \todo Is this code working correctly if we use it in a 64-Bit environment? Actually + * it's unlikely to have a timeout of more than 2^(31)-1 seconds. But still it is a + * possible value. */ + res = libusb_get_next_timeout((libusb_context*) (unsigned long) ctx, &tv); - if (res > 0) - { - res = tv.tv_sec; - } - else if (res == 0) { - res = -1; - } - else - { - ThrowLibusbError(env, res); - res = -2; - } + if (res > 0) + { + res = tv.tv_sec; + } + else if (res == 0) { + res = -1; + } + else + { + ThrowLibusbError(env, res); + res = -2; + } - return res; + return res; } /******************************************************************************************** @@ -1648,15 +1648,15 @@ JNIEXPORT jint JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1get_1next_1timeout(JN * Signature: (JZ)V ********************************************************************************************/ JNIEXPORT void JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1set_1pollfd_1notifiers(JNIEnv *env, jclass obj, jlong ctx, jboolean remove) { - clearLibusbJavaError(); - if (remove) - { - libusb_set_pollfd_notifiers((libusb_context*) (unsigned long) ctx, NULL, NULL, env); - } - else - { - libusb_set_pollfd_notifiers((libusb_context*) (unsigned long) ctx, fd_added_callback, fd_removed_callback, env); - } + clearLibusbJavaError(); + if (remove) + { + libusb_set_pollfd_notifiers((libusb_context*) (unsigned long) ctx, NULL, NULL, env); + } + else + { + libusb_set_pollfd_notifiers((libusb_context*) (unsigned long) ctx, fd_added_callback, fd_removed_callback, env); + } } /******************************************************************************************** @@ -1665,37 +1665,37 @@ JNIEXPORT void JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1set_1pollfd_1notifier * Signature: (J)[Lch/ntb/usb/Libusb_pollfd; ********************************************************************************************/ JNIEXPORT jobjectArray JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1get_1pollfds(JNIEnv *env, jclass obj, jlong ctx) { - clearLibusbJavaError(); - int count = 0; - jobjectArray pollfdArray; - jobject pollfdObj; - const libusb_pollfd **fdList; + clearLibusbJavaError(); + int count = 0; + jobjectArray pollfdArray; + jobject pollfdObj; + const libusb_pollfd **fdList; - fdList = libusb_get_pollfds((libusb_context*) (unsigned long) ctx); - if (fdList == NULL) { - return NULL; - } - /*determine the length of the list*/ - while (fdList[count]) { - count++; - } - pollfdArray = (jobjectArray) env->NewObjectArray(count, usb_pollfd_clazz, NULL); - if (!pollfdArray) { - setLibusbJavaError("libusb_get_pollfds: error NewObjectArry (pollfdArray"); - return NULL; - } + fdList = libusb_get_pollfds((libusb_context*) (unsigned long) ctx); + if (fdList == NULL) { + return NULL; + } + /*determine the length of the list*/ + while (fdList[count]) { + count++; + } + pollfdArray = (jobjectArray) env->NewObjectArray(count, usb_pollfd_clazz, NULL); + if (!pollfdArray) { + setLibusbJavaError("libusb_get_pollfds: error NewObjectArry (pollfdArray"); + return NULL; + } - for (int i = 0; i < count; i++) { - pollfdObj = env->NewObject(usb_pollfd_clazz, usb_pollfd_Mid); - if (!pollfdObj) { - setLibusbJavaError("libusb_get_pollfds: Error NewObject (pollfdObj)"); - return NULL; - } - env->SetObjectArrayElement(pollfdArray, i, pollfdObj); - env->SetIntField(pollfdObj, usb_pollfdFID_fd, fdList[i]->fd); - env->SetShortField(pollfdObj, usb_pollfdFID_events, fdList[i]->events); - } - return pollfdArray; + for (int i = 0; i < count; i++) { + pollfdObj = env->NewObject(usb_pollfd_clazz, usb_pollfd_Mid); + if (!pollfdObj) { + setLibusbJavaError("libusb_get_pollfds: Error NewObject (pollfdObj)"); + return NULL; + } + env->SetObjectArrayElement(pollfdArray, i, pollfdObj); + env->SetIntField(pollfdObj, usb_pollfdFID_fd, fdList[i]->fd); + env->SetShortField(pollfdObj, usb_pollfdFID_events, fdList[i]->events); + } + return pollfdArray; } /******************************************************************************************** @@ -1704,14 +1704,14 @@ JNIEXPORT jobjectArray JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1get_1pollfds( * Signature: (JIIII[BII)I ********************************************************************************************/ JNIEXPORT jint JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1control_1transfer(JNIEnv *env, jclass obj, jlong handle, jint bmRequestType, jint bRequest, jint wValue, jint wIndex, jbyteArray buffer, jint wLength, jint timeout) { - clearLibusbJavaError(); - int res; - unsigned char* data; - data = (unsigned char*) env->GetByteArrayElements(buffer, NULL); - res = libusb_control_transfer((libusb_device_handle*) (unsigned long) handle, bmRequestType, bRequest, wValue, wIndex, data, wLength, timeout); - env->ReleaseByteArrayElements(buffer, (jbyte*) data, 0); + clearLibusbJavaError(); + int res; + unsigned char* data; + data = (unsigned char*) env->GetByteArrayElements(buffer, NULL); + res = libusb_control_transfer((libusb_device_handle*) (unsigned long) handle, bmRequestType, bRequest, wValue, wIndex, data, wLength, timeout); + env->ReleaseByteArrayElements(buffer, (jbyte*) data, 0); - return res; + return res; } /******************************************************************************************** @@ -1720,21 +1720,21 @@ JNIEXPORT jint JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1control_1transfer(JNI * Signature: (JB[BII)I ********************************************************************************************/ JNIEXPORT jint JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1bulk_1transfer(JNIEnv *env, jclass obj, jlong handle, jbyte endpoint, jbyteArray buffer, jint length, jint timeout) { - clearLibusbJavaError(); - int libusb_result = 0; - int bytes_transferred = 0; - unsigned char* data = (unsigned char*) env->GetByteArrayElements(buffer, NULL); + clearLibusbJavaError(); + int libusb_result = 0; + int bytes_transferred = 0; + unsigned char* data = (unsigned char*) env->GetByteArrayElements(buffer, NULL); - libusb_result = libusb_bulk_transfer((libusb_device_handle*) (unsigned long) handle, endpoint, data, length, &bytes_transferred, timeout); - env->ReleaseByteArrayElements(buffer, (jbyte*) data, 0); + libusb_result = libusb_bulk_transfer((libusb_device_handle*) (unsigned long) handle, endpoint, data, length, &bytes_transferred, timeout); + env->ReleaseByteArrayElements(buffer, (jbyte*) data, 0); - if (libusb_result != 0) - { - ThrowLibusbError(env, libusb_result); - bytes_transferred = 0; - } + if (libusb_result != 0) + { + ThrowLibusbError(env, libusb_result); + bytes_transferred = 0; + } - return bytes_transferred; + return bytes_transferred; } /******************************************************************************************** @@ -1743,20 +1743,20 @@ JNIEXPORT jint JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1bulk_1transfer(JNIEnv * Signature: (JB[BII)I ********************************************************************************************/ JNIEXPORT jint JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1interrupt_1transfer(JNIEnv *env, jclass obj, jlong handle, jbyte endpoint, jbyteArray buffer, jint length, jint timeout) { - clearLibusbJavaError(); - int libusb_result; - int bytes_transferred = 0; - unsigned char* data = (unsigned char*) env->GetByteArrayElements(buffer, NULL); - libusb_result = libusb_interrupt_transfer((libusb_device_handle*) (unsigned long) handle, endpoint, data, length, &bytes_transferred, timeout); - env->ReleaseByteArrayElements(buffer, (jbyte*) data, 0); + clearLibusbJavaError(); + int libusb_result; + int bytes_transferred = 0; + unsigned char* data = (unsigned char*) env->GetByteArrayElements(buffer, NULL); + libusb_result = libusb_interrupt_transfer((libusb_device_handle*) (unsigned long) handle, endpoint, data, length, &bytes_transferred, timeout); + env->ReleaseByteArrayElements(buffer, (jbyte*) data, 0); - if (libusb_result != 0) - { - ThrowLibusbError(env, libusb_result); - bytes_transferred = 0; - } + if (libusb_result != 0) + { + ThrowLibusbError(env, libusb_result); + bytes_transferred = 0; + } - return bytes_transferred; + return bytes_transferred; } /******************************************************************************************** @@ -1765,15 +1765,15 @@ JNIEXPORT jint JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1interrupt_1transfer(J * Signature: ()Ljava/lang/String; ********************************************************************************************/ JNIEXPORT jstring JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1strerror(JNIEnv *env, jclass obj) { - char *str = "Libusb-1.0 Error"; + char *str = "Libusb-1.0 Error"; - /* check for LibusbJava specific errors first*/ - if (libusbJavaError != NULL) { - str = libusbJavaError; - clearLibusbJavaError(); - } + /* check for LibusbJava specific errors first*/ + if (libusbJavaError != NULL) { + str = libusbJavaError; + clearLibusbJavaError(); + } - return env->NewStringUTF(str); + return env->NewStringUTF(str); } /* @@ -1783,7 +1783,7 @@ JNIEXPORT jstring JNICALL Java_ch_ntb_usb_LibusbJava1_libusb_1strerror(JNIEnv *e */ JNIEXPORT jint JNICALL Java_ch_ntb_usb_LibusbJava1_setup(JNIEnv *env, jclass obj) { - return ReferencesLoad(&info, env, jniObjects); + return ReferencesLoad(&info, env, jniObjects); } /* @@ -1793,7 +1793,7 @@ JNIEXPORT jint JNICALL Java_ch_ntb_usb_LibusbJava1_setup(JNIEnv *env, jclass obj */ JNIEXPORT void JNICALL Java_ch_ntb_usb_LibusbJava1_teardown(JNIEnv *env, jclass obj) { - ReferencesUnload(&info, env); + ReferencesUnload(&info, env); } /******************************************************************************************** @@ -1803,8 +1803,8 @@ JNIEXPORT void JNICALL Java_ch_ntb_usb_LibusbJava1_teardown(JNIEnv *env, jclass ********************************************************************************************/ static void LIBUSB_CALL transfer_callback(struct libusb_transfer *transfer) { - ((JNIEnv*) transfer->user_data)->CallVoidMethod(usb_cb_clazz, - usb_transfer_cb_Mid); + ((JNIEnv*) transfer->user_data)->CallVoidMethod(usb_cb_clazz, + usb_transfer_cb_Mid); } /******************************************************************************************** @@ -1814,8 +1814,8 @@ static void LIBUSB_CALL transfer_callback(struct libusb_transfer *transfer) { ********************************************************************************************/ static void LIBUSB_CALL fd_added_callback(int fd, short events, void *user_data) { - ((JNIEnv*) user_data)->CallVoidMethod(usb_cb_clazz, usb_fd_added_cb_Mid, - (jint) fd); + ((JNIEnv*) user_data)->CallVoidMethod(usb_cb_clazz, usb_fd_added_cb_Mid, + (jint) fd); } /******************************************************************************************** @@ -1825,98 +1825,98 @@ static void LIBUSB_CALL fd_added_callback(int fd, short events, void *user_data) ********************************************************************************************/ static void LIBUSB_CALL fd_removed_callback(int fd, void *user_data) { - ((JNIEnv*) user_data)->CallVoidMethod(usb_cb_clazz, usb_fd_removed_cb_Mid, - (jint) fd); + ((JNIEnv*) user_data)->CallVoidMethod(usb_cb_clazz, usb_fd_removed_cb_Mid, + (jint) fd); } -/*! \brief Turns a memory section into a java byte array that can be returned to the java +/*! \brief Turns a memory section into a java byte array that can be returned to the java * environment. * - * \param env Environment to create the array for - * \param data Pointer to the data to be put in the array - * \param len [bytes] Length of the data to be put into the array + * \param env Environment to create the array for + * \param data Pointer to the data to be put in the array + * \param len [bytes] Length of the data to be put into the array * - * \return The pointer to the newly created byte array. NULL if an error occured + * \return The pointer to the newly created byte array. NULL if an error occured * - * \note If NULL is returned, #libusbJavaError is set to a matching error string. + * \note If NULL is returned, #libusbJavaError is set to a matching error string. * - * \test Tested through the unit-test of the java part of this dll by passing a string - * with length 5 and checking the result. - * \test Tested through the Unit-Test of the java part of this dll by passing a string - * with length 0 and checking the result. + * \test Tested through the unit-test of the java part of this dll by passing a string + * with length 5 and checking the result. + * \test Tested through the Unit-Test of the java part of this dll by passing a string + * with length 0 and checking the result. */ static __inline jbyteArray JNICALL to_byteArray(JNIEnv *env, const void *data, size_t len) { - jbyteArray result = env->NewByteArray(len); + jbyteArray result = env->NewByteArray(len); - if (result != NULL) { - /* By using SetByteArrayRegion, we avoid that the JNI layer first copies the data of - * the array in our space just to overwrite them. As we just allocated the - * byte array with a length of "len", the set operation can never fail. The check for an - * exception can therefore be omitted. */ - env->SetByteArrayRegion(result, 0, len, (const signed char *)data); + if (result != NULL) { + /* By using SetByteArrayRegion, we avoid that the JNI layer first copies the data of + * the array in our space just to overwrite them. As we just allocated the + * byte array with a length of "len", the set operation can never fail. The check for an + * exception can therefore be omitted. */ + env->SetByteArrayRegion(result, 0, len, (const signed char *)data); #if 0 /* No need to check for exceptions here... */ - if (env->ExceptionOccurred()){ - setLibusbJavaError("to_byteArray: unable to copy data to array"); - env->DeleteLocalRef(result); - result = NULL; - } + if (env->ExceptionOccurred()){ + setLibusbJavaError("to_byteArray: unable to copy data to array"); + env->DeleteLocalRef(result); + result = NULL; + } #endif - } - else { - setLibusbJavaError("to_byteArray: out of memory"); - } + } + else { + setLibusbJavaError("to_byteArray: out of memory"); + } - return result; + return result; } -/*! \brief Convenience function that throws an exception in the callers environment if - * the given result is not "success" +/*! \brief Convenience function that throws an exception in the callers environment if + * the given result is not "success" * - * This function can be used to wrap calls to the libusb if no further reaction - * on a unsuccessful result is needed, than throwing an exception in the java - * environment. + * This function can be used to wrap calls to the libusb if no further reaction + * on a unsuccessful result is needed, than throwing an exception in the java + * environment. * - * \param env Java environment of the caller - * \param libusb_result Result code of the libusb call. If the result is != 0, a - * LibusbError is thrown. + * \param env Java environment of the caller + * \param libusb_result Result code of the libusb call. If the result is != 0, a + * LibusbError is thrown. * - * \test Code-Review + * \test Code-Review */ static __inline void JNICALL ThrowIfUnsuccessful(JNIEnv *env, int libusb_result) { - if (libusb_result != 0) - { - ThrowLibusbError(env, libusb_result); - } + if (libusb_result != 0) + { + ThrowLibusbError(env, libusb_result); + } } #ifdef DO_UNIT_TEST - TEST_CASE(ThrowIfUnsuccessfulTest) - { - TEST_CONTEXT(); + TEST_CASE(ThrowIfUnsuccessfulTest) + { + TEST_CONTEXT(); - CuAssert(tc, "Pre-Condition: No exception pending", env->ExceptionCheck() == JNI_FALSE); + CuAssert(tc, "Pre-Condition: No exception pending", env->ExceptionCheck() == JNI_FALSE); - ThrowIfUnsuccessful(env, 0); - CuAssert(tc, "No exception pending", env->ExceptionCheck() == JNI_FALSE); + ThrowIfUnsuccessful(env, 0); + CuAssert(tc, "No exception pending", env->ExceptionCheck() == JNI_FALSE); - ThrowIfUnsuccessful(env, -1); - CuAssert(tc, "Exception pending < 0", env->ExceptionCheck() == JNI_TRUE); - env->ExceptionClear(); + ThrowIfUnsuccessful(env, -1); + CuAssert(tc, "Exception pending < 0", env->ExceptionCheck() == JNI_TRUE); + env->ExceptionClear(); - ThrowIfUnsuccessful(env, 1); - CuAssert(tc, "Exception pending > 0", env->ExceptionCheck() == JNI_TRUE); - env->ExceptionClear(); - } + ThrowIfUnsuccessful(env, 1); + CuAssert(tc, "Exception pending > 0", env->ExceptionCheck() == JNI_TRUE); + env->ExceptionClear(); + } #endif -/*! \brief Throws an exception of type LibusbError in the calling Java environment. +/*! \brief Throws an exception of type LibusbError in the calling Java environment. * - * \param env Environment to throw the exception in - * \param code Error code that represents the cause of the exception + * \param env Environment to throw the exception in + * \param code Error code that represents the cause of the exception * - * \test Tested through the unit-test of the java part of this dll + * \test Tested through the unit-test of the java part of this dll */ static __inline void JNICALL ThrowLibusbError(JNIEnv *env, jint code) { @@ -1926,635 +1926,635 @@ static __inline void JNICALL ThrowLibusbError(JNIEnv *env, jint code) jclass clazz = env->FindClass("ch/ntb/usb/exceptions/LibusbError"); if (clazz == NULL) { - goto no_class; + goto no_class; } constructor = env->GetMethodID(clazz, "", "(I)V"); - if (constructor == NULL) - { - goto no_constructor; - } + if (constructor == NULL) + { + goto no_constructor; + } - exception = (jthrowable)env->NewObject(clazz, constructor, code); - if (exception == NULL) - { - goto no_object; - } + exception = (jthrowable)env->NewObject(clazz, constructor, code); + if (exception == NULL) + { + goto no_object; + } - if (env->Throw(exception) != 0) - { - goto throw_failed; - } + if (env->Throw(exception) != 0) + { + goto throw_failed; + } - env->DeleteLocalRef(exception); - env->DeleteLocalRef(clazz); + env->DeleteLocalRef(exception); + env->DeleteLocalRef(clazz); - return; + return; /* Error Handling. All errors covered here are caused by JNI callbacks and have * therefore already thrown appropriate exceptions in the Java environment. * Therefore we only have to cleanup what we constructed. */ throw_failed: - env->DeleteLocalRef(exception); + env->DeleteLocalRef(exception); no_object: no_constructor: - env->DeleteLocalRef(clazz); + env->DeleteLocalRef(clazz); no_class: - return; + return; } #ifdef DO_UNIT_TEST - static void ThrowLibusbErrorTestEvaluate(CuTest *tc, JNIEnv *env, int code) { - /* Prepare the needed environment */ - jclass clazz = env->FindClass("ch/ntb/usb/exceptions/LibusbError"); - CuAssert(tc, "LibusbError class not found!", clazz != NULL); - jfieldID f_code = env->GetFieldID(clazz, "code", "I"); - CuAssert(tc, "LibusbError has a field \"code\"", f_code != NULL); + static void ThrowLibusbErrorTestEvaluate(CuTest *tc, JNIEnv *env, int code) { + /* Prepare the needed environment */ + jclass clazz = env->FindClass("ch/ntb/usb/exceptions/LibusbError"); + CuAssert(tc, "LibusbError class not found!", clazz != NULL); + jfieldID f_code = env->GetFieldID(clazz, "code", "I"); + CuAssert(tc, "LibusbError has a field \"code\"", f_code != NULL); - /* Evaluate the effect of the call */ - jthrowable e = env->ExceptionOccurred(); - CuAssert(tc, "An exception occured", e != NULL); - CuAssert(tc, "The exception is of type LibusbError", env->IsInstanceOf(e, clazz) == JNI_TRUE); - CuAssertIntEquals_Msg(tc, "The exception error code is correct", code, env->GetIntField(e, f_code)); - env->ExceptionClear(); - } + /* Evaluate the effect of the call */ + jthrowable e = env->ExceptionOccurred(); + CuAssert(tc, "An exception occured", e != NULL); + CuAssert(tc, "The exception is of type LibusbError", env->IsInstanceOf(e, clazz) == JNI_TRUE); + CuAssertIntEquals_Msg(tc, "The exception error code is correct", code, env->GetIntField(e, f_code)); + env->ExceptionClear(); + } - TEST_CASE(ThrowLibusbErrorTest) - { - TEST_CONTEXT(); + TEST_CASE(ThrowLibusbErrorTest) + { + TEST_CONTEXT(); - /* Test borders and run through a range of values including 0 */ - int code = 0; - for (code = -5;code < 5;code++) { - ThrowLibusbError(env, code); - ThrowLibusbErrorTestEvaluate(tc, env, code); - } + /* Test borders and run through a range of values including 0 */ + int code = 0; + for (code = -5;code < 5;code++) { + ThrowLibusbError(env, code); + ThrowLibusbErrorTestEvaluate(tc, env, code); + } - ThrowLibusbError(env, 0x80000000); - ThrowLibusbErrorTestEvaluate(tc, env, 0x80000000); - ThrowLibusbError(env, 0x7FFFFFFF); - ThrowLibusbErrorTestEvaluate(tc, env, 0x7FFFFFFF); - } + ThrowLibusbError(env, 0x80000000); + ThrowLibusbErrorTestEvaluate(tc, env, 0x80000000); + ThrowLibusbError(env, 0x7FFFFFFF); + ThrowLibusbErrorTestEvaluate(tc, env, 0x7FFFFFFF); + } #endif -/*! \brief Checks if the references are loaded correctly and throws an exception if not +/*! \brief Checks if the references are loaded correctly and throws an exception if not * - * This function serves as a "paranoia" function to make sure, there are no calls - * to the library without loading the references first. + * This function serves as a "paranoia" function to make sure, there are no calls + * to the library without loading the references first. * - * \param instance Reference-Instance to be checked - * \param env JNI Environment the function can work with in case of an error + * \param instance Reference-Instance to be checked + * \param env JNI Environment the function can work with in case of an error * - * \return - * - 0 if everything is ok - * - <0 in case the references are not loaded + * \return + * - 0 if everything is ok + * - <0 in case the references are not loaded */ -static __inline int ReferencesCheck(tLUJ_Instance *instance, JNIEnv *env) +static __inline int ReferencesCheck(tLUJ_Instance *instance, JNIEnv *env) { - int result = -1; + int result = -1; - if (instance->jni.refs_loaded == 0){ - ThrowLibusbError(env, ERROR_JAVA_REFERENCES_NOT_LOADED); - } - else { - result = 0; - } + if (instance->jni.refs_loaded == 0){ + ThrowLibusbError(env, ERROR_JAVA_REFERENCES_NOT_LOADED); + } + else { + result = 0; + } - return result; + return result; } -/*! \brief Loads all class References from the environment. +/*! \brief Loads all class References from the environment. * - * \param instance Pointer to an instance of a status data struct the action should be performed with - * \param env Pointer to an environment enabling access to the jvm - * \param objects An array of function calls for connecting / disconnecting - * the objects to the JNI layer. The array is expected to be - * NULL terminated. (tJNIObject::connect set to NULL). + * \param instance Pointer to an instance of a status data struct the action should be performed with + * \param env Pointer to an environment enabling access to the jvm + * \param objects An array of function calls for connecting / disconnecting + * the objects to the JNI layer. The array is expected to be + * NULL terminated. (tJNIObject::connect set to NULL). * - * \return - * - 0 if the references could be loaded successfully - * - <0 if an error occured + * \return + * - 0 if the references could be loaded successfully + * - <0 if an error occured * - * \note For every valid row it is expected that neither connect nor disconnect is NULL + * \note For every valid row it is expected that neither connect nor disconnect is NULL */ static __inline int ReferencesLoad(tLUJ_Instance *instance, JNIEnv *env, const tJNIObject *objects) { - int result = -1; + int result = -1; - /* If the references are not (yet) loaded, we start loading - * the references for the classes used by this wrapper. */ - if (instance->jni.refs_loaded == 0) - { - int i = 0; + /* If the references are not (yet) loaded, we start loading + * the references for the classes used by this wrapper. */ + if (instance->jni.refs_loaded == 0) + { + int i = 0; - result = 0; + result = 0; - /* Walk through all registered objects and try to connect - * them. */ - while (objects[i].connect != NULL) { - if (objects[i].connect(env) != 0) { - result = -1; - break; - } + /* Walk through all registered objects and try to connect + * them. */ + while (objects[i].connect != NULL) { + if (objects[i].connect(env) != 0) { + result = -1; + break; + } - ++i; - } + ++i; + } - /* If an error occured, we roll back all the previously - * connected elements. */ - if (result != 0) { - while (i > 0) { - --i; - objects[i].disconnect(env); - } + /* If an error occured, we roll back all the previously + * connected elements. */ + if (result != 0) { + while (i > 0) { + --i; + objects[i].disconnect(env); + } - instance->jni.refs_loaded = 0; - } - else - { + instance->jni.refs_loaded = 0; + } + else + { #ifndef DO_UNIT_TEST - { - /* find classes and field ids*/ - #ifdef DEBUGON - printf("load references starts\n"); - #endif + { + /* find classes and field ids*/ + #ifdef DEBUGON + printf("load references starts\n"); + #endif - #ifdef DEBUGON - printf("usb_device references loaded\n"); - #endif - /* usb_device_descriptor*/ - jobject devDescClazz = env->FindClass("ch/ntb/usb/Usb_Device_Descriptor");//returns a local reference - usb_devDescClazz = (jclass)env->NewGlobalRef(devDescClazz);//make it global - if (usb_devDescClazz == NULL) { - return -1; /* exception thrown */ - } - usb_devDescMid = env->GetMethodID(usb_devDescClazz, "", "()V"); - if (usb_devDescMid == NULL) { - return -1; - } - usb_devDescFID_bLength = env->GetFieldID(usb_devDescClazz, "bLength", "B"); - usb_devDescFID_bDescriptorType = env->GetFieldID(usb_devDescClazz, "bDescriptorType", "B"); - usb_devDescFID_bcdUSB = env->GetFieldID(usb_devDescClazz, "bcdUSB", "S"); - usb_devDescFID_bDeviceClass = env->GetFieldID(usb_devDescClazz, "bDeviceClass", "B"); - usb_devDescFID_bDeviceSubClass = env->GetFieldID(usb_devDescClazz, "bDeviceSubClass", "B"); - usb_devDescFID_bDeviceProtocol = env->GetFieldID(usb_devDescClazz, "bDeviceProtocol", "B"); - usb_devDescFID_bMaxPacketSize0 = env->GetFieldID(usb_devDescClazz, "bMaxPacketSize0", "B"); - usb_devDescFID_idVendor = env->GetFieldID(usb_devDescClazz, "idVendor", "S"); - usb_devDescFID_idProduct = env->GetFieldID(usb_devDescClazz, "idProduct", "S"); - usb_devDescFID_bcdDevice = env->GetFieldID(usb_devDescClazz, "bcdDevice", "S"); - usb_devDescFID_iManufacturer = env->GetFieldID(usb_devDescClazz, "iManufacturer", "B"); - usb_devDescFID_iProduct = env->GetFieldID(usb_devDescClazz, "iProduct", "B"); - usb_devDescFID_iSerialNumber = env->GetFieldID(usb_devDescClazz, "iSerialNumber", "B"); - usb_devDescFID_bNumConfigurations = env->GetFieldID(usb_devDescClazz, "bNumConfigurations", "B"); + #ifdef DEBUGON + printf("usb_device references loaded\n"); + #endif + /* usb_device_descriptor*/ + jobject devDescClazz = env->FindClass("ch/ntb/usb/Usb_Device_Descriptor");//returns a local reference + usb_devDescClazz = (jclass)env->NewGlobalRef(devDescClazz);//make it global + if (usb_devDescClazz == NULL) { + return -1; /* exception thrown */ + } + usb_devDescMid = env->GetMethodID(usb_devDescClazz, "", "()V"); + if (usb_devDescMid == NULL) { + return -1; + } + usb_devDescFID_bLength = env->GetFieldID(usb_devDescClazz, "bLength", "B"); + usb_devDescFID_bDescriptorType = env->GetFieldID(usb_devDescClazz, "bDescriptorType", "B"); + usb_devDescFID_bcdUSB = env->GetFieldID(usb_devDescClazz, "bcdUSB", "S"); + usb_devDescFID_bDeviceClass = env->GetFieldID(usb_devDescClazz, "bDeviceClass", "B"); + usb_devDescFID_bDeviceSubClass = env->GetFieldID(usb_devDescClazz, "bDeviceSubClass", "B"); + usb_devDescFID_bDeviceProtocol = env->GetFieldID(usb_devDescClazz, "bDeviceProtocol", "B"); + usb_devDescFID_bMaxPacketSize0 = env->GetFieldID(usb_devDescClazz, "bMaxPacketSize0", "B"); + usb_devDescFID_idVendor = env->GetFieldID(usb_devDescClazz, "idVendor", "S"); + usb_devDescFID_idProduct = env->GetFieldID(usb_devDescClazz, "idProduct", "S"); + usb_devDescFID_bcdDevice = env->GetFieldID(usb_devDescClazz, "bcdDevice", "S"); + usb_devDescFID_iManufacturer = env->GetFieldID(usb_devDescClazz, "iManufacturer", "B"); + usb_devDescFID_iProduct = env->GetFieldID(usb_devDescClazz, "iProduct", "B"); + usb_devDescFID_iSerialNumber = env->GetFieldID(usb_devDescClazz, "iSerialNumber", "B"); + usb_devDescFID_bNumConfigurations = env->GetFieldID(usb_devDescClazz, "bNumConfigurations", "B"); - #ifdef DEBUGON - printf("usb_device_descriptor references loaded\n"); - #endif - /* usb_configuration_descriptor*/ - jobject confDescClazz = env->FindClass("ch/ntb/usb/Usb_Config_Descriptor");//returns a local reference - usb_confDescClazz = (jclass)env->NewGlobalRef(confDescClazz);//make it global - if (usb_confDescClazz == NULL) { - return -1; /* exception thrown */ - } - usb_confDescMid = env->GetMethodID(usb_confDescClazz, "", "()V"); - if (usb_confDescMid == NULL) { - return -1; - } + #ifdef DEBUGON + printf("usb_device_descriptor references loaded\n"); + #endif + /* usb_configuration_descriptor*/ + jobject confDescClazz = env->FindClass("ch/ntb/usb/Usb_Config_Descriptor");//returns a local reference + usb_confDescClazz = (jclass)env->NewGlobalRef(confDescClazz);//make it global + if (usb_confDescClazz == NULL) { + return -1; /* exception thrown */ + } + usb_confDescMid = env->GetMethodID(usb_confDescClazz, "", "()V"); + if (usb_confDescMid == NULL) { + return -1; + } - usb_confDescFID_bLength = env->GetFieldID(usb_confDescClazz, "bLength", "B"); - usb_confDescFID_bDescriptorType = env->GetFieldID(usb_confDescClazz, "bDescriptorType", "B"); - usb_confDescFID_wTotalLength = env->GetFieldID(usb_confDescClazz, "wTotalLength", "S"); - usb_confDescFID_bNumInterfaces = env->GetFieldID(usb_confDescClazz, "bNumInterfaces", "B"); - usb_confDescFID_bConfigurationValue = env->GetFieldID(usb_confDescClazz, "bConfigurationValue", "B"); - usb_confDescFID_iConfiguration = env->GetFieldID(usb_confDescClazz, "iConfiguration", "B"); - usb_confDescFID_bmAttributes = env->GetFieldID(usb_confDescClazz, "bmAttributes", "B"); - usb_confDescFID_MaxPower = env->GetFieldID(usb_confDescClazz, "MaxPower", "B"); - usb_confDescFID_interface_ = env->GetFieldID(usb_confDescClazz, "interface_", "[Lch/ntb/usb/Usb_Interface;"); - usb_confDescFID_extra = env->GetFieldID(usb_confDescClazz, "extra", "[B"); - usb_confDescFID_extralen = env->GetFieldID(usb_confDescClazz, "extralen", "I"); - #ifdef DEBUGON - printf("usb_configuration_descriptor references loaded\n"); - #endif - /* usb_interface*/ - jobject intClazz = env->FindClass("ch/ntb/usb/Usb_Interface");//returns a local reference - usb_intClazz = (jclass)env->NewGlobalRef(intClazz);//make it global - if (usb_intClazz == NULL) { - return -1; /* exception thrown */ - } - usb_intMid = env->GetMethodID(usb_intClazz, "", "()V"); - if (usb_intMid == NULL) { - return -1; - } - usb_intFID_altsetting = env->GetFieldID(usb_intClazz, "altsetting", "[Lch/ntb/usb/Usb_Interface_Descriptor;"); - usb_intFID_num_altsetting = env->GetFieldID(usb_intClazz, "num_altsetting", "I"); - #ifdef DEBUGON - printf("usb_interface references loaded\n"); - #endif - /* usb_interface_descriptor*/ - jobject intDescClazz = env->FindClass( "ch/ntb/usb/Usb_Interface_Descriptor");//returns a local reference - usb_intDescClazz = (jclass)env->NewGlobalRef(intDescClazz);//make it global - if (usb_intDescClazz == NULL) { - return -1; /* exception thrown */ - } - usb_intDescMid = env->GetMethodID(usb_intDescClazz, "", "()V"); - if (usb_intDescMid == NULL) { - return -1; - } - usb_intDescFID_bLength = env->GetFieldID(usb_intDescClazz, "bLength", "B"); - usb_intDescFID_bDescriptorType = env->GetFieldID(usb_intDescClazz, "bDescriptorType", "B"); - usb_intDescFID_bInterfaceNumber = env->GetFieldID(usb_intDescClazz, "bInterfaceNumber", "B"); - usb_intDescFID_bAlternateSetting = env->GetFieldID(usb_intDescClazz, "bAlternateSetting", "B"); - usb_intDescFID_bNumEndpoints = env->GetFieldID(usb_intDescClazz, "bNumEndpoints", "B"); - usb_intDescFID_bInterfaceClass = env->GetFieldID(usb_intDescClazz, "bInterfaceClass", "B"); - usb_intDescFID_bInterfaceSubClass = env->GetFieldID(usb_intDescClazz, "bInterfaceSubClass", "B"); - usb_intDescFID_bInterfaceProtocol = env->GetFieldID(usb_intDescClazz, "bInterfaceProtocol", "B"); - usb_intDescFID_iInterface = env->GetFieldID(usb_intDescClazz, "iInterface", "B"); - usb_intDescFID_endpoint = env->GetFieldID(usb_intDescClazz, "endpoint", "[Lch/ntb/usb/Usb_Endpoint_Descriptor;"); - usb_intDescFID_extra = env->GetFieldID(usb_intDescClazz, "extra", "[B"); - usb_intDescFID_extralen = env->GetFieldID(usb_intDescClazz, "extralen", "I"); - #ifdef DEBUGON - printf("usb_interface_descriptor references loaded\n"); - #endif - /* usb_endpoint_descriptor*/ - jobject epDescClazz = env->FindClass("ch/ntb/usb/Usb_Endpoint_Descriptor");//returns a local reference - usb_epDescClazz = (jclass)env->NewGlobalRef(epDescClazz);//make it global - if (usb_epDescClazz == NULL) { - return -1; /* exception thrown */ - } - usb_epDescMid = env->GetMethodID(usb_epDescClazz, "", "()V"); - if (usb_epDescMid == NULL) { - return -1; - } - usb_epDescFID_bLength = env->GetFieldID(usb_epDescClazz, "bLength", "B"); - usb_epDescFID_bDescriptorType = env->GetFieldID(usb_epDescClazz, "bDescriptorType", "B"); - usb_epDescFID_bEndpointAddress = env->GetFieldID(usb_epDescClazz, "bEndpointAddress", "B"); - usb_epDescFID_bmAttributes = env->GetFieldID(usb_epDescClazz, "bmAttributes", "B"); - usb_epDescFID_wMaxPacketSize = env->GetFieldID(usb_epDescClazz, "wMaxPacketSize", "S"); - usb_epDescFID_bInterval = env->GetFieldID(usb_epDescClazz, "bInterval", "B"); - usb_epDescFID_bRefresh = env->GetFieldID(usb_epDescClazz, "bRefresh", "B"); - usb_epDescFID_bSynchAddress = env->GetFieldID(usb_epDescClazz, "bSynchAddress", "B"); - usb_epDescFID_extra = env->GetFieldID(usb_epDescClazz, "extra", "[B"); - usb_epDescFID_extralen = env->GetFieldID(usb_epDescClazz, "extralen", "I"); - #ifdef DEBUGON - printf("usb_endpoint_descriptor references loaded\n"); - #endif - /*libusb_event*/ - jobject cb_clazz = env->FindClass("ch/ntb/usb/Libusb_event");//returns a local reference - usb_cb_clazz = (jclass)env->NewGlobalRef(cb_clazz);//make it global - if (usb_cb_clazz == NULL) { - printf("load Clazz failed\n"); - return -1; /*exception thrown*/ - } - usb_transfer_cb_Mid = env->GetMethodID(usb_cb_clazz, "transferCallback", "()V"); - if (usb_transfer_cb_Mid == NULL) { - printf("load method transferCallback failed\n"); - return -1; /* exception thrown */ - } - usb_fd_added_cb_Mid = env->GetMethodID(usb_cb_clazz, "fdAddedCallback", "(I)V"); - if (usb_fd_added_cb_Mid == NULL) { - printf("load method fdAddedCallback failed\n"); - return -1;/* exception thrown */ - } - usb_fd_removed_cb_Mid = env->GetMethodID(usb_cb_clazz, "fdRemovedCallback", "(I)V"); - if (usb_fd_removed_cb_Mid == NULL) { - printf("load method fdRemovedCallback failed\n"); - return -1;/* exception thrown */ - } - #ifdef DEBUGON - printf("usb_event_descriptor references loaded\n"); - #endif - /*Libusb_pollfd*/ - jobject pollfd_clazz = env->FindClass("ch/ntb/usb/Libusb_pollfd");//returns a local reference - usb_pollfd_clazz = (jclass)env->NewGlobalRef(pollfd_clazz);//make it global - if (usb_pollfd_clazz == NULL) { - return -1; /*exception thrown*/ - } - usb_pollfd_Mid = env->GetMethodID(usb_pollfd_clazz, "", "()V"); - // Bugfix: if (usb_devMid == NULL) @ Java_ch_ntb_usb_LibusbJava1_libusb_1get_1device_1list - Copy-paste error - if (usb_pollfd_Mid == NULL) { - return -1; /*exception thrown*/ - } - usb_pollfdFID_fd = env->GetFieldID(usb_pollfd_clazz, "fd", "I"); - usb_pollfdFID_events = env->GetFieldID(usb_pollfd_clazz, "events", "B"); - #ifdef DEBUGON - printf("Libusb_pollfd_descriptor references loaded\n"); - #endif + usb_confDescFID_bLength = env->GetFieldID(usb_confDescClazz, "bLength", "B"); + usb_confDescFID_bDescriptorType = env->GetFieldID(usb_confDescClazz, "bDescriptorType", "B"); + usb_confDescFID_wTotalLength = env->GetFieldID(usb_confDescClazz, "wTotalLength", "S"); + usb_confDescFID_bNumInterfaces = env->GetFieldID(usb_confDescClazz, "bNumInterfaces", "B"); + usb_confDescFID_bConfigurationValue = env->GetFieldID(usb_confDescClazz, "bConfigurationValue", "B"); + usb_confDescFID_iConfiguration = env->GetFieldID(usb_confDescClazz, "iConfiguration", "B"); + usb_confDescFID_bmAttributes = env->GetFieldID(usb_confDescClazz, "bmAttributes", "B"); + usb_confDescFID_MaxPower = env->GetFieldID(usb_confDescClazz, "MaxPower", "B"); + usb_confDescFID_interface_ = env->GetFieldID(usb_confDescClazz, "interface_", "[Lch/ntb/usb/Usb_Interface;"); + usb_confDescFID_extra = env->GetFieldID(usb_confDescClazz, "extra", "[B"); + usb_confDescFID_extralen = env->GetFieldID(usb_confDescClazz, "extralen", "I"); + #ifdef DEBUGON + printf("usb_configuration_descriptor references loaded\n"); + #endif + /* usb_interface*/ + jobject intClazz = env->FindClass("ch/ntb/usb/Usb_Interface");//returns a local reference + usb_intClazz = (jclass)env->NewGlobalRef(intClazz);//make it global + if (usb_intClazz == NULL) { + return -1; /* exception thrown */ + } + usb_intMid = env->GetMethodID(usb_intClazz, "", "()V"); + if (usb_intMid == NULL) { + return -1; + } + usb_intFID_altsetting = env->GetFieldID(usb_intClazz, "altsetting", "[Lch/ntb/usb/Usb_Interface_Descriptor;"); + usb_intFID_num_altsetting = env->GetFieldID(usb_intClazz, "num_altsetting", "I"); + #ifdef DEBUGON + printf("usb_interface references loaded\n"); + #endif + /* usb_interface_descriptor*/ + jobject intDescClazz = env->FindClass( "ch/ntb/usb/Usb_Interface_Descriptor");//returns a local reference + usb_intDescClazz = (jclass)env->NewGlobalRef(intDescClazz);//make it global + if (usb_intDescClazz == NULL) { + return -1; /* exception thrown */ + } + usb_intDescMid = env->GetMethodID(usb_intDescClazz, "", "()V"); + if (usb_intDescMid == NULL) { + return -1; + } + usb_intDescFID_bLength = env->GetFieldID(usb_intDescClazz, "bLength", "B"); + usb_intDescFID_bDescriptorType = env->GetFieldID(usb_intDescClazz, "bDescriptorType", "B"); + usb_intDescFID_bInterfaceNumber = env->GetFieldID(usb_intDescClazz, "bInterfaceNumber", "B"); + usb_intDescFID_bAlternateSetting = env->GetFieldID(usb_intDescClazz, "bAlternateSetting", "B"); + usb_intDescFID_bNumEndpoints = env->GetFieldID(usb_intDescClazz, "bNumEndpoints", "B"); + usb_intDescFID_bInterfaceClass = env->GetFieldID(usb_intDescClazz, "bInterfaceClass", "B"); + usb_intDescFID_bInterfaceSubClass = env->GetFieldID(usb_intDescClazz, "bInterfaceSubClass", "B"); + usb_intDescFID_bInterfaceProtocol = env->GetFieldID(usb_intDescClazz, "bInterfaceProtocol", "B"); + usb_intDescFID_iInterface = env->GetFieldID(usb_intDescClazz, "iInterface", "B"); + usb_intDescFID_endpoint = env->GetFieldID(usb_intDescClazz, "endpoint", "[Lch/ntb/usb/Usb_Endpoint_Descriptor;"); + usb_intDescFID_extra = env->GetFieldID(usb_intDescClazz, "extra", "[B"); + usb_intDescFID_extralen = env->GetFieldID(usb_intDescClazz, "extralen", "I"); + #ifdef DEBUGON + printf("usb_interface_descriptor references loaded\n"); + #endif + /* usb_endpoint_descriptor*/ + jobject epDescClazz = env->FindClass("ch/ntb/usb/Usb_Endpoint_Descriptor");//returns a local reference + usb_epDescClazz = (jclass)env->NewGlobalRef(epDescClazz);//make it global + if (usb_epDescClazz == NULL) { + return -1; /* exception thrown */ + } + usb_epDescMid = env->GetMethodID(usb_epDescClazz, "", "()V"); + if (usb_epDescMid == NULL) { + return -1; + } + usb_epDescFID_bLength = env->GetFieldID(usb_epDescClazz, "bLength", "B"); + usb_epDescFID_bDescriptorType = env->GetFieldID(usb_epDescClazz, "bDescriptorType", "B"); + usb_epDescFID_bEndpointAddress = env->GetFieldID(usb_epDescClazz, "bEndpointAddress", "B"); + usb_epDescFID_bmAttributes = env->GetFieldID(usb_epDescClazz, "bmAttributes", "B"); + usb_epDescFID_wMaxPacketSize = env->GetFieldID(usb_epDescClazz, "wMaxPacketSize", "S"); + usb_epDescFID_bInterval = env->GetFieldID(usb_epDescClazz, "bInterval", "B"); + usb_epDescFID_bRefresh = env->GetFieldID(usb_epDescClazz, "bRefresh", "B"); + usb_epDescFID_bSynchAddress = env->GetFieldID(usb_epDescClazz, "bSynchAddress", "B"); + usb_epDescFID_extra = env->GetFieldID(usb_epDescClazz, "extra", "[B"); + usb_epDescFID_extralen = env->GetFieldID(usb_epDescClazz, "extralen", "I"); + #ifdef DEBUGON + printf("usb_endpoint_descriptor references loaded\n"); + #endif + /*libusb_event*/ + jobject cb_clazz = env->FindClass("ch/ntb/usb/Libusb_event");//returns a local reference + usb_cb_clazz = (jclass)env->NewGlobalRef(cb_clazz);//make it global + if (usb_cb_clazz == NULL) { + printf("load Clazz failed\n"); + return -1; /*exception thrown*/ + } + usb_transfer_cb_Mid = env->GetMethodID(usb_cb_clazz, "transferCallback", "()V"); + if (usb_transfer_cb_Mid == NULL) { + printf("load method transferCallback failed\n"); + return -1; /* exception thrown */ + } + usb_fd_added_cb_Mid = env->GetMethodID(usb_cb_clazz, "fdAddedCallback", "(I)V"); + if (usb_fd_added_cb_Mid == NULL) { + printf("load method fdAddedCallback failed\n"); + return -1;/* exception thrown */ + } + usb_fd_removed_cb_Mid = env->GetMethodID(usb_cb_clazz, "fdRemovedCallback", "(I)V"); + if (usb_fd_removed_cb_Mid == NULL) { + printf("load method fdRemovedCallback failed\n"); + return -1;/* exception thrown */ + } + #ifdef DEBUGON + printf("usb_event_descriptor references loaded\n"); + #endif + /*Libusb_pollfd*/ + jobject pollfd_clazz = env->FindClass("ch/ntb/usb/Libusb_pollfd");//returns a local reference + usb_pollfd_clazz = (jclass)env->NewGlobalRef(pollfd_clazz);//make it global + if (usb_pollfd_clazz == NULL) { + return -1; /*exception thrown*/ + } + usb_pollfd_Mid = env->GetMethodID(usb_pollfd_clazz, "", "()V"); + // Bugfix: if (usb_devMid == NULL) @ Java_ch_ntb_usb_LibusbJava1_libusb_1get_1device_1list - Copy-paste error + if (usb_pollfd_Mid == NULL) { + return -1; /*exception thrown*/ + } + usb_pollfdFID_fd = env->GetFieldID(usb_pollfd_clazz, "fd", "I"); + usb_pollfdFID_events = env->GetFieldID(usb_pollfd_clazz, "events", "B"); + #ifdef DEBUGON + printf("Libusb_pollfd_descriptor references loaded\n"); + #endif - #ifdef DEBUGON - printf("libusb_init: Field initialization done \n"); - #endif - } + #ifdef DEBUGON + printf("libusb_init: Field initialization done \n"); + #endif + } #endif - instance->jni.objects = objects; - instance->jni.refs_loaded = -1; - } - } - else - { - result = 0; - } + instance->jni.objects = objects; + instance->jni.refs_loaded = -1; + } + } + else + { + result = 0; + } - return result; + return result; } -/*! \brief Unloads all cached references +/*! \brief Unloads all cached references * - * \param instance Pointer to an instance of a status data struct containing necessary information. - * \param env Pointer to the JVM-Environment, where actions can be performed with */ + * \param instance Pointer to an instance of a status data struct containing necessary information. + * \param env Pointer to the JVM-Environment, where actions can be performed with */ static __inline void ReferencesUnload(tLUJ_Instance *instance, JNIEnv *env) { - if (instance->jni.refs_loaded == 0) - return; + if (instance->jni.refs_loaded == 0) + return; - int i = 0; - const JNIObject *objects = instance->jni.objects; + int i = 0; + const JNIObject *objects = instance->jni.objects; - /* Walk through all registered objects and try to - * disconnect them. */ - while (objects[i].disconnect != NULL) { - objects[i].disconnect(env); - ++i; - } + /* Walk through all registered objects and try to + * disconnect them. */ + while (objects[i].disconnect != NULL) { + objects[i].disconnect(env); + ++i; + } - instance->jni.refs_loaded = 0; + instance->jni.refs_loaded = 0; } /* Unit-Tests for References*-Functions */ #ifdef DO_UNIT_TEST - enum { - TEST_RESULT_TEST1 = 0, - TEST_RESULT_TEST2, - TEST_RESULT_TEST3, - TEST_RESULT_TEST_FAILS, - TEST_RESULT_PARAM_FORWARDING, + enum { + TEST_RESULT_TEST1 = 0, + TEST_RESULT_TEST2, + TEST_RESULT_TEST3, + TEST_RESULT_TEST_FAILS, + TEST_RESULT_PARAM_FORWARDING, - TEST_RESULT_COUNT - }; + TEST_RESULT_COUNT + }; - enum { - TEST_OBJECTS_NORMAL = 0, - TEST_OBJECTS_FAILING, - TEST_OBJECTS_EMPTY, - TEST_OBJECTS_PARAM_FORWARDING, - }; + enum { + TEST_OBJECTS_NORMAL = 0, + TEST_OBJECTS_FAILING, + TEST_OBJECTS_EMPTY, + TEST_OBJECTS_PARAM_FORWARDING, + }; - static struct ReferencesXTestsData { - tLUJ_Instance instance; + static struct ReferencesXTestsData { + tLUJ_Instance instance; - struct { - int connect; - int disconnect; - }executed[TEST_RESULT_COUNT]; - }ReferencesXTestsData; + struct { + int connect; + int disconnect; + }executed[TEST_RESULT_COUNT]; + }ReferencesXTestsData; - static int Test1_connect(JNIEnv *env); - static void Test1_disconnect(JNIEnv *env); - static int Test2_connect(JNIEnv *env); - static void Test2_disconnect(JNIEnv *env); - static int Test3_connect(JNIEnv *env); - static void Test3_disconnect(JNIEnv *env); - static int TestFails_connect(JNIEnv *env); - static void TestFails_disconnect(JNIEnv *env); - static int TestParamForwarding_connect(JNIEnv *env); - static void TestParamForwarding_disconnect(JNIEnv *env); + static int Test1_connect(JNIEnv *env); + static void Test1_disconnect(JNIEnv *env); + static int Test2_connect(JNIEnv *env); + static void Test2_disconnect(JNIEnv *env); + static int Test3_connect(JNIEnv *env); + static void Test3_disconnect(JNIEnv *env); + static int TestFails_connect(JNIEnv *env); + static void TestFails_disconnect(JNIEnv *env); + static int TestParamForwarding_connect(JNIEnv *env); + static void TestParamForwarding_disconnect(JNIEnv *env); - static const tJNIObject ReferencesXTestsObjects[][5] = { - { /* TEST_OBJECTS_NORMAL */ - OBJ(Test1), - OBJ(Test2), - { NULL, NULL}, - OBJ(Test3), - { NULL, NULL}, - }, - { /* TEST_OBJECTS_FAILING */ - OBJ(Test1), - OBJ(Test2), - OBJ(TestFails), - { NULL, NULL}, - { NULL, NULL}, - }, - { /* TEST_OBJECTS_EMPTY */ - { NULL, NULL}, - { NULL, NULL}, - { NULL, NULL}, - { NULL, NULL}, - { NULL, NULL}, - }, - { /* TEST_OBJECTS_PARAM_FORWARDING */ - OBJ(TestParamForwarding), - { NULL, NULL }, - { NULL, NULL }, - { NULL, NULL }, - { NULL, NULL }, - } - }; + static const tJNIObject ReferencesXTestsObjects[][5] = { + { /* TEST_OBJECTS_NORMAL */ + OBJ(Test1), + OBJ(Test2), + { NULL, NULL}, + OBJ(Test3), + { NULL, NULL}, + }, + { /* TEST_OBJECTS_FAILING */ + OBJ(Test1), + OBJ(Test2), + OBJ(TestFails), + { NULL, NULL}, + { NULL, NULL}, + }, + { /* TEST_OBJECTS_EMPTY */ + { NULL, NULL}, + { NULL, NULL}, + { NULL, NULL}, + { NULL, NULL}, + { NULL, NULL}, + }, + { /* TEST_OBJECTS_PARAM_FORWARDING */ + OBJ(TestParamForwarding), + { NULL, NULL }, + { NULL, NULL }, + { NULL, NULL }, + { NULL, NULL }, + } + }; - TEST_CASE(ReferencesCheckTest) { - TEST_CONTEXT(); - memset(&ReferencesXTestsData, 0, sizeof(struct ReferencesXTestsData)); - CuAssert(tc, "Return value", ReferencesCheck(&ReferencesXTestsData.instance, env) < 0); - CuAssert(tc, "Exception Thrown", env->ExceptionCheck() == JNI_TRUE); + TEST_CASE(ReferencesCheckTest) { + TEST_CONTEXT(); + memset(&ReferencesXTestsData, 0, sizeof(struct ReferencesXTestsData)); + CuAssert(tc, "Return value", ReferencesCheck(&ReferencesXTestsData.instance, env) < 0); + CuAssert(tc, "Exception Thrown", env->ExceptionCheck() == JNI_TRUE); - ThrowLibusbErrorTestEvaluate(tc, env, ERROR_JAVA_REFERENCES_NOT_LOADED); + ThrowLibusbErrorTestEvaluate(tc, env, ERROR_JAVA_REFERENCES_NOT_LOADED); - ReferencesLoad(&ReferencesXTestsData.instance, env, ReferencesXTestsObjects[2]); - CuAssert(tc, "Return value", ReferencesCheck(&ReferencesXTestsData.instance, env) == 0); - CuAssert(tc, "No exception Thrown", env->ExceptionCheck() == JNI_FALSE); - } + ReferencesLoad(&ReferencesXTestsData.instance, env, ReferencesXTestsObjects[2]); + CuAssert(tc, "Return value", ReferencesCheck(&ReferencesXTestsData.instance, env) == 0); + CuAssert(tc, "No exception Thrown", env->ExceptionCheck() == JNI_FALSE); + } - TEST_CASE(ReferencesLoadTest) { - TEST_CONTEXT(); + TEST_CASE(ReferencesLoadTest) { + TEST_CONTEXT(); - /* Check initial loading of modules */ - memset(&ReferencesXTestsData, 0, sizeof(struct ReferencesXTestsData)); - CuAssert(tc, "References loaded return value", ReferencesLoad(&ReferencesXTestsData.instance, env, ReferencesXTestsObjects[TEST_OBJECTS_NORMAL]) >= 0); - CuAssert(tc, "1st module loaded", ReferencesXTestsData.executed[TEST_RESULT_TEST1].connect != 0); - CuAssert(tc, "1st module NOT unloaded", ReferencesXTestsData.executed[TEST_RESULT_TEST1].disconnect == 0); - CuAssert(tc, "2nd module loaded", ReferencesXTestsData.executed[TEST_RESULT_TEST2].connect != 0); - CuAssert(tc, "2nd module NOT unloaded", ReferencesXTestsData.executed[TEST_RESULT_TEST2].disconnect == 0); - CuAssert(tc, "3rd module NOT loaded", ReferencesXTestsData.executed[TEST_RESULT_TEST3].connect == 0); - CuAssert(tc, "3rd module NOT unloaded", ReferencesXTestsData.executed[TEST_RESULT_TEST3].disconnect == 0); + /* Check initial loading of modules */ + memset(&ReferencesXTestsData, 0, sizeof(struct ReferencesXTestsData)); + CuAssert(tc, "References loaded return value", ReferencesLoad(&ReferencesXTestsData.instance, env, ReferencesXTestsObjects[TEST_OBJECTS_NORMAL]) >= 0); + CuAssert(tc, "1st module loaded", ReferencesXTestsData.executed[TEST_RESULT_TEST1].connect != 0); + CuAssert(tc, "1st module NOT unloaded", ReferencesXTestsData.executed[TEST_RESULT_TEST1].disconnect == 0); + CuAssert(tc, "2nd module loaded", ReferencesXTestsData.executed[TEST_RESULT_TEST2].connect != 0); + CuAssert(tc, "2nd module NOT unloaded", ReferencesXTestsData.executed[TEST_RESULT_TEST2].disconnect == 0); + CuAssert(tc, "3rd module NOT loaded", ReferencesXTestsData.executed[TEST_RESULT_TEST3].connect == 0); + CuAssert(tc, "3rd module NOT unloaded", ReferencesXTestsData.executed[TEST_RESULT_TEST3].disconnect == 0); - /* Check repeated load call */ - memset(ReferencesXTestsData.executed, 0, sizeof(ReferencesXTestsData.executed)); - CuAssert(tc, "References loaded return value", ReferencesLoad(&ReferencesXTestsData.instance, env, ReferencesXTestsObjects[TEST_OBJECTS_NORMAL]) >= 0); - CuAssert(tc, "1st module NOT loaded again", ReferencesXTestsData.executed[TEST_RESULT_TEST1].connect == 0); - CuAssert(tc, "1st module NOT unloaded", ReferencesXTestsData.executed[TEST_RESULT_TEST1].disconnect == 0); - CuAssert(tc, "2nd module NOT loaded again", ReferencesXTestsData.executed[TEST_RESULT_TEST2].connect == 0); - CuAssert(tc, "2nd module NOT unloaded", ReferencesXTestsData.executed[TEST_RESULT_TEST2].disconnect == 0); - CuAssert(tc, "3rd module NOT loaded", ReferencesXTestsData.executed[TEST_RESULT_TEST3].connect == 0); - CuAssert(tc, "3rd module NOT unloaded", ReferencesXTestsData.executed[TEST_RESULT_TEST3].disconnect == 0); + /* Check repeated load call */ + memset(ReferencesXTestsData.executed, 0, sizeof(ReferencesXTestsData.executed)); + CuAssert(tc, "References loaded return value", ReferencesLoad(&ReferencesXTestsData.instance, env, ReferencesXTestsObjects[TEST_OBJECTS_NORMAL]) >= 0); + CuAssert(tc, "1st module NOT loaded again", ReferencesXTestsData.executed[TEST_RESULT_TEST1].connect == 0); + CuAssert(tc, "1st module NOT unloaded", ReferencesXTestsData.executed[TEST_RESULT_TEST1].disconnect == 0); + CuAssert(tc, "2nd module NOT loaded again", ReferencesXTestsData.executed[TEST_RESULT_TEST2].connect == 0); + CuAssert(tc, "2nd module NOT unloaded", ReferencesXTestsData.executed[TEST_RESULT_TEST2].disconnect == 0); + CuAssert(tc, "3rd module NOT loaded", ReferencesXTestsData.executed[TEST_RESULT_TEST3].connect == 0); + CuAssert(tc, "3rd module NOT unloaded", ReferencesXTestsData.executed[TEST_RESULT_TEST3].disconnect == 0); - memset(ReferencesXTestsData.executed, 0, sizeof(ReferencesXTestsData.executed)); - CuAssert(tc, "References loaded empty list", ReferencesLoad(&ReferencesXTestsData.instance, env, ReferencesXTestsObjects[TEST_OBJECTS_EMPTY]) >= 0); - CuAssert(tc, "1st module NOT loaded", ReferencesXTestsData.executed[TEST_RESULT_TEST1].connect == 0); - CuAssert(tc, "1st module NOT unloaded again", ReferencesXTestsData.executed[TEST_RESULT_TEST1].disconnect == 0); - CuAssert(tc, "2nd module NOT loaded", ReferencesXTestsData.executed[TEST_RESULT_TEST2].connect == 0); - CuAssert(tc, "2nd module NOT unloaded again", ReferencesXTestsData.executed[TEST_RESULT_TEST2].disconnect == 0); - CuAssert(tc, "3rd module NOT loaded", ReferencesXTestsData.executed[TEST_RESULT_TEST3].connect == 0); - CuAssert(tc, "3rd module NOT unloaded", ReferencesXTestsData.executed[TEST_RESULT_TEST3].disconnect == 0); - } + memset(ReferencesXTestsData.executed, 0, sizeof(ReferencesXTestsData.executed)); + CuAssert(tc, "References loaded empty list", ReferencesLoad(&ReferencesXTestsData.instance, env, ReferencesXTestsObjects[TEST_OBJECTS_EMPTY]) >= 0); + CuAssert(tc, "1st module NOT loaded", ReferencesXTestsData.executed[TEST_RESULT_TEST1].connect == 0); + CuAssert(tc, "1st module NOT unloaded again", ReferencesXTestsData.executed[TEST_RESULT_TEST1].disconnect == 0); + CuAssert(tc, "2nd module NOT loaded", ReferencesXTestsData.executed[TEST_RESULT_TEST2].connect == 0); + CuAssert(tc, "2nd module NOT unloaded again", ReferencesXTestsData.executed[TEST_RESULT_TEST2].disconnect == 0); + CuAssert(tc, "3rd module NOT loaded", ReferencesXTestsData.executed[TEST_RESULT_TEST3].connect == 0); + CuAssert(tc, "3rd module NOT unloaded", ReferencesXTestsData.executed[TEST_RESULT_TEST3].disconnect == 0); + } - TEST_CASE(ReferencesUnloadTest) { - TEST_CONTEXT(); + TEST_CASE(ReferencesUnloadTest) { + TEST_CONTEXT(); - memset(&ReferencesXTestsData, 0, sizeof(struct ReferencesXTestsData)); - CuAssert(tc, "References loaded", ReferencesLoad(&ReferencesXTestsData.instance, env, ReferencesXTestsObjects[TEST_OBJECTS_NORMAL]) >= 0); + memset(&ReferencesXTestsData, 0, sizeof(struct ReferencesXTestsData)); + CuAssert(tc, "References loaded", ReferencesLoad(&ReferencesXTestsData.instance, env, ReferencesXTestsObjects[TEST_OBJECTS_NORMAL]) >= 0); - /* Check initial unloading of modules */ - memset(ReferencesXTestsData.executed, 0, sizeof(ReferencesXTestsData.executed)); - ReferencesUnload(&ReferencesXTestsData.instance, env); - CuAssert(tc, "1st module NOT loaded", ReferencesXTestsData.executed[TEST_RESULT_TEST1].connect == 0); - CuAssert(tc, "1st module unloaded", ReferencesXTestsData.executed[TEST_RESULT_TEST1].disconnect != 0); - CuAssert(tc, "2nd module NOT loaded", ReferencesXTestsData.executed[TEST_RESULT_TEST2].connect == 0); - CuAssert(tc, "2nd module unloaded", ReferencesXTestsData.executed[TEST_RESULT_TEST2].disconnect != 0); - CuAssert(tc, "3rd module NOT loaded", ReferencesXTestsData.executed[TEST_RESULT_TEST3].connect == 0); - CuAssert(tc, "3rd module NOT unloaded", ReferencesXTestsData.executed[TEST_RESULT_TEST3].disconnect == 0); + /* Check initial unloading of modules */ + memset(ReferencesXTestsData.executed, 0, sizeof(ReferencesXTestsData.executed)); + ReferencesUnload(&ReferencesXTestsData.instance, env); + CuAssert(tc, "1st module NOT loaded", ReferencesXTestsData.executed[TEST_RESULT_TEST1].connect == 0); + CuAssert(tc, "1st module unloaded", ReferencesXTestsData.executed[TEST_RESULT_TEST1].disconnect != 0); + CuAssert(tc, "2nd module NOT loaded", ReferencesXTestsData.executed[TEST_RESULT_TEST2].connect == 0); + CuAssert(tc, "2nd module unloaded", ReferencesXTestsData.executed[TEST_RESULT_TEST2].disconnect != 0); + CuAssert(tc, "3rd module NOT loaded", ReferencesXTestsData.executed[TEST_RESULT_TEST3].connect == 0); + CuAssert(tc, "3rd module NOT unloaded", ReferencesXTestsData.executed[TEST_RESULT_TEST3].disconnect == 0); - /* Check repeated unload call */ - memset(ReferencesXTestsData.executed, 0, sizeof(ReferencesXTestsData.executed)); - ReferencesUnload(&ReferencesXTestsData.instance, env); - CuAssert(tc, "1st module NOT loaded", ReferencesXTestsData.executed[TEST_RESULT_TEST1].connect == 0); - CuAssert(tc, "1st module NOT unloaded again", ReferencesXTestsData.executed[TEST_RESULT_TEST1].disconnect == 0); - CuAssert(tc, "2nd module NOT loaded", ReferencesXTestsData.executed[TEST_RESULT_TEST2].connect == 0); - CuAssert(tc, "2nd module NOT unloaded again", ReferencesXTestsData.executed[TEST_RESULT_TEST2].disconnect == 0); - CuAssert(tc, "3rd module NOT loaded", ReferencesXTestsData.executed[TEST_RESULT_TEST3].connect == 0); - CuAssert(tc, "3rd module NOT unloaded", ReferencesXTestsData.executed[TEST_RESULT_TEST3].disconnect == 0); + /* Check repeated unload call */ + memset(ReferencesXTestsData.executed, 0, sizeof(ReferencesXTestsData.executed)); + ReferencesUnload(&ReferencesXTestsData.instance, env); + CuAssert(tc, "1st module NOT loaded", ReferencesXTestsData.executed[TEST_RESULT_TEST1].connect == 0); + CuAssert(tc, "1st module NOT unloaded again", ReferencesXTestsData.executed[TEST_RESULT_TEST1].disconnect == 0); + CuAssert(tc, "2nd module NOT loaded", ReferencesXTestsData.executed[TEST_RESULT_TEST2].connect == 0); + CuAssert(tc, "2nd module NOT unloaded again", ReferencesXTestsData.executed[TEST_RESULT_TEST2].disconnect == 0); + CuAssert(tc, "3rd module NOT loaded", ReferencesXTestsData.executed[TEST_RESULT_TEST3].connect == 0); + CuAssert(tc, "3rd module NOT unloaded", ReferencesXTestsData.executed[TEST_RESULT_TEST3].disconnect == 0); - memset(&ReferencesXTestsData, 0, sizeof(struct ReferencesXTestsData)); - CuAssert(tc, "References loaded", ReferencesLoad(&ReferencesXTestsData.instance, env, ReferencesXTestsObjects[TEST_OBJECTS_NORMAL]) >= 0); + memset(&ReferencesXTestsData, 0, sizeof(struct ReferencesXTestsData)); + CuAssert(tc, "References loaded", ReferencesLoad(&ReferencesXTestsData.instance, env, ReferencesXTestsObjects[TEST_OBJECTS_NORMAL]) >= 0); - memset(ReferencesXTestsData.executed, 0, sizeof(ReferencesXTestsData.executed)); - CuAssert(tc, "References loaded empty list", ReferencesLoad(&ReferencesXTestsData.instance, env, ReferencesXTestsObjects[TEST_OBJECTS_EMPTY]) >= 0); - CuAssert(tc, "1st module NOT loaded", ReferencesXTestsData.executed[TEST_RESULT_TEST1].connect == 0); - CuAssert(tc, "1st module NOT unloaded again", ReferencesXTestsData.executed[TEST_RESULT_TEST1].disconnect == 0); - CuAssert(tc, "2nd module NOT loaded", ReferencesXTestsData.executed[TEST_RESULT_TEST2].connect == 0); - CuAssert(tc, "2nd module NOT unloaded again", ReferencesXTestsData.executed[TEST_RESULT_TEST2].disconnect == 0); - CuAssert(tc, "3rd module NOT loaded", ReferencesXTestsData.executed[TEST_RESULT_TEST3].connect == 0); - CuAssert(tc, "3rd module NOT unloaded", ReferencesXTestsData.executed[TEST_RESULT_TEST3].disconnect == 0); - } + memset(ReferencesXTestsData.executed, 0, sizeof(ReferencesXTestsData.executed)); + CuAssert(tc, "References loaded empty list", ReferencesLoad(&ReferencesXTestsData.instance, env, ReferencesXTestsObjects[TEST_OBJECTS_EMPTY]) >= 0); + CuAssert(tc, "1st module NOT loaded", ReferencesXTestsData.executed[TEST_RESULT_TEST1].connect == 0); + CuAssert(tc, "1st module NOT unloaded again", ReferencesXTestsData.executed[TEST_RESULT_TEST1].disconnect == 0); + CuAssert(tc, "2nd module NOT loaded", ReferencesXTestsData.executed[TEST_RESULT_TEST2].connect == 0); + CuAssert(tc, "2nd module NOT unloaded again", ReferencesXTestsData.executed[TEST_RESULT_TEST2].disconnect == 0); + CuAssert(tc, "3rd module NOT loaded", ReferencesXTestsData.executed[TEST_RESULT_TEST3].connect == 0); + CuAssert(tc, "3rd module NOT unloaded", ReferencesXTestsData.executed[TEST_RESULT_TEST3].disconnect == 0); + } - TEST_CASE(ReferencesLoadRollbackTest) { - TEST_CONTEXT(); + TEST_CASE(ReferencesLoadRollbackTest) { + TEST_CONTEXT(); - memset(&ReferencesXTestsData, 0, sizeof(struct ReferencesXTestsData)); - CuAssert(tc, "References load rollback", ReferencesLoad(&ReferencesXTestsData.instance, env, ReferencesXTestsObjects[TEST_OBJECTS_FAILING]) < 0); - CuAssert(tc, "1st module loaded", ReferencesXTestsData.executed[TEST_RESULT_TEST1].connect != 0); - CuAssert(tc, "1st module unloaded", ReferencesXTestsData.executed[TEST_RESULT_TEST1].disconnect != 0); - CuAssert(tc, "2nd module loaded", ReferencesXTestsData.executed[TEST_RESULT_TEST2].connect != 0); - CuAssert(tc, "2nd module unloaded", ReferencesXTestsData.executed[TEST_RESULT_TEST2].disconnect != 0); - CuAssert(tc, "3rd module loaded", ReferencesXTestsData.executed[TEST_RESULT_TEST_FAILS].connect != 0); - CuAssert(tc, "3rd module NOT unloaded", ReferencesXTestsData.executed[TEST_RESULT_TEST_FAILS].disconnect == 0); - } + memset(&ReferencesXTestsData, 0, sizeof(struct ReferencesXTestsData)); + CuAssert(tc, "References load rollback", ReferencesLoad(&ReferencesXTestsData.instance, env, ReferencesXTestsObjects[TEST_OBJECTS_FAILING]) < 0); + CuAssert(tc, "1st module loaded", ReferencesXTestsData.executed[TEST_RESULT_TEST1].connect != 0); + CuAssert(tc, "1st module unloaded", ReferencesXTestsData.executed[TEST_RESULT_TEST1].disconnect != 0); + CuAssert(tc, "2nd module loaded", ReferencesXTestsData.executed[TEST_RESULT_TEST2].connect != 0); + CuAssert(tc, "2nd module unloaded", ReferencesXTestsData.executed[TEST_RESULT_TEST2].disconnect != 0); + CuAssert(tc, "3rd module loaded", ReferencesXTestsData.executed[TEST_RESULT_TEST_FAILS].connect != 0); + CuAssert(tc, "3rd module NOT unloaded", ReferencesXTestsData.executed[TEST_RESULT_TEST_FAILS].disconnect == 0); + } - TEST_CASE(ReferencesParameterForwardTest) { - memset(&ReferencesXTestsData, 0, sizeof(struct ReferencesXTestsData)); - CuAssert(tc, "References load", ReferencesLoad(&ReferencesXTestsData.instance, (JNIEnv *)0x06051982, ReferencesXTestsObjects[TEST_OBJECTS_PARAM_FORWARDING]) >= 0); - ReferencesUnload(&ReferencesXTestsData.instance, (JNIEnv *)0x06051982); - CuAssert(tc, "Connect parameter arrived.", ReferencesXTestsData.executed[TEST_RESULT_PARAM_FORWARDING].connect != 0); - CuAssert(tc, "Disconnect parameter arrived.", ReferencesXTestsData.executed[TEST_RESULT_PARAM_FORWARDING].disconnect != 0); - } + TEST_CASE(ReferencesParameterForwardTest) { + memset(&ReferencesXTestsData, 0, sizeof(struct ReferencesXTestsData)); + CuAssert(tc, "References load", ReferencesLoad(&ReferencesXTestsData.instance, (JNIEnv *)0x06051982, ReferencesXTestsObjects[TEST_OBJECTS_PARAM_FORWARDING]) >= 0); + ReferencesUnload(&ReferencesXTestsData.instance, (JNIEnv *)0x06051982); + CuAssert(tc, "Connect parameter arrived.", ReferencesXTestsData.executed[TEST_RESULT_PARAM_FORWARDING].connect != 0); + CuAssert(tc, "Disconnect parameter arrived.", ReferencesXTestsData.executed[TEST_RESULT_PARAM_FORWARDING].disconnect != 0); + } - static int Test1_connect(JNIEnv *env) { - ReferencesXTestsData.executed[TEST_RESULT_TEST1].connect = -1; - return 0; - } + static int Test1_connect(JNIEnv *env) { + ReferencesXTestsData.executed[TEST_RESULT_TEST1].connect = -1; + return 0; + } - static void Test1_disconnect(JNIEnv *env) { - ReferencesXTestsData.executed[TEST_RESULT_TEST1].disconnect = -1; - } + static void Test1_disconnect(JNIEnv *env) { + ReferencesXTestsData.executed[TEST_RESULT_TEST1].disconnect = -1; + } - static int Test2_connect(JNIEnv *env) { - ReferencesXTestsData.executed[TEST_RESULT_TEST2].connect = -1; - return 0; - } + static int Test2_connect(JNIEnv *env) { + ReferencesXTestsData.executed[TEST_RESULT_TEST2].connect = -1; + return 0; + } - static void Test2_disconnect(JNIEnv *env) { - ReferencesXTestsData.executed[TEST_RESULT_TEST2].disconnect = -1; - } + static void Test2_disconnect(JNIEnv *env) { + ReferencesXTestsData.executed[TEST_RESULT_TEST2].disconnect = -1; + } - static int Test3_connect(JNIEnv *env) { - ReferencesXTestsData.executed[TEST_RESULT_TEST3].connect = -1; - return 0; - } + static int Test3_connect(JNIEnv *env) { + ReferencesXTestsData.executed[TEST_RESULT_TEST3].connect = -1; + return 0; + } - static void Test3_disconnect(JNIEnv *env) { - ReferencesXTestsData.executed[TEST_RESULT_TEST3].disconnect = -1; - } + static void Test3_disconnect(JNIEnv *env) { + ReferencesXTestsData.executed[TEST_RESULT_TEST3].disconnect = -1; + } - static int TestFails_connect(JNIEnv *env) { - ReferencesXTestsData.executed[TEST_RESULT_TEST_FAILS].connect = -1; - return -1; - } + static int TestFails_connect(JNIEnv *env) { + ReferencesXTestsData.executed[TEST_RESULT_TEST_FAILS].connect = -1; + return -1; + } - static void TestFails_disconnect(JNIEnv *env) { - ReferencesXTestsData.executed[TEST_RESULT_TEST_FAILS].disconnect = -1; - } + static void TestFails_disconnect(JNIEnv *env) { + ReferencesXTestsData.executed[TEST_RESULT_TEST_FAILS].disconnect = -1; + } - static int TestParamForwarding_connect(JNIEnv *env) { - if (env != ((JNIEnv *)0x06051982)) - { - ReferencesXTestsData.executed[TEST_RESULT_PARAM_FORWARDING].connect = 0; - return -1; - } + static int TestParamForwarding_connect(JNIEnv *env) { + if (env != ((JNIEnv *)0x06051982)) + { + ReferencesXTestsData.executed[TEST_RESULT_PARAM_FORWARDING].connect = 0; + return -1; + } - ReferencesXTestsData.executed[TEST_RESULT_PARAM_FORWARDING].connect = -1; - return 0; - } + ReferencesXTestsData.executed[TEST_RESULT_PARAM_FORWARDING].connect = -1; + return 0; + } - static void TestParamForwarding_disconnect(JNIEnv *env) { - if (env != ((JNIEnv *)0x06051982)) - { - ReferencesXTestsData.executed[TEST_RESULT_PARAM_FORWARDING].disconnect = 0; - return; - } + static void TestParamForwarding_disconnect(JNIEnv *env) { + if (env != ((JNIEnv *)0x06051982)) + { + ReferencesXTestsData.executed[TEST_RESULT_PARAM_FORWARDING].disconnect = 0; + return; + } - ReferencesXTestsData.executed[TEST_RESULT_PARAM_FORWARDING].disconnect = -1; - } + ReferencesXTestsData.executed[TEST_RESULT_PARAM_FORWARDING].disconnect = -1; + } #endif #ifdef DO_UNIT_TEST - typedef CuSuite* (*tSuiteNew)(void); + typedef CuSuite* (*tSuiteNew)(void); - extern "C" JNIEXPORT CuSuite* GetLibusbJavaSuite(tSuiteNew SuiteNew, JNIEnv *env); + extern "C" JNIEXPORT CuSuite* GetLibusbJavaSuite(tSuiteNew SuiteNew, JNIEnv *env); - TEST_CASE(Usb_Device_Tests) { -// TEST_CONTEXT(); + TEST_CASE(Usb_Device_Tests) { +// TEST_CONTEXT(); - CuAssert(tc, "TODO", 0); - } + CuAssert(tc, "TODO", 0); + } -/*! \brief Exports the test suite for the libraries helper functions +/*! \brief Exports the test suite for the libraries helper functions * - * \param SuiteNew Pointer to an allocator function for a CuTest instance - * \param env JNI Environment for the test + * \param SuiteNew Pointer to an allocator function for a CuTest instance + * \param env JNI Environment for the test * - * \return A fully setup test suite. */ + * \return A fully setup test suite. */ JNIEXPORT CuSuite* GetLibusbJavaSuite(tSuiteNew SuiteNew, JNIEnv *env) { - CuSuite* suite = SuiteNew(); + CuSuite* suite = SuiteNew(); - SUITE_ADD_TEST(suite, JNI_OnLoad_test); + SUITE_ADD_TEST(suite, JNI_OnLoad_test); - SUITE_ADD_TEST(suite, ReferencesLoadTest); - SUITE_ADD_TEST(suite, ReferencesUnloadTest); - SUITE_ADD_TEST(suite, ReferencesLoadRollbackTest); - SUITE_ADD_TEST(suite, ReferencesCheckTest); - SUITE_ADD_TEST(suite, ReferencesParameterForwardTest); + SUITE_ADD_TEST(suite, ReferencesLoadTest); + SUITE_ADD_TEST(suite, ReferencesUnloadTest); + SUITE_ADD_TEST(suite, ReferencesLoadRollbackTest); + SUITE_ADD_TEST(suite, ReferencesCheckTest); + SUITE_ADD_TEST(suite, ReferencesParameterForwardTest); - SUITE_ADD_TEST(suite, ThrowLibusbErrorTest); - SUITE_ADD_TEST(suite, ThrowIfUnsuccessfulTest); + SUITE_ADD_TEST(suite, ThrowLibusbErrorTest); + SUITE_ADD_TEST(suite, ThrowIfUnsuccessfulTest); - SUITE_ADD_TEST(suite, Usb_Device_Tests); + SUITE_ADD_TEST(suite, Usb_Device_Tests); - test_context.env = env; - return suite; + test_context.env = env; + return suite; } #endif diff --git a/src/main/cpp/LibusbJavaTest.cpp b/src/main/cpp/LibusbJavaTest.cpp index 786bb9a..7e72f7c 100644 --- a/src/main/cpp/LibusbJavaTest.cpp +++ b/src/main/cpp/LibusbJavaTest.cpp @@ -2,12 +2,12 @@ #include #if defined(_WIN32) || defined(_WIN64) -# include +# include - 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 } diff --git a/src/main/cpp/Usb_Device.cpp b/src/main/cpp/Usb_Device.cpp index c572898..f8a2ac1 100644 --- a/src/main/cpp/Usb_Device.cpp +++ b/src/main/cpp/Usb_Device.cpp @@ -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 + * \author Ueli Niederer */ #include "Usb_Device.h" #include #ifdef DO_UNIT_TEST -# include +# include -# 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, "", "()V"); - if (me->constructor == NULL) goto no_constructor; + me->constructor = env->GetMethodID(me->clazz, "", "()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); } diff --git a/src/main/headers/CuTest.h b/src/main/headers/CuTest.h index 8b32773..87909c4 100644 --- a/src/main/headers/CuTest.h +++ b/src/main/headers/CuTest.h @@ -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; diff --git a/src/main/headers/libusb.h b/src/main/headers/libusb.h index da94c9b..161a328 100644 --- a/src/main/headers/libusb.h +++ b/src/main/headers/libusb.h @@ -146,13 +146,13 @@ extern "C" { */ static inline uint16_t libusb_cpu_to_le16(const uint16_t x) { - union { - uint8_t b8[2]; - uint16_t b16; - } _tmp; - _tmp.b8[1] = x >> 8; - _tmp.b8[0] = x & 0xff; - return _tmp.b16; + union { + uint8_t b8[2]; + uint16_t b16; + } _tmp; + _tmp.b8[1] = x >> 8; + _tmp.b8[0] = x & 0xff; + return _tmp.b16; } /** \def libusb_le16_to_cpu @@ -170,188 +170,188 @@ static inline uint16_t libusb_cpu_to_le16(const uint16_t x) /** \ingroup desc * Device and/or Interface Class codes */ enum libusb_class_code { - /** In the context of a \ref libusb_device_descriptor "device descriptor", - * this bDeviceClass value indicates that each interface specifies its - * own class information and all interfaces operate independently. - */ - LIBUSB_CLASS_PER_INTERFACE = 0, + /** In the context of a \ref libusb_device_descriptor "device descriptor", + * this bDeviceClass value indicates that each interface specifies its + * own class information and all interfaces operate independently. + */ + LIBUSB_CLASS_PER_INTERFACE = 0, - /** Audio class */ - LIBUSB_CLASS_AUDIO = 1, + /** Audio class */ + LIBUSB_CLASS_AUDIO = 1, - /** Communications class */ - LIBUSB_CLASS_COMM = 2, + /** Communications class */ + LIBUSB_CLASS_COMM = 2, - /** Human Interface Device class */ - LIBUSB_CLASS_HID = 3, + /** Human Interface Device class */ + LIBUSB_CLASS_HID = 3, - /** Physical */ - LIBUSB_CLASS_PHYSICAL = 5, + /** Physical */ + LIBUSB_CLASS_PHYSICAL = 5, - /** Printer class */ - LIBUSB_CLASS_PRINTER = 7, + /** Printer class */ + LIBUSB_CLASS_PRINTER = 7, - /** Image class */ - LIBUSB_CLASS_PTP = 6, /* legacy name from libusb-0.1 usb.h */ - LIBUSB_CLASS_IMAGE = 6, + /** Image class */ + LIBUSB_CLASS_PTP = 6, /* legacy name from libusb-0.1 usb.h */ + LIBUSB_CLASS_IMAGE = 6, - /** Mass storage class */ - LIBUSB_CLASS_MASS_STORAGE = 8, + /** Mass storage class */ + LIBUSB_CLASS_MASS_STORAGE = 8, - /** Hub class */ - LIBUSB_CLASS_HUB = 9, + /** Hub class */ + LIBUSB_CLASS_HUB = 9, - /** Data class */ - LIBUSB_CLASS_DATA = 10, + /** Data class */ + LIBUSB_CLASS_DATA = 10, - /** Smart Card */ - LIBUSB_CLASS_SMART_CARD = 0x0b, + /** Smart Card */ + LIBUSB_CLASS_SMART_CARD = 0x0b, - /** Content Security */ - LIBUSB_CLASS_CONTENT_SECURITY = 0x0d, + /** Content Security */ + LIBUSB_CLASS_CONTENT_SECURITY = 0x0d, - /** Video */ - LIBUSB_CLASS_VIDEO = 0x0e, + /** Video */ + LIBUSB_CLASS_VIDEO = 0x0e, - /** Personal Healthcare */ - LIBUSB_CLASS_PERSONAL_HEALTHCARE = 0x0f, + /** Personal Healthcare */ + LIBUSB_CLASS_PERSONAL_HEALTHCARE = 0x0f, - /** Diagnostic Device */ - LIBUSB_CLASS_DIAGNOSTIC_DEVICE = 0xdc, + /** Diagnostic Device */ + LIBUSB_CLASS_DIAGNOSTIC_DEVICE = 0xdc, - /** Wireless class */ - LIBUSB_CLASS_WIRELESS = 0xe0, + /** Wireless class */ + LIBUSB_CLASS_WIRELESS = 0xe0, - /** Application class */ - LIBUSB_CLASS_APPLICATION = 0xfe, + /** Application class */ + LIBUSB_CLASS_APPLICATION = 0xfe, - /** Class is vendor-specific */ - LIBUSB_CLASS_VENDOR_SPEC = 0xff + /** Class is vendor-specific */ + LIBUSB_CLASS_VENDOR_SPEC = 0xff }; /** \ingroup desc * Descriptor types as defined by the USB specification. */ enum libusb_descriptor_type { - /** Device descriptor. See libusb_device_descriptor. */ - LIBUSB_DT_DEVICE = 0x01, + /** Device descriptor. See libusb_device_descriptor. */ + LIBUSB_DT_DEVICE = 0x01, - /** Configuration descriptor. See libusb_config_descriptor. */ - LIBUSB_DT_CONFIG = 0x02, + /** Configuration descriptor. See libusb_config_descriptor. */ + LIBUSB_DT_CONFIG = 0x02, - /** String descriptor */ - LIBUSB_DT_STRING = 0x03, + /** String descriptor */ + LIBUSB_DT_STRING = 0x03, - /** Interface descriptor. See libusb_interface_descriptor. */ - LIBUSB_DT_INTERFACE = 0x04, + /** Interface descriptor. See libusb_interface_descriptor. */ + LIBUSB_DT_INTERFACE = 0x04, - /** Endpoint descriptor. See libusb_endpoint_descriptor. */ - LIBUSB_DT_ENDPOINT = 0x05, + /** Endpoint descriptor. See libusb_endpoint_descriptor. */ + LIBUSB_DT_ENDPOINT = 0x05, - /** HID descriptor */ - LIBUSB_DT_HID = 0x21, + /** HID descriptor */ + LIBUSB_DT_HID = 0x21, - /** HID report descriptor */ - LIBUSB_DT_REPORT = 0x22, + /** HID report descriptor */ + LIBUSB_DT_REPORT = 0x22, - /** Physical descriptor */ - LIBUSB_DT_PHYSICAL = 0x23, + /** Physical descriptor */ + LIBUSB_DT_PHYSICAL = 0x23, - /** Hub descriptor */ - LIBUSB_DT_HUB = 0x29, + /** Hub descriptor */ + LIBUSB_DT_HUB = 0x29, - /** SuperSpeed Hub descriptor */ - LIBUSB_DT_SUPERSPEED_HUB = 0x2A, + /** SuperSpeed Hub descriptor */ + LIBUSB_DT_SUPERSPEED_HUB = 0x2A, }; /* Descriptor sizes per descriptor type */ -#define LIBUSB_DT_DEVICE_SIZE 18 -#define LIBUSB_DT_CONFIG_SIZE 9 -#define LIBUSB_DT_INTERFACE_SIZE 9 -#define LIBUSB_DT_ENDPOINT_SIZE 7 -#define LIBUSB_DT_ENDPOINT_AUDIO_SIZE 9 /* Audio extension */ -#define LIBUSB_DT_HUB_NONVAR_SIZE 7 +#define LIBUSB_DT_DEVICE_SIZE 18 +#define LIBUSB_DT_CONFIG_SIZE 9 +#define LIBUSB_DT_INTERFACE_SIZE 9 +#define LIBUSB_DT_ENDPOINT_SIZE 7 +#define LIBUSB_DT_ENDPOINT_AUDIO_SIZE 9 /* Audio extension */ +#define LIBUSB_DT_HUB_NONVAR_SIZE 7 -#define LIBUSB_ENDPOINT_ADDRESS_MASK 0x0f /* in bEndpointAddress */ -#define LIBUSB_ENDPOINT_DIR_MASK 0x80 +#define LIBUSB_ENDPOINT_ADDRESS_MASK 0x0f /* in bEndpointAddress */ +#define LIBUSB_ENDPOINT_DIR_MASK 0x80 /** \ingroup desc * Endpoint direction. Values for bit 7 of the * \ref libusb_endpoint_descriptor::bEndpointAddress "endpoint address" scheme. */ enum libusb_endpoint_direction { - /** In: device-to-host */ - LIBUSB_ENDPOINT_IN = 0x80, + /** In: device-to-host */ + LIBUSB_ENDPOINT_IN = 0x80, - /** Out: host-to-device */ - LIBUSB_ENDPOINT_OUT = 0x00 + /** Out: host-to-device */ + LIBUSB_ENDPOINT_OUT = 0x00 }; -#define LIBUSB_TRANSFER_TYPE_MASK 0x03 /* in bmAttributes */ +#define LIBUSB_TRANSFER_TYPE_MASK 0x03 /* in bmAttributes */ /** \ingroup desc * Endpoint transfer type. Values for bits 0:1 of the * \ref libusb_endpoint_descriptor::bmAttributes "endpoint attributes" field. */ enum libusb_transfer_type { - /** Control endpoint */ - LIBUSB_TRANSFER_TYPE_CONTROL = 0, + /** Control endpoint */ + LIBUSB_TRANSFER_TYPE_CONTROL = 0, - /** Isochronous endpoint */ - LIBUSB_TRANSFER_TYPE_ISOCHRONOUS = 1, + /** Isochronous endpoint */ + LIBUSB_TRANSFER_TYPE_ISOCHRONOUS = 1, - /** Bulk endpoint */ - LIBUSB_TRANSFER_TYPE_BULK = 2, + /** Bulk endpoint */ + LIBUSB_TRANSFER_TYPE_BULK = 2, - /** Interrupt endpoint */ - LIBUSB_TRANSFER_TYPE_INTERRUPT = 3 + /** Interrupt endpoint */ + LIBUSB_TRANSFER_TYPE_INTERRUPT = 3 }; /** \ingroup misc * Standard requests, as defined in table 9-5 of the USB 3.0 specifications */ enum libusb_standard_request { - /** Request status of the specific recipient */ - LIBUSB_REQUEST_GET_STATUS = 0x00, + /** Request status of the specific recipient */ + LIBUSB_REQUEST_GET_STATUS = 0x00, - /** Clear or disable a specific feature */ - LIBUSB_REQUEST_CLEAR_FEATURE = 0x01, + /** Clear or disable a specific feature */ + LIBUSB_REQUEST_CLEAR_FEATURE = 0x01, - /* 0x02 is reserved */ + /* 0x02 is reserved */ - /** Set or enable a specific feature */ - LIBUSB_REQUEST_SET_FEATURE = 0x03, + /** Set or enable a specific feature */ + LIBUSB_REQUEST_SET_FEATURE = 0x03, - /* 0x04 is reserved */ + /* 0x04 is reserved */ - /** Set device address for all future accesses */ - LIBUSB_REQUEST_SET_ADDRESS = 0x05, + /** Set device address for all future accesses */ + LIBUSB_REQUEST_SET_ADDRESS = 0x05, - /** Get the specified descriptor */ - LIBUSB_REQUEST_GET_DESCRIPTOR = 0x06, + /** Get the specified descriptor */ + LIBUSB_REQUEST_GET_DESCRIPTOR = 0x06, - /** Used to update existing descriptors or add new descriptors */ - LIBUSB_REQUEST_SET_DESCRIPTOR = 0x07, + /** Used to update existing descriptors or add new descriptors */ + LIBUSB_REQUEST_SET_DESCRIPTOR = 0x07, - /** Get the current device configuration value */ - LIBUSB_REQUEST_GET_CONFIGURATION = 0x08, + /** Get the current device configuration value */ + LIBUSB_REQUEST_GET_CONFIGURATION = 0x08, - /** Set device configuration */ - LIBUSB_REQUEST_SET_CONFIGURATION = 0x09, + /** Set device configuration */ + LIBUSB_REQUEST_SET_CONFIGURATION = 0x09, - /** Return the selected alternate setting for the specified interface */ - LIBUSB_REQUEST_GET_INTERFACE = 0x0A, + /** Return the selected alternate setting for the specified interface */ + LIBUSB_REQUEST_GET_INTERFACE = 0x0A, - /** Select an alternate interface for the specified interface */ - LIBUSB_REQUEST_SET_INTERFACE = 0x0B, + /** Select an alternate interface for the specified interface */ + LIBUSB_REQUEST_SET_INTERFACE = 0x0B, - /** Set then report an endpoint's synchronization frame */ - LIBUSB_REQUEST_SYNCH_FRAME = 0x0C, + /** Set then report an endpoint's synchronization frame */ + LIBUSB_REQUEST_SYNCH_FRAME = 0x0C, - /** Sets both the U1 and U2 Exit Latency */ - LIBUSB_REQUEST_SET_SEL = 0x30, + /** Sets both the U1 and U2 Exit Latency */ + LIBUSB_REQUEST_SET_SEL = 0x30, - /** Delay from the time a host transmits a packet to the time it is - * received by the device. */ - LIBUSB_SET_ISOCH_DELAY = 0x31, + /** Delay from the time a host transmits a packet to the time it is + * received by the device. */ + LIBUSB_SET_ISOCH_DELAY = 0x31, }; /** \ingroup misc @@ -359,17 +359,17 @@ enum libusb_standard_request { * \ref libusb_control_setup::bmRequestType "bmRequestType" field in control * transfers. */ enum libusb_request_type { - /** Standard */ - LIBUSB_REQUEST_TYPE_STANDARD = (0x00 << 5), + /** Standard */ + LIBUSB_REQUEST_TYPE_STANDARD = (0x00 << 5), - /** Class */ - LIBUSB_REQUEST_TYPE_CLASS = (0x01 << 5), + /** Class */ + LIBUSB_REQUEST_TYPE_CLASS = (0x01 << 5), - /** Vendor */ - LIBUSB_REQUEST_TYPE_VENDOR = (0x02 << 5), + /** Vendor */ + LIBUSB_REQUEST_TYPE_VENDOR = (0x02 << 5), - /** Reserved */ - LIBUSB_REQUEST_TYPE_RESERVED = (0x03 << 5) + /** Reserved */ + LIBUSB_REQUEST_TYPE_RESERVED = (0x03 << 5) }; /** \ingroup misc @@ -377,20 +377,20 @@ enum libusb_request_type { * \ref libusb_control_setup::bmRequestType "bmRequestType" field in control * transfers. Values 4 through 31 are reserved. */ enum libusb_request_recipient { - /** Device */ - LIBUSB_RECIPIENT_DEVICE = 0x00, + /** Device */ + LIBUSB_RECIPIENT_DEVICE = 0x00, - /** Interface */ - LIBUSB_RECIPIENT_INTERFACE = 0x01, + /** Interface */ + LIBUSB_RECIPIENT_INTERFACE = 0x01, - /** Endpoint */ - LIBUSB_RECIPIENT_ENDPOINT = 0x02, + /** Endpoint */ + LIBUSB_RECIPIENT_ENDPOINT = 0x02, - /** Other */ - LIBUSB_RECIPIENT_OTHER = 0x03, + /** Other */ + LIBUSB_RECIPIENT_OTHER = 0x03, }; -#define LIBUSB_ISO_SYNC_TYPE_MASK 0x0C +#define LIBUSB_ISO_SYNC_TYPE_MASK 0x0C /** \ingroup desc * Synchronization type for isochronous endpoints. Values for bits 2:3 of the @@ -398,17 +398,17 @@ enum libusb_request_recipient { * libusb_endpoint_descriptor. */ enum libusb_iso_sync_type { - /** No synchronization */ - LIBUSB_ISO_SYNC_TYPE_NONE = 0, + /** No synchronization */ + LIBUSB_ISO_SYNC_TYPE_NONE = 0, - /** Asynchronous */ - LIBUSB_ISO_SYNC_TYPE_ASYNC = 1, + /** Asynchronous */ + LIBUSB_ISO_SYNC_TYPE_ASYNC = 1, - /** Adaptive */ - LIBUSB_ISO_SYNC_TYPE_ADAPTIVE = 2, + /** Adaptive */ + LIBUSB_ISO_SYNC_TYPE_ADAPTIVE = 2, - /** Synchronous */ - LIBUSB_ISO_SYNC_TYPE_SYNC = 3 + /** Synchronous */ + LIBUSB_ISO_SYNC_TYPE_SYNC = 3 }; #define LIBUSB_ISO_USAGE_TYPE_MASK 0x30 @@ -419,14 +419,14 @@ enum libusb_iso_sync_type { * libusb_endpoint_descriptor. */ enum libusb_iso_usage_type { - /** Data endpoint */ - LIBUSB_ISO_USAGE_TYPE_DATA = 0, + /** Data endpoint */ + LIBUSB_ISO_USAGE_TYPE_DATA = 0, - /** Feedback endpoint */ - LIBUSB_ISO_USAGE_TYPE_FEEDBACK = 1, + /** Feedback endpoint */ + LIBUSB_ISO_USAGE_TYPE_FEEDBACK = 1, - /** Implicit feedback Data endpoint */ - LIBUSB_ISO_USAGE_TYPE_IMPLICIT = 2, + /** Implicit feedback Data endpoint */ + LIBUSB_ISO_USAGE_TYPE_IMPLICIT = 2, }; /** \ingroup desc @@ -435,52 +435,52 @@ enum libusb_iso_usage_type { * All multiple-byte fields are represented in host-endian format. */ struct libusb_device_descriptor { - /** Size of this descriptor (in bytes) */ - uint8_t bLength; + /** Size of this descriptor (in bytes) */ + uint8_t bLength; - /** Descriptor type. Will have value - * \ref libusb_descriptor_type::LIBUSB_DT_DEVICE LIBUSB_DT_DEVICE in this - * context. */ - uint8_t bDescriptorType; + /** Descriptor type. Will have value + * \ref libusb_descriptor_type::LIBUSB_DT_DEVICE LIBUSB_DT_DEVICE in this + * context. */ + uint8_t bDescriptorType; - /** USB specification release number in binary-coded decimal. A value of - * 0x0200 indicates USB 2.0, 0x0110 indicates USB 1.1, etc. */ - uint16_t bcdUSB; + /** USB specification release number in binary-coded decimal. A value of + * 0x0200 indicates USB 2.0, 0x0110 indicates USB 1.1, etc. */ + uint16_t bcdUSB; - /** USB-IF class code for the device. See \ref libusb_class_code. */ - uint8_t bDeviceClass; + /** USB-IF class code for the device. See \ref libusb_class_code. */ + uint8_t bDeviceClass; - /** USB-IF subclass code for the device, qualified by the bDeviceClass - * value */ - uint8_t bDeviceSubClass; + /** USB-IF subclass code for the device, qualified by the bDeviceClass + * value */ + uint8_t bDeviceSubClass; - /** USB-IF protocol code for the device, qualified by the bDeviceClass and - * bDeviceSubClass values */ - uint8_t bDeviceProtocol; + /** USB-IF protocol code for the device, qualified by the bDeviceClass and + * bDeviceSubClass values */ + uint8_t bDeviceProtocol; - /** Maximum packet size for endpoint 0 */ - uint8_t bMaxPacketSize0; + /** Maximum packet size for endpoint 0 */ + uint8_t bMaxPacketSize0; - /** USB-IF vendor ID */ - uint16_t idVendor; + /** USB-IF vendor ID */ + uint16_t idVendor; - /** USB-IF product ID */ - uint16_t idProduct; + /** USB-IF product ID */ + uint16_t idProduct; - /** Device release number in binary-coded decimal */ - uint16_t bcdDevice; + /** Device release number in binary-coded decimal */ + uint16_t bcdDevice; - /** Index of string descriptor describing manufacturer */ - uint8_t iManufacturer; + /** Index of string descriptor describing manufacturer */ + uint8_t iManufacturer; - /** Index of string descriptor describing product */ - uint8_t iProduct; + /** Index of string descriptor describing product */ + uint8_t iProduct; - /** Index of string descriptor containing device serial number */ - uint8_t iSerialNumber; + /** Index of string descriptor containing device serial number */ + uint8_t iSerialNumber; - /** Number of possible configurations */ - uint8_t bNumConfigurations; + /** Number of possible configurations */ + uint8_t bNumConfigurations; }; /** \ingroup desc @@ -489,48 +489,48 @@ struct libusb_device_descriptor { * All multiple-byte fields are represented in host-endian format. */ struct libusb_endpoint_descriptor { - /** Size of this descriptor (in bytes) */ - uint8_t bLength; + /** Size of this descriptor (in bytes) */ + uint8_t bLength; - /** Descriptor type. Will have value - * \ref libusb_descriptor_type::LIBUSB_DT_ENDPOINT LIBUSB_DT_ENDPOINT in - * this context. */ - uint8_t bDescriptorType; + /** Descriptor type. Will have value + * \ref libusb_descriptor_type::LIBUSB_DT_ENDPOINT LIBUSB_DT_ENDPOINT in + * this context. */ + uint8_t bDescriptorType; - /** The address of the endpoint described by this descriptor. Bits 0:3 are - * the endpoint number. Bits 4:6 are reserved. Bit 7 indicates direction, - * see \ref libusb_endpoint_direction. - */ - uint8_t bEndpointAddress; + /** The address of the endpoint described by this descriptor. Bits 0:3 are + * the endpoint number. Bits 4:6 are reserved. Bit 7 indicates direction, + * see \ref libusb_endpoint_direction. + */ + uint8_t bEndpointAddress; - /** Attributes which apply to the endpoint when it is configured using - * the bConfigurationValue. Bits 0:1 determine the transfer type and - * correspond to \ref libusb_transfer_type. Bits 2:3 are only used for - * isochronous endpoints and correspond to \ref libusb_iso_sync_type. - * Bits 4:5 are also only used for isochronous endpoints and correspond to - * \ref libusb_iso_usage_type. Bits 6:7 are reserved. - */ - uint8_t bmAttributes; + /** Attributes which apply to the endpoint when it is configured using + * the bConfigurationValue. Bits 0:1 determine the transfer type and + * correspond to \ref libusb_transfer_type. Bits 2:3 are only used for + * isochronous endpoints and correspond to \ref libusb_iso_sync_type. + * Bits 4:5 are also only used for isochronous endpoints and correspond to + * \ref libusb_iso_usage_type. Bits 6:7 are reserved. + */ + uint8_t bmAttributes; - /** Maximum packet size this endpoint is capable of sending/receiving. */ - uint16_t wMaxPacketSize; + /** Maximum packet size this endpoint is capable of sending/receiving. */ + uint16_t wMaxPacketSize; - /** Interval for polling endpoint for data transfers. */ - uint8_t bInterval; + /** Interval for polling endpoint for data transfers. */ + uint8_t bInterval; - /** For audio devices only: the rate at which synchronization feedback - * is provided. */ - uint8_t bRefresh; + /** For audio devices only: the rate at which synchronization feedback + * is provided. */ + uint8_t bRefresh; - /** For audio devices only: the address if the synch endpoint */ - uint8_t bSynchAddress; + /** For audio devices only: the address if the synch endpoint */ + uint8_t bSynchAddress; - /** Extra descriptors. If libusbx encounters unknown endpoint descriptors, - * it will store them here, should you wish to parse them. */ - const unsigned char *extra; + /** Extra descriptors. If libusbx encounters unknown endpoint descriptors, + * it will store them here, should you wish to parse them. */ + const unsigned char *extra; - /** Length of the extra descriptors, in bytes. */ - int extra_length; + /** Length of the extra descriptors, in bytes. */ + int extra_length; }; /** \ingroup desc @@ -539,60 +539,60 @@ struct libusb_endpoint_descriptor { * All multiple-byte fields are represented in host-endian format. */ struct libusb_interface_descriptor { - /** Size of this descriptor (in bytes) */ - uint8_t bLength; + /** Size of this descriptor (in bytes) */ + uint8_t bLength; - /** Descriptor type. Will have value - * \ref libusb_descriptor_type::LIBUSB_DT_INTERFACE LIBUSB_DT_INTERFACE - * in this context. */ - uint8_t bDescriptorType; + /** Descriptor type. Will have value + * \ref libusb_descriptor_type::LIBUSB_DT_INTERFACE LIBUSB_DT_INTERFACE + * in this context. */ + uint8_t bDescriptorType; - /** Number of this interface */ - uint8_t bInterfaceNumber; + /** Number of this interface */ + uint8_t bInterfaceNumber; - /** Value used to select this alternate setting for this interface */ - uint8_t bAlternateSetting; + /** Value used to select this alternate setting for this interface */ + uint8_t bAlternateSetting; - /** Number of endpoints used by this interface (excluding the control - * endpoint). */ - uint8_t bNumEndpoints; + /** Number of endpoints used by this interface (excluding the control + * endpoint). */ + uint8_t bNumEndpoints; - /** USB-IF class code for this interface. See \ref libusb_class_code. */ - uint8_t bInterfaceClass; + /** USB-IF class code for this interface. See \ref libusb_class_code. */ + uint8_t bInterfaceClass; - /** USB-IF subclass code for this interface, qualified by the - * bInterfaceClass value */ - uint8_t bInterfaceSubClass; + /** USB-IF subclass code for this interface, qualified by the + * bInterfaceClass value */ + uint8_t bInterfaceSubClass; - /** USB-IF protocol code for this interface, qualified by the - * bInterfaceClass and bInterfaceSubClass values */ - uint8_t bInterfaceProtocol; + /** USB-IF protocol code for this interface, qualified by the + * bInterfaceClass and bInterfaceSubClass values */ + uint8_t bInterfaceProtocol; - /** Index of string descriptor describing this interface */ - uint8_t iInterface; + /** Index of string descriptor describing this interface */ + uint8_t iInterface; - /** Array of endpoint descriptors. This length of this array is determined - * by the bNumEndpoints field. */ - const struct libusb_endpoint_descriptor *endpoint; + /** Array of endpoint descriptors. This length of this array is determined + * by the bNumEndpoints field. */ + const struct libusb_endpoint_descriptor *endpoint; - /** Extra descriptors. If libusbx encounters unknown interface descriptors, - * it will store them here, should you wish to parse them. */ - const unsigned char *extra; + /** Extra descriptors. If libusbx encounters unknown interface descriptors, + * it will store them here, should you wish to parse them. */ + const unsigned char *extra; - /** Length of the extra descriptors, in bytes. */ - int extra_length; + /** Length of the extra descriptors, in bytes. */ + int extra_length; }; /** \ingroup desc * A collection of alternate settings for a particular USB interface. */ struct libusb_interface { - /** Array of interface descriptors. The length of this array is determined - * by the num_altsetting field. */ - const struct libusb_interface_descriptor *altsetting; + /** Array of interface descriptors. The length of this array is determined + * by the num_altsetting field. */ + const struct libusb_interface_descriptor *altsetting; - /** The number of alternate settings that belong to this interface */ - int num_altsetting; + /** The number of alternate settings that belong to this interface */ + int num_altsetting; }; /** \ingroup desc @@ -601,72 +601,72 @@ struct libusb_interface { * All multiple-byte fields are represented in host-endian format. */ struct libusb_config_descriptor { - /** Size of this descriptor (in bytes) */ - uint8_t bLength; + /** Size of this descriptor (in bytes) */ + uint8_t bLength; - /** Descriptor type. Will have value - * \ref libusb_descriptor_type::LIBUSB_DT_CONFIG LIBUSB_DT_CONFIG - * in this context. */ - uint8_t bDescriptorType; + /** Descriptor type. Will have value + * \ref libusb_descriptor_type::LIBUSB_DT_CONFIG LIBUSB_DT_CONFIG + * in this context. */ + uint8_t bDescriptorType; - /** Total length of data returned for this configuration */ - uint16_t wTotalLength; + /** Total length of data returned for this configuration */ + uint16_t wTotalLength; - /** Number of interfaces supported by this configuration */ - uint8_t bNumInterfaces; + /** Number of interfaces supported by this configuration */ + uint8_t bNumInterfaces; - /** Identifier value for this configuration */ - uint8_t bConfigurationValue; + /** Identifier value for this configuration */ + uint8_t bConfigurationValue; - /** Index of string descriptor describing this configuration */ - uint8_t iConfiguration; + /** Index of string descriptor describing this configuration */ + uint8_t iConfiguration; - /** Configuration characteristics */ - uint8_t bmAttributes; + /** Configuration characteristics */ + uint8_t bmAttributes; - /** Maximum power consumption of the USB device from this bus in this - * configuration when the device is fully opreation. Expressed in units - * of 2 mA. */ - uint8_t MaxPower; + /** Maximum power consumption of the USB device from this bus in this + * configuration when the device is fully opreation. Expressed in units + * of 2 mA. */ + uint8_t MaxPower; - /** Array of interfaces supported by this configuration. The length of - * this array is determined by the bNumInterfaces field. */ - const struct libusb_interface *interface; + /** Array of interfaces supported by this configuration. The length of + * this array is determined by the bNumInterfaces field. */ + const struct libusb_interface *interface; - /** Extra descriptors. If libusbx encounters unknown configuration - * descriptors, it will store them here, should you wish to parse them. */ - const unsigned char *extra; + /** Extra descriptors. If libusbx encounters unknown configuration + * descriptors, it will store them here, should you wish to parse them. */ + const unsigned char *extra; - /** Length of the extra descriptors, in bytes. */ - int extra_length; + /** Length of the extra descriptors, in bytes. */ + int extra_length; }; /** \ingroup asyncio * Setup packet for control transfers. */ struct libusb_control_setup { - /** Request type. Bits 0:4 determine recipient, see - * \ref libusb_request_recipient. Bits 5:6 determine type, see - * \ref libusb_request_type. Bit 7 determines data transfer direction, see - * \ref libusb_endpoint_direction. - */ - uint8_t bmRequestType; + /** Request type. Bits 0:4 determine recipient, see + * \ref libusb_request_recipient. Bits 5:6 determine type, see + * \ref libusb_request_type. Bit 7 determines data transfer direction, see + * \ref libusb_endpoint_direction. + */ + uint8_t bmRequestType; - /** Request. If the type bits of bmRequestType are equal to - * \ref libusb_request_type::LIBUSB_REQUEST_TYPE_STANDARD - * "LIBUSB_REQUEST_TYPE_STANDARD" then this field refers to - * \ref libusb_standard_request. For other cases, use of this field is - * application-specific. */ - uint8_t bRequest; + /** Request. If the type bits of bmRequestType are equal to + * \ref libusb_request_type::LIBUSB_REQUEST_TYPE_STANDARD + * "LIBUSB_REQUEST_TYPE_STANDARD" then this field refers to + * \ref libusb_standard_request. For other cases, use of this field is + * application-specific. */ + uint8_t bRequest; - /** Value. Varies according to request */ - uint16_t wValue; + /** Value. Varies according to request */ + uint16_t wValue; - /** Index. Varies according to request, typically used to pass an index - * or offset */ - uint16_t wIndex; + /** Index. Varies according to request, typically used to pass an index + * or offset */ + uint16_t wIndex; - /** Number of bytes to transfer */ - uint16_t wLength; + /** Number of bytes to transfer */ + uint16_t wLength; }; #define LIBUSB_CONTROL_SETUP_SIZE (sizeof(struct libusb_control_setup)) @@ -681,23 +681,23 @@ struct libusb_device_handle; * Structure providing the version of the libusbx runtime */ struct libusb_version { - /** Library major version. */ - const uint16_t major; + /** Library major version. */ + const uint16_t major; - /** Library minor version. */ - const uint16_t minor; + /** Library minor version. */ + const uint16_t minor; - /** Library micro version. */ - const uint16_t micro; + /** Library micro version. */ + const uint16_t micro; - /** Library nano version. */ - const uint16_t nano; + /** Library nano version. */ + const uint16_t nano; - /** Library release candidate suffix string, e.g. "-rc4". */ - const char *rc; + /** Library release candidate suffix string, e.g. "-rc4". */ + const char *rc; - /** For ABI compatibility only. */ - const char* describe; + /** For ABI compatibility only. */ + const char* describe; }; /** \ingroup lib @@ -751,20 +751,20 @@ typedef struct libusb_device_handle libusb_device_handle; * Speed codes. Indicates the speed at which the device is operating. */ enum libusb_speed { - /** The OS doesn't report or know the device speed. */ - LIBUSB_SPEED_UNKNOWN = 0, + /** The OS doesn't report or know the device speed. */ + LIBUSB_SPEED_UNKNOWN = 0, - /** The device is operating at low speed (1.5MBit/s). */ - LIBUSB_SPEED_LOW = 1, + /** The device is operating at low speed (1.5MBit/s). */ + LIBUSB_SPEED_LOW = 1, - /** The device is operating at full speed (12MBit/s). */ - LIBUSB_SPEED_FULL = 2, + /** The device is operating at full speed (12MBit/s). */ + LIBUSB_SPEED_FULL = 2, - /** The device is operating at high speed (480MBit/s). */ - LIBUSB_SPEED_HIGH = 3, + /** The device is operating at high speed (480MBit/s). */ + LIBUSB_SPEED_HIGH = 3, - /** The device is operating at super speed (5000MBit/s). */ - LIBUSB_SPEED_SUPER = 4, + /** The device is operating at super speed (5000MBit/s). */ + LIBUSB_SPEED_SUPER = 4, }; /** \ingroup misc @@ -774,134 +774,134 @@ enum libusb_speed { * of an error code. */ enum libusb_error { - /** Success (no error) */ - LIBUSB_SUCCESS = 0, + /** Success (no error) */ + LIBUSB_SUCCESS = 0, - /** Input/output error */ - LIBUSB_ERROR_IO = -1, + /** Input/output error */ + LIBUSB_ERROR_IO = -1, - /** Invalid parameter */ - LIBUSB_ERROR_INVALID_PARAM = -2, + /** Invalid parameter */ + LIBUSB_ERROR_INVALID_PARAM = -2, - /** Access denied (insufficient permissions) */ - LIBUSB_ERROR_ACCESS = -3, + /** Access denied (insufficient permissions) */ + LIBUSB_ERROR_ACCESS = -3, - /** No such device (it may have been disconnected) */ - LIBUSB_ERROR_NO_DEVICE = -4, + /** No such device (it may have been disconnected) */ + LIBUSB_ERROR_NO_DEVICE = -4, - /** Entity not found */ - LIBUSB_ERROR_NOT_FOUND = -5, + /** Entity not found */ + LIBUSB_ERROR_NOT_FOUND = -5, - /** Resource busy */ - LIBUSB_ERROR_BUSY = -6, + /** Resource busy */ + LIBUSB_ERROR_BUSY = -6, - /** Operation timed out */ - LIBUSB_ERROR_TIMEOUT = -7, + /** Operation timed out */ + LIBUSB_ERROR_TIMEOUT = -7, - /** Overflow */ - LIBUSB_ERROR_OVERFLOW = -8, + /** Overflow */ + LIBUSB_ERROR_OVERFLOW = -8, - /** Pipe error */ - LIBUSB_ERROR_PIPE = -9, + /** Pipe error */ + LIBUSB_ERROR_PIPE = -9, - /** System call interrupted (perhaps due to signal) */ - LIBUSB_ERROR_INTERRUPTED = -10, + /** System call interrupted (perhaps due to signal) */ + LIBUSB_ERROR_INTERRUPTED = -10, - /** Insufficient memory */ - LIBUSB_ERROR_NO_MEM = -11, + /** Insufficient memory */ + LIBUSB_ERROR_NO_MEM = -11, - /** Operation not supported or unimplemented on this platform */ - LIBUSB_ERROR_NOT_SUPPORTED = -12, + /** Operation not supported or unimplemented on this platform */ + LIBUSB_ERROR_NOT_SUPPORTED = -12, - /* NB! Remember to update libusb_error_name() - when adding new error codes here. */ + /* NB! Remember to update libusb_error_name() + when adding new error codes here. */ - /** Other error */ - LIBUSB_ERROR_OTHER = -99, + /** Other error */ + LIBUSB_ERROR_OTHER = -99, }; /** \ingroup asyncio * Transfer status codes */ enum libusb_transfer_status { - /** Transfer completed without error. Note that this does not indicate - * that the entire amount of requested data was transferred. */ - LIBUSB_TRANSFER_COMPLETED, + /** Transfer completed without error. Note that this does not indicate + * that the entire amount of requested data was transferred. */ + LIBUSB_TRANSFER_COMPLETED, - /** Transfer failed */ - LIBUSB_TRANSFER_ERROR, + /** Transfer failed */ + LIBUSB_TRANSFER_ERROR, - /** Transfer timed out */ - LIBUSB_TRANSFER_TIMED_OUT, + /** Transfer timed out */ + LIBUSB_TRANSFER_TIMED_OUT, - /** Transfer was cancelled */ - LIBUSB_TRANSFER_CANCELLED, + /** Transfer was cancelled */ + LIBUSB_TRANSFER_CANCELLED, - /** For bulk/interrupt endpoints: halt condition detected (endpoint - * stalled). For control endpoints: control request not supported. */ - LIBUSB_TRANSFER_STALL, + /** For bulk/interrupt endpoints: halt condition detected (endpoint + * stalled). For control endpoints: control request not supported. */ + LIBUSB_TRANSFER_STALL, - /** Device was disconnected */ - LIBUSB_TRANSFER_NO_DEVICE, + /** Device was disconnected */ + LIBUSB_TRANSFER_NO_DEVICE, - /** Device sent more data than requested */ - LIBUSB_TRANSFER_OVERFLOW, + /** Device sent more data than requested */ + LIBUSB_TRANSFER_OVERFLOW, - /* NB! Remember to update libusb_error_name() - when adding new status codes here. */ + /* NB! Remember to update libusb_error_name() + when adding new status codes here. */ }; /** \ingroup asyncio * libusb_transfer.flags values */ enum libusb_transfer_flags { - /** Report short frames as errors */ - LIBUSB_TRANSFER_SHORT_NOT_OK = 1<<0, + /** Report short frames as errors */ + LIBUSB_TRANSFER_SHORT_NOT_OK = 1<<0, - /** Automatically free() transfer buffer during libusb_free_transfer() */ - LIBUSB_TRANSFER_FREE_BUFFER = 1<<1, + /** Automatically free() transfer buffer during libusb_free_transfer() */ + LIBUSB_TRANSFER_FREE_BUFFER = 1<<1, - /** Automatically call libusb_free_transfer() after callback returns. - * If this flag is set, it is illegal to call libusb_free_transfer() - * from your transfer callback, as this will result in a double-free - * when this flag is acted upon. */ - LIBUSB_TRANSFER_FREE_TRANSFER = 1<<2, + /** Automatically call libusb_free_transfer() after callback returns. + * If this flag is set, it is illegal to call libusb_free_transfer() + * from your transfer callback, as this will result in a double-free + * when this flag is acted upon. */ + LIBUSB_TRANSFER_FREE_TRANSFER = 1<<2, - /** Terminate transfers that are a multiple of the endpoint's - * wMaxPacketSize with an extra zero length packet. This is useful - * when a device protocol mandates that each logical request is - * terminated by an incomplete packet (i.e. the logical requests are - * not separated by other means). - * - * This flag only affects host-to-device transfers to bulk and interrupt - * endpoints. In other situations, it is ignored. - * - * This flag only affects transfers with a length that is a multiple of - * the endpoint's wMaxPacketSize. On transfers of other lengths, this - * flag has no effect. Therefore, if you are working with a device that - * needs a ZLP whenever the end of the logical request falls on a packet - * boundary, then it is sensible to set this flag on every - * transfer (you do not have to worry about only setting it on transfers - * that end on the boundary). - * - * This flag is currently only supported on Linux. - * On other systems, libusb_submit_transfer() will return - * LIBUSB_ERROR_NOT_SUPPORTED for every transfer where this flag is set. - * - * Available since libusb-1.0.9. - */ - LIBUSB_TRANSFER_ADD_ZERO_PACKET = 1 << 3, + /** Terminate transfers that are a multiple of the endpoint's + * wMaxPacketSize with an extra zero length packet. This is useful + * when a device protocol mandates that each logical request is + * terminated by an incomplete packet (i.e. the logical requests are + * not separated by other means). + * + * This flag only affects host-to-device transfers to bulk and interrupt + * endpoints. In other situations, it is ignored. + * + * This flag only affects transfers with a length that is a multiple of + * the endpoint's wMaxPacketSize. On transfers of other lengths, this + * flag has no effect. Therefore, if you are working with a device that + * needs a ZLP whenever the end of the logical request falls on a packet + * boundary, then it is sensible to set this flag on every + * transfer (you do not have to worry about only setting it on transfers + * that end on the boundary). + * + * This flag is currently only supported on Linux. + * On other systems, libusb_submit_transfer() will return + * LIBUSB_ERROR_NOT_SUPPORTED for every transfer where this flag is set. + * + * Available since libusb-1.0.9. + */ + LIBUSB_TRANSFER_ADD_ZERO_PACKET = 1 << 3, }; /** \ingroup asyncio * Isochronous packet descriptor. */ struct libusb_iso_packet_descriptor { - /** Length of data to request in this packet */ - unsigned int length; + /** Length of data to request in this packet */ + unsigned int length; - /** Amount of data that was actually transferred */ - unsigned int actual_length; + /** Amount of data that was actually transferred */ + unsigned int actual_length; - /** Status code for this packet */ - enum libusb_transfer_status status; + /** Status code for this packet */ + enum libusb_transfer_status status; }; struct libusb_transfer; @@ -924,61 +924,61 @@ typedef void (LIBUSB_CALL *libusb_transfer_cb_fn)(struct libusb_transfer *transf * it back to the user. */ struct libusb_transfer { - /** Handle of the device that this transfer will be submitted to */ - libusb_device_handle *dev_handle; + /** Handle of the device that this transfer will be submitted to */ + libusb_device_handle *dev_handle; - /** A bitwise OR combination of \ref libusb_transfer_flags. */ - uint8_t flags; + /** A bitwise OR combination of \ref libusb_transfer_flags. */ + uint8_t flags; - /** Address of the endpoint where this transfer will be sent. */ - unsigned char endpoint; + /** Address of the endpoint where this transfer will be sent. */ + unsigned char endpoint; - /** Type of the endpoint from \ref libusb_transfer_type */ - unsigned char type; + /** Type of the endpoint from \ref libusb_transfer_type */ + unsigned char type; - /** Timeout for this transfer in millseconds. A value of 0 indicates no - * timeout. */ - unsigned int timeout; + /** Timeout for this transfer in millseconds. A value of 0 indicates no + * timeout. */ + unsigned int timeout; - /** The status of the transfer. Read-only, and only for use within - * transfer callback function. - * - * If this is an isochronous transfer, this field may read COMPLETED even - * if there were errors in the frames. Use the - * \ref libusb_iso_packet_descriptor::status "status" field in each packet - * to determine if errors occurred. */ - enum libusb_transfer_status status; + /** The status of the transfer. Read-only, and only for use within + * transfer callback function. + * + * If this is an isochronous transfer, this field may read COMPLETED even + * if there were errors in the frames. Use the + * \ref libusb_iso_packet_descriptor::status "status" field in each packet + * to determine if errors occurred. */ + enum libusb_transfer_status status; - /** Length of the data buffer */ - int length; + /** Length of the data buffer */ + int length; - /** Actual length of data that was transferred. Read-only, and only for - * use within transfer callback function. Not valid for isochronous - * endpoint transfers. */ - int actual_length; + /** Actual length of data that was transferred. Read-only, and only for + * use within transfer callback function. Not valid for isochronous + * endpoint transfers. */ + int actual_length; - /** Callback function. This will be invoked when the transfer completes, - * fails, or is cancelled. */ - libusb_transfer_cb_fn callback; + /** Callback function. This will be invoked when the transfer completes, + * fails, or is cancelled. */ + libusb_transfer_cb_fn callback; - /** User context data to pass to the callback function. */ - void *user_data; + /** User context data to pass to the callback function. */ + void *user_data; - /** Data buffer */ - unsigned char *buffer; + /** Data buffer */ + unsigned char *buffer; - /** Number of isochronous packets. Only used for I/O with isochronous - * endpoints. */ - int num_iso_packets; + /** Number of isochronous packets. Only used for I/O with isochronous + * endpoints. */ + int num_iso_packets; - /** Isochronous packet descriptors, for isochronous transfers only. */ - struct libusb_iso_packet_descriptor iso_packet_desc + /** Isochronous packet descriptors, for isochronous transfers only. */ + struct libusb_iso_packet_descriptor iso_packet_desc #if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) - [] /* valid C99 code */ + [] /* valid C99 code */ #else - [0] /* non-standard, but usually working code */ + [0] /* non-standard, but usually working code */ #endif - ; + ; }; /** \ingroup misc @@ -987,8 +987,8 @@ struct libusb_transfer { * \ref libusb_has_capability(). */ enum libusb_capability { - /** The libusb_has_capability() API is available. */ - LIBUSB_CAP_HAS_CAPABILITY = 0, + /** The libusb_has_capability() API is available. */ + LIBUSB_CAP_HAS_CAPABILITY = 0, }; /** \ingroup lib @@ -1002,11 +1002,11 @@ enum libusb_capability { * warnings and errors to stderr */ enum libusb_log_level { - LIBUSB_LOG_LEVEL_NONE = 0, - LIBUSB_LOG_LEVEL_ERROR, - LIBUSB_LOG_LEVEL_WARNING, - LIBUSB_LOG_LEVEL_INFO, - LIBUSB_LOG_LEVEL_DEBUG, + LIBUSB_LOG_LEVEL_NONE = 0, + LIBUSB_LOG_LEVEL_ERROR, + LIBUSB_LOG_LEVEL_WARNING, + LIBUSB_LOG_LEVEL_INFO, + LIBUSB_LOG_LEVEL_DEBUG, }; int LIBUSB_CALL libusb_init(libusb_context **ctx); @@ -1017,24 +1017,24 @@ int LIBUSB_CALL libusb_has_capability(uint32_t capability); const char * LIBUSB_CALL libusb_error_name(int errcode); ssize_t LIBUSB_CALL libusb_get_device_list(libusb_context *ctx, - libusb_device ***list); + libusb_device ***list); void LIBUSB_CALL libusb_free_device_list(libusb_device **list, - int unref_devices); + int unref_devices); libusb_device * LIBUSB_CALL libusb_ref_device(libusb_device *dev); void LIBUSB_CALL libusb_unref_device(libusb_device *dev); int LIBUSB_CALL libusb_get_configuration(libusb_device_handle *dev, - int *config); + int *config); int LIBUSB_CALL libusb_get_device_descriptor(libusb_device *dev, - struct libusb_device_descriptor *desc); + struct libusb_device_descriptor *desc); int LIBUSB_CALL libusb_get_active_config_descriptor(libusb_device *dev, - struct libusb_config_descriptor **config); + struct libusb_config_descriptor **config); int LIBUSB_CALL libusb_get_config_descriptor(libusb_device *dev, - uint8_t config_index, struct libusb_config_descriptor **config); + uint8_t config_index, struct libusb_config_descriptor **config); int LIBUSB_CALL libusb_get_config_descriptor_by_value(libusb_device *dev, - uint8_t bConfigurationValue, struct libusb_config_descriptor **config); + uint8_t bConfigurationValue, struct libusb_config_descriptor **config); void LIBUSB_CALL libusb_free_config_descriptor( - struct libusb_config_descriptor *config); + struct libusb_config_descriptor *config); uint8_t LIBUSB_CALL libusb_get_bus_number(libusb_device *dev); uint8_t LIBUSB_CALL libusb_get_port_number(libusb_device *dev); libusb_device * LIBUSB_CALL libusb_get_parent(libusb_device *dev); @@ -1042,36 +1042,36 @@ int LIBUSB_CALL libusb_get_port_path(libusb_context *ctx, libusb_device *dev, ui uint8_t LIBUSB_CALL libusb_get_device_address(libusb_device *dev); int LIBUSB_CALL libusb_get_device_speed(libusb_device *dev); int LIBUSB_CALL libusb_get_max_packet_size(libusb_device *dev, - unsigned char endpoint); + unsigned char endpoint); int LIBUSB_CALL libusb_get_max_iso_packet_size(libusb_device *dev, - unsigned char endpoint); + unsigned char endpoint); int LIBUSB_CALL libusb_open(libusb_device *dev, libusb_device_handle **handle); void LIBUSB_CALL libusb_close(libusb_device_handle *dev_handle); libusb_device * LIBUSB_CALL libusb_get_device(libusb_device_handle *dev_handle); int LIBUSB_CALL libusb_set_configuration(libusb_device_handle *dev, - int configuration); + int configuration); int LIBUSB_CALL libusb_claim_interface(libusb_device_handle *dev, - int interface_number); + int interface_number); int LIBUSB_CALL libusb_release_interface(libusb_device_handle *dev, - int interface_number); + int interface_number); libusb_device_handle * LIBUSB_CALL libusb_open_device_with_vid_pid( - libusb_context *ctx, uint16_t vendor_id, uint16_t product_id); + libusb_context *ctx, uint16_t vendor_id, uint16_t product_id); int LIBUSB_CALL libusb_set_interface_alt_setting(libusb_device_handle *dev, - int interface_number, int alternate_setting); + int interface_number, int alternate_setting); int LIBUSB_CALL libusb_clear_halt(libusb_device_handle *dev, - unsigned char endpoint); + unsigned char endpoint); int LIBUSB_CALL libusb_reset_device(libusb_device_handle *dev); int LIBUSB_CALL libusb_kernel_driver_active(libusb_device_handle *dev, - int interface_number); + int interface_number); int LIBUSB_CALL libusb_detach_kernel_driver(libusb_device_handle *dev, - int interface_number); + int interface_number); int LIBUSB_CALL libusb_attach_kernel_driver(libusb_device_handle *dev, - int interface_number); + int interface_number); /* async I/O */ @@ -1088,9 +1088,9 @@ int LIBUSB_CALL libusb_attach_kernel_driver(libusb_device_handle *dev, * \returns pointer to the first byte of the data section */ static inline unsigned char *libusb_control_transfer_get_data( - struct libusb_transfer *transfer) + struct libusb_transfer *transfer) { - return transfer->buffer + LIBUSB_CONTROL_SETUP_SIZE; + return transfer->buffer + LIBUSB_CONTROL_SETUP_SIZE; } /** \ingroup asyncio @@ -1106,9 +1106,9 @@ static inline unsigned char *libusb_control_transfer_get_data( * \returns a casted pointer to the start of the transfer data buffer */ static inline struct libusb_control_setup *libusb_control_transfer_get_setup( - struct libusb_transfer *transfer) + struct libusb_transfer *transfer) { - return (struct libusb_control_setup *) transfer->buffer; + return (struct libusb_control_setup *) transfer->buffer; } /** \ingroup asyncio @@ -1134,15 +1134,15 @@ static inline struct libusb_control_setup *libusb_control_transfer_get_setup( * \ref libusb_control_setup */ static inline void libusb_fill_control_setup(unsigned char *buffer, - uint8_t bmRequestType, uint8_t bRequest, uint16_t wValue, uint16_t wIndex, - uint16_t wLength) + uint8_t bmRequestType, uint8_t bRequest, uint16_t wValue, uint16_t wIndex, + uint16_t wLength) { - struct libusb_control_setup *setup = (struct libusb_control_setup *) buffer; - setup->bmRequestType = bmRequestType; - setup->bRequest = bRequest; - setup->wValue = libusb_cpu_to_le16(wValue); - setup->wIndex = libusb_cpu_to_le16(wIndex); - setup->wLength = libusb_cpu_to_le16(wLength); + struct libusb_control_setup *setup = (struct libusb_control_setup *) buffer; + setup->bmRequestType = bmRequestType; + setup->bRequest = bRequest; + setup->wValue = libusb_cpu_to_le16(wValue); + setup->wIndex = libusb_cpu_to_le16(wIndex); + setup->wLength = libusb_cpu_to_le16(wLength); } struct libusb_transfer * LIBUSB_CALL libusb_alloc_transfer(int iso_packets); @@ -1178,21 +1178,21 @@ void LIBUSB_CALL libusb_free_transfer(struct libusb_transfer *transfer); * \param timeout timeout for the transfer in milliseconds */ static inline void libusb_fill_control_transfer( - struct libusb_transfer *transfer, libusb_device_handle *dev_handle, - unsigned char *buffer, libusb_transfer_cb_fn callback, void *user_data, - unsigned int timeout) + struct libusb_transfer *transfer, libusb_device_handle *dev_handle, + unsigned char *buffer, libusb_transfer_cb_fn callback, void *user_data, + unsigned int timeout) { - struct libusb_control_setup *setup = (struct libusb_control_setup *) buffer; - transfer->dev_handle = dev_handle; - transfer->endpoint = 0; - transfer->type = LIBUSB_TRANSFER_TYPE_CONTROL; - transfer->timeout = timeout; - transfer->buffer = buffer; - if (setup) - transfer->length = LIBUSB_CONTROL_SETUP_SIZE - + libusb_le16_to_cpu(setup->wLength); - transfer->user_data = user_data; - transfer->callback = callback; + struct libusb_control_setup *setup = (struct libusb_control_setup *) buffer; + transfer->dev_handle = dev_handle; + transfer->endpoint = 0; + transfer->type = LIBUSB_TRANSFER_TYPE_CONTROL; + transfer->timeout = timeout; + transfer->buffer = buffer; + if (setup) + transfer->length = LIBUSB_CONTROL_SETUP_SIZE + + libusb_le16_to_cpu(setup->wLength); + transfer->user_data = user_data; + transfer->callback = callback; } /** \ingroup asyncio @@ -1209,18 +1209,18 @@ static inline void libusb_fill_control_transfer( * \param timeout timeout for the transfer in milliseconds */ static inline void libusb_fill_bulk_transfer(struct libusb_transfer *transfer, - libusb_device_handle *dev_handle, unsigned char endpoint, - unsigned char *buffer, int length, libusb_transfer_cb_fn callback, - void *user_data, unsigned int timeout) + libusb_device_handle *dev_handle, unsigned char endpoint, + unsigned char *buffer, int length, libusb_transfer_cb_fn callback, + void *user_data, unsigned int timeout) { - transfer->dev_handle = dev_handle; - transfer->endpoint = endpoint; - transfer->type = LIBUSB_TRANSFER_TYPE_BULK; - transfer->timeout = timeout; - transfer->buffer = buffer; - transfer->length = length; - transfer->user_data = user_data; - transfer->callback = callback; + transfer->dev_handle = dev_handle; + transfer->endpoint = endpoint; + transfer->type = LIBUSB_TRANSFER_TYPE_BULK; + transfer->timeout = timeout; + transfer->buffer = buffer; + transfer->length = length; + transfer->user_data = user_data; + transfer->callback = callback; } /** \ingroup asyncio @@ -1237,18 +1237,18 @@ static inline void libusb_fill_bulk_transfer(struct libusb_transfer *transfer, * \param timeout timeout for the transfer in milliseconds */ static inline void libusb_fill_interrupt_transfer( - struct libusb_transfer *transfer, libusb_device_handle *dev_handle, - unsigned char endpoint, unsigned char *buffer, int length, - libusb_transfer_cb_fn callback, void *user_data, unsigned int timeout) + struct libusb_transfer *transfer, libusb_device_handle *dev_handle, + unsigned char endpoint, unsigned char *buffer, int length, + libusb_transfer_cb_fn callback, void *user_data, unsigned int timeout) { - transfer->dev_handle = dev_handle; - transfer->endpoint = endpoint; - transfer->type = LIBUSB_TRANSFER_TYPE_INTERRUPT; - transfer->timeout = timeout; - transfer->buffer = buffer; - transfer->length = length; - transfer->user_data = user_data; - transfer->callback = callback; + transfer->dev_handle = dev_handle; + transfer->endpoint = endpoint; + transfer->type = LIBUSB_TRANSFER_TYPE_INTERRUPT; + transfer->timeout = timeout; + transfer->buffer = buffer; + transfer->length = length; + transfer->user_data = user_data; + transfer->callback = callback; } /** \ingroup asyncio @@ -1266,19 +1266,19 @@ static inline void libusb_fill_interrupt_transfer( * \param timeout timeout for the transfer in milliseconds */ static inline void libusb_fill_iso_transfer(struct libusb_transfer *transfer, - libusb_device_handle *dev_handle, unsigned char endpoint, - unsigned char *buffer, int length, int num_iso_packets, - libusb_transfer_cb_fn callback, void *user_data, unsigned int timeout) + libusb_device_handle *dev_handle, unsigned char endpoint, + unsigned char *buffer, int length, int num_iso_packets, + libusb_transfer_cb_fn callback, void *user_data, unsigned int timeout) { - transfer->dev_handle = dev_handle; - transfer->endpoint = endpoint; - transfer->type = LIBUSB_TRANSFER_TYPE_ISOCHRONOUS; - transfer->timeout = timeout; - transfer->buffer = buffer; - transfer->length = length; - transfer->num_iso_packets = num_iso_packets; - transfer->user_data = user_data; - transfer->callback = callback; + transfer->dev_handle = dev_handle; + transfer->endpoint = endpoint; + transfer->type = LIBUSB_TRANSFER_TYPE_ISOCHRONOUS; + transfer->timeout = timeout; + transfer->buffer = buffer; + transfer->length = length; + transfer->num_iso_packets = num_iso_packets; + transfer->user_data = user_data; + transfer->callback = callback; } /** \ingroup asyncio @@ -1290,11 +1290,11 @@ static inline void libusb_fill_iso_transfer(struct libusb_transfer *transfer, * \see libusb_get_max_packet_size() */ static inline void libusb_set_iso_packet_lengths( - struct libusb_transfer *transfer, unsigned int length) + struct libusb_transfer *transfer, unsigned int length) { - int i; - for (i = 0; i < transfer->num_iso_packets; i++) - transfer->iso_packet_desc[i].length = length; + int i; + for (i = 0; i < transfer->num_iso_packets; i++) + transfer->iso_packet_desc[i].length = length; } /** \ingroup asyncio @@ -1314,26 +1314,26 @@ static inline void libusb_set_iso_packet_lengths( * \see libusb_get_iso_packet_buffer_simple() */ static inline unsigned char *libusb_get_iso_packet_buffer( - struct libusb_transfer *transfer, unsigned int packet) + struct libusb_transfer *transfer, unsigned int packet) { - int i; - size_t offset = 0; - int _packet; + int i; + size_t offset = 0; + int _packet; - /* oops..slight bug in the API. packet is an unsigned int, but we use - * signed integers almost everywhere else. range-check and convert to - * signed to avoid compiler warnings. FIXME for libusb-2. */ - if (packet > INT_MAX) - return NULL; - _packet = packet; + /* oops..slight bug in the API. packet is an unsigned int, but we use + * signed integers almost everywhere else. range-check and convert to + * signed to avoid compiler warnings. FIXME for libusb-2. */ + if (packet > INT_MAX) + return NULL; + _packet = packet; - if (_packet >= transfer->num_iso_packets) - return NULL; + if (_packet >= transfer->num_iso_packets) + return NULL; - for (i = 0; i < _packet; i++) - offset += transfer->iso_packet_desc[i].length; + for (i = 0; i < _packet; i++) + offset += transfer->iso_packet_desc[i].length; - return transfer->buffer + offset; + return transfer->buffer + offset; } /** \ingroup asyncio @@ -1356,36 +1356,36 @@ static inline unsigned char *libusb_get_iso_packet_buffer( * \see libusb_get_iso_packet_buffer() */ static inline unsigned char *libusb_get_iso_packet_buffer_simple( - struct libusb_transfer *transfer, unsigned int packet) + struct libusb_transfer *transfer, unsigned int packet) { - int _packet; + int _packet; - /* oops..slight bug in the API. packet is an unsigned int, but we use - * signed integers almost everywhere else. range-check and convert to - * signed to avoid compiler warnings. FIXME for libusb-2. */ - if (packet > INT_MAX) - return NULL; - _packet = packet; + /* oops..slight bug in the API. packet is an unsigned int, but we use + * signed integers almost everywhere else. range-check and convert to + * signed to avoid compiler warnings. FIXME for libusb-2. */ + if (packet > INT_MAX) + return NULL; + _packet = packet; - if (_packet >= transfer->num_iso_packets) - return NULL; + if (_packet >= transfer->num_iso_packets) + return NULL; - return transfer->buffer + (transfer->iso_packet_desc[0].length * _packet); + return transfer->buffer + (transfer->iso_packet_desc[0].length * _packet); } /* sync I/O */ int LIBUSB_CALL libusb_control_transfer(libusb_device_handle *dev_handle, - uint8_t request_type, uint8_t bRequest, uint16_t wValue, uint16_t wIndex, - unsigned char *data, uint16_t wLength, unsigned int timeout); + uint8_t request_type, uint8_t bRequest, uint16_t wValue, uint16_t wIndex, + unsigned char *data, uint16_t wLength, unsigned int timeout); int LIBUSB_CALL libusb_bulk_transfer(libusb_device_handle *dev_handle, - unsigned char endpoint, unsigned char *data, int length, - int *actual_length, unsigned int timeout); + unsigned char endpoint, unsigned char *data, int length, + int *actual_length, unsigned int timeout); int LIBUSB_CALL libusb_interrupt_transfer(libusb_device_handle *dev_handle, - unsigned char endpoint, unsigned char *data, int length, - int *actual_length, unsigned int timeout); + unsigned char endpoint, unsigned char *data, int length, + int *actual_length, unsigned int timeout); /** \ingroup desc * Retrieve a descriptor from the default control pipe. @@ -1400,11 +1400,11 @@ int LIBUSB_CALL libusb_interrupt_transfer(libusb_device_handle *dev_handle, * \returns number of bytes returned in data, or LIBUSB_ERROR code on failure */ static inline int libusb_get_descriptor(libusb_device_handle *dev, - uint8_t desc_type, uint8_t desc_index, unsigned char *data, int length) + uint8_t desc_type, uint8_t desc_index, unsigned char *data, int length) { - return libusb_control_transfer(dev, LIBUSB_ENDPOINT_IN, - LIBUSB_REQUEST_GET_DESCRIPTOR, (desc_type << 8) | desc_index, 0, data, - (uint16_t) length, 1000); + return libusb_control_transfer(dev, LIBUSB_ENDPOINT_IN, + LIBUSB_REQUEST_GET_DESCRIPTOR, (desc_type << 8) | desc_index, 0, data, + (uint16_t) length, 1000); } /** \ingroup desc @@ -1422,15 +1422,15 @@ static inline int libusb_get_descriptor(libusb_device_handle *dev, * \see libusb_get_string_descriptor_ascii() */ static inline int libusb_get_string_descriptor(libusb_device_handle *dev, - uint8_t desc_index, uint16_t langid, unsigned char *data, int length) + uint8_t desc_index, uint16_t langid, unsigned char *data, int length) { - return libusb_control_transfer(dev, LIBUSB_ENDPOINT_IN, - LIBUSB_REQUEST_GET_DESCRIPTOR, (uint16_t)((LIBUSB_DT_STRING << 8) | desc_index), - langid, data, (uint16_t) length, 1000); + return libusb_control_transfer(dev, LIBUSB_ENDPOINT_IN, + LIBUSB_REQUEST_GET_DESCRIPTOR, (uint16_t)((LIBUSB_DT_STRING << 8) | desc_index), + langid, data, (uint16_t) length, 1000); } int LIBUSB_CALL libusb_get_string_descriptor_ascii(libusb_device_handle *dev, - uint8_t desc_index, unsigned char *data, int length); + uint8_t desc_index, unsigned char *data, int length); /* polling and timeouts */ @@ -1444,29 +1444,29 @@ void LIBUSB_CALL libusb_unlock_event_waiters(libusb_context *ctx); int LIBUSB_CALL libusb_wait_for_event(libusb_context *ctx, struct timeval *tv); int LIBUSB_CALL libusb_handle_events_timeout(libusb_context *ctx, - struct timeval *tv); + struct timeval *tv); int LIBUSB_CALL libusb_handle_events_timeout_completed(libusb_context *ctx, - struct timeval *tv, int *completed); + struct timeval *tv, int *completed); int LIBUSB_CALL libusb_handle_events(libusb_context *ctx); int LIBUSB_CALL libusb_handle_events_completed(libusb_context *ctx, int *completed); int LIBUSB_CALL libusb_handle_events_locked(libusb_context *ctx, - struct timeval *tv); + struct timeval *tv); int LIBUSB_CALL libusb_pollfds_handle_timeouts(libusb_context *ctx); int LIBUSB_CALL libusb_get_next_timeout(libusb_context *ctx, - struct timeval *tv); + struct timeval *tv); /** \ingroup poll * File descriptor for polling */ struct libusb_pollfd { - /** Numeric file descriptor */ - int fd; + /** Numeric file descriptor */ + int fd; - /** Event flags to poll for from . POLLIN indicates that you - * should monitor this file descriptor for becoming ready to read from, - * and POLLOUT indicates that you should monitor this file descriptor for - * nonblocking write readiness. */ - short events; + /** Event flags to poll for from . POLLIN indicates that you + * should monitor this file descriptor for becoming ready to read from, + * and POLLOUT indicates that you should monitor this file descriptor for + * nonblocking write readiness. */ + short events; }; /** \ingroup poll @@ -1480,7 +1480,7 @@ struct libusb_pollfd { * \see libusb_set_pollfd_notifiers() */ typedef void (LIBUSB_CALL *libusb_pollfd_added_cb)(int fd, short events, - void *user_data); + void *user_data); /** \ingroup poll * Callback function, invoked when a file descriptor should be removed from @@ -1494,10 +1494,10 @@ typedef void (LIBUSB_CALL *libusb_pollfd_added_cb)(int fd, short events, typedef void (LIBUSB_CALL *libusb_pollfd_removed_cb)(int fd, void *user_data); const struct libusb_pollfd ** LIBUSB_CALL libusb_get_pollfds( - libusb_context *ctx); + libusb_context *ctx); void LIBUSB_CALL libusb_set_pollfd_notifiers(libusb_context *ctx, - libusb_pollfd_added_cb added_cb, libusb_pollfd_removed_cb removed_cb, - void *user_data); + libusb_pollfd_added_cb added_cb, libusb_pollfd_removed_cb removed_cb, + void *user_data); #ifdef __cplusplus } diff --git a/src/main/java/ch/ntb/usb/Device.java b/src/main/java/ch/ntb/usb/Device.java index 7398295..935c4ac 100644 --- a/src/main/java/ch/ntb/usb/Device.java +++ b/src/main/java/ch/ntb/usb/Device.java @@ -19,798 +19,798 @@ import ch.ntb.usb.logger.LogUtil; */ public class Device { - private static final Logger logger = LogUtil.getLogger("ch.ntb.usb"); + private static final Logger logger = LogUtil.getLogger("ch.ntb.usb"); - private int maxPacketSize; + private int maxPacketSize; - /** - * Mandatory identification values for the device. - */ - private int idVendor, idProduct; + /** + * Mandatory identification values for the device. + */ + private int idVendor, idProduct; - /** - * Optional identification value for the device (e.g. if there are multiple - * devices with the same vendor and product id). - */ - private String filename; + /** + * Optional identification value for the device (e.g. if there are multiple + * devices with the same vendor and product id). + */ + private String filename; - /** - * Optional identification value for the device (e.g. if there are multiple - * devices with the same vendor and product id). - */ - private String busName; + /** + * Optional identification value for the device (e.g. if there are multiple + * devices with the same vendor and product id). + */ + private String busName; - private int dev_configuration, dev_interface, dev_altinterface; + private int dev_configuration, dev_interface, dev_altinterface; - private long usbDevHandle; + private long usbDevHandle; - private boolean resetOnFirstOpen, resetDone; + private boolean resetOnFirstOpen, resetDone; - private int resetTimeout = 2000; + private int resetTimeout = 2000; - private Usb_Device dev; + private Usb_Device dev; - protected Device(short idVendor, short idProduct) { - resetOnFirstOpen = false; - resetDone = false; - maxPacketSize = -1; - this.idVendor = idVendor; - this.idProduct = idProduct; - this.filename = null; - } + protected Device(short idVendor, short idProduct) { + resetOnFirstOpen = false; + resetDone = false; + maxPacketSize = -1; + this.idVendor = idVendor; + this.idProduct = idProduct; + this.filename = null; + } - protected Device(short idVendor, short idProduct, String busName, - String filename) { - resetOnFirstOpen = false; - resetDone = false; - maxPacketSize = -1; - this.idVendor = idVendor; - this.idProduct = idProduct; - this.busName = busName; - this.filename = filename; - } + protected Device(short idVendor, short idProduct, String busName, + String filename) { + resetOnFirstOpen = false; + resetDone = false; + maxPacketSize = -1; + this.idVendor = idVendor; + this.idProduct = idProduct; + this.busName = busName; + this.filename = filename; + } - private void updateMaxPacketSize(Usb_Device device) throws USBException { - maxPacketSize = -1; - Usb_Config_Descriptor[] confDesc = device.getConfig(); - for (int i = 0; i < confDesc.length; i++) { - Usb_Interface[] int_ = confDesc[i].getInterface(); - for (int j = 0; j < int_.length; j++) { - Usb_Interface_Descriptor[] intDesc = int_[j].getAltsetting(); - for (int k = 0; k < intDesc.length; k++) { - Usb_Endpoint_Descriptor[] epDesc = intDesc[k].getEndpoint(); - for (int l = 0; l < epDesc.length; l++) { - maxPacketSize = Math.max(epDesc[l].getWMaxPacketSize(), - maxPacketSize); - } - } - } - } - if (maxPacketSize <= 0) { - throw new USBException( - "No USB endpoints found. Check the device configuration"); - } - } + private void updateMaxPacketSize(Usb_Device device) throws USBException { + maxPacketSize = -1; + Usb_Config_Descriptor[] confDesc = device.getConfig(); + for (int i = 0; i < confDesc.length; i++) { + Usb_Interface[] int_ = confDesc[i].getInterface(); + for (int j = 0; j < int_.length; j++) { + Usb_Interface_Descriptor[] intDesc = int_[j].getAltsetting(); + for (int k = 0; k < intDesc.length; k++) { + Usb_Endpoint_Descriptor[] epDesc = intDesc[k].getEndpoint(); + for (int l = 0; l < epDesc.length; l++) { + maxPacketSize = Math.max(epDesc[l].getWMaxPacketSize(), + maxPacketSize); + } + } + } + } + if (maxPacketSize <= 0) { + throw new USBException( + "No USB endpoints found. Check the device configuration"); + } + } - /** - * Initializes the device. The parameters idVendor and - * idProduct are mandatory. The parameter filename - * is optional. - */ - private Usb_Device initDevice(int idVendorParam, int idProductParam, - String busName, String filename) throws USBException { - Usb_Bus bus = USB.getBus(); + /** + * Initializes the device. The parameters idVendor and + * idProduct are mandatory. The parameter filename + * is optional. + */ + private Usb_Device initDevice(int idVendorParam, int idProductParam, + String busName, String filename) throws USBException { + Usb_Bus bus = USB.getBus(); - Usb_Device device = null; - // search for device - while (bus != null) { - device = bus.getDevices(); - while (device != null) { - Usb_Device_Descriptor devDesc = device.getDescriptor(); - if (busName != null && filename != null) { - if (busName.compareTo(bus.getDirname()) == 0 - && filename.compareTo(device.getFilename()) == 0 - && devDesc.getIdVendor() == idVendor - && devDesc.getIdProduct() == idProduct) { - logger.info("Device found. bus: " + bus.getDirname() - + ", filename: " + device.getFilename()); - updateMaxPacketSize(device); - return device; - } - } else if (filename != null) { - if (filename.compareTo(device.getFilename()) == 0 - && devDesc.getIdVendor() == idVendor - && devDesc.getIdProduct() == idProduct) { - logger.info("Device found. bus: " + bus.getDirname() - + ", filename: " + device.getFilename()); - updateMaxPacketSize(device); - return device; - } - } else if (busName != null) { - if (busName.compareTo(bus.getDirname()) == 0 - && devDesc.getIdVendor() == idVendor - && devDesc.getIdProduct() == idProduct) { - logger.info("Device found. bus: " + bus.getDirname() - + ", filename: " + device.getFilename()); - updateMaxPacketSize(device); - return device; - } - } else if (devDesc.getIdVendor() == idVendor - && devDesc.getIdProduct() == idProduct) { - logger.info("Device found. bus: " + bus.getDirname() - + ", filename: " + device.getFilename()); - updateMaxPacketSize(device); - return device; - } - device = device.getNext(); - } - bus = bus.getNext(); - } - return null; - } + Usb_Device device = null; + // search for device + while (bus != null) { + device = bus.getDevices(); + while (device != null) { + Usb_Device_Descriptor devDesc = device.getDescriptor(); + if (busName != null && filename != null) { + if (busName.compareTo(bus.getDirname()) == 0 + && filename.compareTo(device.getFilename()) == 0 + && devDesc.getIdVendor() == idVendor + && devDesc.getIdProduct() == idProduct) { + logger.info("Device found. bus: " + bus.getDirname() + + ", filename: " + device.getFilename()); + updateMaxPacketSize(device); + return device; + } + } else if (filename != null) { + if (filename.compareTo(device.getFilename()) == 0 + && devDesc.getIdVendor() == idVendor + && devDesc.getIdProduct() == idProduct) { + logger.info("Device found. bus: " + bus.getDirname() + + ", filename: " + device.getFilename()); + updateMaxPacketSize(device); + return device; + } + } else if (busName != null) { + if (busName.compareTo(bus.getDirname()) == 0 + && devDesc.getIdVendor() == idVendor + && devDesc.getIdProduct() == idProduct) { + logger.info("Device found. bus: " + bus.getDirname() + + ", filename: " + device.getFilename()); + updateMaxPacketSize(device); + return device; + } + } else if (devDesc.getIdVendor() == idVendor + && devDesc.getIdProduct() == idProduct) { + logger.info("Device found. bus: " + bus.getDirname() + + ", filename: " + device.getFilename()); + updateMaxPacketSize(device); + return device; + } + device = device.getNext(); + } + bus = bus.getNext(); + } + return null; + } - /** - * Updates the device and descriptor information from the bus.
- * The descriptors can be read with {@link #getDeviceDescriptor()} and - * {@link #getConfigDescriptors()}. - * - * @throws USBException - */ - public void updateDescriptors() throws USBException { - dev = initDevice(idVendor, idProduct, busName, filename); - } + /** + * Updates the device and descriptor information from the bus.
+ * The descriptors can be read with {@link #getDeviceDescriptor()} and + * {@link #getConfigDescriptors()}. + * + * @throws USBException + */ + public void updateDescriptors() throws USBException { + dev = initDevice(idVendor, idProduct, busName, filename); + } - /** - * Returns the device descriptor associated with this device.
- * The descriptor is updated by calling {@link #updateDescriptors()} or - * {@link #open(int, int, int)}. - * - * @return the device descriptor associated with this device or - * null - */ - public Usb_Device_Descriptor getDeviceDescriptor() { - if (dev == null) { - return null; - } - return dev.getDescriptor(); - } + /** + * Returns the device descriptor associated with this device.
+ * The descriptor is updated by calling {@link #updateDescriptors()} or + * {@link #open(int, int, int)}. + * + * @return the device descriptor associated with this device or + * null + */ + public Usb_Device_Descriptor getDeviceDescriptor() { + if (dev == null) { + return null; + } + return dev.getDescriptor(); + } - /** - * Returns the configuration descriptors associated with this device.
- * The descriptors are updated by calling {@link #updateDescriptors()} or - * {@link #open(int, int, int)}. - * - * @return the configuration descriptors associated with this device or - * null - */ - public Usb_Config_Descriptor[] getConfigDescriptors() { - if (dev == null) { - return null; - } - return dev.getConfig(); - } + /** + * Returns the configuration descriptors associated with this device.
+ * The descriptors are updated by calling {@link #updateDescriptors()} or + * {@link #open(int, int, int)}. + * + * @return the configuration descriptors associated with this device or + * null + */ + public Usb_Config_Descriptor[] getConfigDescriptors() { + if (dev == null) { + return null; + } + return dev.getConfig(); + } - /** - * Opens the device and claims the specified configuration, interface and - * altinterface.
- * First the bus is enumerated. If the device is found its descriptors are - * read and the maxPacketSize value is updated. If no endpoints - * are found in the descriptors an exception is thrown. - * - * @param configuration - * the configuration, see - * {@link Usb_Config_Descriptor#getBConfigurationValue()} - * @param interface_ - * the interface, see - * {@link Usb_Interface_Descriptor#getBInterfaceNumber()} - * @param altinterface - * the alternate interface, see - * {@link Usb_Interface_Descriptor#getBAlternateSetting()}. If no - * alternate interface must be set -1 can be used. - * @throws USBException - */ - public void open(int configuration, int interface_, int altinterface) - throws USBException { - this.dev_configuration = configuration; - this.dev_interface = interface_; - this.dev_altinterface = altinterface; + /** + * Opens the device and claims the specified configuration, interface and + * altinterface.
+ * First the bus is enumerated. If the device is found its descriptors are + * read and the maxPacketSize value is updated. If no endpoints + * are found in the descriptors an exception is thrown. + * + * @param configuration + * the configuration, see + * {@link Usb_Config_Descriptor#getBConfigurationValue()} + * @param interface_ + * the interface, see + * {@link Usb_Interface_Descriptor#getBInterfaceNumber()} + * @param altinterface + * the alternate interface, see + * {@link Usb_Interface_Descriptor#getBAlternateSetting()}. If no + * alternate interface must be set -1 can be used. + * @throws USBException + */ + public void open(int configuration, int interface_, int altinterface) + throws USBException { + this.dev_configuration = configuration; + this.dev_interface = interface_; + this.dev_altinterface = altinterface; - if (usbDevHandle != 0) { - throw new USBException("device opened, close or reset first"); - } + if (usbDevHandle != 0) { + throw new USBException("device opened, close or reset first"); + } - dev = initDevice(idVendor, idProduct, busName, filename); + dev = initDevice(idVendor, idProduct, busName, filename); - if (dev != null) { - long res = LibusbJava.usb_open(dev); - if (res == 0) { - throw new USBException("LibusbJava.usb_open: " - + LibusbJava.usb_strerror()); - } - usbDevHandle = res; - } + if (dev != null) { + long res = LibusbJava.usb_open(dev); + if (res == 0) { + throw new USBException("LibusbJava.usb_open: " + + LibusbJava.usb_strerror()); + } + usbDevHandle = res; + } - if (dev == null || usbDevHandle == 0) { - throw new USBException("USB device with " + toString() - + " not found on USB"); - } - claim_interface(usbDevHandle, configuration, interface_, altinterface); - if (resetOnFirstOpen & !resetDone) { - logger.info("reset on first open"); - resetDone = true; - reset(); - try { - Thread.sleep(resetTimeout); - } catch (InterruptedException e) { - // - } - open(configuration, interface_, altinterface); - } - } + if (dev == null || usbDevHandle == 0) { + throw new USBException("USB device with " + toString() + + " not found on USB"); + } + claim_interface(usbDevHandle, configuration, interface_, altinterface); + if (resetOnFirstOpen & !resetDone) { + logger.info("reset on first open"); + resetDone = true; + reset(); + try { + Thread.sleep(resetTimeout); + } catch (InterruptedException e) { + // + } + open(configuration, interface_, altinterface); + } + } - /** - * Release the claimed interface and close the opened device.
- * - * @throws USBException - */ - public void close() throws USBException { - if (usbDevHandle == 0) { - throw new USBException("invalid device handle"); - } - release_interface(usbDevHandle, dev_interface); - if (LibusbJava.usb_close(usbDevHandle) < 0) { - usbDevHandle = 0; - throw new USBException("LibusbJava.usb_close: " - + LibusbJava.usb_strerror()); - } - usbDevHandle = 0; - maxPacketSize = -1; - logger.info("device closed"); - } + /** + * Release the claimed interface and close the opened device.
+ * + * @throws USBException + */ + public void close() throws USBException { + if (usbDevHandle == 0) { + throw new USBException("invalid device handle"); + } + release_interface(usbDevHandle, dev_interface); + if (LibusbJava.usb_close(usbDevHandle) < 0) { + usbDevHandle = 0; + throw new USBException("LibusbJava.usb_close: " + + LibusbJava.usb_strerror()); + } + usbDevHandle = 0; + maxPacketSize = -1; + logger.info("device closed"); + } - /** - * Sends an USB reset to the device. The device handle will no longer be - * valid. To use the device again, {@link #open(int, int, int)} must be - * called.
- * Note that the device is re-attached to the USB which may cause the bus - * and filename to be changed. If the bus and filename parameters are used - * in {@link USB#getDevice(short, short, String, String)} unregister the - * device using {@link USB#unregisterDevice(Device)}, re-enumerate the bus - * and create a new device instance. If that is not done the device may not - * be found. - * - * @throws USBException - */ - public void reset() throws USBException { - if (usbDevHandle == 0) { - throw new USBException("invalid device handle"); - } - release_interface(usbDevHandle, dev_interface); - if (LibusbJava.usb_reset(usbDevHandle) < 0) { - usbDevHandle = 0; - throw new USBException("LibusbJava.usb_reset: " - + LibusbJava.usb_strerror()); - } - usbDevHandle = 0; - logger.info("device reset"); - } + /** + * Sends an USB reset to the device. The device handle will no longer be + * valid. To use the device again, {@link #open(int, int, int)} must be + * called.
+ * Note that the device is re-attached to the USB which may cause the bus + * and filename to be changed. If the bus and filename parameters are used + * in {@link USB#getDevice(short, short, String, String)} unregister the + * device using {@link USB#unregisterDevice(Device)}, re-enumerate the bus + * and create a new device instance. If that is not done the device may not + * be found. + * + * @throws USBException + */ + public void reset() throws USBException { + if (usbDevHandle == 0) { + throw new USBException("invalid device handle"); + } + release_interface(usbDevHandle, dev_interface); + if (LibusbJava.usb_reset(usbDevHandle) < 0) { + usbDevHandle = 0; + throw new USBException("LibusbJava.usb_reset: " + + LibusbJava.usb_strerror()); + } + usbDevHandle = 0; + logger.info("device reset"); + } - /** - * Write data to the device using a bulk transfer.
- * - * @param out_ep_address - * endpoint address to write to - * @param data - * data to write to this endpoint - * @param size - * size of the data - * @param timeout - * amount of time in ms the device will try to send the data - * until a timeout exception is thrown - * @param reopenOnTimeout - * if set to true, the device will try to open the connection and - * send the data again before a timeout exception is thrown - * @return the actual number of bytes written - * @throws USBException - */ - public int writeBulk(int out_ep_address, byte[] data, int size, - int timeout, boolean reopenOnTimeout) throws USBException { - if (usbDevHandle == 0) { - throw new USBException("invalid device handle"); - } - if (data == null) { - throw new USBException("data must not be null"); - } - if (size <= 0 || size > data.length) { - throw new ArrayIndexOutOfBoundsException("invalid size: " + size); - } - int lenWritten = LibusbJava.usb_bulk_write(usbDevHandle, - out_ep_address, data, size, timeout); - if (lenWritten < 0) { - if (lenWritten == LibusbJava.ERROR_TIMEDOUT) { - // try to reopen the device and send the data again - if (reopenOnTimeout) { - logger.info("try to reopen"); - reset(); - open(dev_configuration, dev_interface, dev_altinterface); - return writeBulk(out_ep_address, data, size, timeout, false); - } - throw new USBTimeoutException("LibusbJava.usb_bulk_write: " - + LibusbJava.usb_strerror()); - } - throw new USBException("LibusbJava.usb_bulk_write: " - + LibusbJava.usb_strerror()); - } + /** + * Write data to the device using a bulk transfer.
+ * + * @param out_ep_address + * endpoint address to write to + * @param data + * data to write to this endpoint + * @param size + * size of the data + * @param timeout + * amount of time in ms the device will try to send the data + * until a timeout exception is thrown + * @param reopenOnTimeout + * if set to true, the device will try to open the connection and + * send the data again before a timeout exception is thrown + * @return the actual number of bytes written + * @throws USBException + */ + public int writeBulk(int out_ep_address, byte[] data, int size, + int timeout, boolean reopenOnTimeout) throws USBException { + if (usbDevHandle == 0) { + throw new USBException("invalid device handle"); + } + if (data == null) { + throw new USBException("data must not be null"); + } + if (size <= 0 || size > data.length) { + throw new ArrayIndexOutOfBoundsException("invalid size: " + size); + } + int lenWritten = LibusbJava.usb_bulk_write(usbDevHandle, + out_ep_address, data, size, timeout); + if (lenWritten < 0) { + if (lenWritten == LibusbJava.ERROR_TIMEDOUT) { + // try to reopen the device and send the data again + if (reopenOnTimeout) { + logger.info("try to reopen"); + reset(); + open(dev_configuration, dev_interface, dev_altinterface); + return writeBulk(out_ep_address, data, size, timeout, false); + } + throw new USBTimeoutException("LibusbJava.usb_bulk_write: " + + LibusbJava.usb_strerror()); + } + throw new USBException("LibusbJava.usb_bulk_write: " + + LibusbJava.usb_strerror()); + } - logger.info("length written: " + lenWritten); - if (logger.isLoggable(Level.FINEST)) { - StringBuffer sb = new StringBuffer("bulkwrite, ep 0x" - + Integer.toHexString(out_ep_address) + ": " + lenWritten - + " Bytes sent: "); - for (int i = 0; i < lenWritten; i++) { - sb.append("0x" + String.format("%1$02X", data[i]) + " "); - } - logger.info(sb.toString()); - } - return lenWritten; - } + logger.info("length written: " + lenWritten); + if (logger.isLoggable(Level.FINEST)) { + StringBuffer sb = new StringBuffer("bulkwrite, ep 0x" + + Integer.toHexString(out_ep_address) + ": " + lenWritten + + " Bytes sent: "); + for (int i = 0; i < lenWritten; i++) { + sb.append("0x" + String.format("%1$02X", data[i]) + " "); + } + logger.info(sb.toString()); + } + return lenWritten; + } - /** - * Read data from the device using a bulk transfer.
- * - * @param in_ep_address - * endpoint address to read from - * @param data - * data buffer for the data to be read - * @param size - * the maximum requested data size - * @param timeout - * amount of time in ms the device will try to receive data until - * a timeout exception is thrown - * @param reopenOnTimeout - * if set to true, the device will try to open the connection and - * receive the data again before a timeout exception is thrown - * @return the actual number of bytes read - * @throws USBException - */ - public int readBulk(int in_ep_address, byte[] data, int size, int timeout, - boolean reopenOnTimeout) throws USBException { - if (usbDevHandle == 0) { - throw new USBException("invalid device handle"); - } - if (data == null) { - throw new USBException("data must not be null"); - } - if (size <= 0 || size > data.length) { - throw new ArrayIndexOutOfBoundsException("invalid size: " + size); - } - int lenRead = LibusbJava.usb_bulk_read(usbDevHandle, in_ep_address, - data, size, timeout); - if (lenRead < 0) { - if (lenRead == LibusbJava.ERROR_TIMEDOUT) { - // try to reopen the device and send the data again - if (reopenOnTimeout) { - logger.info("try to reopen"); - reset(); - open(dev_configuration, dev_interface, dev_altinterface); - return readBulk(in_ep_address, data, size, timeout, false); - } - throw new USBTimeoutException("LibusbJava.usb_bulk_read: " - + LibusbJava.usb_strerror()); - } - throw new USBException("LibusbJava.usb_bulk_read: " - + LibusbJava.usb_strerror()); - } + /** + * Read data from the device using a bulk transfer.
+ * + * @param in_ep_address + * endpoint address to read from + * @param data + * data buffer for the data to be read + * @param size + * the maximum requested data size + * @param timeout + * amount of time in ms the device will try to receive data until + * a timeout exception is thrown + * @param reopenOnTimeout + * if set to true, the device will try to open the connection and + * receive the data again before a timeout exception is thrown + * @return the actual number of bytes read + * @throws USBException + */ + public int readBulk(int in_ep_address, byte[] data, int size, int timeout, + boolean reopenOnTimeout) throws USBException { + if (usbDevHandle == 0) { + throw new USBException("invalid device handle"); + } + if (data == null) { + throw new USBException("data must not be null"); + } + if (size <= 0 || size > data.length) { + throw new ArrayIndexOutOfBoundsException("invalid size: " + size); + } + int lenRead = LibusbJava.usb_bulk_read(usbDevHandle, in_ep_address, + data, size, timeout); + if (lenRead < 0) { + if (lenRead == LibusbJava.ERROR_TIMEDOUT) { + // try to reopen the device and send the data again + if (reopenOnTimeout) { + logger.info("try to reopen"); + reset(); + open(dev_configuration, dev_interface, dev_altinterface); + return readBulk(in_ep_address, data, size, timeout, false); + } + throw new USBTimeoutException("LibusbJava.usb_bulk_read: " + + LibusbJava.usb_strerror()); + } + throw new USBException("LibusbJava.usb_bulk_read: " + + LibusbJava.usb_strerror()); + } - logger.info("length read: " + lenRead); - if (logger.isLoggable(Level.FINEST)) { - StringBuffer sb = new StringBuffer("bulkread, ep 0x" - + Integer.toHexString(in_ep_address) + ": " + lenRead - + " Bytes received: "); - for (int i = 0; i < lenRead; i++) { - sb.append("0x" + String.format("%1$02X", data[i]) + " "); - } - logger.info(sb.toString()); - } - return lenRead; - } + logger.info("length read: " + lenRead); + if (logger.isLoggable(Level.FINEST)) { + StringBuffer sb = new StringBuffer("bulkread, ep 0x" + + Integer.toHexString(in_ep_address) + ": " + lenRead + + " Bytes received: "); + for (int i = 0; i < lenRead; i++) { + sb.append("0x" + String.format("%1$02X", data[i]) + " "); + } + logger.info(sb.toString()); + } + return lenRead; + } - /** - * Write data to the device using a interrupt transfer.
- * - * @param out_ep_address - * endpoint address to write to - * @param data - * data to write to this endpoint - * @param size - * size of the data - * @param timeout - * amount of time in ms the device will try to send the data - * until a timeout exception is thrown - * @param reopenOnTimeout - * if set to true, the device will try to open the connection and - * send the data again before a timeout exception is thrown - * @return the actual number of bytes written - * @throws USBException - */ - public int writeInterrupt(int out_ep_address, byte[] data, int size, - int timeout, boolean reopenOnTimeout) throws USBException { - if (usbDevHandle == 0) { - throw new USBException("invalid device handle"); - } - if (data == null) { - throw new USBException("data must not be null"); - } - if (size <= 0 || size > data.length) { - throw new ArrayIndexOutOfBoundsException("invalid size: " + size); - } - int lenWritten = LibusbJava.usb_interrupt_write(usbDevHandle, - out_ep_address, data, size, timeout); - if (lenWritten < 0) { - if (lenWritten == LibusbJava.ERROR_TIMEDOUT) { - // try to reopen the device and send the data again - if (reopenOnTimeout) { - logger.info("try to reopen"); - reset(); - open(dev_configuration, dev_interface, dev_altinterface); - return writeInterrupt(out_ep_address, data, size, timeout, - false); - } - throw new USBTimeoutException( - "LibusbJava.usb_interrupt_write: " - + LibusbJava.usb_strerror()); - } - throw new USBException("LibusbJava.usb_interrupt_write: " - + LibusbJava.usb_strerror()); - } + /** + * Write data to the device using a interrupt transfer.
+ * + * @param out_ep_address + * endpoint address to write to + * @param data + * data to write to this endpoint + * @param size + * size of the data + * @param timeout + * amount of time in ms the device will try to send the data + * until a timeout exception is thrown + * @param reopenOnTimeout + * if set to true, the device will try to open the connection and + * send the data again before a timeout exception is thrown + * @return the actual number of bytes written + * @throws USBException + */ + public int writeInterrupt(int out_ep_address, byte[] data, int size, + int timeout, boolean reopenOnTimeout) throws USBException { + if (usbDevHandle == 0) { + throw new USBException("invalid device handle"); + } + if (data == null) { + throw new USBException("data must not be null"); + } + if (size <= 0 || size > data.length) { + throw new ArrayIndexOutOfBoundsException("invalid size: " + size); + } + int lenWritten = LibusbJava.usb_interrupt_write(usbDevHandle, + out_ep_address, data, size, timeout); + if (lenWritten < 0) { + if (lenWritten == LibusbJava.ERROR_TIMEDOUT) { + // try to reopen the device and send the data again + if (reopenOnTimeout) { + logger.info("try to reopen"); + reset(); + open(dev_configuration, dev_interface, dev_altinterface); + return writeInterrupt(out_ep_address, data, size, timeout, + false); + } + throw new USBTimeoutException( + "LibusbJava.usb_interrupt_write: " + + LibusbJava.usb_strerror()); + } + throw new USBException("LibusbJava.usb_interrupt_write: " + + LibusbJava.usb_strerror()); + } - logger.info("length written: " + lenWritten); - if (logger.isLoggable(Level.FINEST)) { - StringBuffer sb = new StringBuffer("interruptwrite, ep 0x" - + Integer.toHexString(out_ep_address) + ": " + lenWritten - + " Bytes sent: "); - for (int i = 0; i < lenWritten; i++) { - sb.append("0x" + String.format("%1$02X", data[i]) + " "); - } - logger.info(sb.toString()); - } - return lenWritten; - } + logger.info("length written: " + lenWritten); + if (logger.isLoggable(Level.FINEST)) { + StringBuffer sb = new StringBuffer("interruptwrite, ep 0x" + + Integer.toHexString(out_ep_address) + ": " + lenWritten + + " Bytes sent: "); + for (int i = 0; i < lenWritten; i++) { + sb.append("0x" + String.format("%1$02X", data[i]) + " "); + } + logger.info(sb.toString()); + } + return lenWritten; + } - /** - * Read data from the device using a interrupt transfer.
- * - * @param in_ep_address - * endpoint address to read from - * @param data - * data buffer for the data to be read - * @param size - * the maximum requested data size - * @param timeout - * amount of time in ms the device will try to receive data until - * a timeout exception is thrown - * @param reopenOnTimeout - * if set to true, the device will try to open the connection and - * receive the data again before a timeout exception is thrown - * @return the actual number of bytes read - * @throws USBException - */ - public int readInterrupt(int in_ep_address, byte[] data, int size, - int timeout, boolean reopenOnTimeout) throws USBException { - if (usbDevHandle == 0) { - throw new USBException("invalid device handle"); - } - if (data == null) { - throw new USBException("data must not be null"); - } - if (size <= 0 || size > data.length) { - throw new ArrayIndexOutOfBoundsException("invalid size: " + size); - } - int lenRead = LibusbJava.usb_interrupt_read(usbDevHandle, - in_ep_address, data, size, timeout); - if (lenRead < 0) { - if (lenRead == LibusbJava.ERROR_TIMEDOUT) { - // try to reopen the device and send the data again - if (reopenOnTimeout) { - logger.info("try to reopen"); - reset(); - open(dev_configuration, dev_interface, dev_altinterface); - return readInterrupt(in_ep_address, data, size, timeout, - false); - } - throw new USBTimeoutException("LibusbJava.usb_interrupt_read: " - + LibusbJava.usb_strerror()); - } - throw new USBException("LibusbJava.usb_interrupt_read: " - + LibusbJava.usb_strerror()); - } + /** + * Read data from the device using a interrupt transfer.
+ * + * @param in_ep_address + * endpoint address to read from + * @param data + * data buffer for the data to be read + * @param size + * the maximum requested data size + * @param timeout + * amount of time in ms the device will try to receive data until + * a timeout exception is thrown + * @param reopenOnTimeout + * if set to true, the device will try to open the connection and + * receive the data again before a timeout exception is thrown + * @return the actual number of bytes read + * @throws USBException + */ + public int readInterrupt(int in_ep_address, byte[] data, int size, + int timeout, boolean reopenOnTimeout) throws USBException { + if (usbDevHandle == 0) { + throw new USBException("invalid device handle"); + } + if (data == null) { + throw new USBException("data must not be null"); + } + if (size <= 0 || size > data.length) { + throw new ArrayIndexOutOfBoundsException("invalid size: " + size); + } + int lenRead = LibusbJava.usb_interrupt_read(usbDevHandle, + in_ep_address, data, size, timeout); + if (lenRead < 0) { + if (lenRead == LibusbJava.ERROR_TIMEDOUT) { + // try to reopen the device and send the data again + if (reopenOnTimeout) { + logger.info("try to reopen"); + reset(); + open(dev_configuration, dev_interface, dev_altinterface); + return readInterrupt(in_ep_address, data, size, timeout, + false); + } + throw new USBTimeoutException("LibusbJava.usb_interrupt_read: " + + LibusbJava.usb_strerror()); + } + throw new USBException("LibusbJava.usb_interrupt_read: " + + LibusbJava.usb_strerror()); + } - logger.info("length read: " + lenRead); - if (logger.isLoggable(Level.FINEST)) { - StringBuffer sb = new StringBuffer("interrupt, ep 0x" - + Integer.toHexString(in_ep_address) + ": " + lenRead - + " Bytes received: "); - for (int i = 0; i < lenRead; i++) { - sb.append("0x" + String.format("%1$02X", data[i]) + " "); - } - logger.info(sb.toString()); - } - return lenRead; - } + logger.info("length read: " + lenRead); + if (logger.isLoggable(Level.FINEST)) { + StringBuffer sb = new StringBuffer("interrupt, ep 0x" + + Integer.toHexString(in_ep_address) + ": " + lenRead + + " Bytes received: "); + for (int i = 0; i < lenRead; i++) { + sb.append("0x" + String.format("%1$02X", data[i]) + " "); + } + logger.info(sb.toString()); + } + return lenRead; + } - /** - * 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 requestType - * USB device request type (USB specification 9.3, - * bmRequestType). Use constants from {@link ch.ntb.usb.USB} - * (REQ_TYPE_xxx). - * @param request - * specific request (USB specification 9.4, bRequest). Use - * constants from {@link ch.ntb.usb.USB} (REQ_xxx). - * @param value - * field that varies according to request (USB specification 9.4, - * wValue) - * @param index - * field that varies according to request (USB specification 9.4, - * wIndex) - * @param data - * the send/receive buffer - * @param size - * the buffer size. 0 is a valid value, but there must still be a - * dummy data buffer provided. - * @param timeout - * amount of time in ms the device will try to send/receive data - * until a timeout exception is thrown - * @param reopenOnTimeout - * if set to true, the device will try to open the connection and - * send/receive the data again before a timeout exception is - * thrown - * @return the number of bytes written/read - * @throws USBException - */ - public int controlMsg(int requestType, int request, int value, int index, - byte[] data, int size, int timeout, boolean reopenOnTimeout) - throws USBException { - if (usbDevHandle == 0) { - throw new USBException("invalid device handle"); - } - if (data == null) { - throw new USBException("data must not be null"); - } - if (size < 0 || size > data.length) { - throw new ArrayIndexOutOfBoundsException("invalid size: " + size); - } - int len = LibusbJava.usb_control_msg(usbDevHandle, requestType, - request, value, index, data, size, timeout); - if (len < 0) { - if (len == LibusbJava.ERROR_TIMEDOUT) { - // try to reopen the device and send the data again - if (reopenOnTimeout) { - logger.info("try to reopen"); - reset(); - open(dev_configuration, dev_interface, dev_altinterface); - return controlMsg(requestType, request, value, index, data, - size, timeout, false); - } - throw new USBTimeoutException("LibusbJava.controlMsg: " - + LibusbJava.usb_strerror()); - } - throw new USBException("LibusbJava.controlMsg: " - + LibusbJava.usb_strerror()); - } + /** + * 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 requestType + * USB device request type (USB specification 9.3, + * bmRequestType). Use constants from {@link ch.ntb.usb.USB} + * (REQ_TYPE_xxx). + * @param request + * specific request (USB specification 9.4, bRequest). Use + * constants from {@link ch.ntb.usb.USB} (REQ_xxx). + * @param value + * field that varies according to request (USB specification 9.4, + * wValue) + * @param index + * field that varies according to request (USB specification 9.4, + * wIndex) + * @param data + * the send/receive buffer + * @param size + * the buffer size. 0 is a valid value, but there must still be a + * dummy data buffer provided. + * @param timeout + * amount of time in ms the device will try to send/receive data + * until a timeout exception is thrown + * @param reopenOnTimeout + * if set to true, the device will try to open the connection and + * send/receive the data again before a timeout exception is + * thrown + * @return the number of bytes written/read + * @throws USBException + */ + public int controlMsg(int requestType, int request, int value, int index, + byte[] data, int size, int timeout, boolean reopenOnTimeout) + throws USBException { + if (usbDevHandle == 0) { + throw new USBException("invalid device handle"); + } + if (data == null) { + throw new USBException("data must not be null"); + } + if (size < 0 || size > data.length) { + throw new ArrayIndexOutOfBoundsException("invalid size: " + size); + } + int len = LibusbJava.usb_control_msg(usbDevHandle, requestType, + request, value, index, data, size, timeout); + if (len < 0) { + if (len == LibusbJava.ERROR_TIMEDOUT) { + // try to reopen the device and send the data again + if (reopenOnTimeout) { + logger.info("try to reopen"); + reset(); + open(dev_configuration, dev_interface, dev_altinterface); + return controlMsg(requestType, request, value, index, data, + size, timeout, false); + } + throw new USBTimeoutException("LibusbJava.controlMsg: " + + LibusbJava.usb_strerror()); + } + throw new USBException("LibusbJava.controlMsg: " + + LibusbJava.usb_strerror()); + } - logger.info("length read/written: " + len); - if (logger.isLoggable(Level.FINEST)) { - StringBuffer sb = new StringBuffer("controlMsg: " + len - + " Bytes received(written: "); - for (int i = 0; i < len; i++) { - sb.append("0x" + String.format("%1$02X", data[i]) + " "); - } - logger.info(sb.toString()); - } - return len; - } + logger.info("length read/written: " + len); + if (logger.isLoggable(Level.FINEST)) { + StringBuffer sb = new StringBuffer("controlMsg: " + len + + " Bytes received(written: "); + for (int i = 0; i < len; i++) { + sb.append("0x" + String.format("%1$02X", data[i]) + " "); + } + logger.info(sb.toString()); + } + return len; + } - /** - * Claim an interface to send and receive USB data.
- * - * @param usb_dev_handle - * the handle of the device (MUST BE VALID) - * @param configuration - * the configuration to use - * @param interface_ - * the interface to claim - * @param altinterface - * the alternate interface to use. If no alternate interface must - * be set -1 can be used. - * @throws USBException - * throws an USBException if the action fails - */ - private void claim_interface(long usb_dev_handle, int configuration, - int interface_, int altinterface) throws USBException { - if (LibusbJava.usb_set_configuration(usb_dev_handle, configuration) < 0) { - usbDevHandle = 0; - throw new USBException("LibusbJava.usb_set_configuration: " - + LibusbJava.usb_strerror()); - } - if (LibusbJava.usb_claim_interface(usb_dev_handle, interface_) < 0) { - usbDevHandle = 0; - throw new USBException("LibusbJava.usb_claim_interface: " - + LibusbJava.usb_strerror()); - } - if (altinterface >= 0) { - if (LibusbJava.usb_set_altinterface(usb_dev_handle, altinterface) < 0) { - try { - release_interface(usb_dev_handle, interface_); - } catch (USBException e) { - // ignore - } - usbDevHandle = 0; - throw new USBException("LibusbJava.usb_set_altinterface: " - + LibusbJava.usb_strerror()); - } - } - logger.info("interface claimed"); - } + /** + * Claim an interface to send and receive USB data.
+ * + * @param usb_dev_handle + * the handle of the device (MUST BE VALID) + * @param configuration + * the configuration to use + * @param interface_ + * the interface to claim + * @param altinterface + * the alternate interface to use. If no alternate interface must + * be set -1 can be used. + * @throws USBException + * throws an USBException if the action fails + */ + private void claim_interface(long usb_dev_handle, int configuration, + int interface_, int altinterface) throws USBException { + if (LibusbJava.usb_set_configuration(usb_dev_handle, configuration) < 0) { + usbDevHandle = 0; + throw new USBException("LibusbJava.usb_set_configuration: " + + LibusbJava.usb_strerror()); + } + if (LibusbJava.usb_claim_interface(usb_dev_handle, interface_) < 0) { + usbDevHandle = 0; + throw new USBException("LibusbJava.usb_claim_interface: " + + LibusbJava.usb_strerror()); + } + if (altinterface >= 0) { + if (LibusbJava.usb_set_altinterface(usb_dev_handle, altinterface) < 0) { + try { + release_interface(usb_dev_handle, interface_); + } catch (USBException e) { + // ignore + } + usbDevHandle = 0; + throw new USBException("LibusbJava.usb_set_altinterface: " + + LibusbJava.usb_strerror()); + } + } + logger.info("interface claimed"); + } - /** - * Release a previously claimed interface.
- * - * @param dev_handle - * the handle of the device (MUST BE VALID) - * @param interface_ - * the interface to claim - * @throws USBException - * throws an USBException if the action fails - */ - private void release_interface(long dev_handle, int interface_) - throws USBException { - if (LibusbJava.usb_release_interface(dev_handle, interface_) < 0) { - usbDevHandle = 0; - throw new USBException("LibusbJava.usb_release_interface: " - + LibusbJava.usb_strerror()); - } - logger.info("interface released"); - } + /** + * Release a previously claimed interface.
+ * + * @param dev_handle + * the handle of the device (MUST BE VALID) + * @param interface_ + * the interface to claim + * @throws USBException + * throws an USBException if the action fails + */ + private void release_interface(long dev_handle, int interface_) + throws USBException { + if (LibusbJava.usb_release_interface(dev_handle, interface_) < 0) { + usbDevHandle = 0; + throw new USBException("LibusbJava.usb_release_interface: " + + LibusbJava.usb_strerror()); + } + logger.info("interface released"); + } - /** - * Returns the product ID of the device.
- * - * @return the product ID of the device. - */ - public int getIdProduct() { - return idProduct; - } + /** + * Returns the product ID of the device.
+ * + * @return the product ID of the device. + */ + public int getIdProduct() { + return idProduct; + } - /** - * Returns the vendor ID of the device.
- * - * @return the vendor ID of the device. - */ - public int getIdVendor() { - return idVendor; - } + /** + * Returns the vendor ID of the device.
+ * + * @return the vendor ID of the device. + */ + public int getIdVendor() { + return idVendor; + } - /** - * Returns the alternative interface.
- * This value is only valid after opening the device. - * - * @return the alternative interface. This value is only valid after opening - * the device. - */ - public int getAltinterface() { - return dev_altinterface; - } + /** + * Returns the alternative interface.
+ * This value is only valid after opening the device. + * + * @return the alternative interface. This value is only valid after opening + * the device. + */ + public int getAltinterface() { + return dev_altinterface; + } - /** - * Returns the current configuration used.
- * This value is only valid after opening the device. - * - * @return the current configuration used. This value is only valid after - * opening the device. - */ - public int getConfiguration() { - return dev_configuration; - } + /** + * Returns the current configuration used.
+ * This value is only valid after opening the device. + * + * @return the current configuration used. This value is only valid after + * opening the device. + */ + public int getConfiguration() { + return dev_configuration; + } - /** - * Returns the current interface.
- * This value is only valid after opening the device. - * - * @return the current interface. This value is only valid after opening the - * device. - */ - public int getInterface() { - return dev_interface; - } + /** + * Returns the current interface.
+ * This value is only valid after opening the device. + * + * @return the current interface. This value is only valid after opening the + * device. + */ + public int getInterface() { + return dev_interface; + } - /** - * Returns the maximum packet size in bytes which is allowed to be - * transmitted at once.
- * The value is determined by reading the endpoint descriptor(s) when - * opening the device. It is invalid before the device is opened! Note that - * if some endpoints use different packet sizes the maximum packet size is - * return. This value may be used to determine if a device is opened in - * fullspeed or highspeed mode. - * - * @return the maximum packet size - */ - public int getMaxPacketSize() { - return maxPacketSize; - } + /** + * Returns the maximum packet size in bytes which is allowed to be + * transmitted at once.
+ * The value is determined by reading the endpoint descriptor(s) when + * opening the device. It is invalid before the device is opened! Note that + * if some endpoints use different packet sizes the maximum packet size is + * return. This value may be used to determine if a device is opened in + * fullspeed or highspeed mode. + * + * @return the maximum packet size + */ + public int getMaxPacketSize() { + return maxPacketSize; + } - /** - * Check if the device is open.
- * This checks only for a valid device handle. It doesn't check if the - * device is still attached or working. - * - * @return true if the device is open - */ - public boolean isOpen() { - return usbDevHandle != 0; - } + /** + * Check if the device is open.
+ * This checks only for a valid device handle. It doesn't check if the + * device is still attached or working. + * + * @return true if the device is open + */ + public boolean isOpen() { + return usbDevHandle != 0; + } - /** - * If enabled, the device is reset when first opened.
- * This will only happen once. When the application is started, the device - * state is unknown. If the device is not reset, read or write may result in - * a {@link USBTimeoutException}.
- *
- * This feature is disabled by default. - * - * @param enable - * true if the device should be reset when first opened - * @param timeout - * the timeout between the reset and the reopening - */ - public void setResetOnFirstOpen(boolean enable, int timeout) { - resetOnFirstOpen = enable; - resetTimeout = timeout; - } + /** + * If enabled, the device is reset when first opened.
+ * This will only happen once. When the application is started, the device + * state is unknown. If the device is not reset, read or write may result in + * a {@link USBTimeoutException}.
+ *
+ * This feature is disabled by default. + * + * @param enable + * true if the device should be reset when first opened + * @param timeout + * the timeout between the reset and the reopening + */ + public void setResetOnFirstOpen(boolean enable, int timeout) { + resetOnFirstOpen = enable; + resetTimeout = timeout; + } - /** - * Returns the optional filename which is set when there are multiple - * devices with the same vendor and product id. See - * {@link USB#getDevice(short, short, String, String)}. Use - * {@link Usb_Device#getFilename()} to read the filename of a device. - * - * @return the filename or null - */ - protected String getFilename() { - return filename; - } + /** + * Returns the optional filename which is set when there are multiple + * devices with the same vendor and product id. See + * {@link USB#getDevice(short, short, String, String)}. Use + * {@link Usb_Device#getFilename()} to read the filename of a device. + * + * @return the filename or null + */ + protected String getFilename() { + return filename; + } - /** - * Returns the optional bus name which is set when there are multiple - * devices with the same vendor and product id. See - * {@link USB#getDevice(short, short, String, String)}. Use - * {@link Usb_Bus#getDirname()} to read the name of a bus. - * - * @return the bus name or null - */ - protected String getBusName() { - return busName; - } + /** + * Returns the optional bus name which is set when there are multiple + * devices with the same vendor and product id. See + * {@link USB#getDevice(short, short, String, String)}. Use + * {@link Usb_Bus#getDirname()} to read the name of a bus. + * + * @return the bus name or null + */ + protected String getBusName() { + return busName; + } - /** - * Returns the Usb_Device instance associated with this device. This value - * is only valid after opening the device. - * - * @return the Usb_Device instance associated with this device. - */ - public Usb_Device getDevice() { - return dev; - } + /** + * Returns the Usb_Device instance associated with this device. This value + * is only valid after opening the device. + * + * @return the Usb_Device instance associated with this device. + */ + public Usb_Device getDevice() { + return dev; + } - @Override - public String toString() { - return "idVendor: 0x" + Integer.toHexString(getIdVendor() & 0xffff) - + ", idProduct: 0x" - + Integer.toHexString(getIdProduct() & 0xffff) + ", busName: " - + getBusName() + ", filename: " + getFilename(); - } + @Override + public String toString() { + return "idVendor: 0x" + Integer.toHexString(getIdVendor() & 0xffff) + + ", idProduct: 0x" + + Integer.toHexString(getIdProduct() & 0xffff) + ", busName: " + + getBusName() + ", filename: " + getFilename(); + } } diff --git a/src/main/java/ch/ntb/usb/LibusbJava.java b/src/main/java/ch/ntb/usb/LibusbJava.java index 58da3b8..63e45db 100644 --- a/src/main/java/ch/ntb/usb/LibusbJava.java +++ b/src/main/java/ch/ntb/usb/LibusbJava.java @@ -32,345 +32,345 @@ import com.github.boukefalos.jlibloader.Native; */ public class LibusbJava { - /** - * System error codes.
- * 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.
+ * 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.
- * - * 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.
+ * + * 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, usb_init sets up some internal - * structures. usb_init must be called before any other - * libusb functions. - */ - public static native void usb_init(); + // Core + /** + * Just like the name implies, usb_init sets up some internal + * structures. usb_init must be called before any other + * libusb functions. + */ + public static native void usb_init(); - /** - * usb_find_busses 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(); + /** + * usb_find_busses 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(); - /** - * usb_find_devices will find all of the devices on each bus. - * This should be called after usb_find_busses. - * - * @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(); + /** + * usb_find_devices will find all of the devices on each bus. + * This should be called after usb_find_busses. + * + * @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(); - /** - * usb_get_busses returns a tree of descriptor objects.
- * The tree represents the bus structure with devices, configurations, - * interfaces and endpoints. Note that this is only a copy. To refresh the - * information, usb_get_busses() must be called again.
- * The name of the objects contained in the tree is starting with - * Usb_. - * - * @return the structure of all busses and devices. Note: The - * java objects are copies of the C structs. - */ - public static native Usb_Bus usb_get_busses(); + /** + * usb_get_busses returns a tree of descriptor objects.
+ * The tree represents the bus structure with devices, configurations, + * interfaces and endpoints. Note that this is only a copy. To refresh the + * information, usb_get_busses() must be called again.
+ * The name of the objects contained in the tree is starting with + * Usb_. + * + * @return the structure of all busses and devices. Note: The + * java objects are copies of the C structs. + */ + public static native Usb_Bus usb_get_busses(); - // Device Operations - /** - * usb_open is to be used to open up a device for use. - * usb_open 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 + /** + * usb_open is to be used to open up a device for use. + * usb_open 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); - /** - * usb_close closes a device opened with - * usb_open. - * - * @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); + /** + * usb_close closes a device opened with + * usb_open. + * + * @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.
- *
- * Causes re-enumeration: After calling usb_reset, - * 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 - * usb_reset 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.
+ *
+ * Causes re-enumeration: After calling usb_reset, + * 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 + * usb_reset 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.
- *
- * Must be called!: usb_claim_interface must be - * called before you perform any operations related to this interface (like - * usb_set_altinterface, usb_bulk_write, 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.
+ *
+ * Must be called!: usb_claim_interface must be + * called before you perform any operations related to this interface (like + * usb_set_altinterface, usb_bulk_write, 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); - /** - * usb_get_string_simple is a wrapper around - * usb_get_string 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); + /** + * usb_get_string_simple is a wrapper around + * usb_get_string 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.
- *
- * 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.
+ *
+ * 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.
- *
- * Note that not all error codes are be mapped by this method. For more - * error codes see the file 'errno.h' on your system.
- *
- * 1: EBADF: Bad file descriptor.
- * 2: ENXIO: No such device or address.
- * 3: EBUSY: Device or resource busy.
- * 4: EINVAL: Invalid argument.
- * 5: ETIMEDOUT: Connection timed out.
- * 6: EIO: I/O error.
- * 7: ENOMEM: Not enough memory.
- * - * - * @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.
+ *
+ * Note that not all error codes are be mapped by this method. For more + * error codes see the file 'errno.h' on your system.
+ *
+ * 1: EBADF: Bad file descriptor.
+ * 2: ENXIO: No such device or address.
+ * 3: EBUSY: Device or resource busy.
+ * 4: EINVAL: Invalid argument.
+ * 5: ETIMEDOUT: Connection timed out.
+ * 6: EIO: I/O error.
+ * 7: ENOMEM: Not enough memory.
+ * + * + * @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); + } } \ No newline at end of file diff --git a/src/main/java/ch/ntb/usb/USB.java b/src/main/java/ch/ntb/usb/USB.java index f372ef3..6bfb064 100644 --- a/src/main/java/ch/ntb/usb/USB.java +++ b/src/main/java/ch/ntb/usb/USB.java @@ -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’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’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.
- * The state of the Direction bit is ignored if the wLength field is zero, - * signifying there is no Data stage.
- * 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.
+ * The state of the Direction bit is ignored if the wLength field is zero, + * signifying there is no Data stage.
+ * 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.
- * 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.
+ * 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.
- * 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.
- * 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.
+ * 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.
+ * 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 devices = new LinkedList(); + private static LinkedList devices = new LinkedList(); - 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.
- * 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.
- * see {@link Usb_Bus#getDirname()} - * @param filename - * optional filename which can be used to distinguish multiple - * devices with the same vendor and product id.
- * 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.
+ * 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.
+ * see {@link Usb_Bus#getDirname()} + * @param filename + * optional filename which can be used to distinguish multiple + * devices with the same vendor and product id.
+ * 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 - * filename and busNameis 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 + * filename and busNameis 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.
- * 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.
- * 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 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.
+ * 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.
+ * 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 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; + } } diff --git a/src/main/java/ch/ntb/usb/USBException.java b/src/main/java/ch/ntb/usb/USBException.java index 21f1f5c..266f843 100644 --- a/src/main/java/ch/ntb/usb/USBException.java +++ b/src/main/java/ch/ntb/usb/USBException.java @@ -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; } diff --git a/src/main/java/ch/ntb/usb/USBTimeoutException.java b/src/main/java/ch/ntb/usb/USBTimeoutException.java index 4b8c3c6..54e40b2 100644 --- a/src/main/java/ch/ntb/usb/USBTimeoutException.java +++ b/src/main/java/ch/ntb/usb/USBTimeoutException.java @@ -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; } diff --git a/src/main/java/ch/ntb/usb/Usb_Bus.java b/src/main/java/ch/ntb/usb/Usb_Bus.java index a7c59fc..974cc8b 100644 --- a/src/main/java/ch/ntb/usb/Usb_Bus.java +++ b/src/main/java/ch/ntb/usb/Usb_Bus.java @@ -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.
- * - * @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.
+ * + * @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.
- * - * @return the systems String representation of the bus - */ - public String getDirname() { - return dirname; - } + /** + * Returns the systems String representation of the bus.
+ * + * @return the systems String representation of the bus + */ + public String getDirname() { + return dirname; + } - /** - * Returns the next bus object.
- * - * @return Returns the next bus object or null - */ - public Usb_Bus getNext() { - return next; - } + /** + * Returns the next bus object.
+ * + * @return Returns the next bus object or null + */ + public Usb_Bus getNext() { + return next; + } - /** - * Returns the previous bus object.
- * - * @return Returns the previous bus object or null - */ - public Usb_Bus getPrev() { - return prev; - } + /** + * Returns the previous bus object.
+ * + * @return Returns the previous bus object or null + */ + public Usb_Bus getPrev() { + return prev; + } - /** - * Get the root device of this bus.
- * - * @return the root device oject or null - */ - public Usb_Device getRootDev() { - return root_dev; - } + /** + * Get the root device of this bus.
+ * + * @return the root device oject or null + */ + public Usb_Device getRootDev() { + return root_dev; + } - /** - * Returns the location in the USB bus linked list.
- * - * @return the location in the USB bus linked list - */ - public long getLocation() { - return location; - } + /** + * Returns the location in the USB bus linked list.
+ * + * @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; + } } \ No newline at end of file diff --git a/src/main/java/ch/ntb/usb/Usb_Config_Descriptor.java b/src/main/java/ch/ntb/usb/Usb_Config_Descriptor.java index 9bf6ff5..74bf357 100644 --- a/src/main/java/ch/ntb/usb/Usb_Config_Descriptor.java +++ b/src/main/java/ch/ntb/usb/Usb_Config_Descriptor.java @@ -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.
- *
- * Bit 7: Reserved, set to 1 (USB 1.0 Bus Powered)
- * Bit 6: Self Powered
- * Bit 5: Remote Wakeup
- * 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.
+ *
+ * Bit 7: Reserved, set to 1 (USB 1.0 Bus Powered)
+ * Bit 6: Self Powered
+ * Bit 5: Remote Wakeup
+ * Bit 4..0: Reserved, set to 0 + * + * @return the power parameters for this configuration + */ + public byte getBmAttributes() { + return bmAttributes; + } - /** - * Returns the number of interfaces.
- * - * @return the number of interfaces - */ - public byte getBNumInterfaces() { - return bNumInterfaces; - } + /** + * Returns the number of interfaces.
+ * + * @return the number of interfaces + */ + public byte getBNumInterfaces() { + return bNumInterfaces; + } - /** - * Returns the data of extra descriptor(s) if available.
- * - * @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.
+ * + * @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.
- * - * @return the number of bytes of the extra descriptor - */ - public int getExtralen() { - return extralen; - } + /** + * Returns the number of bytes of the extra descriptor.
+ * + * @return the number of bytes of the extra descriptor + */ + public int getExtralen() { + return extralen; + } - /** - * Returns the index of the String descriptor describing this configuration.
- * - * @return the index of the String descriptor - */ - public byte getIConfiguration() { - return iConfiguration; - } + /** + * Returns the index of the String descriptor describing this configuration.
+ * + * @return the index of the String descriptor + */ + public byte getIConfiguration() { + return iConfiguration; + } - /** - * Returns the USB interface descriptors.
- * - * @return the USB interface descriptors - */ - public Usb_Interface[] getInterface() { - return interface_; - } + /** + * Returns the USB interface descriptors.
+ * + * @return the USB interface descriptors + */ + public Usb_Interface[] getInterface() { + return interface_; + } - /** - * Returns the maximum power consumption in 2mA units.
- * - * @return the maximum power consumption in 2mA units - */ - public byte getMaxPower() { - return MaxPower; - } + /** + * Returns the maximum power consumption in 2mA units.
+ * + * @return the maximum power consumption in 2mA units + */ + public byte getMaxPower() { + return MaxPower; + } - /** - * Returns the total length in bytes of all descriptors.
- * When the configuration descriptor is read, it returns the entire - * configuration hierarchy which includes all related interface and endpoint - * descriptors. The wTotalLength 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.
+ * When the configuration descriptor is read, it returns the entire + * configuration hierarchy which includes all related interface and endpoint + * descriptors. The wTotalLength 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); + } } \ No newline at end of file diff --git a/src/main/java/ch/ntb/usb/Usb_Descriptor.java b/src/main/java/ch/ntb/usb/Usb_Descriptor.java index 6aee245..46d608b 100644 --- a/src/main/java/ch/ntb/usb/Usb_Descriptor.java +++ b/src/main/java/ch/ntb/usb/Usb_Descriptor.java @@ -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.
- * - * @return the type of this descriptor - */ - public byte getBDescriptorType() { - return bDescriptorType; - } + /** + * Get the type of this descriptor.
+ * + * @return the type of this descriptor + */ + public byte getBDescriptorType() { + return bDescriptorType; + } - /** - * Get the size of this descriptor in bytes.
- * - * @return the size of this descriptor in bytes - */ - public byte getBLength() { - return bLength; - } + /** + * Get the size of this descriptor in bytes.
+ * + * @return the size of this descriptor in bytes + */ + public byte getBLength() { + return bLength; + } } diff --git a/src/main/java/ch/ntb/usb/Usb_Device.java b/src/main/java/ch/ntb/usb/Usb_Device.java index 5cb314a..a3bf211 100644 --- a/src/main/java/ch/ntb/usb/Usb_Device.java +++ b/src/main/java/ch/ntb/usb/Usb_Device.java @@ -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.
- * - * @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.
+ * + * @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.
- * - * @return a reference to the first child - */ - public Usb_Device getChildren() { - return children; - } + /** + * Returns a reference to the first child.
+ * + * @return a reference to the first child + */ + public Usb_Device getChildren() { + return children; + } - /** - * Returns the USB config descriptors.
- * - * @return the USB config descriptors - */ - public Usb_Config_Descriptor[] getConfig() { - return config; - } + /** + * Returns the USB config descriptors.
+ * + * @return the USB config descriptors + */ + public Usb_Config_Descriptor[] getConfig() { + return config; + } - /** - * Returns the USB device descriptor.
- * - * @return the USB device descriptor - */ - public Usb_Device_Descriptor getDescriptor() { - return descriptor; - } + /** + * Returns the USB device descriptor.
+ * + * @return the USB device descriptor + */ + public Usb_Device_Descriptor getDescriptor() { + return descriptor; + } - /** - * Returns the number assigned to this device.
- * - * @return the number assigned to this device - */ - public byte getDevnum() { - return devnum; - } + /** + * Returns the number assigned to this device.
+ * + * @return the number assigned to this device + */ + public byte getDevnum() { + return devnum; + } - /** - * Returns the systems String representation.
- * - * @return the systems String representation - */ - public String getFilename() { - return filename; - } + /** + * Returns the systems String representation.
+ * + * @return the systems String representation + */ + public String getFilename() { + return filename; + } - /** - * Returns the pointer to the next device.
- * - * @return the pointer to the next device or null - */ - public Usb_Device getNext() { - return next; - } + /** + * Returns the pointer to the next device.
+ * + * @return the pointer to the next device or null + */ + public Usb_Device getNext() { + return next; + } - /** - * Returns the number of children of this device.
- * - * @return the number of children of this device - */ - public byte getNumChildren() { - return num_children; - } + /** + * Returns the number of children of this device.
+ * + * @return the number of children of this device + */ + public byte getNumChildren() { + return num_children; + } - /** - * Returns the pointer to the previous device.
- * - * @return the pointer to the previous device or null - */ - public Usb_Device getPrev() { - return prev; - } + /** + * Returns the pointer to the previous device.
+ * + * @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; + } } \ No newline at end of file diff --git a/src/main/java/ch/ntb/usb/Usb_Device_Descriptor.java b/src/main/java/ch/ntb/usb/Usb_Device_Descriptor.java index 5cf30e9..27248d3 100644 --- a/src/main/java/ch/ntb/usb/Usb_Device_Descriptor.java +++ b/src/main/java/ch/ntb/usb/Usb_Device_Descriptor.java @@ -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.
- * Assigned by the manufacturer of the device. - * - * @return the device release number - */ - public short getBcdDevice() { - return bcdDevice; - } + /** + * Returns the device release number.
+ * 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.
- * 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.
- * 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.
+ * 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.
+ * 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 www.usb.org)
- * 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 www.usb.org)
+ * 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 www.usb.org)
- * - * @return the protocol code - */ - public byte getBDeviceProtocol() { - return bDeviceProtocol; - } + /** + * Returns the protocol code (Assigned by www.usb.org)
+ * + * @return the protocol code + */ + public byte getBDeviceProtocol() { + return bDeviceProtocol; + } - /** - * Returns the subclass code (Assigned by www.usb.org)
- * - * @return the subclass code - */ - public byte getBDeviceSubClass() { - return bDeviceSubClass; - } + /** + * Returns the subclass code (Assigned by www.usb.org)
+ * + * @return the subclass code + */ + public byte getBDeviceSubClass() { + return bDeviceSubClass; + } - /** - * Returns the maximum packet size for endpoint zero.
- * 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.
+ * 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.
- * - * @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.
+ * + * @return the number of possible configurations supported at its current + * speed + */ + public byte getBNumConfigurations() { + return bNumConfigurations; + } - /** - * Returns the product ID (Assigned by www.usb.org)
- * - * @return the product ID - */ - public short getIdProduct() { - return idProduct; - } + /** + * Returns the product ID (Assigned by www.usb.org)
+ * + * @return the product ID + */ + public short getIdProduct() { + return idProduct; + } - /** - * Returns the Vendor ID (Assigned by www.usb.org)
- * - * @return the Vendor ID - */ - public short getIdVendor() { - return idVendor; - } + /** + * Returns the Vendor ID (Assigned by www.usb.org)
+ * + * @return the Vendor ID + */ + public short getIdVendor() { + return idVendor; + } - /** - * Returns the index of the manufacturer string descriptor.
- * 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.
+ * 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.
- * 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.
+ * 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.
- * 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.
+ * 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(); + } } \ No newline at end of file diff --git a/src/main/java/ch/ntb/usb/Usb_Endpoint_Descriptor.java b/src/main/java/ch/ntb/usb/Usb_Endpoint_Descriptor.java index 00e4bbc..f5270e6 100644 --- a/src/main/java/ch/ntb/usb/Usb_Endpoint_Descriptor.java +++ b/src/main/java/ch/ntb/usb/Usb_Endpoint_Descriptor.java @@ -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.
- *
- * Bits 3..0: Endpoint number
- * Bits 6..4: Reserved. Set to zero
- * 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.
- * - * @return the endpoint address - */ - public byte getBEndpointAddress() { - return bEndpointAddress; - } + /** + * Returns the endpoint address.
+ *
+ * Bits 3..0: Endpoint number
+ * Bits 6..4: Reserved. Set to zero
+ * 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.
+ * + * @return the endpoint address + */ + public byte getBEndpointAddress() { + return bEndpointAddress; + } - /** - * Returns the intervall for polling endpoint data transfers.
- * 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.
+ * 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.
- * - * Bits 1..0: Transfer Type (see USB_ENDPOINT_TYPE_XXX).
- * Bits 7..2: Reserved.
- * - *
-	 * 	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
-	 * 
- * - * @return the attributes of this endpoint - */ - public byte getBmAttributes() { - return bmAttributes; - } + /** + * Returns the attributes of this endpoint.
+ * + * Bits 1..0: Transfer Type (see USB_ENDPOINT_TYPE_XXX).
+ * Bits 7..2: Reserved.
+ * + *
+     *     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
+     * 
+ * + * @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.
- * - * @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.
+ * + * @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.
- * - * @return the number of bytes of the extra descriptor - */ - public int getExtralen() { - return extralen; - } + /** + * Returns the number of bytes of the extra descriptor.
+ * + * @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.
- * - * @return the maximum packet size - */ - public short getWMaxPacketSize() { - return wMaxPacketSize; - } + /** + * Returns the maximum packet size of this endpoint is capable of sending or + * receiving.
+ * + * @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); + } } diff --git a/src/main/java/ch/ntb/usb/Usb_Interface.java b/src/main/java/ch/ntb/usb/Usb_Interface.java index a8bb6bc..8811703 100644 --- a/src/main/java/ch/ntb/usb/Usb_Interface.java +++ b/src/main/java/ch/ntb/usb/Usb_Interface.java @@ -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.
- * - * @return an array of interface descriptors - */ - public Usb_Interface_Descriptor[] getAltsetting() { - return altsetting; - } + /** + * Retuns an array of interface descriptors.
+ * + * @return an array of interface descriptors + */ + public Usb_Interface_Descriptor[] getAltsetting() { + return altsetting; + } - /** - * Returns the number of alternate settings.
- * - * @return the number of alternate settings - */ - public int getNumAltsetting() { - return num_altsetting; - } + /** + * Returns the number of alternate settings.
+ * + * @return the number of alternate settings + */ + public int getNumAltsetting() { + return num_altsetting; + } } diff --git a/src/main/java/ch/ntb/usb/Usb_Interface_Descriptor.java b/src/main/java/ch/ntb/usb/Usb_Interface_Descriptor.java index a36d3ed..356fe19 100644 --- a/src/main/java/ch/ntb/usb/Usb_Interface_Descriptor.java +++ b/src/main/java/ch/ntb/usb/Usb_Interface_Descriptor.java @@ -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)}).
- * - * @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)}).
+ * + * @return the alternate setting + */ + public byte getBAlternateSetting() { + return bAlternateSetting; + } - /** - * Returns the class code (Assigned by www.usb.org).
- * - * @return the class code - */ - public byte getBInterfaceClass() { - return bInterfaceClass; - } + /** + * Returns the class code (Assigned by www.usb.org).
+ * + * @return the class code + */ + public byte getBInterfaceClass() { + return bInterfaceClass; + } - /** - * Returns the number (identifier) of this interface.
- * - * @return the number (identifier) of this interface - */ - public byte getBInterfaceNumber() { - return bInterfaceNumber; - } + /** + * Returns the number (identifier) of this interface.
+ * + * @return the number (identifier) of this interface + */ + public byte getBInterfaceNumber() { + return bInterfaceNumber; + } - /** - * Returns the protocol code (Assigned by www.usb.org).
- * - * @return the protocol code - */ - public byte getBInterfaceProtocol() { - return bInterfaceProtocol; - } + /** + * Returns the protocol code (Assigned by www.usb.org).
+ * + * @return the protocol code + */ + public byte getBInterfaceProtocol() { + return bInterfaceProtocol; + } - /** - * Returns the subclass code (Assigned by www.usb.org).
- * - * @return the subclass code - */ - public byte getBInterfaceSubClass() { - return bInterfaceSubClass; - } + /** + * Returns the subclass code (Assigned by www.usb.org).
+ * + * @return the subclass code + */ + public byte getBInterfaceSubClass() { + return bInterfaceSubClass; + } - /** - * Returns the number of endpoints used for this interface.
- * - * @return the number of endpoints used for this interface - */ - public byte getBNumEndpoints() { - return bNumEndpoints; - } + /** + * Returns the number of endpoints used for this interface.
+ * + * @return the number of endpoints used for this interface + */ + public byte getBNumEndpoints() { + return bNumEndpoints; + } - /** - * Returns an array of endpoint descriptors.
- * - * @return an array of endpoint descriptors - */ - public Usb_Endpoint_Descriptor[] getEndpoint() { - return endpoint; - } + /** + * Returns an array of endpoint descriptors.
+ * + * @return an array of endpoint descriptors + */ + public Usb_Endpoint_Descriptor[] getEndpoint() { + return endpoint; + } - /** - * Returns the data of extra descriptor(s) if available.
- * - * @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.
+ * + * @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.
- * - * @return the number of bytes of the extra descriptor - */ - public int getExtralen() { - return extralen; - } + /** + * Returns the number of bytes of the extra descriptor.
+ * + * @return the number of bytes of the extra descriptor + */ + public int getExtralen() { + return extralen; + } - /** - * Returns the index of the String descriptor describing this interface.
- * - * @return the index of the String descriptor - */ - public byte getIInterface() { - return iInterface; - } + /** + * Returns the index of the String descriptor describing this interface.
+ * + * @return the index of the String descriptor + */ + public byte getIInterface() { + return iInterface; + } } diff --git a/src/main/java/ch/ntb/usb/Utils.java b/src/main/java/ch/ntb/usb/Utils.java index d13a5ba..41e4431 100644 --- a/src/main/java/ch/ntb/usb/Utils.java +++ b/src/main/java/ch/ntb/usb/Utils.java @@ -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(); + } + } } diff --git a/src/main/java/ch/ntb/usb/logger/LogUtil.java b/src/main/java/ch/ntb/usb/logger/LogUtil.java index 998b602..fc663c4 100644 --- a/src/main/java/ch/ntb/usb/logger/LogUtil.java +++ b/src/main/java/ch/ntb/usb/logger/LogUtil.java @@ -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(); + } + } } diff --git a/src/test/java/ch/ntb/usb/test/DeviceTest.java b/src/test/java/ch/ntb/usb/test/DeviceTest.java index 228f2b8..7c1c55b 100644 --- a/src/test/java/ch/ntb/usb/test/DeviceTest.java +++ b/src/test/java/ch/ntb/usb/test/DeviceTest.java @@ -40,587 +40,587 @@ import ch.ntb.usb.testApp.AbstractDeviceInfo.TransferMode; @SuppressWarnings("deprecation") public class DeviceTest { - 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(DeviceTest.class.getName()); + private static Logger log = Logger.getLogger(DeviceTest.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(); - // devinfo = new CY7C68013A(); - // setup test data - testData = new byte[devinfo.getMaxDataSize()]; - readData = new byte[testData.length]; - // initialise the device - dev = USB.getDevice(devinfo.getIdVendor(), devinfo.getIdProduct(), - devinfo.getBusName(), devinfo.getFilename()); - 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(); + // devinfo = new CY7C68013A(); + // setup test data + testData = new byte[devinfo.getMaxDataSize()]; + readData = new byte[testData.length]; + // initialise the device + dev = USB.getDevice(devinfo.getIdVendor(), devinfo.getIdProduct(), + devinfo.getBusName(), devinfo.getFilename()); + assertNotNull(dev); - // print the devices - LibusbJava.usb_init(); -// LibusbJava.usb_set_debug(255); - 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_set_debug(255); + 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 getDescriptors() throws Exception { - dev.updateDescriptors(); - Usb_Device_Descriptor devDescriptor = dev.getDeviceDescriptor(); - assertNotNull(devDescriptor); - assertEquals(devinfo.getIdProduct(), devDescriptor.getIdProduct()); - assertEquals(devinfo.getIdVendor(), devDescriptor.getIdVendor()); - Usb_Config_Descriptor confDescriptors[] = dev.getConfigDescriptors(); - assertNotNull(confDescriptors); - assertTrue(confDescriptors[0].getInterface().length > 0); - } + @Test + public void getDescriptors() throws Exception { + dev.updateDescriptors(); + Usb_Device_Descriptor devDescriptor = dev.getDeviceDescriptor(); + assertNotNull(devDescriptor); + assertEquals(devinfo.getIdProduct(), devDescriptor.getIdProduct()); + assertEquals(devinfo.getIdVendor(), devDescriptor.getIdVendor()); + Usb_Config_Descriptor confDescriptors[] = dev.getConfigDescriptors(); + assertNotNull(confDescriptors); + assertTrue(confDescriptors[0].getInterface().length > 0); + } - @Test - public void initalReset() throws Exception { - doOpen(); - // this may change the bus and file name of the device - dev.reset(); - timeout(); - } + @Test + public void initalReset() throws Exception { + doOpen(); + // this may change the bus and file name of the device + dev.reset(); + timeout(); + } - @Test(expected = USBException.class) - public void testClose() throws Exception { - try { - // this calls must not throw an exception - doOpen(); - doClose(); - } catch (USBException e) { - e.printStackTrace(); - fail(e.getMessage()); - } - // this call must throw an exception, because the device is closed - dev.writeBulk(devinfo.getOutEPBulk(), testData, testData.length, - devinfo.getTimeout(), false); - } + @Test(expected = USBException.class) + public void testClose() throws Exception { + try { + // this calls must not throw an exception + doOpen(); + doClose(); + } catch (USBException e) { + e.printStackTrace(); + fail(e.getMessage()); + } + // this call must throw an exception, because the device is closed + dev.writeBulk(devinfo.getOutEPBulk(), testData, testData.length, + devinfo.getTimeout(), false); + } - @Test(expected = USBException.class) - public void testReset1() throws Exception { - try { - // this calls must not throw an exception - doOpen(); - dev.reset(); - timeout(); - } catch (USBException e) { - e.printStackTrace(); - fail(e.getMessage()); - } - // this call must throw an exception, because the device is closed - dev.writeBulk(devinfo.getOutEPBulk(), testData, testData.length, - devinfo.getTimeout(), false); - } + @Test(expected = USBException.class) + public void testReset1() throws Exception { + try { + // this calls must not throw an exception + doOpen(); + dev.reset(); + timeout(); + } catch (USBException e) { + e.printStackTrace(); + fail(e.getMessage()); + } + // this call must throw an exception, because the device is closed + dev.writeBulk(devinfo.getOutEPBulk(), testData, testData.length, + devinfo.getTimeout(), false); + } - @Test(expected = USBException.class) - public void testReset2() throws Exception { - try { - // this calls must not throw an exception - doOpen(); - dev.reset(); - timeout(); - } catch (USBException e) { - e.printStackTrace(); - fail(e.getMessage()); - } - // this call must throw an exception, because the device can't be closed - doClose(); - } + @Test(expected = USBException.class) + public void testReset2() throws Exception { + try { + // this calls must not throw an exception + doOpen(); + dev.reset(); + timeout(); + } catch (USBException e) { + e.printStackTrace(); + fail(e.getMessage()); + } + // this call must throw an exception, because the device can't be closed + doClose(); + } - @Test - public void open() throws Exception { - // get device by busname - doOpen(); - assertNotNull(dev.getDevice()); - String oldFilename = dev.getDevice().getFilename(); - String oldBusName = dev.getDevice().getBus().getDirname(); - assertNotNull(oldFilename); - assertNotNull(oldBusName); - log.info("filename: " + oldFilename + ", busName: " + oldBusName); - Device dev2 = USB.getDevice(devinfo.getIdVendor(), devinfo - .getIdProduct()); - doClose(); - assertEquals(dev, dev2); - } + @Test + public void open() throws Exception { + // get device by busname + doOpen(); + assertNotNull(dev.getDevice()); + String oldFilename = dev.getDevice().getFilename(); + String oldBusName = dev.getDevice().getBus().getDirname(); + assertNotNull(oldFilename); + assertNotNull(oldBusName); + log.info("filename: " + oldFilename + ", busName: " + oldBusName); + Device dev2 = USB.getDevice(devinfo.getIdVendor(), devinfo + .getIdProduct()); + doClose(); + assertEquals(dev, dev2); + } - @Test - public void openWithBusName() throws Exception { - // get device by busname - doOpen(); - assertNotNull(dev.getDevice()); - String oldFilename = dev.getDevice().getFilename(); - String oldBusName = dev.getDevice().getBus().getDirname(); - assertNotNull(oldFilename); - assertNotNull(oldBusName); - log.info("filename: " + oldFilename + ", busName: " + oldBusName); - Device dev2 = USB.getDevice(devinfo.getIdVendor(), devinfo - .getIdProduct(), oldBusName, null); - doClose(); - assertEquals(dev, dev2); - } + @Test + public void openWithBusName() throws Exception { + // get device by busname + doOpen(); + assertNotNull(dev.getDevice()); + String oldFilename = dev.getDevice().getFilename(); + String oldBusName = dev.getDevice().getBus().getDirname(); + assertNotNull(oldFilename); + assertNotNull(oldBusName); + log.info("filename: " + oldFilename + ", busName: " + oldBusName); + Device dev2 = USB.getDevice(devinfo.getIdVendor(), devinfo + .getIdProduct(), oldBusName, null); + doClose(); + assertEquals(dev, dev2); + } - @Test - public void openWithFilename() throws Exception { - // get device by busname - doOpen(); - assertNotNull(dev.getDevice()); - String oldFilename = dev.getDevice().getFilename(); - String oldBusName = dev.getDevice().getBus().getDirname(); - assertNotNull(oldFilename); - assertNotNull(oldBusName); - log.info("filename: " + oldFilename + ", busName: " + oldBusName); - Device dev2 = USB.getDevice(devinfo.getIdVendor(), devinfo - .getIdProduct(), null, oldFilename); - doClose(); - assertEquals(dev, dev2); - } + @Test + public void openWithFilename() throws Exception { + // get device by busname + doOpen(); + assertNotNull(dev.getDevice()); + String oldFilename = dev.getDevice().getFilename(); + String oldBusName = dev.getDevice().getBus().getDirname(); + assertNotNull(oldFilename); + assertNotNull(oldBusName); + log.info("filename: " + oldFilename + ", busName: " + oldBusName); + Device dev2 = USB.getDevice(devinfo.getIdVendor(), devinfo + .getIdProduct(), null, oldFilename); + doClose(); + assertEquals(dev, dev2); + } - @Test - public void openWithBusAndFilename() throws Exception { - // get device by busname and filename - doOpen(); - assertNotNull(dev.getDevice()); - String oldFilename = dev.getDevice().getFilename(); - String oldBusName = dev.getDevice().getBus().getDirname(); - assertNotNull(oldFilename); - assertNotNull(oldBusName); - log.info("filename: " + oldFilename + ", busName: " + oldBusName); - Device dev2 = USB.getDevice(devinfo.getIdVendor(), devinfo - .getIdProduct(), oldBusName, oldFilename); - doClose(); - assertEquals(dev, dev2); - } - - @Test - public void bulkWriteRead() throws Exception { - checkBulkEndpoints(); - devinfo.setMode(TransferMode.Bulk); - doOpenWriteReadClose(); - } + @Test + public void openWithBusAndFilename() throws Exception { + // get device by busname and filename + doOpen(); + assertNotNull(dev.getDevice()); + String oldFilename = dev.getDevice().getFilename(); + String oldBusName = dev.getDevice().getBus().getDirname(); + assertNotNull(oldFilename); + assertNotNull(oldBusName); + log.info("filename: " + oldFilename + ", busName: " + oldBusName); + Device dev2 = USB.getDevice(devinfo.getIdVendor(), devinfo + .getIdProduct(), oldBusName, oldFilename); + doClose(); + assertEquals(dev, dev2); + } + + @Test + public void bulkWriteRead() throws Exception { + checkBulkEndpoints(); + devinfo.setMode(TransferMode.Bulk); + doOpenWriteReadClose(); + } - private void checkBulkEndpoints() { - if (devinfo.getInEPBulk() == -1 && devinfo.getOutEPBulk() == -1) { - throw new UnsupportedOperationException( - "no bulk endpoints defined in test device definition"); - } - } + private void checkBulkEndpoints() { + if (devinfo.getInEPBulk() == -1 && devinfo.getOutEPBulk() == -1) { + throw new UnsupportedOperationException( + "no bulk endpoints defined in test device definition"); + } + } - @Test - public void interruptWriteRead() throws Exception { - checkInterruptEndpoints(); - devinfo.setMode(TransferMode.Interrupt); - doOpenWriteReadClose(); - } + @Test + public void interruptWriteRead() throws Exception { + checkInterruptEndpoints(); + devinfo.setMode(TransferMode.Interrupt); + doOpenWriteReadClose(); + } - private void checkInterruptEndpoints() { - if (devinfo.getInEPInt() == -1 && devinfo.getOutEPInt() == -1) { - throw new UnsupportedOperationException( - "no interrupt endpoints defined in test device definition"); - } - } + private void checkInterruptEndpoints() { + if (devinfo.getInEPInt() == -1 && devinfo.getOutEPInt() == -1) { + throw new UnsupportedOperationException( + "no interrupt endpoints defined in test device definition"); + } + } - @Test - public void bulkWriteReadMultiple() throws Exception { - final int NumberOfIterations = 100; + @Test + public void bulkWriteReadMultiple() throws Exception { + final int NumberOfIterations = 100; - devinfo.setMode(TransferMode.Bulk); - doOpen(); - for (int i = 0; i < NumberOfIterations; i++) { - doWriteRead(); - } - doClose(); - } + devinfo.setMode(TransferMode.Bulk); + doOpen(); + for (int i = 0; i < NumberOfIterations; i++) { + doWriteRead(); + } + doClose(); + } - @Test - public void multipleOpenCloseWithBulkWrite() throws Exception { - devinfo.setMode(TransferMode.Bulk); - for (int i = 0; i < 5; i++) { - doOpen(); - doClose(); - } - doOpenWriteReadClose(); - for (int i = 0; i < 10; i++) { - doOpen(); - doWriteRead(); - doClose(); - } - doOpenWriteReadClose(); - for (int i = 0; i < 5; i++) { - doOpen(); - doClose(); - } - } + @Test + public void multipleOpenCloseWithBulkWrite() throws Exception { + devinfo.setMode(TransferMode.Bulk); + for (int i = 0; i < 5; i++) { + doOpen(); + doClose(); + } + doOpenWriteReadClose(); + for (int i = 0; i < 10; i++) { + doOpen(); + doWriteRead(); + doClose(); + } + doOpenWriteReadClose(); + for (int i = 0; i < 5; i++) { + doOpen(); + doClose(); + } + } - @Test - public void bulkAndInterrupt() throws Exception { - doOpen(); - // BULK - devinfo.setMode(TransferMode.Bulk); - doWriteRead(); - // INTERRUPT - devinfo.setMode(TransferMode.Interrupt); - doWriteRead(); - doClose(); - } + @Test + public void bulkAndInterrupt() throws Exception { + doOpen(); + // BULK + devinfo.setMode(TransferMode.Bulk); + doWriteRead(); + // INTERRUPT + devinfo.setMode(TransferMode.Interrupt); + doWriteRead(); + doClose(); + } - @Test - public void bulkAndInterruptMultiple() throws Exception { - for (int i = 0; i < 20; i++) { - devinfo.setMode(TransferMode.Bulk); - doOpenWriteReadClose(); - devinfo.setMode(TransferMode.Interrupt); - doOpenWriteReadClose(); - } - } + @Test + public void bulkAndInterruptMultiple() throws Exception { + for (int i = 0; i < 20; i++) { + devinfo.setMode(TransferMode.Bulk); + doOpenWriteReadClose(); + devinfo.setMode(TransferMode.Interrupt); + doOpenWriteReadClose(); + } + } - @Test - public void controlMsg() throws Exception { - try { - dev.open(devinfo.getConfiguration(), devinfo.getInterface(), - devinfo.getAltinterface()); - // GET STATUS (device) - byte[] data = getTestData(2); - int length = dev.controlMsg(USB.REQ_TYPE_DIR_DEVICE_TO_HOST - | USB.REQ_TYPE_TYPE_STANDARD | USB.REQ_TYPE_RECIP_DEVICE, - USB.REQ_GET_STATUS, 0, 0, data, data.length, devinfo - .getTimeout(), false); - assertTrue(length > 0); - assertEquals((byte) 0x01, data[0]); - assertEquals((byte) 0x00, data[1]); - // GET STATUS (interface) - data = getTestData(2); - length = dev.controlMsg( - USB.REQ_TYPE_DIR_DEVICE_TO_HOST - | USB.REQ_TYPE_TYPE_STANDARD - | USB.REQ_TYPE_RECIP_INTERFACE, USB.REQ_GET_STATUS, - 0, 0, data, data.length, devinfo.getTimeout(), false); - assertTrue(length > 0); - assertEquals((byte) 0x00, data[0]); - assertEquals((byte) 0x00, data[1]); - // GET STATUS (endpoint) - data = getTestData(2); - length = dev.controlMsg(USB.REQ_TYPE_DIR_DEVICE_TO_HOST - | USB.REQ_TYPE_TYPE_STANDARD | USB.REQ_TYPE_RECIP_ENDPOINT, - USB.REQ_GET_STATUS, 0, 0, data, data.length, devinfo - .getTimeout(), false); - assertTrue(length > 0); - assertEquals((byte) 0x00, data[0]); - assertEquals((byte) 0x00, data[1]); - // GET CONFIGURATION - data = getTestData(1); - length = dev.controlMsg(USB.REQ_TYPE_DIR_DEVICE_TO_HOST - | USB.REQ_TYPE_TYPE_STANDARD | USB.REQ_TYPE_RECIP_DEVICE, - USB.REQ_GET_CONFIGURATION, 0, 0, data, data.length, devinfo - .getTimeout(), false); - assertTrue(length > 0); - assertEquals((byte) devinfo.getConfiguration(), data[0]); - // // GET INTERFACE - // data = byte[1]; - // length = dev.controlMsg(USB.REQ_TYPE_DIR_DEVICE_TO_HOST - // | USB.REQ_TYPE_TYPE_STANDARD | USB.REQ_TYPE_RECIP_INTERFACE, - // USB.REQ_GET_INTERFACE, 0, devinfo.getInterface(), data, - // data.length, - // devinfo - // .getTimeout(), false); - // logData(data, length); - // GET DESCRIPTOR (device descriptor) - data = getTestData(128); - length = dev.controlMsg(USB.REQ_TYPE_DIR_DEVICE_TO_HOST - | USB.REQ_TYPE_TYPE_STANDARD | USB.REQ_TYPE_RECIP_DEVICE, - USB.REQ_GET_DESCRIPTOR, 1 << 8, 0, data, data.length, - devinfo.getTimeout(), false); - validateDeviceDescriptor(data, length); - // GET DESCRIPTOR (string descriptor (1)) - data = getTestData(128); - length = dev.controlMsg(USB.REQ_TYPE_DIR_DEVICE_TO_HOST - | USB.REQ_TYPE_TYPE_STANDARD | USB.REQ_TYPE_RECIP_DEVICE, - USB.REQ_GET_DESCRIPTOR, (3 << 8) + 1, 0, data, data.length, - devinfo.getTimeout(), false); - String s = getString(data, length); - assertEquals(s, devinfo.getManufacturer()); - // GET DESCRIPTOR (string descriptor (2)) - data = getTestData(128); - length = dev.controlMsg(USB.REQ_TYPE_DIR_DEVICE_TO_HOST - | USB.REQ_TYPE_TYPE_STANDARD | USB.REQ_TYPE_RECIP_DEVICE, - USB.REQ_GET_DESCRIPTOR, (3 << 8) + 2, 0, data, data.length, - devinfo.getTimeout(), false); - s = getString(data, length); - assertEquals(s, devinfo.getProduct()); - // GET DESCRIPTOR (string descriptor (3)) - data = getTestData(128); - length = dev.controlMsg(USB.REQ_TYPE_DIR_DEVICE_TO_HOST - | USB.REQ_TYPE_TYPE_STANDARD | USB.REQ_TYPE_RECIP_DEVICE, - USB.REQ_GET_DESCRIPTOR, (3 << 8) + 3, 0, data, data.length, - devinfo.getTimeout(), false); - s = getString(data, length); - assertEquals(s, devinfo.getSerialVersion()); - // close the device - dev.close(); - } catch (Exception e) { - closeOnException(); - throw e; - } catch (AssertionError e) { - closeOnException(); - throw e; - } - } + @Test + public void controlMsg() throws Exception { + try { + dev.open(devinfo.getConfiguration(), devinfo.getInterface(), + devinfo.getAltinterface()); + // GET STATUS (device) + byte[] data = getTestData(2); + int length = dev.controlMsg(USB.REQ_TYPE_DIR_DEVICE_TO_HOST + | USB.REQ_TYPE_TYPE_STANDARD | USB.REQ_TYPE_RECIP_DEVICE, + USB.REQ_GET_STATUS, 0, 0, data, data.length, devinfo + .getTimeout(), false); + assertTrue(length > 0); + assertEquals((byte) 0x01, data[0]); + assertEquals((byte) 0x00, data[1]); + // GET STATUS (interface) + data = getTestData(2); + length = dev.controlMsg( + USB.REQ_TYPE_DIR_DEVICE_TO_HOST + | USB.REQ_TYPE_TYPE_STANDARD + | USB.REQ_TYPE_RECIP_INTERFACE, USB.REQ_GET_STATUS, + 0, 0, data, data.length, devinfo.getTimeout(), false); + assertTrue(length > 0); + assertEquals((byte) 0x00, data[0]); + assertEquals((byte) 0x00, data[1]); + // GET STATUS (endpoint) + data = getTestData(2); + length = dev.controlMsg(USB.REQ_TYPE_DIR_DEVICE_TO_HOST + | USB.REQ_TYPE_TYPE_STANDARD | USB.REQ_TYPE_RECIP_ENDPOINT, + USB.REQ_GET_STATUS, 0, 0, data, data.length, devinfo + .getTimeout(), false); + assertTrue(length > 0); + assertEquals((byte) 0x00, data[0]); + assertEquals((byte) 0x00, data[1]); + // GET CONFIGURATION + data = getTestData(1); + length = dev.controlMsg(USB.REQ_TYPE_DIR_DEVICE_TO_HOST + | USB.REQ_TYPE_TYPE_STANDARD | USB.REQ_TYPE_RECIP_DEVICE, + USB.REQ_GET_CONFIGURATION, 0, 0, data, data.length, devinfo + .getTimeout(), false); + assertTrue(length > 0); + assertEquals((byte) devinfo.getConfiguration(), data[0]); + // // GET INTERFACE + // data = byte[1]; + // length = dev.controlMsg(USB.REQ_TYPE_DIR_DEVICE_TO_HOST + // | USB.REQ_TYPE_TYPE_STANDARD | USB.REQ_TYPE_RECIP_INTERFACE, + // USB.REQ_GET_INTERFACE, 0, devinfo.getInterface(), data, + // data.length, + // devinfo + // .getTimeout(), false); + // logData(data, length); + // GET DESCRIPTOR (device descriptor) + data = getTestData(128); + length = dev.controlMsg(USB.REQ_TYPE_DIR_DEVICE_TO_HOST + | USB.REQ_TYPE_TYPE_STANDARD | USB.REQ_TYPE_RECIP_DEVICE, + USB.REQ_GET_DESCRIPTOR, 1 << 8, 0, data, data.length, + devinfo.getTimeout(), false); + validateDeviceDescriptor(data, length); + // GET DESCRIPTOR (string descriptor (1)) + data = getTestData(128); + length = dev.controlMsg(USB.REQ_TYPE_DIR_DEVICE_TO_HOST + | USB.REQ_TYPE_TYPE_STANDARD | USB.REQ_TYPE_RECIP_DEVICE, + USB.REQ_GET_DESCRIPTOR, (3 << 8) + 1, 0, data, data.length, + devinfo.getTimeout(), false); + String s = getString(data, length); + assertEquals(s, devinfo.getManufacturer()); + // GET DESCRIPTOR (string descriptor (2)) + data = getTestData(128); + length = dev.controlMsg(USB.REQ_TYPE_DIR_DEVICE_TO_HOST + | USB.REQ_TYPE_TYPE_STANDARD | USB.REQ_TYPE_RECIP_DEVICE, + USB.REQ_GET_DESCRIPTOR, (3 << 8) + 2, 0, data, data.length, + devinfo.getTimeout(), false); + s = getString(data, length); + assertEquals(s, devinfo.getProduct()); + // GET DESCRIPTOR (string descriptor (3)) + data = getTestData(128); + length = dev.controlMsg(USB.REQ_TYPE_DIR_DEVICE_TO_HOST + | USB.REQ_TYPE_TYPE_STANDARD | USB.REQ_TYPE_RECIP_DEVICE, + USB.REQ_GET_DESCRIPTOR, (3 << 8) + 3, 0, data, data.length, + devinfo.getTimeout(), false); + s = getString(data, length); + assertEquals(s, devinfo.getSerialVersion()); + // close the device + dev.close(); + } catch (Exception e) { + closeOnException(); + throw e; + } catch (AssertionError e) { + closeOnException(); + throw e; + } + } - private void closeOnException() { - try { - dev.close(); - } catch (USBException e1) { - // ignore exceptions - } - } + private void closeOnException() { + try { + dev.close(); + } catch (USBException e1) { + // ignore exceptions + } + } - private void validateDeviceDescriptor(byte[] data, int length) { - // length read - assertEquals(18, length); - // descriptor length - assertEquals((byte) 18, data[0]); - // descriptor type - assertEquals((byte) 1, data[1]); - // USB specification number LSB - assertEquals((byte) 0, data[2]); - // USB specification number MSB - assertEquals((byte) 0x02, data[3]); - // device class (vendor specific) - assertEquals((byte) 0xff, data[4]); - // device subclass (vendor specific) - assertEquals((byte) 0xff, data[5]); - // device protocol (vendor specific) - assertEquals((byte) 0xff, data[6]); - // maximum packet size for endpoint zero - assertEquals((byte) 64, data[7]); - // Vendor ID (NTB) LSB - assertEquals((byte) 0x35, data[8]); - // Vendor ID (NTB) MSB - assertEquals((byte) 0x82, data[9]); - // Product ID (JUnit test board) LSB - assertEquals((byte) 0x22, data[10]); - // Product ID (JUnit test board) MSB - assertEquals((byte) 0x02, data[11]); + private void validateDeviceDescriptor(byte[] data, int length) { + // length read + assertEquals(18, length); + // descriptor length + assertEquals((byte) 18, data[0]); + // descriptor type + assertEquals((byte) 1, data[1]); + // USB specification number LSB + assertEquals((byte) 0, data[2]); + // USB specification number MSB + assertEquals((byte) 0x02, data[3]); + // device class (vendor specific) + assertEquals((byte) 0xff, data[4]); + // device subclass (vendor specific) + assertEquals((byte) 0xff, data[5]); + // device protocol (vendor specific) + assertEquals((byte) 0xff, data[6]); + // maximum packet size for endpoint zero + assertEquals((byte) 64, data[7]); + // Vendor ID (NTB) LSB + assertEquals((byte) 0x35, data[8]); + // Vendor ID (NTB) MSB + assertEquals((byte) 0x82, data[9]); + // Product ID (JUnit test board) LSB + assertEquals((byte) 0x22, data[10]); + // Product ID (JUnit test board) MSB + assertEquals((byte) 0x02, data[11]); - // Device release number LSB - assertEquals((byte) 0x00, data[12]); - // Device release number MSB - assertEquals((byte) 0x10, data[13]); - // Index of manufacturer string descriptor - assertEquals((byte) 0x01, data[14]); - // Index of product string descriptor - assertEquals((byte) 0x02, data[15]); - // Index of serial number string descriptor - assertEquals((byte) 0x03, data[16]); - // Number of possible configurations - assertEquals((byte) 0x01, data[17]); - } + // Device release number LSB + assertEquals((byte) 0x00, data[12]); + // Device release number MSB + assertEquals((byte) 0x10, data[13]); + // Index of manufacturer string descriptor + assertEquals((byte) 0x01, data[14]); + // Index of product string descriptor + assertEquals((byte) 0x02, data[15]); + // Index of serial number string descriptor + assertEquals((byte) 0x03, data[16]); + // Number of possible configurations + assertEquals((byte) 0x01, data[17]); + } - private byte[] getTestData(int length) { - byte[] b = new byte[length]; - for (int i = 0; i < b.length; i++) { - b[i] = (byte) (Math.random() * 256); - } - return b; - } + private byte[] getTestData(int length) { + byte[] b = new byte[length]; + for (int i = 0; i < b.length; i++) { + b[i] = (byte) (Math.random() * 256); + } + return b; + } - @SuppressWarnings("unused") - private void logData(byte[] data, int length) { - if (length > 0) { - log.info("length: " + length); - String logData = ""; - for (int i = 0; i < length; i++) { - logData += "0x" + Integer.toHexString(data[i] & 0xff) + "\t"; - } - log.info(logData); - } - } + @SuppressWarnings("unused") + private void logData(byte[] data, int length) { + if (length > 0) { + log.info("length: " + length); + String logData = ""; + for (int i = 0; i < length; i++) { + logData += "0x" + Integer.toHexString(data[i] & 0xff) + "\t"; + } + log.info(logData); + } + } - private String getString(byte[] data, int length) - throws UnsupportedEncodingException { - // data length - assertTrue(length > 2); - // string length - assertTrue(data[0] > 2); - // string descriptor ident - assertEquals((byte) 3, data[1]); - // create string from data - return new String(data, 2, length - 2, "UTF-16LE"); - } + private String getString(byte[] data, int length) + throws UnsupportedEncodingException { + // data length + assertTrue(length > 2); + // string length + assertTrue(data[0] > 2); + // string descriptor ident + assertEquals((byte) 3, data[1]); + // create string from data + return new String(data, 2, length - 2, "UTF-16LE"); + } - @Test - public void invalidConfig() throws Exception { - try { - dev.open(devinfo.getConfiguration() + 5, devinfo.getInterface(), - devinfo.getAltinterface()); - fail("USBException expected"); - } catch (USBException e) { - log.severe("could not set config " - + (devinfo.getConfiguration() + 5)); - } - doOpenWriteReadClose(); - } + @Test + public void invalidConfig() throws Exception { + try { + dev.open(devinfo.getConfiguration() + 5, devinfo.getInterface(), + devinfo.getAltinterface()); + fail("USBException expected"); + } catch (USBException e) { + log.severe("could not set config " + + (devinfo.getConfiguration() + 5)); + } + doOpenWriteReadClose(); + } - @Test - public void invalidInterface() throws Exception { - try { - dev.open(devinfo.getConfiguration(), devinfo.getInterface() + 5, - devinfo.getAltinterface()); - fail("USBException expected"); - } catch (USBException e) { - log.severe("could not claim interface " - + (devinfo.getInterface() + 5)); - } - doOpenWriteReadClose(); - } + @Test + public void invalidInterface() throws Exception { + try { + dev.open(devinfo.getConfiguration(), devinfo.getInterface() + 5, + devinfo.getAltinterface()); + fail("USBException expected"); + } catch (USBException e) { + log.severe("could not claim interface " + + (devinfo.getInterface() + 5)); + } + doOpenWriteReadClose(); + } - @Test - public void invalidAltinterface() throws Exception { - try { - dev.open(devinfo.getConfiguration(), devinfo.getInterface(), - devinfo.getAltinterface() + 5); - fail("USBException expected"); - } catch (USBException e) { - log.severe("could not set alt interface " - + (devinfo.getAltinterface() + 5)); - } - doOpenWriteReadClose(); - } + @Test + public void invalidAltinterface() throws Exception { + try { + dev.open(devinfo.getConfiguration(), devinfo.getInterface(), + devinfo.getAltinterface() + 5); + fail("USBException expected"); + } catch (USBException e) { + log.severe("could not set alt interface " + + (devinfo.getAltinterface() + 5)); + } + doOpenWriteReadClose(); + } - @Test - public void testGetIdProduct() { - Assert.assertEquals(devinfo.getIdProduct(), dev.getIdProduct()); - } + @Test + public void testGetIdProduct() { + Assert.assertEquals(devinfo.getIdProduct(), dev.getIdProduct()); + } - @Test - public void testGetIdVendor() { - Assert.assertEquals(devinfo.getIdVendor(), dev.getIdVendor()); - } + @Test + public void testGetIdVendor() { + Assert.assertEquals(devinfo.getIdVendor(), dev.getIdVendor()); + } - @Test - public void testGetAltinterface() { - Assert.assertEquals(devinfo.getAltinterface(), dev.getAltinterface()); - } + @Test + public void testGetAltinterface() { + Assert.assertEquals(devinfo.getAltinterface(), dev.getAltinterface()); + } - @Test - public void testGetConfiguration() { - Assert.assertEquals(devinfo.getConfiguration(), dev.getConfiguration()); - } + @Test + public void testGetConfiguration() { + Assert.assertEquals(devinfo.getConfiguration(), dev.getConfiguration()); + } - @Test - public void testGetInterface() { - Assert.assertEquals(devinfo.getInterface(), dev.getInterface()); - } + @Test + public void testGetInterface() { + Assert.assertEquals(devinfo.getInterface(), dev.getInterface()); + } - @Test - public void testGetMaxPacketSize() throws USBException { - doOpen(); - Assert.assertEquals(devinfo.getMaxDataSize(), dev.getMaxPacketSize()); - doClose(); - } + @Test + public void testGetMaxPacketSize() throws USBException { + doOpen(); + Assert.assertEquals(devinfo.getMaxDataSize(), dev.getMaxPacketSize()); + doClose(); + } - @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 doOpenWriteReadClose() throws Exception { - doOpen(); - doWriteRead(); - doClose(); - } + private void doOpenWriteReadClose() throws Exception { + doOpen(); + doWriteRead(); + doClose(); + } - 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) { - 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) { + 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; + } + } } diff --git a/src/test/java/ch/ntb/usb/test/LibusbJava1Test.java b/src/test/java/ch/ntb/usb/test/LibusbJava1Test.java index 643c69d..4970a2f 100644 --- a/src/test/java/ch/ntb/usb/test/LibusbJava1Test.java +++ b/src/test/java/ch/ntb/usb/test/LibusbJava1Test.java @@ -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"); + } } diff --git a/src/test/java/ch/ntb/usb/test/MemoryLeakTest.java b/src/test/java/ch/ntb/usb/test/MemoryLeakTest.java index 727a423..2aad419 100644 --- a/src/test/java/ch/ntb/usb/test/MemoryLeakTest.java +++ b/src/test/java/ch/ntb/usb/test/MemoryLeakTest.java @@ -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; + } + } } diff --git a/src/test/java/ch/ntb/usb/test/TestLibUsbJava.java b/src/test/java/ch/ntb/usb/test/TestLibUsbJava.java index 808afb9..e75684e 100644 --- a/src/test/java/ch/ntb/usb/test/TestLibUsbJava.java +++ b/src/test/java/ch/ntb/usb/test/TestLibUsbJava.java @@ -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 diff --git a/src/test/java/ch/ntb/usb/test/devices/AT90USB1287.java b/src/test/java/ch/ntb/usb/test/devices/AT90USB1287.java index 5ffec61..c002d34 100644 --- a/src/test/java/ch/ntb/usb/test/devices/AT90USB1287.java +++ b/src/test/java/ch/ntb/usb/test/devices/AT90USB1287.java @@ -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"); + } } diff --git a/src/test/java/ch/ntb/usb/test/devices/CY7C68013A.java b/src/test/java/ch/ntb/usb/test/devices/CY7C68013A.java index 2649315..46913ab 100644 --- a/src/test/java/ch/ntb/usb/test/devices/CY7C68013A.java +++ b/src/test/java/ch/ntb/usb/test/devices/CY7C68013A.java @@ -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); + } } diff --git a/src/test/java/ch/ntb/usb/test/devices/MX500.java b/src/test/java/ch/ntb/usb/test/devices/MX500.java index 38e9fdc..d6add8c 100644 --- a/src/test/java/ch/ntb/usb/test/devices/MX500.java +++ b/src/test/java/ch/ntb/usb/test/devices/MX500.java @@ -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); + } } diff --git a/src/test/java/ch/ntb/usb/test/devices/MousePlus.java b/src/test/java/ch/ntb/usb/test/devices/MousePlus.java index db9e92c..24db4f0 100644 --- a/src/test/java/ch/ntb/usb/test/devices/MousePlus.java +++ b/src/test/java/ch/ntb/usb/test/devices/MousePlus.java @@ -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); + } } diff --git a/src/test/java/ch/ntb/usb/test/exceptions/LibusbErrorTest.java b/src/test/java/ch/ntb/usb/test/exceptions/LibusbErrorTest.java index f928c6a..92f164a 100644 --- a/src/test/java/ch/ntb/usb/test/exceptions/LibusbErrorTest.java +++ b/src/test/java/ch/ntb/usb/test/exceptions/LibusbErrorTest.java @@ -14,63 +14,63 @@ import ch.ntb.usb.exceptions.LibusbError; @RunWith(Parameterized.class) public class LibusbErrorTest { - @Parameters - public static Collection 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 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); + } }