📄 descriptorpage.java
字号:
package de.thesycon.usbiodemo.usbioapp;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Vector;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import de.thesycon.usbio.UsbIo;
import de.thesycon.usbio.structs.USBIO_DATA_BUFFER;
import de.thesycon.usbio.structs.USB_COMMON_DESCRIPTOR;
import de.thesycon.usbio.structs.USB_CONFIGURATION_DESCRIPTOR;
import de.thesycon.usbio.structs.USB_DEVICE_DESCRIPTOR;
import de.thesycon.usbio.structs.USB_DEVICE_QUALIFIER_DESCRIPTOR;
import de.thesycon.usbio.structs.USB_ENDPOINT_DESCRIPTOR;
import de.thesycon.usbio.structs.USB_HID_DESCRIPTOR;
import de.thesycon.usbio.structs.USB_INTERFACE_DESCRIPTOR;
import de.thesycon.usbio.structs.USB_STRING_DESCRIPTOR;
public class DescriptorPage extends PanelPage {
public String getPageName() { return "Descriptors"; };
public static final int MAX_DESCRIPTOR_BUFFER_SIZE = 2047;
protected UsbIoApp mainFrame;
protected JPanel mDevDescPanel;
protected JPanel mConfDescPanel;
protected JPanel mStringDescPanel;
protected JPanel mAnyDescPanel;
protected JButton mGetDevDescButton;
protected JButton mGetDevQuDescButton;
protected JButton mGetConfDescButton;
protected JButton mGetOtherSpeedConfDescButton;
protected JLabel mConfDescIndexLabel;
protected JTextField mConfDescIndexTF;
protected JButton mGetStringDescButton;
protected JLabel mStringDescIndexLabel;
protected JTextField mStringDescIndexTF;
protected JLabel mStringDescLanguageIDLabel;
protected JTextField mStringDescLanguageIDTF;
protected JButton mGetDescButton;
protected JLabel mAnyDescTypeLabel;
protected JTextField mAnyDescTypeTF;
protected JLabel mAnyDescIndexLabel;
protected JTextField mAnyDescIndexTF;
protected JLabel mAnyDescLengthLabel;
protected JTextField mAnyDescLengthTF;
protected GridBagLayout mDevDescLayout;
protected GridBagLayout mConfDescLayout;
protected GridBagLayout mStringDescLayout;
protected GridBagLayout mAnyDescLayout;
public DescriptorPage(UsbIoApp Frame) {
mainFrame = Frame;
}
public Vector getControlComponentsVector() {
Vector ret = new Vector();
ret.addElement(mGetDevDescButton);
ret.addElement(mGetDevQuDescButton);
ret.addElement(mGetConfDescButton);
ret.addElement(mGetOtherSpeedConfDescButton);
ret.addElement(mConfDescIndexTF);
ret.addElement(mGetStringDescButton);
ret.addElement(mStringDescIndexTF);
ret.addElement(mStringDescLanguageIDTF);
ret.addElement(mGetDescButton);
ret.addElement(mAnyDescTypeTF);
ret.addElement(mAnyDescIndexTF);
ret.addElement(mAnyDescLengthTF);
return ret;
}
public void initGUIelements() {
mDevDescLayout = new GridBagLayout();
mConfDescLayout = new GridBagLayout();
mStringDescLayout = new GridBagLayout();
mAnyDescLayout = new GridBagLayout();
mDevDescPanel = new JPanel(mDevDescLayout,true);
mDevDescPanel.setBorder(BorderFactory.createTitledBorder("Device Descriptor"));
mConfDescPanel = new JPanel(mConfDescLayout,true);
mConfDescPanel.setBorder(BorderFactory.createTitledBorder("Configuration Descriptor"));
mStringDescPanel = new JPanel(mStringDescLayout,true);
mStringDescPanel.setBorder(BorderFactory.createTitledBorder("String Descriptor"));
mAnyDescPanel = new JPanel(mAnyDescLayout,true);
mAnyDescPanel.setBorder(BorderFactory.createTitledBorder("Any Descriptor"));
mGetDevDescButton = new JButton("Get Device Descriptor");
mGetDevDescButton.addActionListener(new OnGetDevDescButton());
mGetDevQuDescButton = new JButton("Get Device Qualifier Descriptor");
mGetDevQuDescButton.addActionListener(new OnGetDevQuDescButton());
mGetConfDescButton = new JButton("Get Config Descriptor");
mGetConfDescButton.addActionListener(new OnGetConfDescButton());
mGetOtherSpeedConfDescButton = new JButton("Get Other Speed Config Descriptor");
mGetOtherSpeedConfDescButton.addActionListener(new OnGetOtherSpeedConfDescButton());
mConfDescIndexLabel = new JLabel("Index:");
mConfDescIndexTF = new JTextField("0",5);
mGetStringDescButton = new JButton("Get String Descriptor");
mGetStringDescButton.addActionListener(new OnGetStringDescButton());
mStringDescIndexLabel = new JLabel("Index:");
mStringDescIndexTF = new JTextField("1",5);
mStringDescLanguageIDLabel = new JLabel("Language ID:");
mStringDescLanguageIDTF = new JTextField("0x0000",5);
mGetDescButton = new JButton("Get Descriptor");
mGetDescButton.addActionListener(new OnGetAnyDescButton());
mAnyDescTypeLabel = new JLabel("Type:");
mAnyDescTypeTF = new JTextField("0x21",5);
mAnyDescIndexLabel = new JLabel("Index:");
mAnyDescIndexTF = new JTextField("0",5);
mAnyDescLengthLabel = new JLabel("Length:");
mAnyDescLengthTF = new JTextField("256",5);
mDevDescLayout.setConstraints(mGetDevDescButton, makegbc(0, 0, 1, 1,100,100,GridBagConstraints.NONE,GridBagConstraints.CENTER));
mDevDescPanel.add(mGetDevDescButton);
mDevDescLayout.setConstraints(mGetDevQuDescButton, makegbc(1, 0, 1, 1,100,100,GridBagConstraints.NONE,GridBagConstraints.CENTER));
mDevDescPanel.add(mGetDevQuDescButton);
mConfDescLayout.setConstraints(mConfDescIndexLabel, makegbc(0, 0, 1, 1,100,100,GridBagConstraints.NONE,GridBagConstraints.EAST));
mConfDescPanel.add(mConfDescIndexLabel);
mConfDescLayout.setConstraints(mConfDescIndexTF, makegbc(1, 0, 1, 1,100,100,GridBagConstraints.NONE,GridBagConstraints.WEST));
mConfDescPanel.add(mConfDescIndexTF);
mConfDescLayout.setConstraints(mGetConfDescButton, makegbc(2, 0, 1, 1,100,100,GridBagConstraints.NONE,GridBagConstraints.CENTER));
mConfDescPanel.add(mGetConfDescButton);
mConfDescLayout.setConstraints(mGetOtherSpeedConfDescButton, makegbc(3, 0, 1, 1,100,100,GridBagConstraints.NONE,GridBagConstraints.CENTER));
mConfDescPanel.add(mGetOtherSpeedConfDescButton);
mStringDescLayout.setConstraints(mStringDescIndexLabel, makegbc(0, 0, 1, 1,100,100,GridBagConstraints.NONE,GridBagConstraints.EAST));
mStringDescPanel.add(mStringDescIndexLabel);
mStringDescLayout.setConstraints(mStringDescIndexTF, makegbc(1, 0, 1, 1,100,100,GridBagConstraints.NONE,GridBagConstraints.WEST));
mStringDescPanel.add(mStringDescIndexTF);
mStringDescLayout.setConstraints(mStringDescLanguageIDLabel, makegbc(2, 0, 1, 1,100,100,GridBagConstraints.NONE,GridBagConstraints.EAST));
mStringDescPanel.add(mStringDescLanguageIDLabel);
mStringDescLayout.setConstraints(mStringDescLanguageIDTF, makegbc(3, 0, 1, 1,100,100,GridBagConstraints.NONE,GridBagConstraints.WEST));
mStringDescPanel.add(mStringDescLanguageIDTF);
mStringDescLayout.setConstraints(mGetStringDescButton, makegbc(4, 0, 1, 1,100,100,GridBagConstraints.NONE,GridBagConstraints.CENTER));
mStringDescPanel.add(mGetStringDescButton);
mAnyDescLayout.setConstraints(mAnyDescTypeLabel, makegbc(0, 0, 1, 1,100,100,GridBagConstraints.NONE,GridBagConstraints.EAST));
mAnyDescPanel.add(mAnyDescTypeLabel);
mAnyDescLayout.setConstraints(mAnyDescTypeTF, makegbc(1, 0, 1, 1,100,100,GridBagConstraints.NONE,GridBagConstraints.WEST));
mAnyDescPanel.add(mAnyDescTypeTF);
mAnyDescLayout.setConstraints(mAnyDescIndexLabel, makegbc(2, 0, 1, 1,100,100,GridBagConstraints.NONE,GridBagConstraints.EAST));
mAnyDescPanel.add(mAnyDescIndexLabel);
mAnyDescLayout.setConstraints(mAnyDescIndexTF, makegbc(3, 0, 1, 1,100,100,GridBagConstraints.NONE,GridBagConstraints.WEST));
mAnyDescPanel.add(mAnyDescIndexTF);
mAnyDescLayout.setConstraints(mAnyDescLengthLabel, makegbc(4, 0, 1, 1,100,100,GridBagConstraints.NONE,GridBagConstraints.EAST));
mAnyDescPanel.add(mAnyDescLengthLabel);
mAnyDescLayout.setConstraints(mAnyDescLengthTF, makegbc(5, 0, 1, 1,100,100,GridBagConstraints.NONE,GridBagConstraints.WEST));
mAnyDescPanel.add(mAnyDescLengthTF);
mAnyDescLayout.setConstraints(mGetDescButton, makegbc(6, 0, 1, 1,100,100,GridBagConstraints.NONE,GridBagConstraints.CENTER));
mAnyDescPanel.add(mGetDescButton);
layout.setConstraints(mDevDescPanel, makegbc(0, 0, 1, 1,100,100,GridBagConstraints.BOTH,GridBagConstraints.WEST));
this.add(mDevDescPanel);
layout.setConstraints(mConfDescPanel, makegbc(0, 1, 1, 1,100,100,GridBagConstraints.BOTH,GridBagConstraints.WEST));
this.add(mConfDescPanel);
layout.setConstraints(mStringDescPanel, makegbc(0, 2, 1, 1,100,100,GridBagConstraints.BOTH,GridBagConstraints.WEST));
this.add(mStringDescPanel);
layout.setConstraints(mAnyDescPanel, makegbc(0, 3, 1, 1,100,100,GridBagConstraints.BOTH,GridBagConstraints.WEST));
this.add(mAnyDescPanel);
}
public class OnGetDevDescButton implements ActionListener {
public void actionPerformed(ActionEvent event) {
USB_DEVICE_DESCRIPTOR Desc = new USB_DEVICE_DESCRIPTOR();
int err;
// send command to driver
err = mainFrame.gUsbIo.getDeviceDescriptor(Desc);
if (err != 0) {
// print error message
mainFrame.printError("",err);
} else {
dumpDescriptor((USB_COMMON_DESCRIPTOR)Desc);
}
}
}
public class OnGetDevQuDescButton implements ActionListener {
public void actionPerformed(ActionEvent event) {
USB_DEVICE_QUALIFIER_DESCRIPTOR Desc = new USB_DEVICE_QUALIFIER_DESCRIPTOR();
USBIO_DATA_BUFFER BufDesc = new USBIO_DATA_BUFFER(Desc.getSize());
BufDesc.setNumberOfBytesToTransfer(Desc.getSize());
int err;
// send command to driver
err = mainFrame.gUsbIo.getDescriptor(BufDesc,0,(byte)(UsbIo.USB_DEVICE_QUALIFIER_DESCRIPTOR_TYPE),(byte)0);
if (err != 0) {
// print error message
mainFrame.printError("",err);
} else {
Desc.parseByteArray(BufDesc.Buffer());
dumpDescriptor((USB_COMMON_DESCRIPTOR)Desc);
}
}
}
public class OnGetStringDescButton implements ActionListener {
public void actionPerformed(ActionEvent event) {
USB_STRING_DESCRIPTOR Desc = new USB_STRING_DESCRIPTOR();
try {
int index = Integer.decode(mStringDescIndexTF.getText()).intValue();
int lang = Integer.decode(mStringDescLanguageIDTF.getText()).intValue();
int err;
// send command to driver
err = mainFrame.gUsbIo.getStringDescriptor(Desc,(byte)index,lang);
if (err != 0) {
// print error message
mainFrame.printError("",err);
} else {
if (index == 0) {
mainFrame.printOutput("\n");
mainFrame.printOutput("String Descriptor Language ID's\n");
mainFrame.printOutput("0x" + UsbIoApp.byteToString(Desc.ByteArray[0]) + " " + "0x" + UsbIoApp.byteToString(Desc.ByteArray[1]) + " " + "0x" + UsbIoApp.byteToString(Desc.ByteArray[2]) + " " + "0x" + UsbIoApp.byteToString(Desc.ByteArray[3]) + " " + "\n");
mStringDescLanguageIDTF.setText("0x"+UsbIoApp.byteToString(Desc.ByteArray[3])+UsbIoApp.byteToString(Desc.ByteArray[2]));
} else {
dumpDescriptor((USB_COMMON_DESCRIPTOR)Desc);
}
}
}
catch (NumberFormatException ex) {
mainFrame.printOutput("Wrong input format.\n");
}
}
}
public class OnGetAnyDescButton implements ActionListener {
public void actionPerformed(ActionEvent event) {
try {
int type = Integer.decode(mAnyDescTypeTF.getText()).intValue();
int index = Integer.decode(mAnyDescIndexTF.getText()).intValue();
int length = Integer.decode(mAnyDescLengthTF.getText()).intValue();
int err;
USBIO_DATA_BUFFER BufDesc = new USBIO_DATA_BUFFER(length);
BufDesc.setNumberOfBytesToTransfer(length);
// send command to driver
err = mainFrame.gUsbIo.getDescriptor(BufDesc, 0,(byte)type,(byte)index);
if (err != 0) {
// print error message
mainFrame.printError("",err);
} else {
mainFrame.printOutput("\n");
for (int i = 0; i < BufDesc.getBytesTransferred();i++) {
mainFrame.printOutput("0x" + UsbIoApp.byteToString(BufDesc.Buffer()[i]) + " ");
if ((i % 8) == 7) {
mainFrame.printOutput("\n");
}
}
}
}
catch (NumberFormatException ex) {
mainFrame.printOutput("Wrong input format.\n");
}
}
}
public class OnGetConfDescButton implements ActionListener {
public void actionPerformed(ActionEvent event) {
try {
int index = Integer.decode(mConfDescIndexTF.getText()).intValue();
int err;
USBIO_DATA_BUFFER BufDesc = new USBIO_DATA_BUFFER(MAX_DESCRIPTOR_BUFFER_SIZE);
BufDesc.setNumberOfBytesToTransfer(MAX_DESCRIPTOR_BUFFER_SIZE);
// send command to driver
err = mainFrame.gUsbIo.getConfigurationDescriptor(BufDesc,(byte)index);
if (err != 0) {
// print error message
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -