Move required java source files to appropriate directory
This commit is contained in:
@@ -1,58 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<?eclipse-cdt version="2.0"?>
|
|
||||||
|
|
||||||
<cdtproject id="org.eclipse.cdt.make.core.make">
|
|
||||||
<extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
|
|
||||||
<extension id="org.eclipse.cdt.core.domsourceindexer" point="org.eclipse.cdt.core.CIndexer"/>
|
|
||||||
<data>
|
|
||||||
<item id="scannerConfiguration">
|
|
||||||
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile"/>
|
|
||||||
<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
|
|
||||||
<buildOutputProvider>
|
|
||||||
<openAction enabled="true" filePath=""/>
|
|
||||||
<parser enabled="true"/>
|
|
||||||
</buildOutputProvider>
|
|
||||||
<scannerInfoProvider id="specsFile">
|
|
||||||
<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
|
|
||||||
<parser enabled="true"/>
|
|
||||||
</scannerInfoProvider>
|
|
||||||
</profile>
|
|
||||||
<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
|
|
||||||
<buildOutputProvider>
|
|
||||||
<openAction enabled="false" filePath=""/>
|
|
||||||
<parser enabled="true"/>
|
|
||||||
</buildOutputProvider>
|
|
||||||
<scannerInfoProvider id="makefileGenerator">
|
|
||||||
<runAction arguments="-f ${project_name}_scd.mk" command="make" useDefault="true"/>
|
|
||||||
<parser enabled="false"/>
|
|
||||||
</scannerInfoProvider>
|
|
||||||
</profile>
|
|
||||||
<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile">
|
|
||||||
<buildOutputProvider>
|
|
||||||
<openAction enabled="false" filePath=""/>
|
|
||||||
<parser enabled="true"/>
|
|
||||||
</buildOutputProvider>
|
|
||||||
<scannerInfoProvider id="specsFile">
|
|
||||||
<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
|
|
||||||
<parser enabled="false"/>
|
|
||||||
</scannerInfoProvider>
|
|
||||||
</profile>
|
|
||||||
<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile">
|
|
||||||
<buildOutputProvider>
|
|
||||||
<openAction enabled="false" filePath=""/>
|
|
||||||
<parser enabled="true"/>
|
|
||||||
</buildOutputProvider>
|
|
||||||
<scannerInfoProvider id="specsFile">
|
|
||||||
<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
|
|
||||||
<parser enabled="false"/>
|
|
||||||
</scannerInfoProvider>
|
|
||||||
</profile>
|
|
||||||
</item>
|
|
||||||
<item id="org.eclipse.cdt.core.pathentry">
|
|
||||||
<pathentry kind="src" path=""/>
|
|
||||||
<pathentry kind="out" path=""/>
|
|
||||||
<pathentry kind="con" path="org.eclipse.cdt.make.core.DISCOVERED_SCANNER_INFO"/>
|
|
||||||
</item>
|
|
||||||
|
|
||||||
</data>
|
|
||||||
</cdtproject>
|
|
||||||
@@ -1,67 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
||||||
<?fileVersion 4.0.0?>
|
|
||||||
|
|
||||||
<cproject>
|
|
||||||
<storageModule moduleId="org.eclipse.cdt.core.settings">
|
|
||||||
<cconfiguration id="converted.config.1096271423">
|
|
||||||
<storageModule moduleId="scannerConfiguration">
|
|
||||||
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile"/>
|
|
||||||
<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
|
|
||||||
<buildOutputProvider>
|
|
||||||
<openAction enabled="true" filePath=""/>
|
|
||||||
<parser enabled="true"/>
|
|
||||||
</buildOutputProvider>
|
|
||||||
<scannerInfoProvider id="specsFile">
|
|
||||||
<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
|
|
||||||
<parser enabled="true"/>
|
|
||||||
</scannerInfoProvider>
|
|
||||||
</profile>
|
|
||||||
<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
|
|
||||||
<buildOutputProvider>
|
|
||||||
<openAction enabled="false" filePath=""/>
|
|
||||||
<parser enabled="true"/>
|
|
||||||
</buildOutputProvider>
|
|
||||||
<scannerInfoProvider id="makefileGenerator">
|
|
||||||
<runAction arguments="-f ${project_name}_scd.mk" command="make" useDefault="true"/>
|
|
||||||
<parser enabled="false"/>
|
|
||||||
</scannerInfoProvider>
|
|
||||||
</profile>
|
|
||||||
<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile">
|
|
||||||
<buildOutputProvider>
|
|
||||||
<openAction enabled="false" filePath=""/>
|
|
||||||
<parser enabled="true"/>
|
|
||||||
</buildOutputProvider>
|
|
||||||
<scannerInfoProvider id="specsFile">
|
|
||||||
<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
|
|
||||||
<parser enabled="false"/>
|
|
||||||
</scannerInfoProvider>
|
|
||||||
</profile>
|
|
||||||
<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile">
|
|
||||||
<buildOutputProvider>
|
|
||||||
<openAction enabled="false" filePath=""/>
|
|
||||||
<parser enabled="true"/>
|
|
||||||
</buildOutputProvider>
|
|
||||||
<scannerInfoProvider id="specsFile">
|
|
||||||
<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
|
|
||||||
<parser enabled="false"/>
|
|
||||||
</scannerInfoProvider>
|
|
||||||
</profile>
|
|
||||||
</storageModule>
|
|
||||||
|
|
||||||
<storageModule buildSystemId="org.eclipse.cdt.core.defaultConfigDataProvider" id="converted.config.1096271423" moduleId="org.eclipse.cdt.core.settings" name="convertedConfig">
|
|
||||||
<externalSettings/>
|
|
||||||
<extensions>
|
|
||||||
<extension id="org.eclipse.cdt.core.domsourceindexer" point="org.eclipse.cdt.core.CIndexer"/>
|
|
||||||
<extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
|
|
||||||
</extensions>
|
|
||||||
</storageModule>
|
|
||||||
<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
|
|
||||||
<storageModule moduleId="org.eclipse.cdt.internal.ui.text.commentOwnerProjectMappings"/>
|
|
||||||
<storageModule moduleId="org.eclipse.cdt.core.pathentry">
|
|
||||||
<pathentry kind="src" path=""/>
|
|
||||||
<pathentry kind="out" path=""/>
|
|
||||||
<pathentry kind="con" path="org.eclipse.cdt.make.core.DISCOVERED_SCANNER_INFO"/>
|
|
||||||
</storageModule>
|
|
||||||
</cconfiguration>
|
|
||||||
</storageModule>
|
|
||||||
</cproject>
|
|
||||||
@@ -1,90 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<projectDescription>
|
|
||||||
<name>LibusbJava</name>
|
|
||||||
<comment></comment>
|
|
||||||
<projects>
|
|
||||||
</projects>
|
|
||||||
<buildSpec>
|
|
||||||
<buildCommand>
|
|
||||||
<name>org.eclipse.cdt.make.core.makeBuilder</name>
|
|
||||||
<triggers></triggers>
|
|
||||||
<arguments>
|
|
||||||
<dictionary>
|
|
||||||
<key>org.eclipse.cdt.core.errorOutputParser</key>
|
|
||||||
<value>org.eclipse.cdt.core.MakeErrorParser;org.eclipse.cdt.core.GCCErrorParser;org.eclipse.cdt.core.GASErrorParser;org.eclipse.cdt.core.GLDErrorParser;org.eclipse.cdt.core.VCErrorParser;</value>
|
|
||||||
</dictionary>
|
|
||||||
<dictionary>
|
|
||||||
<key>org.eclipse.cdt.make.core.append_environment</key>
|
|
||||||
<value>true</value>
|
|
||||||
</dictionary>
|
|
||||||
<dictionary>
|
|
||||||
<key>org.eclipse.cdt.make.core.build.arguments</key>
|
|
||||||
<value></value>
|
|
||||||
</dictionary>
|
|
||||||
<dictionary>
|
|
||||||
<key>org.eclipse.cdt.make.core.build.command</key>
|
|
||||||
<value>make</value>
|
|
||||||
</dictionary>
|
|
||||||
<dictionary>
|
|
||||||
<key>org.eclipse.cdt.make.core.build.location</key>
|
|
||||||
<value></value>
|
|
||||||
</dictionary>
|
|
||||||
<dictionary>
|
|
||||||
<key>org.eclipse.cdt.make.core.build.target.auto</key>
|
|
||||||
<value>all</value>
|
|
||||||
</dictionary>
|
|
||||||
<dictionary>
|
|
||||||
<key>org.eclipse.cdt.make.core.build.target.clean</key>
|
|
||||||
<value>clean</value>
|
|
||||||
</dictionary>
|
|
||||||
<dictionary>
|
|
||||||
<key>org.eclipse.cdt.make.core.build.target.full</key>
|
|
||||||
<value>clean all</value>
|
|
||||||
</dictionary>
|
|
||||||
<dictionary>
|
|
||||||
<key>org.eclipse.cdt.make.core.build.target.inc</key>
|
|
||||||
<value>all</value>
|
|
||||||
</dictionary>
|
|
||||||
<dictionary>
|
|
||||||
<key>org.eclipse.cdt.make.core.enableAutoBuild</key>
|
|
||||||
<value>false</value>
|
|
||||||
</dictionary>
|
|
||||||
<dictionary>
|
|
||||||
<key>org.eclipse.cdt.make.core.enableCleanBuild</key>
|
|
||||||
<value>false</value>
|
|
||||||
</dictionary>
|
|
||||||
<dictionary>
|
|
||||||
<key>org.eclipse.cdt.make.core.enableFullBuild</key>
|
|
||||||
<value>false</value>
|
|
||||||
</dictionary>
|
|
||||||
<dictionary>
|
|
||||||
<key>org.eclipse.cdt.make.core.enabledIncrementalBuild</key>
|
|
||||||
<value>false</value>
|
|
||||||
</dictionary>
|
|
||||||
<dictionary>
|
|
||||||
<key>org.eclipse.cdt.make.core.environment</key>
|
|
||||||
<value></value>
|
|
||||||
</dictionary>
|
|
||||||
<dictionary>
|
|
||||||
<key>org.eclipse.cdt.make.core.stopOnError</key>
|
|
||||||
<value>false</value>
|
|
||||||
</dictionary>
|
|
||||||
<dictionary>
|
|
||||||
<key>org.eclipse.cdt.make.core.useDefaultBuildCmd</key>
|
|
||||||
<value>true</value>
|
|
||||||
</dictionary>
|
|
||||||
</arguments>
|
|
||||||
</buildCommand>
|
|
||||||
<buildCommand>
|
|
||||||
<name>org.eclipse.cdt.make.core.ScannerConfigBuilder</name>
|
|
||||||
<arguments>
|
|
||||||
</arguments>
|
|
||||||
</buildCommand>
|
|
||||||
</buildSpec>
|
|
||||||
<natures>
|
|
||||||
<nature>org.eclipse.cdt.core.cnature</nature>
|
|
||||||
<nature>org.eclipse.cdt.make.core.makeNature</nature>
|
|
||||||
<nature>org.eclipse.cdt.make.core.ScannerConfigNature</nature>
|
|
||||||
<nature>org.eclipse.cdt.core.ccnature</nature>
|
|
||||||
</natures>
|
|
||||||
</projectDescription>
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
#Sat Aug 11 13:28:28 CEST 2007
|
|
||||||
eclipse.preferences.version=1
|
|
||||||
indexer/indexerId=org.eclipse.cdt.core.domsourceindexer
|
|
||||||
indexerId=org.eclipse.cdt.core.domsourceindexer
|
|
||||||
@@ -1,852 +0,0 @@
|
|||||||
/*
|
|
||||||
* Java libusb wrapper
|
|
||||||
* Copyright (c) 2005-2006 Andreas Schl<68>pfer <spandi at users.sourceforge.net>
|
|
||||||
*
|
|
||||||
* http://libusbjava.sourceforge.net
|
|
||||||
* This library is covered by the LGPL, read LGPL.txt for details.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <jni.h>
|
|
||||||
#include <stddef.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <locale.h>
|
|
||||||
#include <errno.h>
|
|
||||||
#include <usb.h>
|
|
||||||
#include "LibusbJava.h"
|
|
||||||
|
|
||||||
// Windows specific stuff
|
|
||||||
#ifdef WIN32
|
|
||||||
#include <error.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//#define DEBUGON
|
|
||||||
|
|
||||||
// global bus (updated when usb_get_busses() is called)
|
|
||||||
struct usb_bus *busses;
|
|
||||||
|
|
||||||
// global flag for loading all class, method and field ID references
|
|
||||||
int java_references_loaded = 0;
|
|
||||||
|
|
||||||
// if > 0 an LibusbJava specific error string is set
|
|
||||||
char *libusbJavaError = NULL;
|
|
||||||
|
|
||||||
// macros to set and clear LibusbJava specific errors
|
|
||||||
#define setLibusbJavaError(error) libusbJavaError = error
|
|
||||||
#define clearLibusbJavaError() libusbJavaError = NULL
|
|
||||||
|
|
||||||
// class references
|
|
||||||
jclass usb_busClazz, usb_devClazz, usb_devDescClazz, usb_confDescClazz, \
|
|
||||||
usb_intClazz, usb_intDescClazz, usb_epDescClazz;
|
|
||||||
|
|
||||||
// method ID references
|
|
||||||
jmethodID usb_busMid, usb_devMid, usb_devDescMid, usb_confDescMid, \
|
|
||||||
usb_intMid, usb_intDescMid, usb_epDescMid;
|
|
||||||
|
|
||||||
// field ID references
|
|
||||||
// usb_bus
|
|
||||||
jfieldID usb_busFID_next, usb_busFID_prev, usb_busFID_dirname, \
|
|
||||||
usb_busFID_devices, usb_busFID_location, usb_busFID_root_dev;
|
|
||||||
// usb_device
|
|
||||||
jfieldID usb_devFID_next, usb_devFID_prev, usb_devFID_filename, \
|
|
||||||
usb_devFID_bus, usb_devFID_descriptor, usb_devFID_config, \
|
|
||||||
usb_devFID_devnum, usb_devFID_num_children, usb_devFID_children, \
|
|
||||||
usb_devFID_devStructAddr;
|
|
||||||
// usb_deviceDescriptor
|
|
||||||
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_configurationDescriptor
|
|
||||||
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_interface
|
|
||||||
jfieldID usb_intFID_altsetting, usb_intFID_num_altsetting;
|
|
||||||
// usb_intDesc
|
|
||||||
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_endpointDescriptor
|
|
||||||
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;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Class: ch_ntb_usb_LibusbJava
|
|
||||||
* Method: usb_set_debug
|
|
||||||
* Signature: (B)V
|
|
||||||
*/
|
|
||||||
JNIEXPORT void JNICALL Java_ch_ntb_usb_LibusbJava_usb_1set_1debug
|
|
||||||
(JNIEnv *env, jclass obj, jint level)
|
|
||||||
{
|
|
||||||
clearLibusbJavaError();
|
|
||||||
usb_set_debug(level);
|
|
||||||
}
|
|
||||||
/*
|
|
||||||
* Class: ch_ntb_usb_LibusbJava
|
|
||||||
* Method: usb_init
|
|
||||||
* Signature: ()V
|
|
||||||
*/
|
|
||||||
JNIEXPORT void JNICALL Java_ch_ntb_usb_LibusbJava_usb_1init
|
|
||||||
(JNIEnv *env, jclass obj)
|
|
||||||
{
|
|
||||||
clearLibusbJavaError();
|
|
||||||
usb_init();
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Class: ch_ntb_usb_LibusbJava
|
|
||||||
* Method: usb_find_busses
|
|
||||||
* Signature: ()I
|
|
||||||
*/
|
|
||||||
JNIEXPORT jint JNICALL Java_ch_ntb_usb_LibusbJava_usb_1find_1busses
|
|
||||||
(JNIEnv *env, jclass obj)
|
|
||||||
{
|
|
||||||
clearLibusbJavaError();
|
|
||||||
return usb_find_busses();
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Class: ch_ntb_usb_LibusbJava
|
|
||||||
* Method: usb_find_devices
|
|
||||||
* Signature: ()I
|
|
||||||
*/
|
|
||||||
JNIEXPORT jint JNICALL Java_ch_ntb_usb_LibusbJava_usb_1find_1devices
|
|
||||||
(JNIEnv *env, jclass obj)
|
|
||||||
{
|
|
||||||
clearLibusbJavaError();
|
|
||||||
return usb_find_devices();
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Class: ch_ntb_usb_LibusbJava
|
|
||||||
* Method: usb_get_busses
|
|
||||||
* Signature: ()Lch/ntb/usb/Usb_Bus;
|
|
||||||
*/
|
|
||||||
JNIEXPORT jobject JNICALL Java_ch_ntb_usb_LibusbJava_usb_1get_1busses
|
|
||||||
(JNIEnv *env, jclass obj)
|
|
||||||
{
|
|
||||||
|
|
||||||
clearLibusbJavaError();
|
|
||||||
|
|
||||||
// only load class, method and field ID references once
|
|
||||||
if (!java_references_loaded) {
|
|
||||||
// find classes and field ids
|
|
||||||
// usb_bus
|
|
||||||
usb_busClazz = env->FindClass("ch/ntb/usb/Usb_Bus");
|
|
||||||
if (usb_busClazz == NULL) { return NULL; /* exception thrown */ }
|
|
||||||
usb_busMid = env->GetMethodID(usb_busClazz, "<init>","()V");
|
|
||||||
if (usb_busMid == NULL) { return NULL; }
|
|
||||||
|
|
||||||
usb_busFID_next = env->GetFieldID(usb_busClazz, "next", "Lch/ntb/usb/Usb_Bus;");
|
|
||||||
usb_busFID_prev = env->GetFieldID(usb_busClazz, "prev", "Lch/ntb/usb/Usb_Bus;");
|
|
||||||
usb_busFID_dirname = env->GetFieldID(usb_busClazz, "dirname", "Ljava/lang/String;");
|
|
||||||
usb_busFID_devices = env->GetFieldID(usb_busClazz, "devices", "Lch/ntb/usb/Usb_Device;");
|
|
||||||
usb_busFID_location = env->GetFieldID(usb_busClazz, "location", "J");
|
|
||||||
usb_busFID_root_dev = env->GetFieldID(usb_busClazz, "root_dev", "Lch/ntb/usb/Usb_Device;");
|
|
||||||
|
|
||||||
// usb_device
|
|
||||||
usb_devClazz = env->FindClass("ch/ntb/usb/Usb_Device");
|
|
||||||
if (usb_devClazz == NULL) { return NULL; /* exception thrown */ }
|
|
||||||
usb_devMid = env->GetMethodID(usb_devClazz, "<init>","()V");
|
|
||||||
if (usb_devMid == NULL) { return NULL; }
|
|
||||||
|
|
||||||
usb_devFID_next = env->GetFieldID(usb_devClazz, "next", "Lch/ntb/usb/Usb_Device;");
|
|
||||||
usb_devFID_prev = env->GetFieldID(usb_devClazz, "prev", "Lch/ntb/usb/Usb_Device;");
|
|
||||||
usb_devFID_filename = env->GetFieldID(usb_devClazz, "filename", "Ljava/lang/String;");
|
|
||||||
usb_devFID_bus = env->GetFieldID(usb_devClazz, "bus", "Lch/ntb/usb/Usb_Bus;");
|
|
||||||
usb_devFID_descriptor = env->GetFieldID(usb_devClazz, "descriptor", "Lch/ntb/usb/Usb_Device_Descriptor;");
|
|
||||||
usb_devFID_config = env->GetFieldID(usb_devClazz, "config", "[Lch/ntb/usb/Usb_Config_Descriptor;");
|
|
||||||
usb_devFID_devnum = env->GetFieldID(usb_devClazz, "devnum", "B");
|
|
||||||
usb_devFID_num_children = env->GetFieldID(usb_devClazz, "num_children", "B");
|
|
||||||
usb_devFID_children = env->GetFieldID(usb_devClazz, "children", "Lch/ntb/usb/Usb_Device;");
|
|
||||||
usb_devFID_devStructAddr = env->GetFieldID(usb_devClazz, "devStructAddr", "J");
|
|
||||||
|
|
||||||
|
|
||||||
// usb_device_descriptor
|
|
||||||
usb_devDescClazz = env->FindClass("ch/ntb/usb/Usb_Device_Descriptor");
|
|
||||||
if (usb_devDescClazz == NULL) { return NULL; /* exception thrown */ }
|
|
||||||
usb_devDescMid = env->GetMethodID(usb_devDescClazz, "<init>","()V");
|
|
||||||
if (usb_devDescMid == NULL) { return NULL; }
|
|
||||||
|
|
||||||
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");
|
|
||||||
|
|
||||||
// usb_configuration_descriptor
|
|
||||||
usb_confDescClazz = env->FindClass("ch/ntb/usb/Usb_Config_Descriptor");
|
|
||||||
if (usb_confDescClazz == NULL) { return NULL; /* exception thrown */ }
|
|
||||||
usb_confDescMid = env->GetMethodID(usb_confDescClazz, "<init>","()V");
|
|
||||||
if (usb_confDescMid == NULL) { return NULL; }
|
|
||||||
|
|
||||||
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");
|
|
||||||
|
|
||||||
// usb_interface
|
|
||||||
usb_intClazz = env->FindClass("ch/ntb/usb/Usb_Interface");
|
|
||||||
if (usb_intClazz == NULL) { return NULL; /* exception thrown */ }
|
|
||||||
usb_intMid = env->GetMethodID(usb_intClazz, "<init>","()V");
|
|
||||||
if (usb_intMid == NULL) { return NULL; }
|
|
||||||
|
|
||||||
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");
|
|
||||||
|
|
||||||
// usb_interface_descriptor
|
|
||||||
usb_intDescClazz = env->FindClass("ch/ntb/usb/Usb_Interface_Descriptor");
|
|
||||||
if (usb_intDescClazz == NULL) { return NULL; /* exception thrown */ }
|
|
||||||
usb_intDescMid = env->GetMethodID(usb_intDescClazz, "<init>","()V");
|
|
||||||
if (usb_intDescMid == NULL) { return NULL; }
|
|
||||||
|
|
||||||
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");
|
|
||||||
|
|
||||||
// usb_endpoint_descriptor
|
|
||||||
usb_epDescClazz = env->FindClass("ch/ntb/usb/Usb_Endpoint_Descriptor");
|
|
||||||
if (usb_epDescClazz == NULL) { return NULL; /* exception thrown */ }
|
|
||||||
usb_epDescMid = env->GetMethodID(usb_epDescClazz, "<init>","()V");
|
|
||||||
if (usb_epDescMid == NULL) { return NULL; }
|
|
||||||
|
|
||||||
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_get_busses: Field initialization done (1)\n");
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
//************************************************************************//
|
|
||||||
|
|
||||||
struct usb_device *dev;
|
|
||||||
struct usb_bus *bus;
|
|
||||||
|
|
||||||
busses = usb_get_busses();
|
|
||||||
bus = busses;
|
|
||||||
if (!bus){
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
// objects
|
|
||||||
jobject main_usb_busObj, usb_busObj, usb_busObj_next, usb_busObj_prev, \
|
|
||||||
main_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;
|
|
||||||
|
|
||||||
usb_busObj = NULL;
|
|
||||||
usb_busObj_prev = NULL;
|
|
||||||
main_usb_busObj = NULL;
|
|
||||||
|
|
||||||
#ifdef DEBUGON
|
|
||||||
printf("usb_get_busses: usb_get_busses done (2)\n");
|
|
||||||
#endif
|
|
||||||
|
|
||||||
while (bus){
|
|
||||||
#ifdef DEBUGON
|
|
||||||
printf("\tusb_get_busses: bus %x (3)\n", bus);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// create a new object for every bus
|
|
||||||
if (!usb_busObj) {
|
|
||||||
usb_busObj = env->NewObject(usb_busClazz, usb_busMid);
|
|
||||||
if (!usb_busObj) {
|
|
||||||
setLibusbJavaError("shared library error: Error NewObject (usb_busObj)");
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
main_usb_busObj = usb_busObj;
|
|
||||||
}
|
|
||||||
|
|
||||||
// fill the fields of the object
|
|
||||||
usb_busObj_next = NULL;
|
|
||||||
if (bus->next){
|
|
||||||
usb_busObj_next = env->NewObject(usb_busClazz, usb_busMid);
|
|
||||||
if (!usb_busObj_next) {
|
|
||||||
setLibusbJavaError("shared library error: Error NewObject (usb_busObj_next)");
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
env->SetObjectField(usb_busObj, usb_busFID_next, usb_busObj_next);
|
|
||||||
env->SetObjectField(usb_busObj, usb_busFID_prev, usb_busObj_prev);
|
|
||||||
env->SetObjectField(usb_busObj, usb_busFID_dirname, env->NewStringUTF(bus->dirname));
|
|
||||||
env->SetLongField(usb_busObj, usb_busFID_location, bus->location);
|
|
||||||
|
|
||||||
dev = bus->devices;
|
|
||||||
usb_devObj = NULL;
|
|
||||||
usb_devObj_prev = NULL;
|
|
||||||
main_usb_devObj = NULL;
|
|
||||||
|
|
||||||
while (dev){
|
|
||||||
#ifdef DEBUGON
|
|
||||||
printf("\tusb_get_busses: dev %x (4)\n", dev);
|
|
||||||
#endif
|
|
||||||
// create a new object for every device
|
|
||||||
if (!usb_devObj){
|
|
||||||
usb_devObj = env->NewObject(usb_devClazz, usb_devMid);
|
|
||||||
if (!usb_devObj) {
|
|
||||||
setLibusbJavaError("shared library error: Error NewObject (usb_devObj)");
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
main_usb_devObj = usb_devObj;
|
|
||||||
}
|
|
||||||
// fill the fields of the object
|
|
||||||
usb_devObj_next = NULL;
|
|
||||||
if (dev->next){
|
|
||||||
usb_devObj_next = env->NewObject(usb_devClazz, usb_devMid);
|
|
||||||
if (!usb_devObj_next) {
|
|
||||||
setLibusbJavaError("shared library error: Error NewObject (usb_devObj_next)");
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
env->SetObjectField(usb_devObj, usb_devFID_next, usb_devObj_next);
|
|
||||||
env->SetObjectField(usb_devObj, usb_devFID_prev, usb_devObj_prev);
|
|
||||||
env->SetObjectField(usb_devObj, usb_devFID_bus, usb_busObj);
|
|
||||||
env->SetObjectField(usb_devObj, usb_devFID_filename, env->NewStringUTF(dev->filename));
|
|
||||||
env->SetByteField(usb_devObj, usb_devFID_devnum, dev->devnum);
|
|
||||||
env->SetByteField(usb_devObj, usb_devFID_num_children, dev->num_children);
|
|
||||||
env->SetLongField(usb_devObj, usb_devFID_devStructAddr, (jlong) dev);
|
|
||||||
|
|
||||||
// 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->descriptor.bLength);
|
|
||||||
env->SetByteField(usb_devDescObj, usb_devDescFID_bDescriptorType, dev->descriptor.bDescriptorType);
|
|
||||||
env->SetShortField(usb_devDescObj, usb_devDescFID_bcdUSB, dev->descriptor.bcdUSB);
|
|
||||||
env->SetByteField(usb_devDescObj, usb_devDescFID_bDeviceClass, dev->descriptor.bDeviceClass);
|
|
||||||
env->SetByteField(usb_devDescObj, usb_devDescFID_bDeviceSubClass, dev->descriptor.bDeviceSubClass);
|
|
||||||
env->SetByteField(usb_devDescObj, usb_devDescFID_bDeviceProtocol, dev->descriptor.bDeviceProtocol);
|
|
||||||
env->SetByteField(usb_devDescObj, usb_devDescFID_bMaxPacketSize0, dev->descriptor.bMaxPacketSize0);
|
|
||||||
env->SetShortField(usb_devDescObj, usb_devDescFID_idVendor, dev->descriptor.idVendor);
|
|
||||||
env->SetShortField(usb_devDescObj, usb_devDescFID_idProduct, dev->descriptor.idProduct);
|
|
||||||
env->SetShortField(usb_devDescObj, usb_devDescFID_bcdDevice, dev->descriptor.bcdDevice);
|
|
||||||
env->SetByteField(usb_devDescObj, usb_devDescFID_iManufacturer, dev->descriptor.iManufacturer);
|
|
||||||
env->SetByteField(usb_devDescObj, usb_devDescFID_iProduct, dev->descriptor.iProduct);
|
|
||||||
env->SetByteField(usb_devDescObj, usb_devDescFID_iSerialNumber, dev->descriptor.iSerialNumber);
|
|
||||||
env->SetByteField(usb_devDescObj, usb_devDescFID_bNumConfigurations, dev->descriptor.bNumConfigurations);
|
|
||||||
|
|
||||||
env->SetObjectField(usb_devObj, usb_devFID_descriptor, usb_devDescObj);
|
|
||||||
// configuration descriptor
|
|
||||||
// Loop through all of the configurations
|
|
||||||
usb_confDescObjArray = (jobjectArray) env->NewObjectArray(dev->descriptor.bNumConfigurations, usb_confDescClazz, NULL);
|
|
||||||
if (!usb_confDescObjArray) {
|
|
||||||
setLibusbJavaError("shared library error: Error NewObject 6");
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
for (int c = 0; c < dev->descriptor.bNumConfigurations; c++){
|
|
||||||
#ifdef DEBUGON
|
|
||||||
printf("\t\tusb_get_busses: configuration %x (5)\n", c);
|
|
||||||
#endif
|
|
||||||
if (dev->config == NULL) {
|
|
||||||
// this shouldn't happen, but it did occasionally (maybe this is (or probably was) a libusb bug)
|
|
||||||
setLibusbJavaError("shared library error: dev->config == NULL");
|
|
||||||
return main_usb_busObj;
|
|
||||||
}
|
|
||||||
|
|
||||||
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);
|
|
||||||
env->SetByteField(usb_confDescObj, usb_confDescFID_bLength, dev->config[c].bLength);
|
|
||||||
env->SetByteField(usb_confDescObj, usb_confDescFID_bDescriptorType, dev->config[c].bDescriptorType);
|
|
||||||
env->SetShortField(usb_confDescObj, usb_confDescFID_wTotalLength, dev->config[c].wTotalLength);
|
|
||||||
env->SetByteField(usb_confDescObj, usb_confDescFID_bNumInterfaces, dev->config[c].bNumInterfaces);
|
|
||||||
env->SetByteField(usb_confDescObj, usb_confDescFID_bConfigurationValue, dev->config[c].bConfigurationValue);
|
|
||||||
env->SetByteField(usb_confDescObj, usb_confDescFID_iConfiguration, dev->config[c].iConfiguration);
|
|
||||||
env->SetByteField(usb_confDescObj, usb_confDescFID_bmAttributes, dev->config[c].bmAttributes);
|
|
||||||
env->SetByteField(usb_confDescObj, usb_confDescFID_MaxPower, dev->config[c].MaxPower);
|
|
||||||
env->SetIntField(usb_confDescObj, usb_confDescFID_extralen, dev->config[c].extralen);
|
|
||||||
if (dev->config[c].extra){
|
|
||||||
jbyteArray jbExtraDesc = env->NewByteArray(dev->config[c].extralen);
|
|
||||||
env->SetByteArrayRegion(jbExtraDesc, 0, dev->config[c].extralen, (jbyte *) dev->config[c].extra);
|
|
||||||
env->SetObjectField(usb_confDescObj, usb_confDescFID_extra, jbExtraDesc);
|
|
||||||
} else {
|
|
||||||
env->SetObjectField(usb_confDescObj, usb_confDescFID_extra, NULL);
|
|
||||||
}
|
|
||||||
// interface
|
|
||||||
usb_intObjArray = (jobjectArray) env->NewObjectArray(dev->config[c].bNumInterfaces, usb_intClazz, NULL);
|
|
||||||
if (!usb_intObjArray) {
|
|
||||||
setLibusbJavaError("shared library error: Error NewObject (usb_intObjArray)");
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
for (int i = 0; i < dev->config[c].bNumInterfaces; i++){
|
|
||||||
#ifdef DEBUGON
|
|
||||||
printf("\t\t\tusb_get_busses: interface %x (6)\n", i);
|
|
||||||
#endif
|
|
||||||
if (dev->config[c].interface == NULL) {
|
|
||||||
// this shouldn't happen
|
|
||||||
printf("dev->config[c].interface == NULL");
|
|
||||||
return main_usb_busObj;
|
|
||||||
}
|
|
||||||
|
|
||||||
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, dev->config[c].interface[i].num_altsetting);
|
|
||||||
// interface descriptor
|
|
||||||
usb_intDescObjArray = (jobjectArray) env->NewObjectArray(dev->config[c].interface[i].num_altsetting, usb_intDescClazz, NULL);
|
|
||||||
if (!usb_intDescObjArray) {
|
|
||||||
setLibusbJavaError("shared library error: Error NewObject (usb_intDescObjArray)");
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
for (int a = 0; a < dev->config[c].interface[i].num_altsetting; a++){
|
|
||||||
#ifdef DEBUGON
|
|
||||||
printf("\t\t\t\tusb_get_busses: interface descriptor %x (7)\n", a);
|
|
||||||
#endif
|
|
||||||
if (dev->config[c].interface[i].altsetting == NULL) {
|
|
||||||
// this shouldn't happen
|
|
||||||
printf("LibusbJava: usb_get_busses: dev->config[c].interface[i].altsetting == NULL\n");
|
|
||||||
return main_usb_busObj;
|
|
||||||
}
|
|
||||||
|
|
||||||
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);
|
|
||||||
env->SetByteField(usb_intDescObj, usb_intDescFID_bLength, dev->config[c].interface[i].altsetting[a].bLength);
|
|
||||||
env->SetByteField(usb_intDescObj, usb_intDescFID_bDescriptorType, dev->config[c].interface[i].altsetting[a].bDescriptorType);
|
|
||||||
env->SetByteField(usb_intDescObj, usb_intDescFID_bInterfaceNumber, dev->config[c].interface[i].altsetting[a].bInterfaceNumber);
|
|
||||||
env->SetByteField(usb_intDescObj, usb_intDescFID_bAlternateSetting, dev->config[c].interface[i].altsetting[a].bAlternateSetting);
|
|
||||||
env->SetByteField(usb_intDescObj, usb_intDescFID_bNumEndpoints, dev->config[c].interface[i].altsetting[a].bNumEndpoints);
|
|
||||||
env->SetByteField(usb_intDescObj, usb_intDescFID_bInterfaceClass, dev->config[c].interface[i].altsetting[a].bInterfaceClass);
|
|
||||||
env->SetByteField(usb_intDescObj, usb_intDescFID_bInterfaceSubClass, dev->config[c].interface[i].altsetting[a].bInterfaceSubClass);
|
|
||||||
env->SetByteField(usb_intDescObj, usb_intDescFID_bInterfaceProtocol, dev->config[c].interface[i].altsetting[a].bInterfaceProtocol);
|
|
||||||
env->SetByteField(usb_intDescObj, usb_intDescFID_iInterface, dev->config[c].interface[i].altsetting[a].iInterface);
|
|
||||||
env->SetIntField(usb_intDescObj, usb_intDescFID_extralen, dev->config[c].interface[i].altsetting[a].extralen);
|
|
||||||
if (dev->config[c].interface[i].altsetting[a].extra){
|
|
||||||
jbyteArray jbExtraDesc = env->NewByteArray(dev->config[c].interface[i].altsetting[a].extralen);
|
|
||||||
env->SetByteArrayRegion(jbExtraDesc, 0, dev->config[c].interface[i].altsetting[a].extralen, (jbyte *) dev->config[c].interface[i].altsetting[a].extra);
|
|
||||||
env->SetObjectField(usb_intDescObj, usb_intDescFID_extra, jbExtraDesc);
|
|
||||||
} else {
|
|
||||||
env->SetObjectField(usb_intDescObj, usb_intDescFID_extra, NULL);
|
|
||||||
}
|
|
||||||
// endpoint descriptor
|
|
||||||
usb_epDescObjArray = (jobjectArray) env->NewObjectArray(dev->config[c].interface[i].altsetting[a].bNumEndpoints, usb_epDescClazz, NULL);
|
|
||||||
if (!usb_epDescObjArray) {
|
|
||||||
setLibusbJavaError("shared library error: Error NewObject (usb_epDescObjArray)");
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
for (int e = 0; e < dev->config[c].interface[i].altsetting[a].bNumEndpoints; e++){
|
|
||||||
#ifdef DEBUGON
|
|
||||||
printf("\t\t\t\t\tusb_get_busses: endpoint descriptor %x (8)\n", e);
|
|
||||||
#endif
|
|
||||||
if (dev->config[c].interface[i].altsetting[a].endpoint == NULL) {
|
|
||||||
printf("LibusbJava: usb_get_busses: dev->config[c].interface[i].altsetting[a].endpoint == NULL\n");
|
|
||||||
return main_usb_busObj;
|
|
||||||
}
|
|
||||||
|
|
||||||
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, dev->config[c].interface[i].altsetting[a].endpoint[e].bLength);
|
|
||||||
env->SetByteField(usb_epDescObj, usb_epDescFID_bDescriptorType, dev->config[c].interface[i].altsetting[a].endpoint[e].bDescriptorType);
|
|
||||||
env->SetByteField(usb_epDescObj, usb_epDescFID_bEndpointAddress, dev->config[c].interface[i].altsetting[a].endpoint[e].bEndpointAddress);
|
|
||||||
env->SetByteField(usb_epDescObj, usb_epDescFID_bmAttributes, dev->config[c].interface[i].altsetting[a].endpoint[e].bmAttributes);
|
|
||||||
env->SetShortField(usb_epDescObj, usb_epDescFID_wMaxPacketSize, dev->config[c].interface[i].altsetting[a].endpoint[e].wMaxPacketSize);
|
|
||||||
env->SetByteField(usb_epDescObj, usb_epDescFID_bInterval, dev->config[c].interface[i].altsetting[a].endpoint[e].bInterval);
|
|
||||||
env->SetByteField(usb_epDescObj, usb_epDescFID_bRefresh, dev->config[c].interface[i].altsetting[a].endpoint[e].bRefresh);
|
|
||||||
env->SetByteField(usb_epDescObj, usb_epDescFID_bSynchAddress, dev->config[c].interface[i].altsetting[a].endpoint[e].bSynchAddress);
|
|
||||||
env->SetIntField(usb_epDescObj, usb_epDescFID_extralen, dev->config[c].interface[i].altsetting[a].endpoint[e].extralen);
|
|
||||||
if (dev->config[c].interface[i].altsetting[a].endpoint[e].extra){
|
|
||||||
jbyteArray jbExtraDesc = env->NewByteArray(dev->config[c].interface[i].altsetting[a].endpoint[e].extralen);
|
|
||||||
env->SetByteArrayRegion(jbExtraDesc, 0, dev->config[c].interface[i].altsetting[a].endpoint[e].extralen, (jbyte *) dev->config[c].interface[i].altsetting[a].endpoint[e].extra);
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
env->SetObjectField(usb_devObj, usb_devFID_config, usb_confDescObjArray);
|
|
||||||
|
|
||||||
usb_devObj_prev = usb_devObj;
|
|
||||||
usb_devObj = usb_devObj_next;
|
|
||||||
dev = dev->next;
|
|
||||||
}
|
|
||||||
env->SetObjectField(usb_busObj, usb_busFID_devices, main_usb_devObj);
|
|
||||||
env->SetObjectField(usb_busObj, usb_busFID_root_dev, main_usb_devObj);
|
|
||||||
|
|
||||||
usb_busObj_prev = usb_busObj;
|
|
||||||
usb_busObj = usb_busObj_next;
|
|
||||||
bus = bus->next;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef DEBUGON
|
|
||||||
printf("usb_get_busses: done\n");
|
|
||||||
#endif
|
|
||||||
return main_usb_busObj;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Class: ch_ntb_usb_LibusbJava
|
|
||||||
* Method: usb_open
|
|
||||||
* Signature: (Lch/ntb/usb/Usb_Device;)I
|
|
||||||
*/
|
|
||||||
JNIEXPORT jlong JNICALL Java_ch_ntb_usb_LibusbJava_usb_1open
|
|
||||||
(JNIEnv *env, jclass obj, jobject dev)
|
|
||||||
{
|
|
||||||
clearLibusbJavaError();
|
|
||||||
if (busses == NULL) {
|
|
||||||
setLibusbJavaError("shared library error: busses is null");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
unsigned char devnum = env->GetByteField(dev, usb_devFID_devnum);
|
|
||||||
struct usb_device *usb_device_cmp;
|
|
||||||
jlong usb_device_cmp_addr = env->GetLongField(dev, usb_devFID_devStructAddr);
|
|
||||||
struct usb_bus *tmpBus;
|
|
||||||
|
|
||||||
for (tmpBus = busses; tmpBus; tmpBus = tmpBus->next) {
|
|
||||||
struct usb_device *device;
|
|
||||||
for (device = tmpBus->devices; device; device = device->next) {
|
|
||||||
if ((jlong) device == usb_device_cmp_addr){
|
|
||||||
return (jlong) usb_open(device);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
setLibusbJavaError("shared library error: no device with dev.devnum found on busses");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Class: ch_ntb_usb_LibusbJava
|
|
||||||
* Method: usb_close
|
|
||||||
* Signature: (I)I
|
|
||||||
*/
|
|
||||||
JNIEXPORT jint JNICALL Java_ch_ntb_usb_LibusbJava_usb_1close
|
|
||||||
(JNIEnv *env, jclass obj, jlong dev_handle)
|
|
||||||
{
|
|
||||||
clearLibusbJavaError();
|
|
||||||
return (jint) usb_close((usb_dev_handle *) dev_handle);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Class: ch_ntb_usb_LibusbJava
|
|
||||||
* Method: usb_set_configuration
|
|
||||||
* Signature: (II)I
|
|
||||||
*/
|
|
||||||
JNIEXPORT jint JNICALL Java_ch_ntb_usb_LibusbJava_usb_1set_1configuration
|
|
||||||
(JNIEnv *env, jclass obj, jlong dev_handle, jint configuration)
|
|
||||||
{
|
|
||||||
clearLibusbJavaError();
|
|
||||||
return usb_set_configuration((usb_dev_handle *) dev_handle, configuration);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Class: ch_ntb_usb_LibusbJava
|
|
||||||
* Method: usb_set_altinterface
|
|
||||||
* Signature: (II)I
|
|
||||||
*/
|
|
||||||
JNIEXPORT jint JNICALL Java_ch_ntb_usb_LibusbJava_usb_1set_1altinterface
|
|
||||||
(JNIEnv *env, jclass obj, jlong dev_handle, jint alternate)
|
|
||||||
{
|
|
||||||
clearLibusbJavaError();
|
|
||||||
return usb_set_altinterface((usb_dev_handle *) dev_handle, alternate);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Class: ch_ntb_usb_LibusbJava
|
|
||||||
* Method: usb_clear_halt
|
|
||||||
* Signature: (II)I
|
|
||||||
*/
|
|
||||||
JNIEXPORT jint JNICALL Java_ch_ntb_usb_LibusbJava_usb_1clear_1halt
|
|
||||||
(JNIEnv *env, jclass obj, jlong dev_handle, jint ep)
|
|
||||||
{
|
|
||||||
clearLibusbJavaError();
|
|
||||||
return usb_clear_halt((usb_dev_handle *) dev_handle, (unsigned) ep);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Class: ch_ntb_usb_LibusbJava
|
|
||||||
* Method: usb_reset
|
|
||||||
* Signature: (I)I
|
|
||||||
*/
|
|
||||||
JNIEXPORT jint JNICALL Java_ch_ntb_usb_LibusbJava_usb_1reset
|
|
||||||
(JNIEnv *env, jclass obj, jlong dev_handle)
|
|
||||||
{
|
|
||||||
clearLibusbJavaError();
|
|
||||||
return usb_reset((usb_dev_handle *) dev_handle);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Class: ch_ntb_usb_LibusbJava
|
|
||||||
* Method: usb_claim_interface
|
|
||||||
* Signature: (II)I
|
|
||||||
*/
|
|
||||||
JNIEXPORT jint JNICALL Java_ch_ntb_usb_LibusbJava_usb_1claim_1interface
|
|
||||||
(JNIEnv *env, jclass obj, jlong dev_handle, jint interface)
|
|
||||||
{
|
|
||||||
clearLibusbJavaError();
|
|
||||||
return usb_claim_interface((usb_dev_handle *) dev_handle, interface);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Class: ch_ntb_usb_LibusbJava
|
|
||||||
* Method: usb_release_interface
|
|
||||||
* Signature: (II)I
|
|
||||||
*/
|
|
||||||
JNIEXPORT jint JNICALL Java_ch_ntb_usb_LibusbJava_usb_1release_1interface
|
|
||||||
(JNIEnv *env, jclass obj, jlong dev_handle, jint interface)
|
|
||||||
{
|
|
||||||
clearLibusbJavaError();
|
|
||||||
return usb_release_interface((usb_dev_handle *) dev_handle, interface);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Class: ch_ntb_usb_LibusbJava
|
|
||||||
* Method: usb_control_msg
|
|
||||||
* Signature: (IIIII[BII)I
|
|
||||||
*/
|
|
||||||
JNIEXPORT jint JNICALL Java_ch_ntb_usb_LibusbJava_usb_1control_1msg
|
|
||||||
(JNIEnv *env, jclass obj, jlong dev_handle, jint requesttype, jint request, jint value, jint index, jbyteArray jbytes, jint size, jint timeout)
|
|
||||||
{
|
|
||||||
clearLibusbJavaError();
|
|
||||||
jbyte *bytes = env->GetByteArrayElements(jbytes, NULL);
|
|
||||||
int num_bytes = usb_control_msg((usb_dev_handle *) dev_handle, requesttype, request, value, index, (char *) bytes, size, timeout);
|
|
||||||
env->SetByteArrayRegion(jbytes, 0, size, bytes);
|
|
||||||
env->ReleaseByteArrayElements(jbytes, bytes, 0);
|
|
||||||
return num_bytes;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Class: ch_ntb_usb_LibusbJava
|
|
||||||
* Method: usb_get_string
|
|
||||||
* Signature: (III)Ljava/lang/String;
|
|
||||||
*/
|
|
||||||
JNIEXPORT jstring JNICALL Java_ch_ntb_usb_LibusbJava_usb_1get_1string
|
|
||||||
(JNIEnv *env, jclass obj, jlong dev_handle, jint index, jint langid)
|
|
||||||
{
|
|
||||||
clearLibusbJavaError();
|
|
||||||
char string[256];
|
|
||||||
int retVal = usb_get_string((usb_dev_handle *) dev_handle, index, langid, string, 256);
|
|
||||||
if (retVal > 0)
|
|
||||||
return env->NewStringUTF(string);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Class: ch_ntb_usb_LibusbJava
|
|
||||||
* Method: usb_get_string_simple
|
|
||||||
* Signature: (II)Ljava/lang/String;
|
|
||||||
*/
|
|
||||||
JNIEXPORT jstring JNICALL Java_ch_ntb_usb_LibusbJava_usb_1get_1string_1simple
|
|
||||||
(JNIEnv *env, jclass obj, jlong dev_handle, jint index)
|
|
||||||
{
|
|
||||||
clearLibusbJavaError();
|
|
||||||
char string[256];
|
|
||||||
int retVal = usb_get_string_simple((usb_dev_handle *) dev_handle, index, string, 256);
|
|
||||||
if (retVal > 0)
|
|
||||||
return env->NewStringUTF(string);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Class: ch_ntb_usb_LibusbJava
|
|
||||||
* Method: usb_get_descriptor
|
|
||||||
* Signature: (IBBI)Ljava/lang/String;
|
|
||||||
*/
|
|
||||||
JNIEXPORT jstring JNICALL Java_ch_ntb_usb_LibusbJava_usb_1get_1descriptor
|
|
||||||
(JNIEnv *env, jclass obj, jlong dev_handle, jbyte type, jbyte index, jint size)
|
|
||||||
{
|
|
||||||
clearLibusbJavaError();
|
|
||||||
char *string = (char *) malloc(size * sizeof(char));
|
|
||||||
int retVal = usb_get_descriptor((usb_dev_handle *) dev_handle, (unsigned) type,
|
|
||||||
(unsigned) index, string, size);
|
|
||||||
if (retVal > 0)
|
|
||||||
return env->NewStringUTF(string);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Class: ch_ntb_usb_LibusbJava
|
|
||||||
* Method: usb_get_descriptor_by_endpoint
|
|
||||||
* Signature: (IIBBI)Ljava/lang/String;
|
|
||||||
*/
|
|
||||||
JNIEXPORT jstring JNICALL Java_ch_ntb_usb_LibusbJava_usb_1get_1descriptor_1by_1endpoint
|
|
||||||
(JNIEnv *env, jclass obj, jlong dev_handle, jint ep, jbyte type, jbyte index, jint size)
|
|
||||||
{
|
|
||||||
clearLibusbJavaError();
|
|
||||||
char *string = (char *) malloc(size * sizeof(char));
|
|
||||||
int retVal = usb_get_descriptor_by_endpoint((usb_dev_handle *) dev_handle, ep, (unsigned) type,
|
|
||||||
(unsigned) index, string, size);
|
|
||||||
if (retVal > 0)
|
|
||||||
return env->NewStringUTF(string);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Class: ch_ntb_usb_LibusbJava
|
|
||||||
* Method: usb_bulk_write
|
|
||||||
* Signature: (II[BII)I
|
|
||||||
*/
|
|
||||||
JNIEXPORT jint JNICALL Java_ch_ntb_usb_LibusbJava_usb_1bulk_1write
|
|
||||||
(JNIEnv *env, jclass obj, jlong dev_handle, jint ep, jbyteArray jbytes, jint size, jint timeout)
|
|
||||||
{
|
|
||||||
clearLibusbJavaError();
|
|
||||||
jbyte *bytes = env->GetByteArrayElements(jbytes, NULL);
|
|
||||||
int num_bytes = usb_bulk_write((usb_dev_handle *) dev_handle, ep, (char *) bytes, size, timeout);
|
|
||||||
env->ReleaseByteArrayElements(jbytes, bytes, 0);
|
|
||||||
return num_bytes;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Class: ch_ntb_usb_LibusbJava
|
|
||||||
* Method: usb_bulk_read
|
|
||||||
* Signature: (II[BII)I
|
|
||||||
*/
|
|
||||||
JNIEXPORT jint JNICALL Java_ch_ntb_usb_LibusbJava_usb_1bulk_1read
|
|
||||||
(JNIEnv *env, jclass obj, jlong dev_handle, jint ep, jbyteArray jbytes, jint size, jint timeout)
|
|
||||||
{
|
|
||||||
clearLibusbJavaError();
|
|
||||||
char *bytes = (char *) malloc(size * sizeof(char));
|
|
||||||
int num_bytes = usb_bulk_read((usb_dev_handle *) dev_handle, ep, bytes, size, timeout);
|
|
||||||
if (!bytes) { return num_bytes; }
|
|
||||||
env->SetByteArrayRegion(jbytes, 0, size, (jbyte *) bytes);
|
|
||||||
free(bytes);
|
|
||||||
return num_bytes;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Class: ch_ntb_usb_LibusbJava
|
|
||||||
* Method: usb_interrupt_write
|
|
||||||
* Signature: (II[BII)I
|
|
||||||
*/
|
|
||||||
JNIEXPORT jint JNICALL Java_ch_ntb_usb_LibusbJava_usb_1interrupt_1write
|
|
||||||
(JNIEnv *env, jclass obj, jlong dev_handle, jint ep, jbyteArray jbytes, jint size, jint timeout)
|
|
||||||
{
|
|
||||||
clearLibusbJavaError();
|
|
||||||
jbyte *bytes = env->GetByteArrayElements(jbytes, NULL);
|
|
||||||
int num_bytes = usb_interrupt_write((usb_dev_handle *) dev_handle, ep, (char *) bytes, size, timeout);
|
|
||||||
env->ReleaseByteArrayElements(jbytes, bytes, 0);
|
|
||||||
return num_bytes;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Class: ch_ntb_usb_LibusbJava
|
|
||||||
* Method: usb_interrupt_read
|
|
||||||
* Signature: (II[BII)I
|
|
||||||
*/
|
|
||||||
JNIEXPORT jint JNICALL Java_ch_ntb_usb_LibusbJava_usb_1interrupt_1read
|
|
||||||
(JNIEnv *env, jclass obj, jlong dev_handle, jint ep, jbyteArray jbytes, jint size, jint timeout)
|
|
||||||
{
|
|
||||||
clearLibusbJavaError();
|
|
||||||
char *bytes = (char *) malloc(size * sizeof(char));
|
|
||||||
int num_bytes = usb_interrupt_read((usb_dev_handle *) dev_handle, ep, bytes, size, timeout);
|
|
||||||
if (!bytes) { return num_bytes; }
|
|
||||||
env->SetByteArrayRegion(jbytes, 0, size, (jbyte *) bytes);
|
|
||||||
free(bytes);
|
|
||||||
return num_bytes;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Class: ch_ntb_usb_LibusbJava
|
|
||||||
* Method: usb_strerror
|
|
||||||
* Signature: ()Ljava/lang/String;
|
|
||||||
*/
|
|
||||||
JNIEXPORT jstring JNICALL Java_ch_ntb_usb_LibusbJava_usb_1strerror
|
|
||||||
(JNIEnv *env, jclass obj){
|
|
||||||
|
|
||||||
char *str;
|
|
||||||
// check for LibusbJava specific errors first
|
|
||||||
if (libusbJavaError != NULL) {
|
|
||||||
str = libusbJavaError;
|
|
||||||
clearLibusbJavaError();
|
|
||||||
} else {
|
|
||||||
str = usb_strerror();
|
|
||||||
}
|
|
||||||
|
|
||||||
return env->NewStringUTF(str);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Class: ch_ntb_usb_LibusbJava
|
|
||||||
* Method: usb_error_no
|
|
||||||
* Signature: (I)I
|
|
||||||
*/
|
|
||||||
JNIEXPORT jint JNICALL Java_ch_ntb_usb_LibusbJava_usb_1error_1no
|
|
||||||
(JNIEnv *env, jclass obj, jint java_error_no){
|
|
||||||
|
|
||||||
switch (java_error_no) {
|
|
||||||
case 0:
|
|
||||||
return 0;
|
|
||||||
case 1:
|
|
||||||
return EBADF;
|
|
||||||
case 2:
|
|
||||||
return ENXIO;
|
|
||||||
case 3:
|
|
||||||
return EBUSY;
|
|
||||||
case 4:
|
|
||||||
return EINVAL;
|
|
||||||
case 5:
|
|
||||||
return ETIMEDOUT;
|
|
||||||
case 6:
|
|
||||||
return EIO;
|
|
||||||
case 7:
|
|
||||||
return ENOMEM;
|
|
||||||
default:
|
|
||||||
return 100000;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,205 +0,0 @@
|
|||||||
/* DO NOT EDIT THIS FILE - it is machine generated */
|
|
||||||
#include <jni.h>
|
|
||||||
/* Header for class ch_ntb_usb_LibusbJava */
|
|
||||||
|
|
||||||
#ifndef _Included_ch_ntb_usb_LibusbJava
|
|
||||||
#define _Included_ch_ntb_usb_LibusbJava
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
/*
|
|
||||||
* Class: ch_ntb_usb_LibusbJava
|
|
||||||
* Method: usb_set_debug
|
|
||||||
* Signature: (I)V
|
|
||||||
*/
|
|
||||||
JNIEXPORT void JNICALL Java_ch_ntb_usb_LibusbJava_usb_1set_1debug
|
|
||||||
(JNIEnv *, jclass, jint);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Class: ch_ntb_usb_LibusbJava
|
|
||||||
* Method: usb_init
|
|
||||||
* Signature: ()V
|
|
||||||
*/
|
|
||||||
JNIEXPORT void JNICALL Java_ch_ntb_usb_LibusbJava_usb_1init
|
|
||||||
(JNIEnv *, jclass);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Class: ch_ntb_usb_LibusbJava
|
|
||||||
* Method: usb_find_busses
|
|
||||||
* Signature: ()I
|
|
||||||
*/
|
|
||||||
JNIEXPORT jint JNICALL Java_ch_ntb_usb_LibusbJava_usb_1find_1busses
|
|
||||||
(JNIEnv *, jclass);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Class: ch_ntb_usb_LibusbJava
|
|
||||||
* Method: usb_find_devices
|
|
||||||
* Signature: ()I
|
|
||||||
*/
|
|
||||||
JNIEXPORT jint JNICALL Java_ch_ntb_usb_LibusbJava_usb_1find_1devices
|
|
||||||
(JNIEnv *, jclass);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Class: ch_ntb_usb_LibusbJava
|
|
||||||
* Method: usb_get_busses
|
|
||||||
* Signature: ()Lch/ntb/usb/Usb_Bus;
|
|
||||||
*/
|
|
||||||
JNIEXPORT jobject JNICALL Java_ch_ntb_usb_LibusbJava_usb_1get_1busses
|
|
||||||
(JNIEnv *, jclass);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Class: ch_ntb_usb_LibusbJava
|
|
||||||
* Method: usb_open
|
|
||||||
* Signature: (Lch/ntb/usb/Usb_Device;)J
|
|
||||||
*/
|
|
||||||
JNIEXPORT jlong JNICALL Java_ch_ntb_usb_LibusbJava_usb_1open
|
|
||||||
(JNIEnv *, jclass, jobject);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Class: ch_ntb_usb_LibusbJava
|
|
||||||
* Method: usb_close
|
|
||||||
* Signature: (J)I
|
|
||||||
*/
|
|
||||||
JNIEXPORT jint JNICALL Java_ch_ntb_usb_LibusbJava_usb_1close
|
|
||||||
(JNIEnv *, jclass, jlong);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Class: ch_ntb_usb_LibusbJava
|
|
||||||
* Method: usb_set_configuration
|
|
||||||
* Signature: (JI)I
|
|
||||||
*/
|
|
||||||
JNIEXPORT jint JNICALL Java_ch_ntb_usb_LibusbJava_usb_1set_1configuration
|
|
||||||
(JNIEnv *, jclass, jlong, jint);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Class: ch_ntb_usb_LibusbJava
|
|
||||||
* Method: usb_set_altinterface
|
|
||||||
* Signature: (JI)I
|
|
||||||
*/
|
|
||||||
JNIEXPORT jint JNICALL Java_ch_ntb_usb_LibusbJava_usb_1set_1altinterface
|
|
||||||
(JNIEnv *, jclass, jlong, jint);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Class: ch_ntb_usb_LibusbJava
|
|
||||||
* Method: usb_clear_halt
|
|
||||||
* Signature: (JI)I
|
|
||||||
*/
|
|
||||||
JNIEXPORT jint JNICALL Java_ch_ntb_usb_LibusbJava_usb_1clear_1halt
|
|
||||||
(JNIEnv *, jclass, jlong, jint);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Class: ch_ntb_usb_LibusbJava
|
|
||||||
* Method: usb_reset
|
|
||||||
* Signature: (J)I
|
|
||||||
*/
|
|
||||||
JNIEXPORT jint JNICALL Java_ch_ntb_usb_LibusbJava_usb_1reset
|
|
||||||
(JNIEnv *, jclass, jlong);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Class: ch_ntb_usb_LibusbJava
|
|
||||||
* Method: usb_claim_interface
|
|
||||||
* Signature: (JI)I
|
|
||||||
*/
|
|
||||||
JNIEXPORT jint JNICALL Java_ch_ntb_usb_LibusbJava_usb_1claim_1interface
|
|
||||||
(JNIEnv *, jclass, jlong, jint);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Class: ch_ntb_usb_LibusbJava
|
|
||||||
* Method: usb_release_interface
|
|
||||||
* Signature: (JI)I
|
|
||||||
*/
|
|
||||||
JNIEXPORT jint JNICALL Java_ch_ntb_usb_LibusbJava_usb_1release_1interface
|
|
||||||
(JNIEnv *, jclass, jlong, jint);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Class: ch_ntb_usb_LibusbJava
|
|
||||||
* Method: usb_control_msg
|
|
||||||
* Signature: (JIIII[BII)I
|
|
||||||
*/
|
|
||||||
JNIEXPORT jint JNICALL Java_ch_ntb_usb_LibusbJava_usb_1control_1msg
|
|
||||||
(JNIEnv *, jclass, jlong, jint, jint, jint, jint, jbyteArray, jint, jint);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Class: ch_ntb_usb_LibusbJava
|
|
||||||
* Method: usb_get_string
|
|
||||||
* Signature: (JII)Ljava/lang/String;
|
|
||||||
*/
|
|
||||||
JNIEXPORT jstring JNICALL Java_ch_ntb_usb_LibusbJava_usb_1get_1string
|
|
||||||
(JNIEnv *, jclass, jlong, jint, jint);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Class: ch_ntb_usb_LibusbJava
|
|
||||||
* Method: usb_get_string_simple
|
|
||||||
* Signature: (JI)Ljava/lang/String;
|
|
||||||
*/
|
|
||||||
JNIEXPORT jstring JNICALL Java_ch_ntb_usb_LibusbJava_usb_1get_1string_1simple
|
|
||||||
(JNIEnv *, jclass, jlong, jint);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Class: ch_ntb_usb_LibusbJava
|
|
||||||
* Method: usb_get_descriptor
|
|
||||||
* Signature: (JBBI)Ljava/lang/String;
|
|
||||||
*/
|
|
||||||
JNIEXPORT jstring JNICALL Java_ch_ntb_usb_LibusbJava_usb_1get_1descriptor
|
|
||||||
(JNIEnv *, jclass, jlong, jbyte, jbyte, jint);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Class: ch_ntb_usb_LibusbJava
|
|
||||||
* Method: usb_get_descriptor_by_endpoint
|
|
||||||
* Signature: (JIBBI)Ljava/lang/String;
|
|
||||||
*/
|
|
||||||
JNIEXPORT jstring JNICALL Java_ch_ntb_usb_LibusbJava_usb_1get_1descriptor_1by_1endpoint
|
|
||||||
(JNIEnv *, jclass, jlong, jint, jbyte, jbyte, jint);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Class: ch_ntb_usb_LibusbJava
|
|
||||||
* Method: usb_bulk_write
|
|
||||||
* Signature: (JI[BII)I
|
|
||||||
*/
|
|
||||||
JNIEXPORT jint JNICALL Java_ch_ntb_usb_LibusbJava_usb_1bulk_1write
|
|
||||||
(JNIEnv *, jclass, jlong, jint, jbyteArray, jint, jint);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Class: ch_ntb_usb_LibusbJava
|
|
||||||
* Method: usb_bulk_read
|
|
||||||
* Signature: (JI[BII)I
|
|
||||||
*/
|
|
||||||
JNIEXPORT jint JNICALL Java_ch_ntb_usb_LibusbJava_usb_1bulk_1read
|
|
||||||
(JNIEnv *, jclass, jlong, jint, jbyteArray, jint, jint);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Class: ch_ntb_usb_LibusbJava
|
|
||||||
* Method: usb_interrupt_write
|
|
||||||
* Signature: (JI[BII)I
|
|
||||||
*/
|
|
||||||
JNIEXPORT jint JNICALL Java_ch_ntb_usb_LibusbJava_usb_1interrupt_1write
|
|
||||||
(JNIEnv *, jclass, jlong, jint, jbyteArray, jint, jint);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Class: ch_ntb_usb_LibusbJava
|
|
||||||
* Method: usb_interrupt_read
|
|
||||||
* Signature: (JI[BII)I
|
|
||||||
*/
|
|
||||||
JNIEXPORT jint JNICALL Java_ch_ntb_usb_LibusbJava_usb_1interrupt_1read
|
|
||||||
(JNIEnv *, jclass, jlong, jint, jbyteArray, jint, jint);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Class: ch_ntb_usb_LibusbJava
|
|
||||||
* Method: usb_strerror
|
|
||||||
* Signature: ()Ljava/lang/String;
|
|
||||||
*/
|
|
||||||
JNIEXPORT jstring JNICALL Java_ch_ntb_usb_LibusbJava_usb_1strerror
|
|
||||||
(JNIEnv *, jclass);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Class: ch_ntb_usb_LibusbJava
|
|
||||||
* Method: usb_error_no
|
|
||||||
* Signature: (I)I
|
|
||||||
*/
|
|
||||||
JNIEXPORT jint JNICALL Java_ch_ntb_usb_LibusbJava_usb_1error_1no
|
|
||||||
(JNIEnv *, jclass, jint);
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
@@ -1,466 +0,0 @@
|
|||||||
/*
|
|
||||||
* testlibusb.c
|
|
||||||
*
|
|
||||||
* Test suite program
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include "usb.h"
|
|
||||||
|
|
||||||
#define snprintf printf
|
|
||||||
|
|
||||||
#define ID_PRODUCT 0x0200
|
|
||||||
#define ID_VENDOR 0x8235
|
|
||||||
|
|
||||||
#define CONFIGURATION 1
|
|
||||||
#define INTERFACE_ 0
|
|
||||||
#define ALTINTERFACE 0
|
|
||||||
#define TIMEOUT 5000
|
|
||||||
|
|
||||||
#define OUT_ENDPOINT 0x01
|
|
||||||
#define IN_ENDPOINT 0x82
|
|
||||||
|
|
||||||
// #define SET_ALTINTERFACE_ONCE
|
|
||||||
|
|
||||||
int verbose = 0;
|
|
||||||
unsigned char first = true;
|
|
||||||
|
|
||||||
void print_endpoint(struct usb_endpoint_descriptor *endpoint)
|
|
||||||
{
|
|
||||||
printf(" bEndpointAddress: %02xh\n", endpoint->bEndpointAddress);
|
|
||||||
printf(" bmAttributes: %02xh\n", endpoint->bmAttributes);
|
|
||||||
printf(" wMaxPacketSize: %d\n", endpoint->wMaxPacketSize);
|
|
||||||
printf(" bInterval: %d\n", endpoint->bInterval);
|
|
||||||
printf(" bRefresh: %d\n", endpoint->bRefresh);
|
|
||||||
printf(" bSynchAddress: %d\n", endpoint->bSynchAddress);
|
|
||||||
}
|
|
||||||
|
|
||||||
void print_altsetting(struct usb_interface_descriptor *interface)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
|
|
||||||
printf(" bInterfaceNumber: %d\n", interface->bInterfaceNumber);
|
|
||||||
printf(" bAlternateSetting: %d\n", interface->bAlternateSetting);
|
|
||||||
printf(" bNumEndpoints: %d\n", interface->bNumEndpoints);
|
|
||||||
printf(" bInterfaceClass: %d\n", interface->bInterfaceClass);
|
|
||||||
printf(" bInterfaceSubClass: %d\n", interface->bInterfaceSubClass);
|
|
||||||
printf(" bInterfaceProtocol: %d\n", interface->bInterfaceProtocol);
|
|
||||||
printf(" iInterface: %d\n", interface->iInterface);
|
|
||||||
|
|
||||||
for (i = 0; i < interface->bNumEndpoints; i++)
|
|
||||||
print_endpoint(&interface->endpoint[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
void print_interface(struct usb_interface *interface)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
|
|
||||||
for (i = 0; i < interface->num_altsetting; i++)
|
|
||||||
print_altsetting(&interface->altsetting[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
void print_configuration(struct usb_config_descriptor *config)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
|
|
||||||
printf(" wTotalLength: %d\n", config->wTotalLength);
|
|
||||||
printf(" bNumInterfaces: %d\n", config->bNumInterfaces);
|
|
||||||
printf(" bConfigurationValue: %d\n", config->bConfigurationValue);
|
|
||||||
printf(" iConfiguration: %d\n", config->iConfiguration);
|
|
||||||
printf(" bmAttributes: %02xh\n", config->bmAttributes);
|
|
||||||
printf(" MaxPower: %d\n", config->MaxPower);
|
|
||||||
|
|
||||||
for (i = 0; i < config->bNumInterfaces; i++)
|
|
||||||
print_interface(&config->interface[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
int print_device(struct usb_device *dev, int level)
|
|
||||||
{
|
|
||||||
usb_dev_handle *udev;
|
|
||||||
char description[256];
|
|
||||||
char string[256];
|
|
||||||
int ret, i;
|
|
||||||
|
|
||||||
udev = usb_open(dev);
|
|
||||||
if (udev) {
|
|
||||||
if (dev->descriptor.iManufacturer) {
|
|
||||||
ret = usb_get_string_simple(udev, dev->descriptor.iManufacturer, string, sizeof(string));
|
|
||||||
if (ret > 0)
|
|
||||||
snprintf(description, sizeof(description), "%s - ", string);
|
|
||||||
else
|
|
||||||
snprintf(description, sizeof(description), "%04X - ",
|
|
||||||
dev->descriptor.idVendor);
|
|
||||||
} else
|
|
||||||
snprintf(description, sizeof(description), "%04X - ",
|
|
||||||
dev->descriptor.idVendor);
|
|
||||||
|
|
||||||
if (dev->descriptor.iProduct) {
|
|
||||||
ret = usb_get_string_simple(udev, dev->descriptor.iProduct, string, sizeof(string));
|
|
||||||
if (ret > 0)
|
|
||||||
snprintf(description + strlen(description), sizeof(description) -
|
|
||||||
strlen(description), "%s", string);
|
|
||||||
else
|
|
||||||
snprintf(description + strlen(description), sizeof(description) -
|
|
||||||
strlen(description), "%04X", dev->descriptor.idProduct);
|
|
||||||
} else
|
|
||||||
snprintf(description + strlen(description), sizeof(description) -
|
|
||||||
strlen(description), "%04X", dev->descriptor.idProduct);
|
|
||||||
|
|
||||||
} else
|
|
||||||
snprintf(description, sizeof(description), "%04X - %04X",
|
|
||||||
dev->descriptor.idVendor, dev->descriptor.idProduct);
|
|
||||||
|
|
||||||
printf("%.*sDev #%d: %s\n", level * 2, " ", dev->devnum,
|
|
||||||
description);
|
|
||||||
|
|
||||||
if (udev && verbose) {
|
|
||||||
if (dev->descriptor.iSerialNumber) {
|
|
||||||
ret = usb_get_string_simple(udev, dev->descriptor.iSerialNumber, string, sizeof(string));
|
|
||||||
if (ret > 0)
|
|
||||||
printf("%.*s - Serial Number: %s\n", level * 2,
|
|
||||||
" ", string);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (udev)
|
|
||||||
usb_close(udev);
|
|
||||||
|
|
||||||
if (verbose) {
|
|
||||||
if (!dev->config) {
|
|
||||||
printf(" Couldn't retrieve descriptors\n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (i = 0; i < dev->descriptor.bNumConfigurations; i++)
|
|
||||||
print_configuration(&dev->config[i]);
|
|
||||||
} else {
|
|
||||||
for (i = 0; i < dev->num_children; i++)
|
|
||||||
print_device(dev->children[i], level + 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int read(struct usb_dev_handle *handle)
|
|
||||||
{
|
|
||||||
if (usb_claim_interface(handle, INTERFACE_) < 0) {
|
|
||||||
printf("error on usb_claim_interface: %s\n", usb_strerror());
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
printf("usb_claim_interface successful\n");
|
|
||||||
#ifdef SET_ALTINTERFACE_ONCE
|
|
||||||
if (first) {
|
|
||||||
first = false;
|
|
||||||
#endif
|
|
||||||
if (usb_set_altinterface(handle, ALTINTERFACE) < 0){
|
|
||||||
printf("usb_set_altinterface failed: %s\n", usb_strerror());
|
|
||||||
}
|
|
||||||
#ifdef SET_ALTINTERFACE_ONCE
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
int size = 512, res;
|
|
||||||
char *data = (char *) malloc(size*sizeof(char));
|
|
||||||
res = usb_bulk_read(handle, IN_ENDPOINT, data, size, TIMEOUT);
|
|
||||||
if (res < 0){
|
|
||||||
printf("usb_bulk_read failed: %s\n", usb_strerror());
|
|
||||||
}
|
|
||||||
printf("usb_bulk_read: %d bytes read: ", res);
|
|
||||||
for (int i = 0; i < res; ++i) {
|
|
||||||
printf("%3x ", data[i]);
|
|
||||||
}
|
|
||||||
printf("\n");
|
|
||||||
|
|
||||||
usb_release_interface(handle, INTERFACE_);
|
|
||||||
free(data);
|
|
||||||
}
|
|
||||||
|
|
||||||
int write(struct usb_dev_handle *handle)
|
|
||||||
{
|
|
||||||
int size = 12;
|
|
||||||
char *data = (char *) malloc(size*sizeof(char));
|
|
||||||
data[0] = 0x33;
|
|
||||||
data[1] = 0x5B;
|
|
||||||
data[2] = 0x02;
|
|
||||||
data[3] = 0x01;
|
|
||||||
data[4] = 0x00;
|
|
||||||
data[5] = 0x05;
|
|
||||||
data[6] = 0x01;
|
|
||||||
data[7] = 0x03;
|
|
||||||
data[8] = 0x07;
|
|
||||||
data[9] = 0x0F;
|
|
||||||
data[10] = 0x7F;
|
|
||||||
data[11] = 0x1F;
|
|
||||||
// data = {0x33, 0x5B, 0x02, 0x01, 0x00, 0x05, 0x01, 0x03, 0x07, 0x0F, 0x7F, 0x1F};
|
|
||||||
|
|
||||||
if (usb_claim_interface(handle, INTERFACE_) < 0) {
|
|
||||||
printf("error on usb_claim_interface: %s\n", usb_strerror());
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
printf("usb_claim_interface successful\n");
|
|
||||||
#ifdef SET_ALTINTERFACE_ONCE
|
|
||||||
if (first) {
|
|
||||||
first = false;
|
|
||||||
#endif
|
|
||||||
if (usb_set_altinterface(handle, ALTINTERFACE) < 0){
|
|
||||||
printf("usb_set_altinterface failed: %s\n", usb_strerror());
|
|
||||||
}
|
|
||||||
#ifdef SET_ALTINTERFACE_ONCE
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
printf("usb_bulk_write: writing %d bytes: ", size);
|
|
||||||
for (int i = 0; i < size; ++i) {
|
|
||||||
printf("%3x ", data[i]);
|
|
||||||
}
|
|
||||||
printf("\n");
|
|
||||||
|
|
||||||
int res = usb_bulk_write(handle, OUT_ENDPOINT, data, size, TIMEOUT);
|
|
||||||
if (res < 0){
|
|
||||||
printf("usb_bulk_write failed: %s\n", usb_strerror());
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
printf("usb_bulk_write: %d bytes written\n", res);
|
|
||||||
|
|
||||||
usb_release_interface(handle, INTERFACE_);
|
|
||||||
free(data);
|
|
||||||
}
|
|
||||||
|
|
||||||
int readWrite(struct usb_dev_handle *handle)
|
|
||||||
{
|
|
||||||
|
|
||||||
int size = 512;
|
|
||||||
char *data = (char *) malloc(size*sizeof(char));
|
|
||||||
|
|
||||||
printf("type a string...\n");
|
|
||||||
scanf("%s", data); // Get a string
|
|
||||||
|
|
||||||
if (usb_claim_interface(handle, INTERFACE_) < 0) {
|
|
||||||
printf("error on usb_claim_interface: %s\n", usb_strerror());
|
|
||||||
system("PAUSE");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
printf("usb_claim_interface successful\n");
|
|
||||||
#ifdef SET_ALTINTERFACE_ONCE
|
|
||||||
if (first) {
|
|
||||||
first = false;
|
|
||||||
#endif
|
|
||||||
if (usb_set_altinterface(handle, ALTINTERFACE) < 0){
|
|
||||||
printf("usb_set_altinterface failed: %s\n", usb_strerror());
|
|
||||||
}
|
|
||||||
#ifdef SET_ALTINTERFACE_ONCE
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (usb_bulk_write(handle, OUT_ENDPOINT, data, strlen(data), 3000) < 0){
|
|
||||||
printf("usb_bulk_write failed: %s\n", usb_strerror());
|
|
||||||
system("PAUSE");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
strcpy(data, "12345678901234567890");
|
|
||||||
printf("%s\n", "read data");
|
|
||||||
if (usb_bulk_read(handle, IN_ENDPOINT, data, size, 3000) < 0){
|
|
||||||
printf("usb_bulk_read failed: %s\n", usb_strerror());
|
|
||||||
}
|
|
||||||
printf("output %d, %s\n", size, data);
|
|
||||||
// for (int i = 0; i < size; ++i) {
|
|
||||||
// printf("%4x ", data[i]);
|
|
||||||
// }
|
|
||||||
|
|
||||||
usb_release_interface(handle, INTERFACE_);
|
|
||||||
free(data);
|
|
||||||
}
|
|
||||||
|
|
||||||
int readWriteLoop(struct usb_dev_handle *handle)
|
|
||||||
{
|
|
||||||
int NOF_LOOPS = 20;
|
|
||||||
int size = 12;
|
|
||||||
char *data = (char *) malloc(size*sizeof(char));
|
|
||||||
data[0] = 0x33;
|
|
||||||
data[1] = 0x5B;
|
|
||||||
data[2] = 0x02;
|
|
||||||
data[3] = 0x01;
|
|
||||||
data[4] = 0x00;
|
|
||||||
data[5] = 0x05;
|
|
||||||
data[6] = 0x01;
|
|
||||||
data[7] = 0x03;
|
|
||||||
data[8] = 0x07;
|
|
||||||
data[9] = 0x0F;
|
|
||||||
data[10] = 0x7F;
|
|
||||||
data[11] = 0x1F;
|
|
||||||
// data = {0x33, 0x5B, 0x02, 0x01, 0x00, 0x05, 0x01, 0x03, 0x07, 0x0F, 0x7F, 0x1F};
|
|
||||||
|
|
||||||
if (usb_claim_interface(handle, INTERFACE_) < 0) {
|
|
||||||
printf("error on usb_claim_interface: %s\n", usb_strerror());
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
printf("usb_claim_interface successful\n");
|
|
||||||
#ifdef SET_ALTINTERFACE_ONCE
|
|
||||||
if (first) {
|
|
||||||
first = false;
|
|
||||||
#endif
|
|
||||||
if (usb_set_altinterface(handle, ALTINTERFACE) < 0){
|
|
||||||
printf("usb_set_altinterface failed: %s\n", usb_strerror());
|
|
||||||
}
|
|
||||||
#ifdef SET_ALTINTERFACE_ONCE
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
printf("usb_bulk_write: writing %d bytes: ", size);
|
|
||||||
for (int i = 0; i < size; ++i) {
|
|
||||||
printf("%3x ", data[i]);
|
|
||||||
}
|
|
||||||
printf("\n------------------------\n");
|
|
||||||
|
|
||||||
for (int var = 0; var < NOF_LOOPS; ++var) {
|
|
||||||
|
|
||||||
int res = usb_bulk_write(handle, OUT_ENDPOINT, data, size, TIMEOUT);
|
|
||||||
if (res < 0){
|
|
||||||
printf("usb_bulk_write failed: %s\n", usb_strerror());
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
printf("usb_bulk_write: %d bytes written\n", res);
|
|
||||||
|
|
||||||
int size = 64;
|
|
||||||
char *data = (char *) malloc(size*sizeof(char));
|
|
||||||
res = usb_bulk_read(handle, IN_ENDPOINT, data, size, TIMEOUT);
|
|
||||||
if (res < 0){
|
|
||||||
printf("usb_bulk_read failed: %s\n", usb_strerror());
|
|
||||||
}
|
|
||||||
printf("usb_bulk_read: %d bytes read: ", res);
|
|
||||||
for (int i = 0; i < res; ++i) {
|
|
||||||
printf("%3x ", data[i]);
|
|
||||||
}
|
|
||||||
printf("\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
usb_release_interface(handle, INTERFACE_);
|
|
||||||
free(data);
|
|
||||||
}
|
|
||||||
|
|
||||||
void logDevices()
|
|
||||||
{
|
|
||||||
struct usb_bus *bus;
|
|
||||||
|
|
||||||
printf("log devices...\n");
|
|
||||||
for (bus = usb_get_busses(); bus; bus = bus->next) {
|
|
||||||
if (bus->root_dev && !verbose)
|
|
||||||
print_device(bus->root_dev, 0);
|
|
||||||
else {
|
|
||||||
struct usb_device *dev;
|
|
||||||
|
|
||||||
for (dev = bus->devices; dev; dev = dev->next)
|
|
||||||
print_device(dev, 0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
|
||||||
{
|
|
||||||
struct usb_bus *bus;
|
|
||||||
struct usb_device *dev;
|
|
||||||
struct usb_dev_handle *handle;
|
|
||||||
|
|
||||||
bool run = true;
|
|
||||||
|
|
||||||
if (argc > 1 && !strcmp(argv[1], "-v"))
|
|
||||||
verbose = 1;
|
|
||||||
|
|
||||||
usb_set_debug(255);
|
|
||||||
|
|
||||||
printf("initialize libraray, find busses and devices\n");
|
|
||||||
usb_init();
|
|
||||||
|
|
||||||
usb_find_busses();
|
|
||||||
usb_find_devices();
|
|
||||||
|
|
||||||
if (verbose)
|
|
||||||
logDevices();
|
|
||||||
|
|
||||||
int size = 512;
|
|
||||||
char *data = (char *) malloc(size*sizeof(char));
|
|
||||||
|
|
||||||
printf("Search for device with idVendor 0x%x and idProduct 0x%x\n", ID_VENDOR, ID_PRODUCT);
|
|
||||||
for (bus = usb_get_busses(); bus; bus = bus->next) {
|
|
||||||
if (verbose)
|
|
||||||
printf("Found bus %s\n", bus->dirname);
|
|
||||||
for (dev = bus->devices; dev; dev = dev->next) {
|
|
||||||
if (verbose)
|
|
||||||
printf("Found device with idVendor 0x%x and idProduct 0x%x\n", dev->descriptor.idVendor, dev->descriptor.idProduct);
|
|
||||||
if ((dev->descriptor.idProduct == ID_PRODUCT) && (dev->descriptor.idVendor == ID_VENDOR)){
|
|
||||||
printf("Device found -> open\n");
|
|
||||||
handle = usb_open(dev);
|
|
||||||
if (!handle) {
|
|
||||||
printf("invalid handle: %s\n", usb_strerror());
|
|
||||||
system("PAUSE");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
printf("Set configuration\n");
|
|
||||||
if (usb_set_configuration(handle, CONFIGURATION) < 0) {
|
|
||||||
printf("error on usb_set_configuration: %s\n", usb_strerror());
|
|
||||||
system("PAUSE");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
printf("Set altinterface (must failed)\n");
|
|
||||||
#ifdef SET_ALTINTERFACE_ONCE
|
|
||||||
if (first) {
|
|
||||||
first = false;
|
|
||||||
#endif
|
|
||||||
if (usb_set_altinterface(handle, ALTINTERFACE) < 0){
|
|
||||||
printf("usb_set_altinterface failed: %s\n", usb_strerror());
|
|
||||||
}
|
|
||||||
#ifdef SET_ALTINTERFACE_ONCE
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
printf("w=write, r=read, x=exit, t=write+read, u=write+read(2), l=r/w loop, z=reset and open\n");
|
|
||||||
|
|
||||||
while (run) {
|
|
||||||
scanf("%s", data);
|
|
||||||
|
|
||||||
switch (data[0]) {
|
|
||||||
case 'w': // write
|
|
||||||
write(handle);
|
|
||||||
break;
|
|
||||||
case 'r': // read
|
|
||||||
read(handle);
|
|
||||||
break;
|
|
||||||
case 'x': // exit
|
|
||||||
run = false;
|
|
||||||
break;
|
|
||||||
case 't': // write + read
|
|
||||||
if (write(handle)) {
|
|
||||||
read(handle);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 'u': // write + read
|
|
||||||
readWrite(handle);
|
|
||||||
break;
|
|
||||||
case 'l': // loop
|
|
||||||
readWriteLoop(handle);
|
|
||||||
break;
|
|
||||||
case 's': // reset first flag (set_altinterface())
|
|
||||||
first = true;
|
|
||||||
break;
|
|
||||||
case 'z': // reset and open
|
|
||||||
usb_reset(handle);
|
|
||||||
handle = usb_open(dev);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
printf("\ndone\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
free(data);
|
|
||||||
system("PAUSE");
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
@@ -1,98 +0,0 @@
|
|||||||
<?xml version="1.0"?>
|
|
||||||
<!-- ======================================================================
|
|
||||||
|
|
||||||
Build file for LibusbJava Shared Library
|
|
||||||
|
|
||||||
REQUIREMENTS:
|
|
||||||
winres (only on windows)
|
|
||||||
g++
|
|
||||||
|
|
||||||
http://libusbJava.sourceforge.net
|
|
||||||
====================================================================== -->
|
|
||||||
<project name="LibusbJava" basedir=".">
|
|
||||||
<description>
|
|
||||||
Build file for LibusbJava Shared Library
|
|
||||||
</description>
|
|
||||||
|
|
||||||
<property file="project.properties" />
|
|
||||||
<property file="version.properties" />
|
|
||||||
<property name="version.win.rc" value="${version.major},${version.minor},${version.micro},${version.nano}" />
|
|
||||||
<property name="version.win.str" value="${version.major}.${version.minor}.${version.micro}.${version.nano}" />
|
|
||||||
<property name="version.linux" value="${version.major}.${version.minor}.${version.micro}" />
|
|
||||||
|
|
||||||
<patternset id="buildfiles">
|
|
||||||
<include name="**/*.o" />
|
|
||||||
<include name="**/*.dll" />
|
|
||||||
<include name="**/*.so.*" />
|
|
||||||
</patternset>
|
|
||||||
|
|
||||||
<target name="clean" description="--> Clean build files">
|
|
||||||
<delete>
|
|
||||||
<fileset dir=".">
|
|
||||||
<patternset refid="buildfiles" />
|
|
||||||
</fileset>
|
|
||||||
</delete>
|
|
||||||
</target>
|
|
||||||
|
|
||||||
<target name="windows" description="--> Build ${build.shlib.win.shlibname}">
|
|
||||||
<!-- The RC_VERSION_STR string is not recognized by windres as command line argument.
|
|
||||||
I think this is a bug. The only (nasty) workaround I found is to write it directly to the file. -->
|
|
||||||
<!--
|
|
||||||
<exec dir="." executable="${build.win.windres}">
|
|
||||||
<arg value="-o${build.win.resource.obj}" />
|
|
||||||
<arg value="${build.win.resource.rc}" />
|
|
||||||
<arg value="-DRC_VERSION=${version.rc}" />
|
|
||||||
<arg value="-DRC_VERSION_STR='\"${version.str}\"'" />
|
|
||||||
</exec>
|
|
||||||
-->
|
|
||||||
<echo level="warning" message="WARNING: If the version has changed -> change the RC_VERSION_STR define in resource.rc to "${version.win.str}"" />
|
|
||||||
<exec dir="." executable="${build.win.windres}">
|
|
||||||
<arg value="-o${build.win.resource.obj}" />
|
|
||||||
<arg value="${build.win.resource.rc}" />
|
|
||||||
<arg value="-DRC_VERSION=${version.win.rc}" />
|
|
||||||
</exec>
|
|
||||||
<exec dir="." executable="${build.win.compiler}">
|
|
||||||
<arg value="-Wall" />
|
|
||||||
<arg value="-D_JNI_IMPLEMENTATION_" />
|
|
||||||
<arg value="-Wl,--kill-at" />
|
|
||||||
<arg value="-mwindows" />
|
|
||||||
<arg value="-shared" />
|
|
||||||
<arg value="-I${basedir}" />
|
|
||||||
<arg value="${build.shlib.srcname}" />
|
|
||||||
<arg value="-o${build.shlib.win.shlibname}" />
|
|
||||||
<arg value="${build.win.resource.obj}" />
|
|
||||||
<arg value="${build.lib.libusb}" />
|
|
||||||
</exec>
|
|
||||||
</target>
|
|
||||||
|
|
||||||
<target name="linux" depends="clean" description="--> Build ${build.shlib.linux.shlibname}">
|
|
||||||
<exec dir="." executable="${build.linux.compiler}">
|
|
||||||
<arg value="-shared" />
|
|
||||||
<arg value="-fPIC" />
|
|
||||||
<arg value="-Wl,-soname,${build.shlib.linux.shlibname}" />
|
|
||||||
<arg value="-I${build.linux.includes}" />
|
|
||||||
<arg value="-I${build.linux.includes2}" />
|
|
||||||
<arg value="-I${build.linux.includes3}" />
|
|
||||||
<arg value="${build.shlib.srcname}" />
|
|
||||||
<arg value="-o${build.shlib.linux.shlibname}.${version.linux}" />
|
|
||||||
<arg value="${build.linux.includes}/${build.linux.lib.libusb}" />
|
|
||||||
<arg value="${build.linux.includes}/${build.linux.lib.libusbpp}" />
|
|
||||||
</exec>
|
|
||||||
</target>
|
|
||||||
|
|
||||||
<target name="mac" depends="clean" description="--> Build ${build.shlib.mac.shlibname}">
|
|
||||||
<exec dir="." executable="${build.mac.compiler}">
|
|
||||||
<!-- arguments to pass to gcc -->
|
|
||||||
<arg value="-v" />
|
|
||||||
<arg value="-dynamiclib" />
|
|
||||||
<arg line="-I ${build.mac.jni}" />
|
|
||||||
<arg value="${build.shlib.srcname}" />
|
|
||||||
<arg line="-o ${build.shlib.mac.shlibname}" />
|
|
||||||
<arg line="-current_version ${version.mac}" />
|
|
||||||
<arg line="-l ${build.mac.stdclib}" />
|
|
||||||
<arg value="${build.mac.includes}/${build.mac.lib.libusb}" />
|
|
||||||
<arg value="${build.mac.includes}/${build.mac.lib.libusbpp}" />
|
|
||||||
</exec>
|
|
||||||
</target>
|
|
||||||
|
|
||||||
</project>
|
|
||||||
@@ -1,35 +0,0 @@
|
|||||||
#include <winver.h>
|
|
||||||
|
|
||||||
#define RT_MANIFEST 24
|
|
||||||
#define ID_MANIFEST 1
|
|
||||||
|
|
||||||
VS_VERSION_INFO VERSIONINFO
|
|
||||||
FILEVERSION RC_VERSION
|
|
||||||
PRODUCTVERSION RC_VERSION
|
|
||||||
FILEFLAGSMASK 0x3FL
|
|
||||||
FILEFLAGS 0x0L
|
|
||||||
FILEOS VOS_NT_WINDOWS32
|
|
||||||
FILETYPE RC_FILE_TYPE
|
|
||||||
FILESUBTYPE RC_FILE_SUB_TYPE
|
|
||||||
BEGIN
|
|
||||||
BLOCK "StringFileInfo"
|
|
||||||
BEGIN
|
|
||||||
BLOCK "040904b0"
|
|
||||||
BEGIN
|
|
||||||
VALUE "CompanyName", "http://libusbjava.sourceforge.net"
|
|
||||||
VALUE "FileDescription", RC_PRODUCT_STR
|
|
||||||
VALUE "FileVersion", RC_VERSION_STR
|
|
||||||
VALUE "InternalName", RC_FILE_NAME_STR
|
|
||||||
VALUE "LegalCopyright", "2008 spandi@users.sourceforge.net"
|
|
||||||
VALUE "OriginalFilename",RC_FILE_NAME_STR
|
|
||||||
VALUE "ProductName", RC_PRODUCT_STR
|
|
||||||
VALUE "ProductVersion", RC_VERSION_STR
|
|
||||||
END
|
|
||||||
END
|
|
||||||
|
|
||||||
BLOCK "VarFileInfo"
|
|
||||||
BEGIN
|
|
||||||
VALUE "Translation", 0x409, 1200
|
|
||||||
END
|
|
||||||
END
|
|
||||||
|
|
||||||
@@ -1,23 +0,0 @@
|
|||||||
// copied from libusb-win32.sourceforge.net
|
|
||||||
#ifndef __ERROR_H__
|
|
||||||
#define __ERROR_H__
|
|
||||||
|
|
||||||
/* Connection timed out */
|
|
||||||
#define ETIMEDOUT 116
|
|
||||||
|
|
||||||
typedef enum {
|
|
||||||
USB_ERROR_TYPE_NONE = 0,
|
|
||||||
USB_ERROR_TYPE_STRING,
|
|
||||||
USB_ERROR_TYPE_ERRNO,
|
|
||||||
} usb_error_type_t;
|
|
||||||
|
|
||||||
|
|
||||||
void usb_error(char *format, ...);
|
|
||||||
void usb_message(char *format, ...);
|
|
||||||
const char *usb_win_error_to_string(void);
|
|
||||||
int usb_win_error_to_errno(void);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endif /* _ERROR_H_ */
|
|
||||||
|
|
||||||
Binary file not shown.
@@ -1,54 +0,0 @@
|
|||||||
############################
|
|
||||||
# common build properties #
|
|
||||||
############################
|
|
||||||
# folders
|
|
||||||
build.dir.src=src
|
|
||||||
build.dir.bin=bin
|
|
||||||
|
|
||||||
# filenames
|
|
||||||
build.lib.libusb=libusb.a
|
|
||||||
build.lib.libusbpp=libusbpp.a
|
|
||||||
build.linux.lib.libusb=libusb.so
|
|
||||||
build.linux.lib.libusbpp=libusbpp.so
|
|
||||||
build.mac.lib.libusb=libusb.dylib
|
|
||||||
build.mac.lib.libusbpp=libusbpp.dylib
|
|
||||||
build.shlib.srcname=LibusbJava.cpp
|
|
||||||
build.shlib.win.shlibname=LibusbJava.dll
|
|
||||||
build.shlib.linux.shlibname=libusbJava.so
|
|
||||||
build.shlib.mac.shlibname=libusbJava.jnilib
|
|
||||||
|
|
||||||
build.test.srcname=LibusbTest
|
|
||||||
build.test.execname=LibusbTest
|
|
||||||
|
|
||||||
#####################################
|
|
||||||
# Windows specific build properties #
|
|
||||||
#####################################
|
|
||||||
build.win.compiler=g++
|
|
||||||
build.win.windres=windres
|
|
||||||
build.win.resource.rc=resource.rc
|
|
||||||
build.win.resource.obj=resource.o
|
|
||||||
|
|
||||||
####################################
|
|
||||||
# Linux specific build properties #
|
|
||||||
####################################
|
|
||||||
build.linux.compiler=g++
|
|
||||||
build.linux.includes=/usr/lib
|
|
||||||
build.linux.includes2=${build.linux.includes}
|
|
||||||
build.linux.includes3=${build.linux.includes}
|
|
||||||
|
|
||||||
## set the following properties if you require additional include paths
|
|
||||||
#
|
|
||||||
## e.g. on ubuntu linux (with gcj)
|
|
||||||
# build.linux.includes2=/usr/lib/jvm/java-1.4.2.gcj-4.1-1.4.2.0/include
|
|
||||||
#
|
|
||||||
## e.g. on ubuntu linux (with jdk 6) use
|
|
||||||
# build.linux.includes2=/usr/lib/jvm/java-6-sun-1.6.0.00/include
|
|
||||||
# build.linux.includes3=${build.linux.includes2}/linux
|
|
||||||
|
|
||||||
####################################
|
|
||||||
# Mac specific build properties #
|
|
||||||
####################################
|
|
||||||
build.mac.compiler=gcc
|
|
||||||
build.mac.jni=/System/Library/Frameworks/JavaVM.framework/Headers/
|
|
||||||
build.mac.includes=/usr/local/lib
|
|
||||||
build.mac.stdclib=stdc++
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
#define RC_FILE_TYPE VFT_DLL
|
|
||||||
#define RC_FILE_SUB_TYPE VFT2_UNKNOWN
|
|
||||||
#define RC_PRODUCT_STR "Java LibUsb-Win32 wrapper - DLL"
|
|
||||||
#define RC_FILE_NAME_STR "LibusbJava.dll"
|
|
||||||
#define RC_VERSION_STR "0.2.4.0"
|
|
||||||
|
|
||||||
#include "common.rc"
|
|
||||||
394
LibusbJava/usb.h
394
LibusbJava/usb.h
@@ -1,394 +0,0 @@
|
|||||||
#ifndef __USB_H__
|
|
||||||
#define __USB_H__
|
|
||||||
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <windows.h>
|
|
||||||
|
|
||||||
/*
|
|
||||||
* 'interface' is defined somewhere in the Windows header files. This macro
|
|
||||||
* is deleted here to avoid conflicts and compile errors.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifdef interface
|
|
||||||
#undef interface
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
|
||||||
* PATH_MAX from limits.h can't be used on Windows if the dll and
|
|
||||||
* import libraries are build/used by different compilers
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define LIBUSB_PATH_MAX 512
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* USB spec information
|
|
||||||
*
|
|
||||||
* This is all stuff grabbed from various USB specs and is pretty much
|
|
||||||
* not subject to change
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Device and/or Interface Class codes
|
|
||||||
*/
|
|
||||||
#define USB_CLASS_PER_INTERFACE 0 /* for DeviceClass */
|
|
||||||
#define USB_CLASS_AUDIO 1
|
|
||||||
#define USB_CLASS_COMM 2
|
|
||||||
#define USB_CLASS_HID 3
|
|
||||||
#define USB_CLASS_PRINTER 7
|
|
||||||
#define USB_CLASS_MASS_STORAGE 8
|
|
||||||
#define USB_CLASS_HUB 9
|
|
||||||
#define USB_CLASS_DATA 10
|
|
||||||
#define USB_CLASS_VENDOR_SPEC 0xff
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Descriptor types
|
|
||||||
*/
|
|
||||||
#define USB_DT_DEVICE 0x01
|
|
||||||
#define USB_DT_CONFIG 0x02
|
|
||||||
#define USB_DT_STRING 0x03
|
|
||||||
#define USB_DT_INTERFACE 0x04
|
|
||||||
#define USB_DT_ENDPOINT 0x05
|
|
||||||
|
|
||||||
#define USB_DT_HID 0x21
|
|
||||||
#define USB_DT_REPORT 0x22
|
|
||||||
#define USB_DT_PHYSICAL 0x23
|
|
||||||
#define USB_DT_HUB 0x29
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Descriptor sizes per descriptor type
|
|
||||||
*/
|
|
||||||
#define USB_DT_DEVICE_SIZE 18
|
|
||||||
#define USB_DT_CONFIG_SIZE 9
|
|
||||||
#define USB_DT_INTERFACE_SIZE 9
|
|
||||||
#define USB_DT_ENDPOINT_SIZE 7
|
|
||||||
#define USB_DT_ENDPOINT_AUDIO_SIZE 9 /* Audio extension */
|
|
||||||
#define USB_DT_HUB_NONVAR_SIZE 7
|
|
||||||
|
|
||||||
|
|
||||||
/* ensure byte-packed structures */
|
|
||||||
#include <pshpack1.h>
|
|
||||||
|
|
||||||
|
|
||||||
/* All standard descriptors have these 2 fields in common */
|
|
||||||
struct usb_descriptor_header {
|
|
||||||
unsigned char bLength;
|
|
||||||
unsigned char bDescriptorType;
|
|
||||||
};
|
|
||||||
|
|
||||||
/* String descriptor */
|
|
||||||
struct usb_string_descriptor {
|
|
||||||
unsigned char bLength;
|
|
||||||
unsigned char bDescriptorType;
|
|
||||||
unsigned short wData[1];
|
|
||||||
};
|
|
||||||
|
|
||||||
/* HID descriptor */
|
|
||||||
struct usb_hid_descriptor {
|
|
||||||
unsigned char bLength;
|
|
||||||
unsigned char bDescriptorType;
|
|
||||||
unsigned short bcdHID;
|
|
||||||
unsigned char bCountryCode;
|
|
||||||
unsigned char bNumDescriptors;
|
|
||||||
};
|
|
||||||
|
|
||||||
/* Endpoint descriptor */
|
|
||||||
#define USB_MAXENDPOINTS 32
|
|
||||||
struct usb_endpoint_descriptor {
|
|
||||||
unsigned char bLength;
|
|
||||||
unsigned char bDescriptorType;
|
|
||||||
unsigned char bEndpointAddress;
|
|
||||||
unsigned char bmAttributes;
|
|
||||||
unsigned short wMaxPacketSize;
|
|
||||||
unsigned char bInterval;
|
|
||||||
unsigned char bRefresh;
|
|
||||||
unsigned char bSynchAddress;
|
|
||||||
|
|
||||||
unsigned char *extra; /* Extra descriptors */
|
|
||||||
int extralen;
|
|
||||||
};
|
|
||||||
|
|
||||||
#define USB_ENDPOINT_ADDRESS_MASK 0x0f /* in bEndpointAddress */
|
|
||||||
#define USB_ENDPOINT_DIR_MASK 0x80
|
|
||||||
|
|
||||||
#define USB_ENDPOINT_TYPE_MASK 0x03 /* in bmAttributes */
|
|
||||||
#define USB_ENDPOINT_TYPE_CONTROL 0
|
|
||||||
#define USB_ENDPOINT_TYPE_ISOCHRONOUS 1
|
|
||||||
#define USB_ENDPOINT_TYPE_BULK 2
|
|
||||||
#define USB_ENDPOINT_TYPE_INTERRUPT 3
|
|
||||||
|
|
||||||
/* Interface descriptor */
|
|
||||||
#define USB_MAXINTERFACES 32
|
|
||||||
struct usb_interface_descriptor {
|
|
||||||
unsigned char bLength;
|
|
||||||
unsigned char bDescriptorType;
|
|
||||||
unsigned char bInterfaceNumber;
|
|
||||||
unsigned char bAlternateSetting;
|
|
||||||
unsigned char bNumEndpoints;
|
|
||||||
unsigned char bInterfaceClass;
|
|
||||||
unsigned char bInterfaceSubClass;
|
|
||||||
unsigned char bInterfaceProtocol;
|
|
||||||
unsigned char iInterface;
|
|
||||||
|
|
||||||
struct usb_endpoint_descriptor *endpoint;
|
|
||||||
|
|
||||||
unsigned char *extra; /* Extra descriptors */
|
|
||||||
int extralen;
|
|
||||||
};
|
|
||||||
|
|
||||||
#define USB_MAXALTSETTING 128 /* Hard limit */
|
|
||||||
|
|
||||||
struct usb_interface {
|
|
||||||
struct usb_interface_descriptor *altsetting;
|
|
||||||
|
|
||||||
int num_altsetting;
|
|
||||||
};
|
|
||||||
|
|
||||||
/* Configuration descriptor information.. */
|
|
||||||
#define USB_MAXCONFIG 8
|
|
||||||
struct usb_config_descriptor {
|
|
||||||
unsigned char bLength;
|
|
||||||
unsigned char bDescriptorType;
|
|
||||||
unsigned short wTotalLength;
|
|
||||||
unsigned char bNumInterfaces;
|
|
||||||
unsigned char bConfigurationValue;
|
|
||||||
unsigned char iConfiguration;
|
|
||||||
unsigned char bmAttributes;
|
|
||||||
unsigned char MaxPower;
|
|
||||||
|
|
||||||
struct usb_interface *interface;
|
|
||||||
|
|
||||||
unsigned char *extra; /* Extra descriptors */
|
|
||||||
int extralen;
|
|
||||||
};
|
|
||||||
|
|
||||||
/* Device descriptor */
|
|
||||||
struct usb_device_descriptor {
|
|
||||||
unsigned char bLength;
|
|
||||||
unsigned char bDescriptorType;
|
|
||||||
unsigned short bcdUSB;
|
|
||||||
unsigned char bDeviceClass;
|
|
||||||
unsigned char bDeviceSubClass;
|
|
||||||
unsigned char bDeviceProtocol;
|
|
||||||
unsigned char bMaxPacketSize0;
|
|
||||||
unsigned short idVendor;
|
|
||||||
unsigned short idProduct;
|
|
||||||
unsigned short bcdDevice;
|
|
||||||
unsigned char iManufacturer;
|
|
||||||
unsigned char iProduct;
|
|
||||||
unsigned char iSerialNumber;
|
|
||||||
unsigned char bNumConfigurations;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct usb_ctrl_setup {
|
|
||||||
unsigned char bRequestType;
|
|
||||||
unsigned char bRequest;
|
|
||||||
unsigned short wValue;
|
|
||||||
unsigned short wIndex;
|
|
||||||
unsigned short wLength;
|
|
||||||
};
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Standard requests
|
|
||||||
*/
|
|
||||||
#define USB_REQ_GET_STATUS 0x00
|
|
||||||
#define USB_REQ_CLEAR_FEATURE 0x01
|
|
||||||
/* 0x02 is reserved */
|
|
||||||
#define USB_REQ_SET_FEATURE 0x03
|
|
||||||
/* 0x04 is reserved */
|
|
||||||
#define USB_REQ_SET_ADDRESS 0x05
|
|
||||||
#define USB_REQ_GET_DESCRIPTOR 0x06
|
|
||||||
#define USB_REQ_SET_DESCRIPTOR 0x07
|
|
||||||
#define USB_REQ_GET_CONFIGURATION 0x08
|
|
||||||
#define USB_REQ_SET_CONFIGURATION 0x09
|
|
||||||
#define USB_REQ_GET_INTERFACE 0x0A
|
|
||||||
#define USB_REQ_SET_INTERFACE 0x0B
|
|
||||||
#define USB_REQ_SYNCH_FRAME 0x0C
|
|
||||||
|
|
||||||
#define USB_TYPE_STANDARD (0x00 << 5)
|
|
||||||
#define USB_TYPE_CLASS (0x01 << 5)
|
|
||||||
#define USB_TYPE_VENDOR (0x02 << 5)
|
|
||||||
#define USB_TYPE_RESERVED (0x03 << 5)
|
|
||||||
|
|
||||||
#define USB_RECIP_DEVICE 0x00
|
|
||||||
#define USB_RECIP_INTERFACE 0x01
|
|
||||||
#define USB_RECIP_ENDPOINT 0x02
|
|
||||||
#define USB_RECIP_OTHER 0x03
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Various libusb API related stuff
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define USB_ENDPOINT_IN 0x80
|
|
||||||
#define USB_ENDPOINT_OUT 0x00
|
|
||||||
|
|
||||||
/* Error codes */
|
|
||||||
#define USB_ERROR_BEGIN 500000
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This is supposed to look weird. This file is generated from autoconf
|
|
||||||
* and I didn't want to make this too complicated.
|
|
||||||
*/
|
|
||||||
#define USB_LE16_TO_CPU(x)
|
|
||||||
|
|
||||||
/* Data types */
|
|
||||||
/* struct usb_device; */
|
|
||||||
/* struct usb_bus; */
|
|
||||||
|
|
||||||
struct usb_device {
|
|
||||||
struct usb_device *next, *prev;
|
|
||||||
|
|
||||||
char filename[LIBUSB_PATH_MAX];
|
|
||||||
|
|
||||||
struct usb_bus *bus;
|
|
||||||
|
|
||||||
struct usb_device_descriptor descriptor;
|
|
||||||
struct usb_config_descriptor *config;
|
|
||||||
|
|
||||||
void *dev; /* Darwin support */
|
|
||||||
|
|
||||||
unsigned char devnum;
|
|
||||||
|
|
||||||
unsigned char num_children;
|
|
||||||
struct usb_device **children;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct usb_bus {
|
|
||||||
struct usb_bus *next, *prev;
|
|
||||||
|
|
||||||
char dirname[LIBUSB_PATH_MAX];
|
|
||||||
|
|
||||||
struct usb_device *devices;
|
|
||||||
unsigned long location;
|
|
||||||
|
|
||||||
struct usb_device *root_dev;
|
|
||||||
};
|
|
||||||
|
|
||||||
/* Version information, Windows specific */
|
|
||||||
struct usb_version {
|
|
||||||
struct {
|
|
||||||
int major;
|
|
||||||
int minor;
|
|
||||||
int micro;
|
|
||||||
int nano;
|
|
||||||
} dll;
|
|
||||||
struct {
|
|
||||||
int major;
|
|
||||||
int minor;
|
|
||||||
int micro;
|
|
||||||
int nano;
|
|
||||||
} driver;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
struct usb_dev_handle;
|
|
||||||
typedef struct usb_dev_handle usb_dev_handle;
|
|
||||||
|
|
||||||
/* Variables */
|
|
||||||
#ifndef __USB_C__
|
|
||||||
#define usb_busses usb_get_busses()
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#include <poppack.h>
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Function prototypes */
|
|
||||||
|
|
||||||
/* usb.c */
|
|
||||||
usb_dev_handle *usb_open(struct usb_device *dev);
|
|
||||||
int usb_close(usb_dev_handle *dev);
|
|
||||||
int usb_get_string(usb_dev_handle *dev, int index, int langid, char *buf,
|
|
||||||
size_t buflen);
|
|
||||||
int usb_get_string_simple(usb_dev_handle *dev, int index, char *buf,
|
|
||||||
size_t buflen);
|
|
||||||
|
|
||||||
/* descriptors.c */
|
|
||||||
int usb_get_descriptor_by_endpoint(usb_dev_handle *udev, int ep,
|
|
||||||
unsigned char type, unsigned char index,
|
|
||||||
void *buf, int size);
|
|
||||||
int usb_get_descriptor(usb_dev_handle *udev, unsigned char type,
|
|
||||||
unsigned char index, void *buf, int size);
|
|
||||||
|
|
||||||
/* <arch>.c */
|
|
||||||
int usb_bulk_write(usb_dev_handle *dev, int ep, char *bytes, int size,
|
|
||||||
int timeout);
|
|
||||||
int usb_bulk_read(usb_dev_handle *dev, int ep, char *bytes, int size,
|
|
||||||
int timeout);
|
|
||||||
int usb_interrupt_write(usb_dev_handle *dev, int ep, char *bytes, int size,
|
|
||||||
int timeout);
|
|
||||||
int usb_interrupt_read(usb_dev_handle *dev, int ep, char *bytes, int size,
|
|
||||||
int timeout);
|
|
||||||
int usb_control_msg(usb_dev_handle *dev, int requesttype, int request,
|
|
||||||
int value, int index, char *bytes, int size,
|
|
||||||
int timeout);
|
|
||||||
int usb_set_configuration(usb_dev_handle *dev, int configuration);
|
|
||||||
int usb_claim_interface(usb_dev_handle *dev, int interface);
|
|
||||||
int usb_release_interface(usb_dev_handle *dev, int interface);
|
|
||||||
int usb_set_altinterface(usb_dev_handle *dev, int alternate);
|
|
||||||
int usb_resetep(usb_dev_handle *dev, unsigned int ep);
|
|
||||||
int usb_clear_halt(usb_dev_handle *dev, unsigned int ep);
|
|
||||||
int usb_reset(usb_dev_handle *dev);
|
|
||||||
|
|
||||||
char *usb_strerror(void);
|
|
||||||
|
|
||||||
void usb_init(void);
|
|
||||||
void usb_set_debug(int level);
|
|
||||||
int usb_find_busses(void);
|
|
||||||
int usb_find_devices(void);
|
|
||||||
struct usb_device *usb_device(usb_dev_handle *dev);
|
|
||||||
struct usb_bus *usb_get_busses(void);
|
|
||||||
|
|
||||||
|
|
||||||
/* Windows specific functions */
|
|
||||||
|
|
||||||
#define LIBUSB_HAS_INSTALL_SERVICE_NP 1
|
|
||||||
int usb_install_service_np(void);
|
|
||||||
void CALLBACK usb_install_service_np_rundll(HWND wnd, HINSTANCE instance,
|
|
||||||
LPSTR cmd_line, int cmd_show);
|
|
||||||
|
|
||||||
#define LIBUSB_HAS_UNINSTALL_SERVICE_NP 1
|
|
||||||
int usb_uninstall_service_np(void);
|
|
||||||
void CALLBACK usb_uninstall_service_np_rundll(HWND wnd, HINSTANCE instance,
|
|
||||||
LPSTR cmd_line, int cmd_show);
|
|
||||||
|
|
||||||
#define LIBUSB_HAS_INSTALL_DRIVER_NP 1
|
|
||||||
int usb_install_driver_np(const char *inf_file);
|
|
||||||
void CALLBACK usb_install_driver_np_rundll(HWND wnd, HINSTANCE instance,
|
|
||||||
LPSTR cmd_line, int cmd_show);
|
|
||||||
|
|
||||||
#define LIBUSB_HAS_TOUCH_INF_FILE_NP 1
|
|
||||||
int usb_touch_inf_file_np(const char *inf_file);
|
|
||||||
void CALLBACK usb_touch_inf_file_np_rundll(HWND wnd, HINSTANCE instance,
|
|
||||||
LPSTR cmd_line, int cmd_show);
|
|
||||||
|
|
||||||
#define LIBUSB_HAS_INSTALL_NEEDS_RESTART_NP 1
|
|
||||||
int usb_install_needs_restart_np(void);
|
|
||||||
|
|
||||||
const struct usb_version *usb_get_version(void);
|
|
||||||
|
|
||||||
int usb_isochronous_setup_async(usb_dev_handle *dev, void **context,
|
|
||||||
unsigned char ep, int pktsize);
|
|
||||||
int usb_bulk_setup_async(usb_dev_handle *dev, void **context,
|
|
||||||
unsigned char ep);
|
|
||||||
int usb_interrupt_setup_async(usb_dev_handle *dev, void **context,
|
|
||||||
unsigned char ep);
|
|
||||||
|
|
||||||
int usb_submit_async(void *context, char *bytes, int size);
|
|
||||||
int usb_reap_async(void *context, int timeout);
|
|
||||||
int usb_reap_async_nocancel(void *context, int timeout);
|
|
||||||
int usb_cancel_async(void *context);
|
|
||||||
int usb_free_async(void **context);
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif /* __USB_H__ */
|
|
||||||
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
# NOTE: if the version is changed -> change the define in resource.rc
|
|
||||||
version.major=0
|
|
||||||
version.minor=2
|
|
||||||
version.micro=4
|
|
||||||
version.nano=0
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<classpath>
|
|
||||||
<classpathentry kind="src" path="src"/>
|
|
||||||
<classpathentry kind="src" path="test"/>
|
|
||||||
<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
|
|
||||||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
|
|
||||||
<classpathentry kind="output" path="bin"/>
|
|
||||||
</classpath>
|
|
||||||
@@ -1,30 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<projectDescription>
|
|
||||||
<name>ch.ntb.usb</name>
|
|
||||||
<comment></comment>
|
|
||||||
<projects>
|
|
||||||
</projects>
|
|
||||||
<buildSpec>
|
|
||||||
<buildCommand>
|
|
||||||
<name>org.eclipse.jdt.core.javabuilder</name>
|
|
||||||
<arguments>
|
|
||||||
</arguments>
|
|
||||||
</buildCommand>
|
|
||||||
<buildCommand>
|
|
||||||
<name>org.eclipse.pde.ManifestBuilder</name>
|
|
||||||
<arguments>
|
|
||||||
</arguments>
|
|
||||||
</buildCommand>
|
|
||||||
<buildCommand>
|
|
||||||
<name>org.eclipse.pde.SchemaBuilder</name>
|
|
||||||
<arguments>
|
|
||||||
</arguments>
|
|
||||||
</buildCommand>
|
|
||||||
</buildSpec>
|
|
||||||
<natures>
|
|
||||||
<nature>org.eclipse.jem.workbench.JavaEMFNature</nature>
|
|
||||||
<nature>org.eclipse.jdt.core.javanature</nature>
|
|
||||||
<nature>org.eclipse.jem.beaninfo.BeanInfoNature</nature>
|
|
||||||
<nature>org.eclipse.pde.PluginNature</nature>
|
|
||||||
</natures>
|
|
||||||
</projectDescription>
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
#Thu Oct 06 09:12:32 CEST 2005
|
|
||||||
eclipse.preferences.version=1
|
|
||||||
internal.default.compliance=default
|
|
||||||
504
java/LGPL.txt
504
java/LGPL.txt
@@ -1,504 +0,0 @@
|
|||||||
GNU LESSER GENERAL PUBLIC LICENSE
|
|
||||||
Version 2.1, February 1999
|
|
||||||
|
|
||||||
Copyright (C) 1991, 1999 Free Software Foundation, Inc.
|
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|
||||||
Everyone is permitted to copy and distribute verbatim copies
|
|
||||||
of this license document, but changing it is not allowed.
|
|
||||||
|
|
||||||
[This is the first released version of the Lesser GPL. It also counts
|
|
||||||
as the successor of the GNU Library Public License, version 2, hence
|
|
||||||
the version number 2.1.]
|
|
||||||
|
|
||||||
Preamble
|
|
||||||
|
|
||||||
The licenses for most software are designed to take away your
|
|
||||||
freedom to share and change it. By contrast, the GNU General Public
|
|
||||||
Licenses are intended to guarantee your freedom to share and change
|
|
||||||
free software--to make sure the software is free for all its users.
|
|
||||||
|
|
||||||
This license, the Lesser General Public License, applies to some
|
|
||||||
specially designated software packages--typically libraries--of the
|
|
||||||
Free Software Foundation and other authors who decide to use it. You
|
|
||||||
can use it too, but we suggest you first think carefully about whether
|
|
||||||
this license or the ordinary General Public License is the better
|
|
||||||
strategy to use in any particular case, based on the explanations below.
|
|
||||||
|
|
||||||
When we speak of free software, we are referring to freedom of use,
|
|
||||||
not price. Our General Public Licenses are designed to make sure that
|
|
||||||
you have the freedom to distribute copies of free software (and charge
|
|
||||||
for this service if you wish); that you receive source code or can get
|
|
||||||
it if you want it; that you can change the software and use pieces of
|
|
||||||
it in new free programs; and that you are informed that you can do
|
|
||||||
these things.
|
|
||||||
|
|
||||||
To protect your rights, we need to make restrictions that forbid
|
|
||||||
distributors to deny you these rights or to ask you to surrender these
|
|
||||||
rights. These restrictions translate to certain responsibilities for
|
|
||||||
you if you distribute copies of the library or if you modify it.
|
|
||||||
|
|
||||||
For example, if you distribute copies of the library, whether gratis
|
|
||||||
or for a fee, you must give the recipients all the rights that we gave
|
|
||||||
you. You must make sure that they, too, receive or can get the source
|
|
||||||
code. If you link other code with the library, you must provide
|
|
||||||
complete object files to the recipients, so that they can relink them
|
|
||||||
with the library after making changes to the library and recompiling
|
|
||||||
it. And you must show them these terms so they know their rights.
|
|
||||||
|
|
||||||
We protect your rights with a two-step method: (1) we copyright the
|
|
||||||
library, and (2) we offer you this license, which gives you legal
|
|
||||||
permission to copy, distribute and/or modify the library.
|
|
||||||
|
|
||||||
To protect each distributor, we want to make it very clear that
|
|
||||||
there is no warranty for the free library. Also, if the library is
|
|
||||||
modified by someone else and passed on, the recipients should know
|
|
||||||
that what they have is not the original version, so that the original
|
|
||||||
author's reputation will not be affected by problems that might be
|
|
||||||
introduced by others.
|
|
||||||
|
|
||||||
Finally, software patents pose a constant threat to the existence of
|
|
||||||
any free program. We wish to make sure that a company cannot
|
|
||||||
effectively restrict the users of a free program by obtaining a
|
|
||||||
restrictive license from a patent holder. Therefore, we insist that
|
|
||||||
any patent license obtained for a version of the library must be
|
|
||||||
consistent with the full freedom of use specified in this license.
|
|
||||||
|
|
||||||
Most GNU software, including some libraries, is covered by the
|
|
||||||
ordinary GNU General Public License. This license, the GNU Lesser
|
|
||||||
General Public License, applies to certain designated libraries, and
|
|
||||||
is quite different from the ordinary General Public License. We use
|
|
||||||
this license for certain libraries in order to permit linking those
|
|
||||||
libraries into non-free programs.
|
|
||||||
|
|
||||||
When a program is linked with a library, whether statically or using
|
|
||||||
a shared library, the combination of the two is legally speaking a
|
|
||||||
combined work, a derivative of the original library. The ordinary
|
|
||||||
General Public License therefore permits such linking only if the
|
|
||||||
entire combination fits its criteria of freedom. The Lesser General
|
|
||||||
Public License permits more lax criteria for linking other code with
|
|
||||||
the library.
|
|
||||||
|
|
||||||
We call this license the "Lesser" General Public License because it
|
|
||||||
does Less to protect the user's freedom than the ordinary General
|
|
||||||
Public License. It also provides other free software developers Less
|
|
||||||
of an advantage over competing non-free programs. These disadvantages
|
|
||||||
are the reason we use the ordinary General Public License for many
|
|
||||||
libraries. However, the Lesser license provides advantages in certain
|
|
||||||
special circumstances.
|
|
||||||
|
|
||||||
For example, on rare occasions, there may be a special need to
|
|
||||||
encourage the widest possible use of a certain library, so that it becomes
|
|
||||||
a de-facto standard. To achieve this, non-free programs must be
|
|
||||||
allowed to use the library. A more frequent case is that a free
|
|
||||||
library does the same job as widely used non-free libraries. In this
|
|
||||||
case, there is little to gain by limiting the free library to free
|
|
||||||
software only, so we use the Lesser General Public License.
|
|
||||||
|
|
||||||
In other cases, permission to use a particular library in non-free
|
|
||||||
programs enables a greater number of people to use a large body of
|
|
||||||
free software. For example, permission to use the GNU C Library in
|
|
||||||
non-free programs enables many more people to use the whole GNU
|
|
||||||
operating system, as well as its variant, the GNU/Linux operating
|
|
||||||
system.
|
|
||||||
|
|
||||||
Although the Lesser General Public License is Less protective of the
|
|
||||||
users' freedom, it does ensure that the user of a program that is
|
|
||||||
linked with the Library has the freedom and the wherewithal to run
|
|
||||||
that program using a modified version of the Library.
|
|
||||||
|
|
||||||
The precise terms and conditions for copying, distribution and
|
|
||||||
modification follow. Pay close attention to the difference between a
|
|
||||||
"work based on the library" and a "work that uses the library". The
|
|
||||||
former contains code derived from the library, whereas the latter must
|
|
||||||
be combined with the library in order to run.
|
|
||||||
|
|
||||||
GNU LESSER GENERAL PUBLIC LICENSE
|
|
||||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
|
||||||
|
|
||||||
0. This License Agreement applies to any software library or other
|
|
||||||
program which contains a notice placed by the copyright holder or
|
|
||||||
other authorized party saying it may be distributed under the terms of
|
|
||||||
this Lesser General Public License (also called "this License").
|
|
||||||
Each licensee is addressed as "you".
|
|
||||||
|
|
||||||
A "library" means a collection of software functions and/or data
|
|
||||||
prepared so as to be conveniently linked with application programs
|
|
||||||
(which use some of those functions and data) to form executables.
|
|
||||||
|
|
||||||
The "Library", below, refers to any such software library or work
|
|
||||||
which has been distributed under these terms. A "work based on the
|
|
||||||
Library" means either the Library or any derivative work under
|
|
||||||
copyright law: that is to say, a work containing the Library or a
|
|
||||||
portion of it, either verbatim or with modifications and/or translated
|
|
||||||
straightforwardly into another language. (Hereinafter, translation is
|
|
||||||
included without limitation in the term "modification".)
|
|
||||||
|
|
||||||
"Source code" for a work means the preferred form of the work for
|
|
||||||
making modifications to it. For a library, complete source code means
|
|
||||||
all the source code for all modules it contains, plus any associated
|
|
||||||
interface definition files, plus the scripts used to control compilation
|
|
||||||
and installation of the library.
|
|
||||||
|
|
||||||
Activities other than copying, distribution and modification are not
|
|
||||||
covered by this License; they are outside its scope. The act of
|
|
||||||
running a program using the Library is not restricted, and output from
|
|
||||||
such a program is covered only if its contents constitute a work based
|
|
||||||
on the Library (independent of the use of the Library in a tool for
|
|
||||||
writing it). Whether that is true depends on what the Library does
|
|
||||||
and what the program that uses the Library does.
|
|
||||||
|
|
||||||
1. You may copy and distribute verbatim copies of the Library's
|
|
||||||
complete source code as you receive it, in any medium, provided that
|
|
||||||
you conspicuously and appropriately publish on each copy an
|
|
||||||
appropriate copyright notice and disclaimer of warranty; keep intact
|
|
||||||
all the notices that refer to this License and to the absence of any
|
|
||||||
warranty; and distribute a copy of this License along with the
|
|
||||||
Library.
|
|
||||||
|
|
||||||
You may charge a fee for the physical act of transferring a copy,
|
|
||||||
and you may at your option offer warranty protection in exchange for a
|
|
||||||
fee.
|
|
||||||
|
|
||||||
2. You may modify your copy or copies of the Library or any portion
|
|
||||||
of it, thus forming a work based on the Library, and copy and
|
|
||||||
distribute such modifications or work under the terms of Section 1
|
|
||||||
above, provided that you also meet all of these conditions:
|
|
||||||
|
|
||||||
a) The modified work must itself be a software library.
|
|
||||||
|
|
||||||
b) You must cause the files modified to carry prominent notices
|
|
||||||
stating that you changed the files and the date of any change.
|
|
||||||
|
|
||||||
c) You must cause the whole of the work to be licensed at no
|
|
||||||
charge to all third parties under the terms of this License.
|
|
||||||
|
|
||||||
d) If a facility in the modified Library refers to a function or a
|
|
||||||
table of data to be supplied by an application program that uses
|
|
||||||
the facility, other than as an argument passed when the facility
|
|
||||||
is invoked, then you must make a good faith effort to ensure that,
|
|
||||||
in the event an application does not supply such function or
|
|
||||||
table, the facility still operates, and performs whatever part of
|
|
||||||
its purpose remains meaningful.
|
|
||||||
|
|
||||||
(For example, a function in a library to compute square roots has
|
|
||||||
a purpose that is entirely well-defined independent of the
|
|
||||||
application. Therefore, Subsection 2d requires that any
|
|
||||||
application-supplied function or table used by this function must
|
|
||||||
be optional: if the application does not supply it, the square
|
|
||||||
root function must still compute square roots.)
|
|
||||||
|
|
||||||
These requirements apply to the modified work as a whole. If
|
|
||||||
identifiable sections of that work are not derived from the Library,
|
|
||||||
and can be reasonably considered independent and separate works in
|
|
||||||
themselves, then this License, and its terms, do not apply to those
|
|
||||||
sections when you distribute them as separate works. But when you
|
|
||||||
distribute the same sections as part of a whole which is a work based
|
|
||||||
on the Library, the distribution of the whole must be on the terms of
|
|
||||||
this License, whose permissions for other licensees extend to the
|
|
||||||
entire whole, and thus to each and every part regardless of who wrote
|
|
||||||
it.
|
|
||||||
|
|
||||||
Thus, it is not the intent of this section to claim rights or contest
|
|
||||||
your rights to work written entirely by you; rather, the intent is to
|
|
||||||
exercise the right to control the distribution of derivative or
|
|
||||||
collective works based on the Library.
|
|
||||||
|
|
||||||
In addition, mere aggregation of another work not based on the Library
|
|
||||||
with the Library (or with a work based on the Library) on a volume of
|
|
||||||
a storage or distribution medium does not bring the other work under
|
|
||||||
the scope of this License.
|
|
||||||
|
|
||||||
3. You may opt to apply the terms of the ordinary GNU General Public
|
|
||||||
License instead of this License to a given copy of the Library. To do
|
|
||||||
this, you must alter all the notices that refer to this License, so
|
|
||||||
that they refer to the ordinary GNU General Public License, version 2,
|
|
||||||
instead of to this License. (If a newer version than version 2 of the
|
|
||||||
ordinary GNU General Public License has appeared, then you can specify
|
|
||||||
that version instead if you wish.) Do not make any other change in
|
|
||||||
these notices.
|
|
||||||
|
|
||||||
Once this change is made in a given copy, it is irreversible for
|
|
||||||
that copy, so the ordinary GNU General Public License applies to all
|
|
||||||
subsequent copies and derivative works made from that copy.
|
|
||||||
|
|
||||||
This option is useful when you wish to copy part of the code of
|
|
||||||
the Library into a program that is not a library.
|
|
||||||
|
|
||||||
4. You may copy and distribute the Library (or a portion or
|
|
||||||
derivative of it, under Section 2) in object code or executable form
|
|
||||||
under the terms of Sections 1 and 2 above provided that you accompany
|
|
||||||
it with the complete corresponding machine-readable source code, which
|
|
||||||
must be distributed under the terms of Sections 1 and 2 above on a
|
|
||||||
medium customarily used for software interchange.
|
|
||||||
|
|
||||||
If distribution of object code is made by offering access to copy
|
|
||||||
from a designated place, then offering equivalent access to copy the
|
|
||||||
source code from the same place satisfies the requirement to
|
|
||||||
distribute the source code, even though third parties are not
|
|
||||||
compelled to copy the source along with the object code.
|
|
||||||
|
|
||||||
5. A program that contains no derivative of any portion of the
|
|
||||||
Library, but is designed to work with the Library by being compiled or
|
|
||||||
linked with it, is called a "work that uses the Library". Such a
|
|
||||||
work, in isolation, is not a derivative work of the Library, and
|
|
||||||
therefore falls outside the scope of this License.
|
|
||||||
|
|
||||||
However, linking a "work that uses the Library" with the Library
|
|
||||||
creates an executable that is a derivative of the Library (because it
|
|
||||||
contains portions of the Library), rather than a "work that uses the
|
|
||||||
library". The executable is therefore covered by this License.
|
|
||||||
Section 6 states terms for distribution of such executables.
|
|
||||||
|
|
||||||
When a "work that uses the Library" uses material from a header file
|
|
||||||
that is part of the Library, the object code for the work may be a
|
|
||||||
derivative work of the Library even though the source code is not.
|
|
||||||
Whether this is true is especially significant if the work can be
|
|
||||||
linked without the Library, or if the work is itself a library. The
|
|
||||||
threshold for this to be true is not precisely defined by law.
|
|
||||||
|
|
||||||
If such an object file uses only numerical parameters, data
|
|
||||||
structure layouts and accessors, and small macros and small inline
|
|
||||||
functions (ten lines or less in length), then the use of the object
|
|
||||||
file is unrestricted, regardless of whether it is legally a derivative
|
|
||||||
work. (Executables containing this object code plus portions of the
|
|
||||||
Library will still fall under Section 6.)
|
|
||||||
|
|
||||||
Otherwise, if the work is a derivative of the Library, you may
|
|
||||||
distribute the object code for the work under the terms of Section 6.
|
|
||||||
Any executables containing that work also fall under Section 6,
|
|
||||||
whether or not they are linked directly with the Library itself.
|
|
||||||
|
|
||||||
6. As an exception to the Sections above, you may also combine or
|
|
||||||
link a "work that uses the Library" with the Library to produce a
|
|
||||||
work containing portions of the Library, and distribute that work
|
|
||||||
under terms of your choice, provided that the terms permit
|
|
||||||
modification of the work for the customer's own use and reverse
|
|
||||||
engineering for debugging such modifications.
|
|
||||||
|
|
||||||
You must give prominent notice with each copy of the work that the
|
|
||||||
Library is used in it and that the Library and its use are covered by
|
|
||||||
this License. You must supply a copy of this License. If the work
|
|
||||||
during execution displays copyright notices, you must include the
|
|
||||||
copyright notice for the Library among them, as well as a reference
|
|
||||||
directing the user to the copy of this License. Also, you must do one
|
|
||||||
of these things:
|
|
||||||
|
|
||||||
a) Accompany the work with the complete corresponding
|
|
||||||
machine-readable source code for the Library including whatever
|
|
||||||
changes were used in the work (which must be distributed under
|
|
||||||
Sections 1 and 2 above); and, if the work is an executable linked
|
|
||||||
with the Library, with the complete machine-readable "work that
|
|
||||||
uses the Library", as object code and/or source code, so that the
|
|
||||||
user can modify the Library and then relink to produce a modified
|
|
||||||
executable containing the modified Library. (It is understood
|
|
||||||
that the user who changes the contents of definitions files in the
|
|
||||||
Library will not necessarily be able to recompile the application
|
|
||||||
to use the modified definitions.)
|
|
||||||
|
|
||||||
b) Use a suitable shared library mechanism for linking with the
|
|
||||||
Library. A suitable mechanism is one that (1) uses at run time a
|
|
||||||
copy of the library already present on the user's computer system,
|
|
||||||
rather than copying library functions into the executable, and (2)
|
|
||||||
will operate properly with a modified version of the library, if
|
|
||||||
the user installs one, as long as the modified version is
|
|
||||||
interface-compatible with the version that the work was made with.
|
|
||||||
|
|
||||||
c) Accompany the work with a written offer, valid for at
|
|
||||||
least three years, to give the same user the materials
|
|
||||||
specified in Subsection 6a, above, for a charge no more
|
|
||||||
than the cost of performing this distribution.
|
|
||||||
|
|
||||||
d) If distribution of the work is made by offering access to copy
|
|
||||||
from a designated place, offer equivalent access to copy the above
|
|
||||||
specified materials from the same place.
|
|
||||||
|
|
||||||
e) Verify that the user has already received a copy of these
|
|
||||||
materials or that you have already sent this user a copy.
|
|
||||||
|
|
||||||
For an executable, the required form of the "work that uses the
|
|
||||||
Library" must include any data and utility programs needed for
|
|
||||||
reproducing the executable from it. However, as a special exception,
|
|
||||||
the materials to be distributed need not include anything that is
|
|
||||||
normally distributed (in either source or binary form) with the major
|
|
||||||
components (compiler, kernel, and so on) of the operating system on
|
|
||||||
which the executable runs, unless that component itself accompanies
|
|
||||||
the executable.
|
|
||||||
|
|
||||||
It may happen that this requirement contradicts the license
|
|
||||||
restrictions of other proprietary libraries that do not normally
|
|
||||||
accompany the operating system. Such a contradiction means you cannot
|
|
||||||
use both them and the Library together in an executable that you
|
|
||||||
distribute.
|
|
||||||
|
|
||||||
7. You may place library facilities that are a work based on the
|
|
||||||
Library side-by-side in a single library together with other library
|
|
||||||
facilities not covered by this License, and distribute such a combined
|
|
||||||
library, provided that the separate distribution of the work based on
|
|
||||||
the Library and of the other library facilities is otherwise
|
|
||||||
permitted, and provided that you do these two things:
|
|
||||||
|
|
||||||
a) Accompany the combined library with a copy of the same work
|
|
||||||
based on the Library, uncombined with any other library
|
|
||||||
facilities. This must be distributed under the terms of the
|
|
||||||
Sections above.
|
|
||||||
|
|
||||||
b) Give prominent notice with the combined library of the fact
|
|
||||||
that part of it is a work based on the Library, and explaining
|
|
||||||
where to find the accompanying uncombined form of the same work.
|
|
||||||
|
|
||||||
8. You may not copy, modify, sublicense, link with, or distribute
|
|
||||||
the Library except as expressly provided under this License. Any
|
|
||||||
attempt otherwise to copy, modify, sublicense, link with, or
|
|
||||||
distribute the Library is void, and will automatically terminate your
|
|
||||||
rights under this License. However, parties who have received copies,
|
|
||||||
or rights, from you under this License will not have their licenses
|
|
||||||
terminated so long as such parties remain in full compliance.
|
|
||||||
|
|
||||||
9. You are not required to accept this License, since you have not
|
|
||||||
signed it. However, nothing else grants you permission to modify or
|
|
||||||
distribute the Library or its derivative works. These actions are
|
|
||||||
prohibited by law if you do not accept this License. Therefore, by
|
|
||||||
modifying or distributing the Library (or any work based on the
|
|
||||||
Library), you indicate your acceptance of this License to do so, and
|
|
||||||
all its terms and conditions for copying, distributing or modifying
|
|
||||||
the Library or works based on it.
|
|
||||||
|
|
||||||
10. Each time you redistribute the Library (or any work based on the
|
|
||||||
Library), the recipient automatically receives a license from the
|
|
||||||
original licensor to copy, distribute, link with or modify the Library
|
|
||||||
subject to these terms and conditions. You may not impose any further
|
|
||||||
restrictions on the recipients' exercise of the rights granted herein.
|
|
||||||
You are not responsible for enforcing compliance by third parties with
|
|
||||||
this License.
|
|
||||||
|
|
||||||
11. If, as a consequence of a court judgment or allegation of patent
|
|
||||||
infringement or for any other reason (not limited to patent issues),
|
|
||||||
conditions are imposed on you (whether by court order, agreement or
|
|
||||||
otherwise) that contradict the conditions of this License, they do not
|
|
||||||
excuse you from the conditions of this License. If you cannot
|
|
||||||
distribute so as to satisfy simultaneously your obligations under this
|
|
||||||
License and any other pertinent obligations, then as a consequence you
|
|
||||||
may not distribute the Library at all. For example, if a patent
|
|
||||||
license would not permit royalty-free redistribution of the Library by
|
|
||||||
all those who receive copies directly or indirectly through you, then
|
|
||||||
the only way you could satisfy both it and this License would be to
|
|
||||||
refrain entirely from distribution of the Library.
|
|
||||||
|
|
||||||
If any portion of this section is held invalid or unenforceable under any
|
|
||||||
particular circumstance, the balance of the section is intended to apply,
|
|
||||||
and the section as a whole is intended to apply in other circumstances.
|
|
||||||
|
|
||||||
It is not the purpose of this section to induce you to infringe any
|
|
||||||
patents or other property right claims or to contest validity of any
|
|
||||||
such claims; this section has the sole purpose of protecting the
|
|
||||||
integrity of the free software distribution system which is
|
|
||||||
implemented by public license practices. Many people have made
|
|
||||||
generous contributions to the wide range of software distributed
|
|
||||||
through that system in reliance on consistent application of that
|
|
||||||
system; it is up to the author/donor to decide if he or she is willing
|
|
||||||
to distribute software through any other system and a licensee cannot
|
|
||||||
impose that choice.
|
|
||||||
|
|
||||||
This section is intended to make thoroughly clear what is believed to
|
|
||||||
be a consequence of the rest of this License.
|
|
||||||
|
|
||||||
12. If the distribution and/or use of the Library is restricted in
|
|
||||||
certain countries either by patents or by copyrighted interfaces, the
|
|
||||||
original copyright holder who places the Library under this License may add
|
|
||||||
an explicit geographical distribution limitation excluding those countries,
|
|
||||||
so that distribution is permitted only in or among countries not thus
|
|
||||||
excluded. In such case, this License incorporates the limitation as if
|
|
||||||
written in the body of this License.
|
|
||||||
|
|
||||||
13. The Free Software Foundation may publish revised and/or new
|
|
||||||
versions of the Lesser General Public License from time to time.
|
|
||||||
Such new versions will be similar in spirit to the present version,
|
|
||||||
but may differ in detail to address new problems or concerns.
|
|
||||||
|
|
||||||
Each version is given a distinguishing version number. If the Library
|
|
||||||
specifies a version number of this License which applies to it and
|
|
||||||
"any later version", you have the option of following the terms and
|
|
||||||
conditions either of that version or of any later version published by
|
|
||||||
the Free Software Foundation. If the Library does not specify a
|
|
||||||
license version number, you may choose any version ever published by
|
|
||||||
the Free Software Foundation.
|
|
||||||
|
|
||||||
14. If you wish to incorporate parts of the Library into other free
|
|
||||||
programs whose distribution conditions are incompatible with these,
|
|
||||||
write to the author to ask for permission. For software which is
|
|
||||||
copyrighted by the Free Software Foundation, write to the Free
|
|
||||||
Software Foundation; we sometimes make exceptions for this. Our
|
|
||||||
decision will be guided by the two goals of preserving the free status
|
|
||||||
of all derivatives of our free software and of promoting the sharing
|
|
||||||
and reuse of software generally.
|
|
||||||
|
|
||||||
NO WARRANTY
|
|
||||||
|
|
||||||
15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
|
|
||||||
WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
|
|
||||||
EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
|
|
||||||
OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
|
|
||||||
KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
|
||||||
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
|
|
||||||
LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
|
|
||||||
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
|
||||||
|
|
||||||
16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
|
|
||||||
WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
|
|
||||||
AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
|
|
||||||
FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
|
|
||||||
CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
|
|
||||||
LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
|
|
||||||
RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
|
|
||||||
FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
|
|
||||||
SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
|
|
||||||
DAMAGES.
|
|
||||||
|
|
||||||
END OF TERMS AND CONDITIONS
|
|
||||||
|
|
||||||
How to Apply These Terms to Your New Libraries
|
|
||||||
|
|
||||||
If you develop a new library, and you want it to be of the greatest
|
|
||||||
possible use to the public, we recommend making it free software that
|
|
||||||
everyone can redistribute and change. You can do so by permitting
|
|
||||||
redistribution under these terms (or, alternatively, under the terms of the
|
|
||||||
ordinary General Public License).
|
|
||||||
|
|
||||||
To apply these terms, attach the following notices to the library. It is
|
|
||||||
safest to attach them to the start of each source file to most effectively
|
|
||||||
convey the exclusion of warranty; and each file should have at least the
|
|
||||||
"copyright" line and a pointer to where the full notice is found.
|
|
||||||
|
|
||||||
<one line to give the library's name and a brief idea of what it does.>
|
|
||||||
Copyright (C) <year> <name of author>
|
|
||||||
|
|
||||||
This library is free software; you can redistribute it and/or
|
|
||||||
modify it under the terms of the GNU Lesser General Public
|
|
||||||
License as published by the Free Software Foundation; either
|
|
||||||
version 2.1 of the License, or (at your option) any later version.
|
|
||||||
|
|
||||||
This library is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
Lesser General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public
|
|
||||||
License along with this library; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|
||||||
|
|
||||||
Also add information on how to contact you by electronic and paper mail.
|
|
||||||
|
|
||||||
You should also get your employer (if you work as a programmer) or your
|
|
||||||
school, if any, to sign a "copyright disclaimer" for the library, if
|
|
||||||
necessary. Here is a sample; alter the names:
|
|
||||||
|
|
||||||
Yoyodyne, Inc., hereby disclaims all copyright interest in the
|
|
||||||
library `Frob' (a library for tweaking knobs) written by James Random Hacker.
|
|
||||||
|
|
||||||
<signature of Ty Coon>, 1 April 1990
|
|
||||||
Ty Coon, President of Vice
|
|
||||||
|
|
||||||
That's all there is to it!
|
|
||||||
|
|
||||||
|
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
Manifest-Version: 1.0
|
|
||||||
Bundle-ManifestVersion: 2
|
|
||||||
Bundle-Name: Java libusb wrapper
|
|
||||||
Bundle-SymbolicName: ch.ntb.usb
|
|
||||||
Bundle-Version: 1.0.2
|
|
||||||
Bundle-Vendor: libusbjava.sourceforge.net
|
|
||||||
Require-Bundle: org.junit4
|
|
||||||
Export-Package: ch.ntb.usb
|
|
||||||
Bundle-RequiredExecutionEnvironment: J2SE-1.5
|
|
||||||
@@ -1,27 +0,0 @@
|
|||||||
Project description
|
|
||||||
-------------------
|
|
||||||
Java libusb wrapper is a Java wrapper for the libsub and libusb-win32 USB library.
|
|
||||||
* libusb aim is to create a library for use by user level applications to access USB devices regardless of OS.
|
|
||||||
* libusb-win32 is a port of the libusb library to the Windows operating systems. The library allows user space applications to access any USB device on Windows in a generic way without writing any line of kernel driver code.
|
|
||||||
|
|
||||||
For more information about libusb visit:
|
|
||||||
http://libusb.sourceforge.net/
|
|
||||||
|
|
||||||
For more information about LibUsb-Win32 visit:
|
|
||||||
http://libusb-win32.sourceforge.net
|
|
||||||
http://sourceforge.net/projects/libusb-win32
|
|
||||||
|
|
||||||
For more information about Java LibUsb-Win32 wrapper visit:
|
|
||||||
http://libusbjava.sourceforge.net
|
|
||||||
http://sourceforge.net/projects/libusbjava
|
|
||||||
|
|
||||||
License
|
|
||||||
-------
|
|
||||||
The Java libusb wrapper library is released under the LGPL. See LGPL.txt
|
|
||||||
for more information.
|
|
||||||
For licensing information about libusb see http://sourceforge.net/projects/libusb/.
|
|
||||||
For licensing information about LibUsb-Win32 see http://libusb-win32.sourceforge.net/#license.
|
|
||||||
|
|
||||||
Authors
|
|
||||||
-------
|
|
||||||
Andreas Schl<68>pfer <spandi at users.sourceforge.net>
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
source.. = src/,\
|
|
||||||
test/
|
|
||||||
bin.includes = META-INF/,\
|
|
||||||
.
|
|
||||||
@@ -1,66 +0,0 @@
|
|||||||
<?xml version="1.0"?>
|
|
||||||
<!-- ======================================================================
|
|
||||||
ch.ntb.usb
|
|
||||||
Ant tasks for ch.ntb.usb
|
|
||||||
|
|
||||||
====================================================================== -->
|
|
||||||
<project name="ch.ntb.usb" basedir="." default="javadoc">
|
|
||||||
<description>
|
|
||||||
Ant tasks for ch.ntb.usb
|
|
||||||
</description>
|
|
||||||
|
|
||||||
<tstamp />
|
|
||||||
<property file="project.properties" />
|
|
||||||
<property file="version.properties" />
|
|
||||||
|
|
||||||
<patternset id="classfiles">
|
|
||||||
<include name="**/usb/**/*.class" />
|
|
||||||
<exclude name="**/test/*" />
|
|
||||||
</patternset>
|
|
||||||
|
|
||||||
<patternset id="configfiles">
|
|
||||||
<include name="**/*.configure" />
|
|
||||||
</patternset>
|
|
||||||
|
|
||||||
<target name="clean" description="--> Clean all folders">
|
|
||||||
<delete dir="${project.dir.bin}" />
|
|
||||||
<delete dir="${project.dir.doc}" />
|
|
||||||
<delete dir="${project.dir.lib}" />
|
|
||||||
<delete dir="${project.dir.demos}" />
|
|
||||||
</target>
|
|
||||||
|
|
||||||
<target name="compile" depends="clean" description="--> Compile Java files">
|
|
||||||
<mkdir dir="${project.dir.bin}" />
|
|
||||||
<javac srcdir="${project.dir.src}" destdir="${project.dir.bin}" debug="on" encoding="iso-8859-1"/>
|
|
||||||
</target>
|
|
||||||
|
|
||||||
<target name="jar" depends="compile" description="--> Create Jar">
|
|
||||||
<mkdir dir="${project.dir.lib}" />
|
|
||||||
<echo>Building Version ${version.major}.${version.minor}.${version.release}</echo>
|
|
||||||
<jar destfile="${project.dir.lib}/${project.jarfile}.jar">
|
|
||||||
<fileset dir="${project.dir.bin}">
|
|
||||||
<patternset refid="classfiles" />
|
|
||||||
</fileset>
|
|
||||||
<fileset dir="${project.dir.src}">
|
|
||||||
<patternset refid="configfiles" />
|
|
||||||
</fileset>
|
|
||||||
<manifest>
|
|
||||||
<attribute name="Built-By" value="${user.name}" />
|
|
||||||
<attribute name="Main-Class" value="${project.manifest.mainclass}" />
|
|
||||||
<section name="common">
|
|
||||||
<attribute name="Implementation-Title" value="${project.name}" />
|
|
||||||
<attribute name="Implementation-Version" value="${version.major}.${version.minor}.${version.release} ${TODAY}" />
|
|
||||||
<attribute name="Implementation-Vendor" value="${project.vendor}" />
|
|
||||||
</section>
|
|
||||||
</manifest>
|
|
||||||
</jar>
|
|
||||||
<!-- copy and rename to versioned jar -->
|
|
||||||
<copy file="${project.dir.lib}/${project.jarfile}.jar" tofile="${project.dir.lib}/${project.jarfile}-${version.major}.${version.minor}.${version.release}.jar"/>
|
|
||||||
</target>
|
|
||||||
|
|
||||||
<target name="javadoc" description="--> Create Javadoc">
|
|
||||||
<javadoc destdir="${project.dir.doc}" encoding="iso-8859-1">
|
|
||||||
<fileset dir="${project.dir.src}" includes="**/*.java" />
|
|
||||||
</javadoc>
|
|
||||||
</target>
|
|
||||||
</project>
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
java2html.dir.lib=D:/MyDocuments/Download/Programming/java2html
|
|
||||||
java2html.dir.src=test/ch/ntb/usb/demo/
|
|
||||||
|
|
||||||
project.server.name=shell.sourceforge.net
|
|
||||||
project.server.dir=/home/groups/l/li/libusbjava/htdocs/wp/res
|
|
||||||
project.server.dir.doc=${project.server.dir}/doc
|
|
||||||
project.server.dir.bin=${project.server.dir}/bin
|
|
||||||
project.server.dir.demos=${project.server.dir}/demos
|
|
||||||
@@ -1,60 +0,0 @@
|
|||||||
<?xml version="1.0"?>
|
|
||||||
<!-- ======================================================================
|
|
||||||
ch.ntb.usb
|
|
||||||
Ant deployment tasks for ch.ntb.usb
|
|
||||||
|
|
||||||
NOTE: for deployment the properties
|
|
||||||
project.server.username
|
|
||||||
project.server.password
|
|
||||||
must be set on the command line
|
|
||||||
(e.g. -Dproject.server.username=X as jvm command line argument).
|
|
||||||
|
|
||||||
====================================================================== -->
|
|
||||||
<project name="ch.ntb.usb.deployment" basedir=".">
|
|
||||||
<description>
|
|
||||||
Ant deployment tasks for ch.ntb.usb
|
|
||||||
</description>
|
|
||||||
|
|
||||||
<import file="build.xml" />
|
|
||||||
|
|
||||||
<property file="deployment.properties" />
|
|
||||||
|
|
||||||
<taskdef name="java2html" classname="de.java2html.anttasks.Java2HtmlTask" classpath="${java2html.dir.lib}/java2html.jar" />
|
|
||||||
|
|
||||||
<target name="java2html">
|
|
||||||
<java2html srcdir="${java2html.dir.src}" destdir="${project.dir.demos}" includes="**/*.java" overwrite="true" style="eclipse" showFileName="true" />
|
|
||||||
</target>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
<target name="deploy" depends="jar, javadoc, java2html" description="-> Deploy to server">
|
|
||||||
<echo message="\\www-server\web must be mapped to W:" />
|
|
||||||
<echo message="copy jar file to server" />
|
|
||||||
<copy file="${project.dir.lib}/${project.jarfile}.jar" todir="${project.server.dir.bin}" />
|
|
||||||
<echo message="copy javadoc to server" />
|
|
||||||
<copy todir="${project.server.dir.doc}">
|
|
||||||
<fileset dir="${project.dir.doc}" />
|
|
||||||
</copy>
|
|
||||||
<echo message="copy html demo files to server" />
|
|
||||||
<copy todir="${project.server.dir.demos}">
|
|
||||||
<fileset dir="${project.dir.demos}" />
|
|
||||||
</copy>
|
|
||||||
</target>
|
|
||||||
|
|
||||||
-->
|
|
||||||
|
|
||||||
<target name="deploy" depends="javadoc, java2html" description="-> Deploy to server">
|
|
||||||
<!--
|
|
||||||
<echo message="copy jar file to server" />
|
|
||||||
<scp trust="true" file="${project.dir.lib}/${project.jarfile}.jar" todir="${project.server.username}:${project.server.password}@${project.server.name}:${project.server.dir.bin}" />
|
|
||||||
-->
|
|
||||||
<echo message="copy javadoc to server" />
|
|
||||||
<scp trust="true" todir="${project.server.username}:${project.server.password}@${project.server.name}:${project.server.dir.doc}">
|
|
||||||
<fileset dir="${project.dir.doc}" />
|
|
||||||
</scp>
|
|
||||||
<echo message="copy html demo files to server" />
|
|
||||||
<scp trust="true" todir="${project.server.username}:${project.server.password}@${project.server.name}:${project.server.dir.demos}">
|
|
||||||
<fileset dir="${project.dir.demos}" />
|
|
||||||
</scp>
|
|
||||||
</target>
|
|
||||||
|
|
||||||
</project>
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
#Thu Aug 24 14:28:28 CEST 2006
|
|
||||||
project.name=ch.ntb.usb
|
|
||||||
project.vendor=inf.ntb.ch
|
|
||||||
project.dir.src=src
|
|
||||||
project.dir.bin=bin
|
|
||||||
project.dir.lib=lib
|
|
||||||
project.dir.doc=doc
|
|
||||||
project.dir.demos=demos
|
|
||||||
project.jarfile=${project.name}
|
|
||||||
project.manifest.mainclass=ch.ntb.usb.usbView.UsbView
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
# enable or disable logging
|
|
||||||
ch.ntb.usb/debug = true
|
|
||||||
# set and configure individual loggers here
|
|
||||||
# the format is: projectName/debug/<loggerX> = <logger name>/<log level>
|
|
||||||
ch.ntb.usb/debug/logger0 = ch.ntb.usb/OFF
|
|
||||||
ch.ntb.usb/debug/logger1 = ch.ntb.usb.test/INFO
|
|
||||||
@@ -1,211 +0,0 @@
|
|||||||
/*
|
|
||||||
* Java libusb wrapper
|
|
||||||
* Copyright (c) 2005-2006 Andreas Schl<68>pfer <spandi at users.sourceforge.net>
|
|
||||||
*
|
|
||||||
* http://libusbjava.sourceforge.net
|
|
||||||
* This library is covered by the LGPL, read LGPL.txt for details.
|
|
||||||
*/
|
|
||||||
package ch.ntb.usb.testApp;
|
|
||||||
|
|
||||||
public abstract class AbstractDeviceInfo {
|
|
||||||
|
|
||||||
private short idVendor;
|
|
||||||
|
|
||||||
private short idProduct;
|
|
||||||
|
|
||||||
private String filename = null;
|
|
||||||
|
|
||||||
private String busName = null;
|
|
||||||
|
|
||||||
private int timeout;
|
|
||||||
|
|
||||||
private int configuration;
|
|
||||||
|
|
||||||
private int interface_;
|
|
||||||
|
|
||||||
private int altinterface;
|
|
||||||
|
|
||||||
private int outEPBulk = -1;
|
|
||||||
|
|
||||||
private int inEPBulk = -1;
|
|
||||||
|
|
||||||
private int outEPInt = -1;
|
|
||||||
|
|
||||||
private int inEPInt = -1;
|
|
||||||
|
|
||||||
private int sleepTimeout;
|
|
||||||
|
|
||||||
private int maxDataSize;
|
|
||||||
|
|
||||||
private TransferMode mode;
|
|
||||||
|
|
||||||
private boolean compareData = true;
|
|
||||||
|
|
||||||
private String manufacturer = null;
|
|
||||||
|
|
||||||
private String product = null;
|
|
||||||
|
|
||||||
private String serialVersion = null;
|
|
||||||
|
|
||||||
public static enum TransferMode {
|
|
||||||
Bulk, Interrupt
|
|
||||||
}
|
|
||||||
|
|
||||||
public AbstractDeviceInfo() {
|
|
||||||
initValues();
|
|
||||||
}
|
|
||||||
|
|
||||||
abstract public void initValues();
|
|
||||||
|
|
||||||
public int getAltinterface() {
|
|
||||||
return altinterface;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getConfiguration() {
|
|
||||||
return configuration;
|
|
||||||
}
|
|
||||||
|
|
||||||
public short getIdProduct() {
|
|
||||||
return idProduct;
|
|
||||||
}
|
|
||||||
|
|
||||||
public short getIdVendor() {
|
|
||||||
return idVendor;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getInEPBulk() {
|
|
||||||
return inEPBulk;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getInEPInt() {
|
|
||||||
return inEPInt;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getInterface() {
|
|
||||||
return interface_;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getMaxDataSize() {
|
|
||||||
return maxDataSize;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getOutEPBulk() {
|
|
||||||
return outEPBulk;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getOutEPInt() {
|
|
||||||
return outEPInt;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getSleepTimeout() {
|
|
||||||
return sleepTimeout;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getTimeout() {
|
|
||||||
return timeout;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setAltinterface(int altinterface) {
|
|
||||||
this.altinterface = altinterface;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setConfiguration(int configuration) {
|
|
||||||
this.configuration = configuration;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setIdProduct(short idProduct) {
|
|
||||||
this.idProduct = idProduct;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setIdVendor(short idVendor) {
|
|
||||||
this.idVendor = idVendor;
|
|
||||||
}
|
|
||||||
|
|
||||||
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 setInterface(int interface_) {
|
|
||||||
this.interface_ = interface_;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setMaxDataSize(int maxDataSize) {
|
|
||||||
this.maxDataSize = maxDataSize;
|
|
||||||
}
|
|
||||||
|
|
||||||
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 setSleepTimeout(int sleepTimeout) {
|
|
||||||
this.sleepTimeout = sleepTimeout;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setTimeout(int timeout) {
|
|
||||||
this.timeout = timeout;
|
|
||||||
}
|
|
||||||
|
|
||||||
public TransferMode getMode() {
|
|
||||||
return mode;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setMode(TransferMode mode) {
|
|
||||||
this.mode = mode;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean doCompareData() {
|
|
||||||
return compareData;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setDoCompareData(boolean compareData) {
|
|
||||||
this.compareData = compareData;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getManufacturer() {
|
|
||||||
return manufacturer;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setManufacturer(String manufacturer) {
|
|
||||||
this.manufacturer = manufacturer;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getProduct() {
|
|
||||||
return product;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setProduct(String product) {
|
|
||||||
this.product = product;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getSerialVersion() {
|
|
||||||
return serialVersion;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setSerialVersion(String serialVersion) {
|
|
||||||
this.serialVersion = serialVersion;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getFilename() {
|
|
||||||
return filename;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setFilename(String filename) {
|
|
||||||
this.filename = filename;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getBusName() {
|
|
||||||
return busName;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setBusName(String busName) {
|
|
||||||
this.busName = busName;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,709 +0,0 @@
|
|||||||
/*
|
|
||||||
* Java libusb wrapper
|
|
||||||
* Copyright (c) 2005-2006 Andreas Schl<68>pfer <spandi at users.sourceforge.net>
|
|
||||||
*
|
|
||||||
* http://libusbjava.sourceforge.net
|
|
||||||
* This library is covered by the LGPL, read LGPL.txt for details.
|
|
||||||
*/
|
|
||||||
package ch.ntb.usb.testApp;
|
|
||||||
|
|
||||||
import java.awt.BorderLayout;
|
|
||||||
import java.awt.Color;
|
|
||||||
import java.awt.Dimension;
|
|
||||||
import java.awt.FlowLayout;
|
|
||||||
import java.awt.Font;
|
|
||||||
import java.awt.GridBagConstraints;
|
|
||||||
import java.awt.event.ItemEvent;
|
|
||||||
|
|
||||||
import javax.swing.BorderFactory;
|
|
||||||
import javax.swing.BoxLayout;
|
|
||||||
import javax.swing.JButton;
|
|
||||||
import javax.swing.JComboBox;
|
|
||||||
import javax.swing.JFrame;
|
|
||||||
import javax.swing.JPanel;
|
|
||||||
import javax.swing.JTextField;
|
|
||||||
import javax.swing.UIManager;
|
|
||||||
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;
|
|
||||||
|
|
||||||
public TestApp(TestDevice devInfo) {
|
|
||||||
super();
|
|
||||||
this.dev = devInfo;
|
|
||||||
initialize();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void initialize() {
|
|
||||||
|
|
||||||
this.setTitle("USB Test Application");
|
|
||||||
|
|
||||||
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();
|
|
||||||
|
|
||||||
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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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;
|
|
||||||
}
|
|
||||||
|
|
||||||
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;
|
|
||||||
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 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 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;
|
|
||||||
}
|
|
||||||
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,191 +0,0 @@
|
|||||||
/*
|
|
||||||
* Java libusb wrapper
|
|
||||||
* Copyright (c) 2005-2006 Andreas Schl<68>pfer <spandi at users.sourceforge.net>
|
|
||||||
*
|
|
||||||
* http://libusbjava.sourceforge.net
|
|
||||||
* This library is covered by the LGPL, read LGPL.txt for details.
|
|
||||||
*/
|
|
||||||
package ch.ntb.usb.testApp;
|
|
||||||
|
|
||||||
import java.util.Vector;
|
|
||||||
import java.util.logging.Level;
|
|
||||||
import java.util.logging.Logger;
|
|
||||||
|
|
||||||
import ch.ntb.usb.Device;
|
|
||||||
import ch.ntb.usb.USB;
|
|
||||||
import ch.ntb.usb.USBException;
|
|
||||||
import ch.ntb.usb.logger.LogUtil;
|
|
||||||
|
|
||||||
public class TestDevice extends AbstractDeviceInfo {
|
|
||||||
|
|
||||||
private static final Logger logger = LogUtil.getLogger("ch.ntb.usb.test");
|
|
||||||
|
|
||||||
private String sendData = "0x5b 0x02 0x01 0x00 0x03 0x03 0xf0 0xf0 0x1f";
|
|
||||||
|
|
||||||
private Vector<String> transferTypes;
|
|
||||||
|
|
||||||
private static Device dev = null;
|
|
||||||
|
|
||||||
private TransferMode inMode;
|
|
||||||
private TransferMode outMode;
|
|
||||||
|
|
||||||
public TestDevice() {
|
|
||||||
logger.setLevel(Level.ALL);
|
|
||||||
// create a vector for transfer types
|
|
||||||
transferTypes = new Vector<String>();
|
|
||||||
transferTypes
|
|
||||||
.add(TransferMode.Bulk.ordinal(), TransferMode.Bulk.name());
|
|
||||||
transferTypes.add(TransferMode.Interrupt.ordinal(),
|
|
||||||
TransferMode.Interrupt.name());
|
|
||||||
inMode = TransferMode.Bulk;
|
|
||||||
outMode = TransferMode.Bulk;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void initValues() {
|
|
||||||
setIdVendor((short) 0x8235);
|
|
||||||
setIdProduct((short) 0x0222);
|
|
||||||
setTimeout(2000);
|
|
||||||
setConfiguration(1);
|
|
||||||
setInterface(0);
|
|
||||||
setAltinterface(-1);
|
|
||||||
setOutEPBulk(0x01);
|
|
||||||
setInEPBulk(0x82);
|
|
||||||
setOutEPInt(0x03);
|
|
||||||
setInEPInt(0x84);
|
|
||||||
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 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 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 String getSendData() {
|
|
||||||
return sendData;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setSendData(String sendData) {
|
|
||||||
this.sendData = sendData;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Vector<String> getTransferTypes() {
|
|
||||||
return transferTypes;
|
|
||||||
}
|
|
||||||
|
|
||||||
public TransferMode getOutMode() {
|
|
||||||
return outMode;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setOutMode(TransferMode outMode) {
|
|
||||||
this.outMode = outMode;
|
|
||||||
}
|
|
||||||
|
|
||||||
public TransferMode getInMode() {
|
|
||||||
return inMode;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setInMode(TransferMode inMode) {
|
|
||||||
this.inMode = inMode;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,16 +0,0 @@
|
|||||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
|
|
||||||
<html>
|
|
||||||
<head></head>
|
|
||||||
<body bgcolor="white">
|
|
||||||
|
|
||||||
A test application with a GUI to write to and read from a device (based on Swing).
|
|
||||||
|
|
||||||
<h2>Related Resources</h2>
|
|
||||||
|
|
||||||
For more information about this project visit
|
|
||||||
<a
|
|
||||||
href="http://libusbjava.sourceforge.net">http://libusbjava.sourceforge.net</a>
|
|
||||||
.
|
|
||||||
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@@ -1,40 +0,0 @@
|
|||||||
/*
|
|
||||||
* Java libusb wrapper
|
|
||||||
* Copyright (c) 2005-2006 Andreas Schl<68>pfer <spandi at users.sourceforge.net>
|
|
||||||
*
|
|
||||||
* http://libusbjava.sourceforge.net
|
|
||||||
* This library is covered by the LGPL, read LGPL.txt for details.
|
|
||||||
*/
|
|
||||||
package ch.ntb.usb.demo;
|
|
||||||
|
|
||||||
import ch.ntb.usb.LibusbJava;
|
|
||||||
import ch.ntb.usb.Usb_Bus;
|
|
||||||
import ch.ntb.usb.Utils;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Initalises Libusb and prints the bus(ses) with attached devices to the
|
|
||||||
* standard out.<br>
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public class LogBus {
|
|
||||||
|
|
||||||
private static void logBus() {
|
|
||||||
// if you don't use the ch.ntb.usb.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();
|
|
||||||
|
|
||||||
// log the bus structure to standard out
|
|
||||||
Utils.logBus(bus);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void main(String[] args) {
|
|
||||||
logBus();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,60 +0,0 @@
|
|||||||
/*
|
|
||||||
* Java libusb wrapper
|
|
||||||
* Copyright (c) 2005-2006 Andreas Schl<68>pfer <spandi at users.sourceforge.net>
|
|
||||||
*
|
|
||||||
* http://libusbjava.sourceforge.net
|
|
||||||
* This library is covered by the LGPL, read LGPL.txt for details.
|
|
||||||
*/
|
|
||||||
package ch.ntb.usb.demo;
|
|
||||||
|
|
||||||
import ch.ntb.usb.Device;
|
|
||||||
import ch.ntb.usb.USB;
|
|
||||||
import ch.ntb.usb.USBException;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Demo class to demonstrate simple read and write operations to an USB device.<br>
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
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();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void main(String[] args) {
|
|
||||||
// get a device instance with vendor id and product id
|
|
||||||
Device dev = USB.getDevice((short) 0x8235, (short) 0x0222);
|
|
||||||
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(0x03, 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(0x84, 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();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,625 +0,0 @@
|
|||||||
/*
|
|
||||||
* Java libusb wrapper
|
|
||||||
* Copyright (c) 2005-2006 Andreas Schl<68>pfer <spandi at users.sourceforge.net>
|
|
||||||
*
|
|
||||||
* http://libusbjava.sourceforge.net
|
|
||||||
* This library is covered by the LGPL, read LGPL.txt for details.
|
|
||||||
*/
|
|
||||||
package ch.ntb.usb.test;
|
|
||||||
|
|
||||||
import static org.junit.Assert.assertEquals;
|
|
||||||
import static org.junit.Assert.assertNotNull;
|
|
||||||
import static org.junit.Assert.assertTrue;
|
|
||||||
import static org.junit.Assert.fail;
|
|
||||||
|
|
||||||
import java.io.ByteArrayOutputStream;
|
|
||||||
import java.io.FileInputStream;
|
|
||||||
import java.io.InputStream;
|
|
||||||
import java.io.PrintStream;
|
|
||||||
import java.io.UnsupportedEncodingException;
|
|
||||||
import java.util.Properties;
|
|
||||||
import java.util.logging.Logger;
|
|
||||||
|
|
||||||
import junit.framework.Assert;
|
|
||||||
|
|
||||||
import org.junit.AfterClass;
|
|
||||||
import org.junit.BeforeClass;
|
|
||||||
import org.junit.Test;
|
|
||||||
|
|
||||||
import ch.ntb.usb.Device;
|
|
||||||
import ch.ntb.usb.LibusbJava;
|
|
||||||
import ch.ntb.usb.USB;
|
|
||||||
import ch.ntb.usb.USBException;
|
|
||||||
import ch.ntb.usb.Usb_Bus;
|
|
||||||
import ch.ntb.usb.Usb_Config_Descriptor;
|
|
||||||
import ch.ntb.usb.Usb_Device_Descriptor;
|
|
||||||
import ch.ntb.usb.Utils;
|
|
||||||
import ch.ntb.usb.testApp.AbstractDeviceInfo;
|
|
||||||
import ch.ntb.usb.testApp.AbstractDeviceInfo.TransferMode;
|
|
||||||
|
|
||||||
public class DeviceTest {
|
|
||||||
|
|
||||||
private static final String testdevicePropertiesFile = "testdevice.properties";
|
|
||||||
private static final String deviceInfoKey = "testdeviceInfo";
|
|
||||||
|
|
||||||
private static AbstractDeviceInfo devinfo;
|
|
||||||
|
|
||||||
private static byte[] testData;
|
|
||||||
|
|
||||||
private static byte[] readData;
|
|
||||||
|
|
||||||
private static Device dev;
|
|
||||||
|
|
||||||
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
|
|
||||||
LibusbJava.usb_set_debug(255);
|
|
||||||
dev = USB.getDevice(devinfo.getIdVendor(), devinfo.getIdProduct(),
|
|
||||||
devinfo.getBusName(), devinfo.getFilename());
|
|
||||||
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());
|
|
||||||
}
|
|
||||||
|
|
||||||
@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(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 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 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 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");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@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");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void bulkWriteReadMultiple() throws Exception {
|
|
||||||
final int NumberOfIterations = 100;
|
|
||||||
|
|
||||||
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 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 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 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]);
|
|
||||||
}
|
|
||||||
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
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 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 testGetIdProduct() {
|
|
||||||
Assert.assertEquals(devinfo.getIdProduct(), dev.getIdProduct());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testGetIdVendor() {
|
|
||||||
Assert.assertEquals(devinfo.getIdVendor(), dev.getIdVendor());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testGetAltinterface() {
|
|
||||||
Assert.assertEquals(devinfo.getAltinterface(), dev.getAltinterface());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testGetConfiguration() {
|
|
||||||
Assert.assertEquals(devinfo.getConfiguration(), dev.getConfiguration());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testGetInterface() {
|
|
||||||
Assert.assertEquals(devinfo.getInterface(), dev.getInterface());
|
|
||||||
}
|
|
||||||
|
|
||||||
@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();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void doOpen() throws USBException {
|
|
||||||
dev.open(devinfo.getConfiguration(), devinfo.getInterface(), devinfo
|
|
||||||
.getAltinterface());
|
|
||||||
}
|
|
||||||
|
|
||||||
private void doClose() throws USBException {
|
|
||||||
dev.close();
|
|
||||||
}
|
|
||||||
|
|
||||||
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 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 initTestData() {
|
|
||||||
for (int i = 0; i < testData.length; i++) {
|
|
||||||
testData[i] = (byte) (Math.random() * 0xff);
|
|
||||||
readData[i] = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,199 +0,0 @@
|
|||||||
/*
|
|
||||||
* Java libusb wrapper
|
|
||||||
* Copyright (c) 2005-2008 Andreas Schl<68>pfer <spandi at users.sourceforge.net>
|
|
||||||
*
|
|
||||||
* http://libusbjava.sourceforge.net
|
|
||||||
* This library is covered by the LGPL, read LGPL.txt for details.
|
|
||||||
*/
|
|
||||||
package ch.ntb.usb.test;
|
|
||||||
|
|
||||||
import static org.junit.Assert.assertEquals;
|
|
||||||
import static org.junit.Assert.assertNotNull;
|
|
||||||
|
|
||||||
import java.io.ByteArrayOutputStream;
|
|
||||||
import java.io.FileInputStream;
|
|
||||||
import java.io.InputStream;
|
|
||||||
import java.io.PrintStream;
|
|
||||||
import java.util.Properties;
|
|
||||||
import java.util.logging.Logger;
|
|
||||||
|
|
||||||
import org.junit.AfterClass;
|
|
||||||
import org.junit.BeforeClass;
|
|
||||||
import org.junit.Test;
|
|
||||||
|
|
||||||
import ch.ntb.usb.Device;
|
|
||||||
import ch.ntb.usb.LibusbJava;
|
|
||||||
import ch.ntb.usb.USB;
|
|
||||||
import ch.ntb.usb.USBException;
|
|
||||||
import ch.ntb.usb.Usb_Bus;
|
|
||||||
import ch.ntb.usb.Utils;
|
|
||||||
import ch.ntb.usb.testApp.AbstractDeviceInfo;
|
|
||||||
import ch.ntb.usb.testApp.AbstractDeviceInfo.TransferMode;
|
|
||||||
|
|
||||||
public class MemoryLeakTest {
|
|
||||||
|
|
||||||
private static final String testdevicePropertiesFile = "testdevice.properties";
|
|
||||||
private static final String deviceInfoKey = "testdeviceInfo";
|
|
||||||
|
|
||||||
private static AbstractDeviceInfo devinfo;
|
|
||||||
|
|
||||||
private static byte[] testData;
|
|
||||||
|
|
||||||
private static byte[] readData;
|
|
||||||
|
|
||||||
private static Device dev;
|
|
||||||
|
|
||||||
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
|
|
||||||
LibusbJava.usb_set_debug(255);
|
|
||||||
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());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void initalReset() throws Exception {
|
|
||||||
doOpen();
|
|
||||||
dev.reset();
|
|
||||||
timeout();
|
|
||||||
}
|
|
||||||
|
|
||||||
@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();
|
|
||||||
}
|
|
||||||
|
|
||||||
@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();
|
|
||||||
}
|
|
||||||
|
|
||||||
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();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void doOpen() throws USBException {
|
|
||||||
dev.open(devinfo.getConfiguration(), devinfo.getInterface(), devinfo
|
|
||||||
.getAltinterface());
|
|
||||||
}
|
|
||||||
|
|
||||||
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 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 initTestData() {
|
|
||||||
for (int i = 0; i < testData.length; i++) {
|
|
||||||
testData[i] = (byte) (Math.random() * 0xff);
|
|
||||||
readData[i] = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,240 +0,0 @@
|
|||||||
/*
|
|
||||||
* Java libusb wrapper
|
|
||||||
* Copyright (c) 2005-2007 Andreas Schl<68>pfer <spandi at users.sourceforge.net>
|
|
||||||
*
|
|
||||||
* http://libusbjava.sourceforge.net
|
|
||||||
* This library is covered by the LGPL, read LGPL.txt for details.
|
|
||||||
*/
|
|
||||||
package ch.ntb.usb.test;
|
|
||||||
|
|
||||||
import ch.ntb.usb.LibusbJava;
|
|
||||||
import ch.ntb.usb.Usb_Bus;
|
|
||||||
import ch.ntb.usb.Usb_Config_Descriptor;
|
|
||||||
import ch.ntb.usb.Usb_Device;
|
|
||||||
import ch.ntb.usb.Usb_Endpoint_Descriptor;
|
|
||||||
import ch.ntb.usb.Usb_Interface;
|
|
||||||
import ch.ntb.usb.Usb_Interface_Descriptor;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This class replicates the code from testlibusb.c supplied in the
|
|
||||||
* libusb-0.1.12 release.
|
|
||||||
*/
|
|
||||||
public class TestLibUsbJava {
|
|
||||||
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 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]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 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()));
|
|
||||||
|
|
||||||
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;
|
|
||||||
|
|
||||||
spaces = " ";
|
|
||||||
|
|
||||||
udev = LibusbJava.usb_open(dev);
|
|
||||||
|
|
||||||
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 (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());
|
|
||||||
}
|
|
||||||
|
|
||||||
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 (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 (verbose) {
|
|
||||||
if (dev.getConfig().length == 0) {
|
|
||||||
System.out.print(" Couldn't retrieve descriptors\n");
|
|
||||||
|
|
||||||
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.getNumChildren(); i++) {
|
|
||||||
if (i == 0) {
|
|
||||||
childDev = dev.getChildren();
|
|
||||||
} else {
|
|
||||||
childDev = childDev.getNext();
|
|
||||||
}
|
|
||||||
|
|
||||||
printDevice(childDev, level + 1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
// used for debugging. 0 = no debugging, 255 = with debugging
|
|
||||||
//
|
|
||||||
LibusbJava.usb_set_debug(255);
|
|
||||||
|
|
||||||
LibusbJava.usb_init();
|
|
||||||
|
|
||||||
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
|
|
||||||
} // end of TestLibUsbJava class
|
|
||||||
@@ -1,34 +0,0 @@
|
|||||||
/*
|
|
||||||
* Java libusb wrapper
|
|
||||||
* Copyright (c) 2005-2006 Andreas Schl<68>pfer <spandi at users.sourceforge.net>
|
|
||||||
*
|
|
||||||
* http://libusbjava.sourceforge.net
|
|
||||||
* This library is covered by the LGPL, read LGPL.txt for details.
|
|
||||||
*/
|
|
||||||
package ch.ntb.usb.test.devices;
|
|
||||||
|
|
||||||
import ch.ntb.usb.USB;
|
|
||||||
import ch.ntb.usb.testApp.AbstractDeviceInfo;
|
|
||||||
|
|
||||||
public class AT90USB1287 extends AbstractDeviceInfo {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void initValues() {
|
|
||||||
setIdVendor((short) 0x8235);
|
|
||||||
setIdProduct((short) 0x0222);
|
|
||||||
setTimeout(2000);
|
|
||||||
setConfiguration(1);
|
|
||||||
setInterface(0);
|
|
||||||
setAltinterface(-1);
|
|
||||||
setOutEPBulk(0x01);
|
|
||||||
setInEPBulk(0x82);
|
|
||||||
setOutEPInt(0x03);
|
|
||||||
setInEPInt(0x84);
|
|
||||||
setSleepTimeout(2000);
|
|
||||||
setMaxDataSize(USB.FULLSPEED_MAX_BULK_PACKET_SIZE);
|
|
||||||
setMode(TransferMode.Bulk);
|
|
||||||
setManufacturer("inf.ntb.ch");
|
|
||||||
setProduct("JUnit Test Board");
|
|
||||||
setSerialVersion("00.10.00");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,31 +0,0 @@
|
|||||||
/*
|
|
||||||
* Java libusb wrapper
|
|
||||||
* Copyright (c) 2005-2006 Andreas Schl<68>pfer <spandi at users.sourceforge.net>
|
|
||||||
*
|
|
||||||
* http://libusbjava.sourceforge.net
|
|
||||||
* This library is covered by the LGPL, read LGPL.txt for details.
|
|
||||||
*/
|
|
||||||
package ch.ntb.usb.test.devices;
|
|
||||||
|
|
||||||
import ch.ntb.usb.USB;
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,32 +0,0 @@
|
|||||||
/*
|
|
||||||
* Java libusb wrapper
|
|
||||||
* Copyright (c) 2005-2006 Andreas Schl<68>pfer <spandi at users.sourceforge.net>
|
|
||||||
*
|
|
||||||
* http://libusbjava.sourceforge.net
|
|
||||||
* This library is covered by the LGPL, read LGPL.txt for details.
|
|
||||||
*/
|
|
||||||
package ch.ntb.usb.test.devices;
|
|
||||||
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,34 +0,0 @@
|
|||||||
/*
|
|
||||||
* Java libusb wrapper
|
|
||||||
* Copyright (c) 2005-2006 Andreas Schl<68>pfer <spandi at users.sourceforge.net>
|
|
||||||
*
|
|
||||||
* http://libusbjava.sourceforge.net
|
|
||||||
* This library is covered by the LGPL, read LGPL.txt for details.
|
|
||||||
*/
|
|
||||||
package ch.ntb.usb.test.devices;
|
|
||||||
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
################################################################
|
|
||||||
# define the usb test class for test/ch.ntb.usb.DeviceTest here
|
|
||||||
# it must implement ch.ntb.usb.AbstractDeviceInfo
|
|
||||||
################################################################
|
|
||||||
|
|
||||||
# Atmel AVR AT90USB1287
|
|
||||||
testdeviceInfo=ch.ntb.usb.test.devices.AT90USB1287
|
|
||||||
# Cypress FX2 CY7C68013A
|
|
||||||
#testdeviceInfo=ch.ntb.usb.test.devices.CY7C68013A
|
|
||||||
# MX500 Mouse
|
|
||||||
#testdeviceInfo=ch.ntb.usb.test.devices.MX500
|
|
||||||
# Logitech Notebook Mouse Plus
|
|
||||||
#testdeviceInfo=ch.ntb.usb.test.devices.MousePlus
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
[InternetShortcut]
|
|
||||||
URL=http://staruml.sourceforge.net/
|
|
||||||
Modified=7081E8FF540DC70101
|
|
||||||
Binary file not shown.
|
Before Width: | Height: | Size: 79 KiB |
File diff suppressed because it is too large
Load Diff
@@ -1,4 +0,0 @@
|
|||||||
#Thu Aug 24 14:28:28 CEST 2006
|
|
||||||
version.major=0
|
|
||||||
version.minor=5
|
|
||||||
version.release=8
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -1,378 +1,378 @@
|
|||||||
/*
|
/*
|
||||||
* Java libusb wrapper
|
* Java libusb wrapper
|
||||||
* Copyright (c) 2005-2006 Andreas Schläpfer <spandi at users.sourceforge.net>
|
* Copyright (c) 2005-2006 Andreas Schläpfer <spandi at users.sourceforge.net>
|
||||||
*
|
*
|
||||||
* http://libusbjava.sourceforge.net
|
* http://libusbjava.sourceforge.net
|
||||||
* This library is covered by the LGPL, read LGPL.txt for details.
|
* This library is covered by the LGPL, read LGPL.txt for details.
|
||||||
*/
|
*/
|
||||||
package ch.ntb.usb;
|
package ch.ntb.usb;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This class represents the Java Native Interface to the shared library which
|
* This class represents the Java Native Interface to the shared library which
|
||||||
* is (with some exceptions) a one-to-one representation of the libusb API.<br>
|
* is (with some exceptions) a one-to-one representation of the libusb API.<br>
|
||||||
* <br>
|
* <br>
|
||||||
* <h1>Project Description</h1>
|
* <h1>Project Description</h1>
|
||||||
* Java libusb is a Java wrapper for the libusb and libusb-win32 USB library.
|
* Java libusb is a Java wrapper for the libusb and libusb-win32 USB library.
|
||||||
*
|
*
|
||||||
* <a href="http://libusb.sourceforge.net/">libusb</a> aim is to create a
|
* <a href="http://libusb.sourceforge.net/">libusb</a> aim is to create a
|
||||||
* library for use by user level applications to access USB devices regardless
|
* library for use by user level applications to access USB devices regardless
|
||||||
* of OS.<br>
|
* of OS.<br>
|
||||||
* <a href="http://libusb-win32.sourceforge.net/">Libusb-win32</a> is a port of
|
* <a href="http://libusb-win32.sourceforge.net/">Libusb-win32</a> is a port of
|
||||||
* the USB library <a href="http://libusb.sourceforge.net/">libusb</a> to the
|
* the USB library <a href="http://libusb.sourceforge.net/">libusb</a> to the
|
||||||
* Windows operating systems. The library allows user space applications to
|
* Windows operating systems. The library allows user space applications to
|
||||||
* access any USB device on Windows in a generic way without writing any line of
|
* access any USB device on Windows in a generic way without writing any line of
|
||||||
* kernel driver code.<br>
|
* kernel driver code.<br>
|
||||||
* <br>
|
* <br>
|
||||||
* The API description of this class has been copied from the <a
|
* The API description of this class has been copied from the <a
|
||||||
* href="http://libusb.sourceforge.net/documentation.html">libusb documentation</a>
|
* href="http://libusb.sourceforge.net/documentation.html">libusb documentation</a>
|
||||||
* and adapted where neccessary.<br>
|
* and adapted where neccessary.<br>
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public class LibusbJava {
|
public class LibusbJava {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* System error codes.<br>
|
* System error codes.<br>
|
||||||
* This list is not complete! For more error codes see the file 'errorno.h'
|
* This list is not complete! For more error codes see the file 'errorno.h'
|
||||||
* on your system.
|
* on your system.
|
||||||
*/
|
*/
|
||||||
public static int ERROR_SUCCESS, ERROR_BAD_FILE_DESCRIPTOR,
|
public static int ERROR_SUCCESS, ERROR_BAD_FILE_DESCRIPTOR,
|
||||||
ERROR_NO_SUCH_DEVICE_OR_ADDRESS, ERROR_BUSY,
|
ERROR_NO_SUCH_DEVICE_OR_ADDRESS, ERROR_BUSY,
|
||||||
ERROR_INVALID_PARAMETER, ERROR_TIMEDOUT, ERROR_IO_ERROR,
|
ERROR_INVALID_PARAMETER, ERROR_TIMEDOUT, ERROR_IO_ERROR,
|
||||||
ERROR_NOT_ENOUGH_MEMORY;;
|
ERROR_NOT_ENOUGH_MEMORY;;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the debugging level of libusb.<br>
|
* Sets the debugging level of libusb.<br>
|
||||||
*
|
*
|
||||||
* The range is from 0 to 255, where 0 disables debug output and 255 enables
|
* The range is from 0 to 255, where 0 disables debug output and 255 enables
|
||||||
* all output. On application start, debugging is disabled (0).
|
* all output. On application start, debugging is disabled (0).
|
||||||
*
|
*
|
||||||
* @param level
|
* @param level
|
||||||
* 0 to 255
|
* 0 to 255
|
||||||
*/
|
*/
|
||||||
public static native void usb_set_debug(int level);
|
public static native void usb_set_debug(int level);
|
||||||
|
|
||||||
// Core
|
// Core
|
||||||
/**
|
/**
|
||||||
* Just like the name implies, <code>usb_init</code> sets up some internal
|
* Just like the name implies, <code>usb_init</code> sets up some internal
|
||||||
* structures. <code>usb_init</code> must be called before any other
|
* structures. <code>usb_init</code> must be called before any other
|
||||||
* libusb functions.
|
* libusb functions.
|
||||||
*/
|
*/
|
||||||
public static native void usb_init();
|
public static native void usb_init();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <code>usb_find_busses</code> will find all of the busses on the system.
|
* <code>usb_find_busses</code> will find all of the busses on the system.
|
||||||
*
|
*
|
||||||
* @return the number of changes since previous call to this function (total
|
* @return the number of changes since previous call to this function (total
|
||||||
* of new busses and busses removed).
|
* of new busses and busses removed).
|
||||||
*/
|
*/
|
||||||
public static native int usb_find_busses();
|
public static native int usb_find_busses();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <code>usb_find_devices</code> will find all of the devices on each bus.
|
* <code>usb_find_devices</code> will find all of the devices on each bus.
|
||||||
* This should be called after <code>usb_find_busses</code>.
|
* This should be called after <code>usb_find_busses</code>.
|
||||||
*
|
*
|
||||||
* @return the number of changes since the previous call to this function
|
* @return the number of changes since the previous call to this function
|
||||||
* (total of new device and devices removed).
|
* (total of new device and devices removed).
|
||||||
*/
|
*/
|
||||||
public static native int usb_find_devices();
|
public static native int usb_find_devices();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <code>usb_get_busses</code> returns a tree of descriptor objects.<br>
|
* <code>usb_get_busses</code> returns a tree of descriptor objects.<br>
|
||||||
* The tree represents the bus structure with devices, configurations,
|
* The tree represents the bus structure with devices, configurations,
|
||||||
* interfaces and endpoints. Note that this is only a copy. To refresh the
|
* interfaces and endpoints. Note that this is only a copy. To refresh the
|
||||||
* information, <code>usb_get_busses()</code> must be called again.<br>
|
* information, <code>usb_get_busses()</code> must be called again.<br>
|
||||||
* The name of the objects contained in the tree is starting with
|
* The name of the objects contained in the tree is starting with
|
||||||
* <code>Usb_</code>.
|
* <code>Usb_</code>.
|
||||||
*
|
*
|
||||||
* @return the structure of all busses and devices. <code>Note:</code> The
|
* @return the structure of all busses and devices. <code>Note:</code> The
|
||||||
* java objects are copies of the C structs.
|
* java objects are copies of the C structs.
|
||||||
*/
|
*/
|
||||||
public static native Usb_Bus usb_get_busses();
|
public static native Usb_Bus usb_get_busses();
|
||||||
|
|
||||||
// Device Operations
|
// Device Operations
|
||||||
/**
|
/**
|
||||||
* <code>usb_open</code> is to be used to open up a device for use.
|
* <code>usb_open</code> is to be used to open up a device for use.
|
||||||
* <code>usb_open</code> must be called before attempting to perform any
|
* <code>usb_open</code> must be called before attempting to perform any
|
||||||
* operations to the device.
|
* operations to the device.
|
||||||
*
|
*
|
||||||
* @param dev
|
* @param dev
|
||||||
* The device to open.
|
* The device to open.
|
||||||
* @return a handle used in future communication with the device. 0 if an
|
* @return a handle used in future communication with the device. 0 if an
|
||||||
* error has occurred.
|
* error has occurred.
|
||||||
*/
|
*/
|
||||||
public static native long usb_open(Usb_Device dev);
|
public static native long usb_open(Usb_Device dev);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <code>usb_close</code> closes a device opened with
|
* <code>usb_close</code> closes a device opened with
|
||||||
* <code>usb_open</code>.
|
* <code>usb_open</code>.
|
||||||
*
|
*
|
||||||
* @param dev_handle
|
* @param dev_handle
|
||||||
* The handle to the device.
|
* The handle to the device.
|
||||||
* @return 0 on success or < 0 on error.
|
* @return 0 on success or < 0 on error.
|
||||||
*/
|
*/
|
||||||
public static native int usb_close(long dev_handle);
|
public static native int usb_close(long dev_handle);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the active configuration of a device
|
* Sets the active configuration of a device
|
||||||
*
|
*
|
||||||
* @param dev_handle
|
* @param dev_handle
|
||||||
* The handle to the device.
|
* The handle to the device.
|
||||||
* @param configuration
|
* @param configuration
|
||||||
* The value as specified in the descriptor field
|
* The value as specified in the descriptor field
|
||||||
* bConfigurationValue.
|
* bConfigurationValue.
|
||||||
* @return 0 on success or < 0 on error.
|
* @return 0 on success or < 0 on error.
|
||||||
*/
|
*/
|
||||||
public static native int usb_set_configuration(long dev_handle,
|
public static native int usb_set_configuration(long dev_handle,
|
||||||
int configuration);
|
int configuration);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the active alternate setting of the current interface
|
* Sets the active alternate setting of the current interface
|
||||||
*
|
*
|
||||||
* @param dev_handle
|
* @param dev_handle
|
||||||
* The handle to the device.
|
* The handle to the device.
|
||||||
* @param alternate
|
* @param alternate
|
||||||
* The value as specified in the descriptor field
|
* The value as specified in the descriptor field
|
||||||
* bAlternateSetting.
|
* bAlternateSetting.
|
||||||
* @return 0 on success or < 0 on error.
|
* @return 0 on success or < 0 on error.
|
||||||
*/
|
*/
|
||||||
public static native int usb_set_altinterface(long dev_handle, int alternate);
|
public static native int usb_set_altinterface(long dev_handle, int alternate);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Clears any halt status on an endpoint.
|
* Clears any halt status on an endpoint.
|
||||||
*
|
*
|
||||||
* @param dev_handle
|
* @param dev_handle
|
||||||
* The handle to the device.
|
* The handle to the device.
|
||||||
* @param ep
|
* @param ep
|
||||||
* The value specified in the descriptor field bEndpointAddress.
|
* The value specified in the descriptor field bEndpointAddress.
|
||||||
* @return 0 on success or < 0 on error.
|
* @return 0 on success or < 0 on error.
|
||||||
*/
|
*/
|
||||||
public static native int usb_clear_halt(long dev_handle, int ep);
|
public static native int usb_clear_halt(long dev_handle, int ep);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Resets a device by sending a RESET down the port it is connected to.<br>
|
* Resets a device by sending a RESET down the port it is connected to.<br>
|
||||||
* <br>
|
* <br>
|
||||||
* <b>Causes re-enumeration:</b> After calling <code>usb_reset</code>,
|
* <b>Causes re-enumeration:</b> After calling <code>usb_reset</code>,
|
||||||
* the device will need to re-enumerate and thusly, requires you to find the
|
* the device will need to re-enumerate and thusly, requires you to find the
|
||||||
* new device and open a new handle. The handle used to call
|
* new device and open a new handle. The handle used to call
|
||||||
* <code>usb_reset</code> will no longer work.
|
* <code>usb_reset</code> will no longer work.
|
||||||
*
|
*
|
||||||
* @param dev_handle
|
* @param dev_handle
|
||||||
* The handle to the device.
|
* The handle to the device.
|
||||||
* @return 0 on success or < 0 on error.
|
* @return 0 on success or < 0 on error.
|
||||||
*/
|
*/
|
||||||
public static native int usb_reset(long dev_handle);
|
public static native int usb_reset(long dev_handle);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Claim an interface of a device.<br>
|
* Claim an interface of a device.<br>
|
||||||
* <br>
|
* <br>
|
||||||
* <b>Must be called!:</b> <code>usb_claim_interface</code> must be
|
* <b>Must be called!:</b> <code>usb_claim_interface</code> must be
|
||||||
* called before you perform any operations related to this interface (like
|
* called before you perform any operations related to this interface (like
|
||||||
* <code>usb_set_altinterface, usb_bulk_write</code>, etc).
|
* <code>usb_set_altinterface, usb_bulk_write</code>, etc).
|
||||||
*
|
*
|
||||||
* @param dev_handle
|
* @param dev_handle
|
||||||
* The handle to the device.
|
* The handle to the device.
|
||||||
* @param interface_
|
* @param interface_
|
||||||
* The value as specified in the descriptor field
|
* The value as specified in the descriptor field
|
||||||
* bInterfaceNumber.
|
* bInterfaceNumber.
|
||||||
* @return 0 on success or < 0 on error.
|
* @return 0 on success or < 0 on error.
|
||||||
*/
|
*/
|
||||||
public static native int usb_claim_interface(long dev_handle, int interface_);
|
public static native int usb_claim_interface(long dev_handle, int interface_);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Releases a previously claimed interface
|
* Releases a previously claimed interface
|
||||||
*
|
*
|
||||||
* @param dev_handle
|
* @param dev_handle
|
||||||
* The handle to the device.
|
* The handle to the device.
|
||||||
* @param interface_
|
* @param interface_
|
||||||
* The value as specified in the descriptor field
|
* The value as specified in the descriptor field
|
||||||
* bInterfaceNumber.
|
* bInterfaceNumber.
|
||||||
* @return 0 on success or < 0 on error.
|
* @return 0 on success or < 0 on error.
|
||||||
*/
|
*/
|
||||||
public static native int usb_release_interface(long dev_handle,
|
public static native int usb_release_interface(long dev_handle,
|
||||||
int interface_);
|
int interface_);
|
||||||
|
|
||||||
// Control Transfers
|
// Control Transfers
|
||||||
/**
|
/**
|
||||||
* Performs a control request to the default control pipe on a device. The
|
* Performs a control request to the default control pipe on a device. The
|
||||||
* parameters mirror the types of the same name in the USB specification.
|
* parameters mirror the types of the same name in the USB specification.
|
||||||
*
|
*
|
||||||
* @param dev_handle
|
* @param dev_handle
|
||||||
* The handle to the device.
|
* The handle to the device.
|
||||||
* @param requesttype
|
* @param requesttype
|
||||||
* @param request
|
* @param request
|
||||||
* @param value
|
* @param value
|
||||||
* @param index
|
* @param index
|
||||||
* @param bytes
|
* @param bytes
|
||||||
* @param size
|
* @param size
|
||||||
* @param timeout
|
* @param timeout
|
||||||
* @return the number of bytes written/read or < 0 on error.
|
* @return the number of bytes written/read or < 0 on error.
|
||||||
*/
|
*/
|
||||||
public static native int usb_control_msg(long dev_handle, int requesttype,
|
public static native int usb_control_msg(long dev_handle, int requesttype,
|
||||||
int request, int value, int index, byte[] bytes, int size,
|
int request, int value, int index, byte[] bytes, int size,
|
||||||
int timeout);
|
int timeout);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Retrieves the string descriptor specified by index and langid from a
|
* Retrieves the string descriptor specified by index and langid from a
|
||||||
* device.
|
* device.
|
||||||
*
|
*
|
||||||
* @param dev_handle
|
* @param dev_handle
|
||||||
* The handle to the device.
|
* The handle to the device.
|
||||||
* @param index
|
* @param index
|
||||||
* @param langid
|
* @param langid
|
||||||
* @return the descriptor String or null
|
* @return the descriptor String or null
|
||||||
*/
|
*/
|
||||||
public static native String usb_get_string(long dev_handle, int index,
|
public static native String usb_get_string(long dev_handle, int index,
|
||||||
int langid);
|
int langid);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <code>usb_get_string_simple</code> is a wrapper around
|
* <code>usb_get_string_simple</code> is a wrapper around
|
||||||
* <code>usb_get_string</code> that retrieves the string description
|
* <code>usb_get_string</code> that retrieves the string description
|
||||||
* specified by index in the first language for the descriptor.
|
* specified by index in the first language for the descriptor.
|
||||||
*
|
*
|
||||||
* @param dev_handle
|
* @param dev_handle
|
||||||
* The handle to the device.
|
* The handle to the device.
|
||||||
* @param index
|
* @param index
|
||||||
* @return the descriptor String or null
|
* @return the descriptor String or null
|
||||||
*/
|
*/
|
||||||
public static native String usb_get_string_simple(long dev_handle, int index);
|
public static native String usb_get_string_simple(long dev_handle, int index);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Retrieves a descriptor from the device identified by the type and index
|
* Retrieves a descriptor from the device identified by the type and index
|
||||||
* of the descriptor from the default control pipe.<br>
|
* of the descriptor from the default control pipe.<br>
|
||||||
* <br>
|
* <br>
|
||||||
* See {@link #usb_get_descriptor_by_endpoint(long, int, byte, byte, int)}
|
* See {@link #usb_get_descriptor_by_endpoint(long, int, byte, byte, int)}
|
||||||
* for a function that allows the control endpoint to be specified.
|
* for a function that allows the control endpoint to be specified.
|
||||||
*
|
*
|
||||||
* @param dev_handle
|
* @param dev_handle
|
||||||
* The handle to the device.
|
* The handle to the device.
|
||||||
* @param type
|
* @param type
|
||||||
* @param index
|
* @param index
|
||||||
* @param size
|
* @param size
|
||||||
* number of charactes which will be retrieved (the length of the
|
* number of charactes which will be retrieved (the length of the
|
||||||
* resulting String)
|
* resulting String)
|
||||||
* @return the descriptor String or null
|
* @return the descriptor String or null
|
||||||
*/
|
*/
|
||||||
public static native String usb_get_descriptor(long dev_handle, byte type,
|
public static native String usb_get_descriptor(long dev_handle, byte type,
|
||||||
byte index, int size);
|
byte index, int size);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Retrieves a descriptor from the device identified by the type and index
|
* Retrieves a descriptor from the device identified by the type and index
|
||||||
* of the descriptor from the control pipe identified by ep.
|
* of the descriptor from the control pipe identified by ep.
|
||||||
*
|
*
|
||||||
* @param dev_handle
|
* @param dev_handle
|
||||||
* The handle to the device.
|
* The handle to the device.
|
||||||
* @param ep
|
* @param ep
|
||||||
* @param type
|
* @param type
|
||||||
* @param index
|
* @param index
|
||||||
* @param size
|
* @param size
|
||||||
* number of charactes which will be retrieved (the length of the
|
* number of charactes which will be retrieved (the length of the
|
||||||
* resulting String)
|
* resulting String)
|
||||||
* @return the descriptor String or null
|
* @return the descriptor String or null
|
||||||
*/
|
*/
|
||||||
public static native String usb_get_descriptor_by_endpoint(long dev_handle,
|
public static native String usb_get_descriptor_by_endpoint(long dev_handle,
|
||||||
int ep, byte type, byte index, int size);
|
int ep, byte type, byte index, int size);
|
||||||
|
|
||||||
// Bulk Transfers
|
// Bulk Transfers
|
||||||
/**
|
/**
|
||||||
* Performs a bulk write request to the endpoint specified by ep.
|
* Performs a bulk write request to the endpoint specified by ep.
|
||||||
*
|
*
|
||||||
* @param dev_handle
|
* @param dev_handle
|
||||||
* The handle to the device.
|
* The handle to the device.
|
||||||
* @param ep
|
* @param ep
|
||||||
* @param bytes
|
* @param bytes
|
||||||
* @param size
|
* @param size
|
||||||
* @param timeout
|
* @param timeout
|
||||||
* @return the number of bytes written on success or < 0 on error.
|
* @return the number of bytes written on success or < 0 on error.
|
||||||
*/
|
*/
|
||||||
public static native int usb_bulk_write(long dev_handle, int ep,
|
public static native int usb_bulk_write(long dev_handle, int ep,
|
||||||
byte[] bytes, int size, int timeout);
|
byte[] bytes, int size, int timeout);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Performs a bulk read request to the endpoint specified by ep.
|
* Performs a bulk read request to the endpoint specified by ep.
|
||||||
*
|
*
|
||||||
* @param dev_handle
|
* @param dev_handle
|
||||||
* The handle to the device.
|
* The handle to the device.
|
||||||
* @param ep
|
* @param ep
|
||||||
* @param bytes
|
* @param bytes
|
||||||
* @param size
|
* @param size
|
||||||
* @param timeout
|
* @param timeout
|
||||||
* @return the number of bytes read on success or < 0 on error.
|
* @return the number of bytes read on success or < 0 on error.
|
||||||
*/
|
*/
|
||||||
public static native int usb_bulk_read(long dev_handle, int ep,
|
public static native int usb_bulk_read(long dev_handle, int ep,
|
||||||
byte[] bytes, int size, int timeout);
|
byte[] bytes, int size, int timeout);
|
||||||
|
|
||||||
// Interrupt Transfers
|
// Interrupt Transfers
|
||||||
/**
|
/**
|
||||||
* Performs an interrupt write request to the endpoint specified by ep.
|
* Performs an interrupt write request to the endpoint specified by ep.
|
||||||
*
|
*
|
||||||
* @param dev_handle
|
* @param dev_handle
|
||||||
* The handle to the device.
|
* The handle to the device.
|
||||||
* @param ep
|
* @param ep
|
||||||
* @param bytes
|
* @param bytes
|
||||||
* @param size
|
* @param size
|
||||||
* @param timeout
|
* @param timeout
|
||||||
* @return the number of bytes written on success or < 0 on error.
|
* @return the number of bytes written on success or < 0 on error.
|
||||||
*/
|
*/
|
||||||
public static native int usb_interrupt_write(long dev_handle, int ep,
|
public static native int usb_interrupt_write(long dev_handle, int ep,
|
||||||
byte[] bytes, int size, int timeout);
|
byte[] bytes, int size, int timeout);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Performs a interrupt read request to the endpoint specified by ep.
|
* Performs a interrupt read request to the endpoint specified by ep.
|
||||||
*
|
*
|
||||||
* @param dev_handle
|
* @param dev_handle
|
||||||
* The handle to the device.
|
* The handle to the device.
|
||||||
* @param ep
|
* @param ep
|
||||||
* @param bytes
|
* @param bytes
|
||||||
* @param size
|
* @param size
|
||||||
* @param timeout
|
* @param timeout
|
||||||
* @return the number of bytes read on success or < 0 on error.
|
* @return the number of bytes read on success or < 0 on error.
|
||||||
*/
|
*/
|
||||||
public static native int usb_interrupt_read(long dev_handle, int ep,
|
public static native int usb_interrupt_read(long dev_handle, int ep,
|
||||||
byte[] bytes, int size, int timeout);
|
byte[] bytes, int size, int timeout);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the error string after an error occured.
|
* Returns the error string after an error occured.
|
||||||
*
|
*
|
||||||
* @return the last error sring.
|
* @return the last error sring.
|
||||||
*/
|
*/
|
||||||
public static native String usb_strerror();
|
public static native String usb_strerror();
|
||||||
|
|
||||||
/** **************************************************************** */
|
/** **************************************************************** */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Maps the Java error code to the system error code.<br>
|
* Maps the Java error code to the system error code.<br>
|
||||||
* <br>
|
* <br>
|
||||||
* Note that not all error codes are be mapped by this method. For more
|
* Note that not all error codes are be mapped by this method. For more
|
||||||
* error codes see the file 'errno.h' on your system.<br>
|
* error codes see the file 'errno.h' on your system.<br>
|
||||||
* <br>
|
* <br>
|
||||||
* 1: EBADF: Bad file descriptor.<br>
|
* 1: EBADF: Bad file descriptor.<br>
|
||||||
* 2: ENXIO: No such device or address.<br>
|
* 2: ENXIO: No such device or address.<br>
|
||||||
* 3: EBUSY: Device or resource busy.<br>
|
* 3: EBUSY: Device or resource busy.<br>
|
||||||
* 4: EINVAL: Invalid argument.<br>
|
* 4: EINVAL: Invalid argument.<br>
|
||||||
* 5: ETIMEDOUT: Connection timed out.<br>
|
* 5: ETIMEDOUT: Connection timed out.<br>
|
||||||
* 6: EIO: I/O error.<br>
|
* 6: EIO: I/O error.<br>
|
||||||
* 7: ENOMEM: Not enough memory.<br>
|
* 7: ENOMEM: Not enough memory.<br>
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
* @return the system error code or 100000 if no mapping has been found.
|
* @return the system error code or 100000 if no mapping has been found.
|
||||||
*/
|
*/
|
||||||
private static native int usb_error_no(int value);
|
private static native int usb_error_no(int value);
|
||||||
|
|
||||||
static {
|
static {
|
||||||
String os = System.getProperty("os.name");
|
String os = System.getProperty("os.name");
|
||||||
if (os.contains("Windows")) {
|
if (os.contains("Windows")) {
|
||||||
System.loadLibrary("LibusbJava");
|
System.loadLibrary("LibusbJava");
|
||||||
} else {
|
} else {
|
||||||
System.loadLibrary("usbJava");
|
System.loadLibrary("usbJava");
|
||||||
}
|
}
|
||||||
// define the error codes
|
// define the error codes
|
||||||
ERROR_SUCCESS = 0;
|
ERROR_SUCCESS = 0;
|
||||||
ERROR_BAD_FILE_DESCRIPTOR = -usb_error_no(1);
|
ERROR_BAD_FILE_DESCRIPTOR = -usb_error_no(1);
|
||||||
ERROR_NO_SUCH_DEVICE_OR_ADDRESS = -usb_error_no(2);
|
ERROR_NO_SUCH_DEVICE_OR_ADDRESS = -usb_error_no(2);
|
||||||
ERROR_BUSY = -usb_error_no(3);
|
ERROR_BUSY = -usb_error_no(3);
|
||||||
ERROR_INVALID_PARAMETER = -usb_error_no(4);
|
ERROR_INVALID_PARAMETER = -usb_error_no(4);
|
||||||
ERROR_TIMEDOUT = -usb_error_no(5);
|
ERROR_TIMEDOUT = -usb_error_no(5);
|
||||||
ERROR_IO_ERROR = -usb_error_no(6);
|
ERROR_IO_ERROR = -usb_error_no(6);
|
||||||
ERROR_NOT_ENOUGH_MEMORY = -usb_error_no(7);
|
ERROR_NOT_ENOUGH_MEMORY = -usb_error_no(7);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,318 +1,318 @@
|
|||||||
/*
|
/*
|
||||||
* Java libusb wrapper
|
* Java libusb wrapper
|
||||||
* Copyright (c) 2005-2006 Andreas Schläpfer <spandi at users.sourceforge.net>
|
* Copyright (c) 2005-2006 Andreas Schläpfer <spandi at users.sourceforge.net>
|
||||||
*
|
*
|
||||||
* http://libusbjava.sourceforge.net
|
* http://libusbjava.sourceforge.net
|
||||||
* This library is covered by the LGPL, read LGPL.txt for details.
|
* This library is covered by the LGPL, read LGPL.txt for details.
|
||||||
*/
|
*/
|
||||||
package ch.ntb.usb;
|
package ch.ntb.usb;
|
||||||
|
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
import ch.ntb.usb.logger.LogUtil;
|
import ch.ntb.usb.logger.LogUtil;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This class manages all USB devices and defines some USB specific constants.<br>
|
* This class manages all USB devices and defines some USB specific constants.<br>
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public class USB {
|
public class USB {
|
||||||
|
|
||||||
// Standard requests (USB spec 9.4)
|
// Standard requests (USB spec 9.4)
|
||||||
/**
|
/**
|
||||||
* This request returns status for the specified recipient (USB spec 9.4.5).
|
* This request returns status for the specified recipient (USB spec 9.4.5).
|
||||||
*
|
*
|
||||||
* @see ch.ntb.usb.Device#controlMsg(int, int, int, int, byte[], int, int,
|
* @see ch.ntb.usb.Device#controlMsg(int, int, int, int, byte[], int, int,
|
||||||
* boolean)
|
* boolean)
|
||||||
*/
|
*/
|
||||||
public static final int REQ_GET_STATUS = 0x00;
|
public static final int REQ_GET_STATUS = 0x00;
|
||||||
/**
|
/**
|
||||||
* This request is used to clear or disable a specific feature (USB spec
|
* This request is used to clear or disable a specific feature (USB spec
|
||||||
* 9.4.1).
|
* 9.4.1).
|
||||||
*
|
*
|
||||||
* @see ch.ntb.usb.Device#controlMsg(int, int, int, int, byte[], int, int,
|
* @see ch.ntb.usb.Device#controlMsg(int, int, int, int, byte[], int, int,
|
||||||
* boolean)
|
* boolean)
|
||||||
*/
|
*/
|
||||||
public static final int REQ_CLEAR_FEATURE = 0x01;
|
public static final int REQ_CLEAR_FEATURE = 0x01;
|
||||||
// 0x02 is reserved
|
// 0x02 is reserved
|
||||||
/**
|
/**
|
||||||
* This request is used to set or enable a specific feature (USB spec
|
* This request is used to set or enable a specific feature (USB spec
|
||||||
* 9.4.9).
|
* 9.4.9).
|
||||||
*
|
*
|
||||||
* @see ch.ntb.usb.Device#controlMsg(int, int, int, int, byte[], int, int,
|
* @see ch.ntb.usb.Device#controlMsg(int, int, int, int, byte[], int, int,
|
||||||
* boolean)
|
* boolean)
|
||||||
*/
|
*/
|
||||||
public static final int REQ_SET_FEATURE = 0x03;
|
public static final int REQ_SET_FEATURE = 0x03;
|
||||||
// 0x04 is reserved
|
// 0x04 is reserved
|
||||||
/**
|
/**
|
||||||
* This request sets the device address for all future device accesses (USB
|
* This request sets the device address for all future device accesses (USB
|
||||||
* spec 9.4.6).
|
* spec 9.4.6).
|
||||||
*
|
*
|
||||||
* @see ch.ntb.usb.Device#controlMsg(int, int, int, int, byte[], int, int,
|
* @see ch.ntb.usb.Device#controlMsg(int, int, int, int, byte[], int, int,
|
||||||
* boolean)
|
* boolean)
|
||||||
*/
|
*/
|
||||||
public static final int REQ_SET_ADDRESS = 0x05;
|
public static final int REQ_SET_ADDRESS = 0x05;
|
||||||
/**
|
/**
|
||||||
* This request returns the specified descriptor if the descriptor exists
|
* This request returns the specified descriptor if the descriptor exists
|
||||||
* (USB spec 9.4.3).
|
* (USB spec 9.4.3).
|
||||||
*
|
*
|
||||||
* @see ch.ntb.usb.Device#controlMsg(int, int, int, int, byte[], int, int,
|
* @see ch.ntb.usb.Device#controlMsg(int, int, int, int, byte[], int, int,
|
||||||
* boolean)
|
* boolean)
|
||||||
*/
|
*/
|
||||||
public static final int REQ_GET_DESCRIPTOR = 0x06;
|
public static final int REQ_GET_DESCRIPTOR = 0x06;
|
||||||
/**
|
/**
|
||||||
* This request is optional and may be used to update existing descriptors
|
* This request is optional and may be used to update existing descriptors
|
||||||
* or new descriptors may be added (USB spec 9.4.8).
|
* or new descriptors may be added (USB spec 9.4.8).
|
||||||
*
|
*
|
||||||
* @see ch.ntb.usb.Device#controlMsg(int, int, int, int, byte[], int, int,
|
* @see ch.ntb.usb.Device#controlMsg(int, int, int, int, byte[], int, int,
|
||||||
* boolean)
|
* boolean)
|
||||||
*/
|
*/
|
||||||
public static final int REQ_SET_DESCRIPTOR = 0x07;
|
public static final int REQ_SET_DESCRIPTOR = 0x07;
|
||||||
/**
|
/**
|
||||||
* This request returns the current device configuration value (USB spec
|
* This request returns the current device configuration value (USB spec
|
||||||
* 9.4.2).
|
* 9.4.2).
|
||||||
*
|
*
|
||||||
* @see ch.ntb.usb.Device#controlMsg(int, int, int, int, byte[], int, int,
|
* @see ch.ntb.usb.Device#controlMsg(int, int, int, int, byte[], int, int,
|
||||||
* boolean)
|
* boolean)
|
||||||
*/
|
*/
|
||||||
public static final int REQ_GET_CONFIGURATION = 0x08;
|
public static final int REQ_GET_CONFIGURATION = 0x08;
|
||||||
/**
|
/**
|
||||||
* This request sets the device configuration (USB spec 9.4.7).
|
* This request sets the device configuration (USB spec 9.4.7).
|
||||||
*
|
*
|
||||||
* @see ch.ntb.usb.Device#controlMsg(int, int, int, int, byte[], int, int,
|
* @see ch.ntb.usb.Device#controlMsg(int, int, int, int, byte[], int, int,
|
||||||
* boolean)
|
* boolean)
|
||||||
*/
|
*/
|
||||||
public static final int REQ_SET_CONFIGURATION = 0x09;
|
public static final int REQ_SET_CONFIGURATION = 0x09;
|
||||||
/**
|
/**
|
||||||
* This request returns the selected alternate setting for the specified
|
* This request returns the selected alternate setting for the specified
|
||||||
* interface (USB spec 9.4.4).
|
* interface (USB spec 9.4.4).
|
||||||
*
|
*
|
||||||
* @see ch.ntb.usb.Device#controlMsg(int, int, int, int, byte[], int, int,
|
* @see ch.ntb.usb.Device#controlMsg(int, int, int, int, byte[], int, int,
|
||||||
* boolean)
|
* boolean)
|
||||||
*/
|
*/
|
||||||
public static final int REQ_GET_INTERFACE = 0x0A;
|
public static final int REQ_GET_INTERFACE = 0x0A;
|
||||||
/**
|
/**
|
||||||
* This request allows the host to select an alternate setting for the
|
* This request allows the host to select an alternate setting for the
|
||||||
* specified interface (USB spec 9.4.10).
|
* specified interface (USB spec 9.4.10).
|
||||||
*
|
*
|
||||||
* @see ch.ntb.usb.Device#controlMsg(int, int, int, int, byte[], int, int,
|
* @see ch.ntb.usb.Device#controlMsg(int, int, int, int, byte[], int, int,
|
||||||
* boolean)
|
* boolean)
|
||||||
*/
|
*/
|
||||||
public static final int REQ_SET_INTERFACE = 0x0B;
|
public static final int REQ_SET_INTERFACE = 0x0B;
|
||||||
/**
|
/**
|
||||||
* This request is used to set and then report an endpoint’s synchronization
|
* This request is used to set and then report an endpoint’s synchronization
|
||||||
* frame (USB spec 9.4.11).
|
* frame (USB spec 9.4.11).
|
||||||
*
|
*
|
||||||
* @see ch.ntb.usb.Device#controlMsg(int, int, int, int, byte[], int, int,
|
* @see ch.ntb.usb.Device#controlMsg(int, int, int, int, byte[], int, int,
|
||||||
* boolean)
|
* boolean)
|
||||||
*/
|
*/
|
||||||
public static final int REQ_SYNCH_FRAME = 0x0C;
|
public static final int REQ_SYNCH_FRAME = 0x0C;
|
||||||
|
|
||||||
// data transfer direction (USB spec 9.3)
|
// data transfer direction (USB spec 9.3)
|
||||||
/**
|
/**
|
||||||
* Identifies the direction of data transfer in the second phase of the
|
* Identifies the direction of data transfer in the second phase of the
|
||||||
* control transfer.<br>
|
* control transfer.<br>
|
||||||
* The state of the Direction bit is ignored if the wLength field is zero,
|
* The state of the Direction bit is ignored if the wLength field is zero,
|
||||||
* signifying there is no Data stage.<br>
|
* signifying there is no Data stage.<br>
|
||||||
* Specifies bit 7 of bmRequestType.
|
* Specifies bit 7 of bmRequestType.
|
||||||
*
|
*
|
||||||
* @see ch.ntb.usb.Device#controlMsg(int, int, int, int, byte[], int, int,
|
* @see ch.ntb.usb.Device#controlMsg(int, int, int, int, byte[], int, int,
|
||||||
* boolean)
|
* boolean)
|
||||||
*/
|
*/
|
||||||
public static final int REQ_TYPE_DIR_HOST_TO_DEVICE = (0x00 << 7),
|
public static final int REQ_TYPE_DIR_HOST_TO_DEVICE = (0x00 << 7),
|
||||||
REQ_TYPE_DIR_DEVICE_TO_HOST = (0x01 << 7);
|
REQ_TYPE_DIR_DEVICE_TO_HOST = (0x01 << 7);
|
||||||
|
|
||||||
// request types (USB spec 9.3)
|
// request types (USB spec 9.3)
|
||||||
/**
|
/**
|
||||||
* Specifies the type of the request.<br>
|
* Specifies the type of the request.<br>
|
||||||
* Specifies bits 6..5 of bmRequestType.
|
* Specifies bits 6..5 of bmRequestType.
|
||||||
*
|
*
|
||||||
* @see ch.ntb.usb.Device#controlMsg(int, int, int, int, byte[], int, int,
|
* @see ch.ntb.usb.Device#controlMsg(int, int, int, int, byte[], int, int,
|
||||||
* boolean)
|
* boolean)
|
||||||
*/
|
*/
|
||||||
public static final int REQ_TYPE_TYPE_STANDARD = (0x00 << 5),
|
public static final int REQ_TYPE_TYPE_STANDARD = (0x00 << 5),
|
||||||
REQ_TYPE_TYPE_CLASS = (0x01 << 5),
|
REQ_TYPE_TYPE_CLASS = (0x01 << 5),
|
||||||
REQ_TYPE_TYPE_VENDOR = (0x02 << 5),
|
REQ_TYPE_TYPE_VENDOR = (0x02 << 5),
|
||||||
REQ_TYPE_TYPE_RESERVED = (0x03 << 5);
|
REQ_TYPE_TYPE_RESERVED = (0x03 << 5);
|
||||||
|
|
||||||
// request recipient (USB spec 9.3)
|
// request recipient (USB spec 9.3)
|
||||||
/**
|
/**
|
||||||
* Specifies the intended recipient of the request.<br>
|
* Specifies the intended recipient of the request.<br>
|
||||||
* Requests may be directed to the device, an interface on the device, or a
|
* Requests may be directed to the device, an interface on the device, or a
|
||||||
* specific endpoint on a device. When an interface or endpoint is
|
* specific endpoint on a device. When an interface or endpoint is
|
||||||
* specified, the wIndex field identifies the interface or endpoint.<br>
|
* specified, the wIndex field identifies the interface or endpoint.<br>
|
||||||
* Specifies bits 4..0 of bmRequestType.
|
* Specifies bits 4..0 of bmRequestType.
|
||||||
*
|
*
|
||||||
* @see ch.ntb.usb.Device#controlMsg(int, int, int, int, byte[], int, int,
|
* @see ch.ntb.usb.Device#controlMsg(int, int, int, int, byte[], int, int,
|
||||||
* boolean)
|
* boolean)
|
||||||
*/
|
*/
|
||||||
public static final int REQ_TYPE_RECIP_DEVICE = 0x00,
|
public static final int REQ_TYPE_RECIP_DEVICE = 0x00,
|
||||||
REQ_TYPE_RECIP_INTERFACE = 0x01, REQ_TYPE_RECIP_ENDPOINT = 0x02,
|
REQ_TYPE_RECIP_INTERFACE = 0x01, REQ_TYPE_RECIP_ENDPOINT = 0x02,
|
||||||
REQ_TYPE_RECIP_OTHER = 0x03;
|
REQ_TYPE_RECIP_OTHER = 0x03;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The maximum packet size of a bulk transfer when operating in highspeed
|
* The maximum packet size of a bulk transfer when operating in highspeed
|
||||||
* (480 MB/s) mode.
|
* (480 MB/s) mode.
|
||||||
*/
|
*/
|
||||||
public static int HIGHSPEED_MAX_BULK_PACKET_SIZE = 512;
|
public static int HIGHSPEED_MAX_BULK_PACKET_SIZE = 512;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The maximum packet size of a bulk transfer when operating in fullspeed
|
* The maximum packet size of a bulk transfer when operating in fullspeed
|
||||||
* (12 MB/s) mode.
|
* (12 MB/s) mode.
|
||||||
*/
|
*/
|
||||||
public static int FULLSPEED_MAX_BULK_PACKET_SIZE = 64;
|
public static int FULLSPEED_MAX_BULK_PACKET_SIZE = 64;
|
||||||
|
|
||||||
private static final Logger logger = LogUtil.getLogger("ch.ntb.usb");
|
private static final Logger logger = LogUtil.getLogger("ch.ntb.usb");
|
||||||
|
|
||||||
private static LinkedList<Device> devices = new LinkedList<Device>();
|
private static LinkedList<Device> devices = new LinkedList<Device>();
|
||||||
|
|
||||||
private static boolean initUSBDone = false;
|
private static boolean initUSBDone = false;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a new device an register it in a device list. If the device is
|
* Create a new device an register it in a device list. If the device is
|
||||||
* already registered, a reference to it will be returned.<br>
|
* already registered, a reference to it will be returned.<br>
|
||||||
* After resetting or re-attaching a device the busName and filename may
|
* After resetting or re-attaching a device the busName and filename may
|
||||||
* change. You can unregister the current device instance (see
|
* change. You can unregister the current device instance (see
|
||||||
* {@link #unregisterDevice(Device)}) and get a new instance with the
|
* {@link #unregisterDevice(Device)}) and get a new instance with the
|
||||||
* updated bus and filename.
|
* updated bus and filename.
|
||||||
*
|
*
|
||||||
* @param idVendor
|
* @param idVendor
|
||||||
* the vendor id of the USB device
|
* the vendor id of the USB device
|
||||||
* @param idProduct
|
* @param idProduct
|
||||||
* the product id of the USB device
|
* the product id of the USB device
|
||||||
* @param busName
|
* @param busName
|
||||||
* optional name of the bus which can be used to distinguish
|
* optional name of the bus which can be used to distinguish
|
||||||
* multiple devices with the same vendor and product id.<br>
|
* multiple devices with the same vendor and product id.<br>
|
||||||
* see {@link Usb_Bus#getDirname()}
|
* see {@link Usb_Bus#getDirname()}
|
||||||
* @param filename
|
* @param filename
|
||||||
* optional filename which can be used to distinguish multiple
|
* optional filename which can be used to distinguish multiple
|
||||||
* devices with the same vendor and product id.<br>
|
* devices with the same vendor and product id.<br>
|
||||||
* see {@link Usb_Device#getFilename()}
|
* see {@link Usb_Device#getFilename()}
|
||||||
* @return a newly created device or an already registered device
|
* @return a newly created device or an already registered device
|
||||||
*/
|
*/
|
||||||
public static Device getDevice(short idVendor, short idProduct,
|
public static Device getDevice(short idVendor, short idProduct,
|
||||||
String busName, String filename) {
|
String busName, String filename) {
|
||||||
|
|
||||||
// check if this device is already registered
|
// check if this device is already registered
|
||||||
Device dev = getRegisteredDevice(idVendor, idProduct, busName, filename);
|
Device dev = getRegisteredDevice(idVendor, idProduct, busName, filename);
|
||||||
if (dev != null) {
|
if (dev != null) {
|
||||||
logger.info("return already registered device: " + dev);
|
logger.info("return already registered device: " + dev);
|
||||||
return dev;
|
return dev;
|
||||||
}
|
}
|
||||||
dev = new Device(idVendor, idProduct, busName, filename);
|
dev = new Device(idVendor, idProduct, busName, filename);
|
||||||
logger.info("create new device: " + dev);
|
logger.info("create new device: " + dev);
|
||||||
devices.add(dev);
|
devices.add(dev);
|
||||||
return dev;
|
return dev;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* See {@link #getDevice(short, short, String, String)}. The parameter
|
* See {@link #getDevice(short, short, String, String)}. The parameter
|
||||||
* <code>filename</code> and <code>busName</code>is set to null.
|
* <code>filename</code> and <code>busName</code>is set to null.
|
||||||
*
|
*
|
||||||
* @param idVendor
|
* @param idVendor
|
||||||
* @param idProduct
|
* @param idProduct
|
||||||
* @return a newly created device or an already registered device
|
* @return a newly created device or an already registered device
|
||||||
*/
|
*/
|
||||||
public static Device getDevice(short idVendor, short idProduct) {
|
public static Device getDevice(short idVendor, short idProduct) {
|
||||||
return getDevice(idVendor, idProduct, null, null);
|
return getDevice(idVendor, idProduct, null, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Unregister a registered device.
|
* Unregister a registered device.
|
||||||
*
|
*
|
||||||
* @param dev
|
* @param dev
|
||||||
* the device to unregister
|
* the device to unregister
|
||||||
* @return true if the device has been removed, else false
|
* @return true if the device has been removed, else false
|
||||||
*/
|
*/
|
||||||
public static boolean unregisterDevice(Device dev) {
|
public static boolean unregisterDevice(Device dev) {
|
||||||
return devices.remove(dev);
|
return devices.remove(dev);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get an already registered device or null if the device does not exist.<br>
|
* Get an already registered device or null if the device does not exist.<br>
|
||||||
* To uniquely identify a device bus and filename should be set. If only one
|
* To uniquely identify a device bus and filename should be set. If only one
|
||||||
* of those is set the first device matching the criteria is returned.
|
* of those is set the first device matching the criteria is returned.
|
||||||
*
|
*
|
||||||
* @param idVendor
|
* @param idVendor
|
||||||
* the vendor id of the USB device
|
* the vendor id of the USB device
|
||||||
* @param idProduct
|
* @param idProduct
|
||||||
* the product id of the USB device
|
* the product id of the USB device
|
||||||
* @param busName
|
* @param busName
|
||||||
* the name of the bus which can be used to distinguish multiple
|
* the name of the bus which can be used to distinguish multiple
|
||||||
* devices with the same vendor and product id.<br>
|
* devices with the same vendor and product id.<br>
|
||||||
* see {@link Usb_Bus#getDirname()}
|
* see {@link Usb_Bus#getDirname()}
|
||||||
* @param filename
|
* @param filename
|
||||||
* an optional filename which can be used to distinguish multiple
|
* an optional filename which can be used to distinguish multiple
|
||||||
* devices with the same vendor and product id. see
|
* devices with the same vendor and product id. see
|
||||||
* {@link Usb_Device#getFilename()}
|
* {@link Usb_Device#getFilename()}
|
||||||
*
|
*
|
||||||
* @return the device or null
|
* @return the device or null
|
||||||
*/
|
*/
|
||||||
private static Device getRegisteredDevice(short idVendor, short idProduct,
|
private static Device getRegisteredDevice(short idVendor, short idProduct,
|
||||||
String busName, String filename) {
|
String busName, String filename) {
|
||||||
for (Iterator<Device> iter = devices.iterator(); iter.hasNext();) {
|
for (Iterator<Device> iter = devices.iterator(); iter.hasNext();) {
|
||||||
Device dev = iter.next();
|
Device dev = iter.next();
|
||||||
// bus and filename
|
// bus and filename
|
||||||
if (busName != null && filename != null) {
|
if (busName != null && filename != null) {
|
||||||
if (busName.compareTo(dev.getBusName() == null ? "" : dev
|
if (busName.compareTo(dev.getBusName() == null ? "" : dev
|
||||||
.getBusName()) == 0
|
.getBusName()) == 0
|
||||||
&& filename.compareTo(dev.getFilename() == null ? ""
|
&& filename.compareTo(dev.getFilename() == null ? ""
|
||||||
: dev.getFilename()) == 0
|
: dev.getFilename()) == 0
|
||||||
&& dev.getIdVendor() == idVendor
|
&& dev.getIdVendor() == idVendor
|
||||||
&& dev.getIdProduct() == idProduct) {
|
&& dev.getIdProduct() == idProduct) {
|
||||||
return dev;
|
return dev;
|
||||||
}
|
}
|
||||||
} else if (filename != null) {
|
} else if (filename != null) {
|
||||||
if (filename.compareTo(dev.getFilename() == null ? "" : dev
|
if (filename.compareTo(dev.getFilename() == null ? "" : dev
|
||||||
.getFilename()) == 0
|
.getFilename()) == 0
|
||||||
&& dev.getIdVendor() == idVendor
|
&& dev.getIdVendor() == idVendor
|
||||||
&& dev.getIdProduct() == idProduct) {
|
&& dev.getIdProduct() == idProduct) {
|
||||||
return dev;
|
return dev;
|
||||||
}
|
}
|
||||||
} else if (busName != null) {
|
} else if (busName != null) {
|
||||||
if (busName.compareTo(dev.getBusName() == null ? "" : dev
|
if (busName.compareTo(dev.getBusName() == null ? "" : dev
|
||||||
.getBusName()) == 0
|
.getBusName()) == 0
|
||||||
&& dev.getIdVendor() == idVendor
|
&& dev.getIdVendor() == idVendor
|
||||||
&& dev.getIdProduct() == idProduct) {
|
&& dev.getIdProduct() == idProduct) {
|
||||||
return dev;
|
return dev;
|
||||||
}
|
}
|
||||||
} else if (dev.getIdVendor() == idVendor
|
} else if (dev.getIdVendor() == idVendor
|
||||||
&& dev.getIdProduct() == idProduct) {
|
&& dev.getIdProduct() == idProduct) {
|
||||||
return dev;
|
return dev;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the root {@link Usb_Bus} element.
|
* Returns the root {@link Usb_Bus} element.
|
||||||
*
|
*
|
||||||
* @return the root {@link Usb_Bus} element
|
* @return the root {@link Usb_Bus} element
|
||||||
* @throws USBException
|
* @throws USBException
|
||||||
*/
|
*/
|
||||||
public static Usb_Bus getBus() throws USBException {
|
public static Usb_Bus getBus() throws USBException {
|
||||||
if (!initUSBDone) {
|
if (!initUSBDone) {
|
||||||
init();
|
init();
|
||||||
}
|
}
|
||||||
LibusbJava.usb_find_busses();
|
LibusbJava.usb_find_busses();
|
||||||
LibusbJava.usb_find_devices();
|
LibusbJava.usb_find_devices();
|
||||||
|
|
||||||
Usb_Bus bus = LibusbJava.usb_get_busses();
|
Usb_Bus bus = LibusbJava.usb_get_busses();
|
||||||
if (bus == null) {
|
if (bus == null) {
|
||||||
throw new USBException("LibusbJava.usb_get_busses(): "
|
throw new USBException("LibusbJava.usb_get_busses(): "
|
||||||
+ LibusbJava.usb_strerror());
|
+ LibusbJava.usb_strerror());
|
||||||
}
|
}
|
||||||
return bus;
|
return bus;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Explicitly calls {@link LibusbJava#usb_init()}. Note that you don't need
|
* Explicitly calls {@link LibusbJava#usb_init()}. Note that you don't need
|
||||||
* to call this procedure as it is called implicitly when creating a new
|
* to call this procedure as it is called implicitly when creating a new
|
||||||
* device with {@link USB#getDevice(short, short, String, String)}.
|
* device with {@link USB#getDevice(short, short, String, String)}.
|
||||||
*/
|
*/
|
||||||
public static void init() {
|
public static void init() {
|
||||||
LibusbJava.usb_init();
|
LibusbJava.usb_init();
|
||||||
initUSBDone = true;
|
initUSBDone = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,23 +1,23 @@
|
|||||||
/*
|
/*
|
||||||
* Java libusb wrapper
|
* Java libusb wrapper
|
||||||
* Copyright (c) 2005-2006 Andreas Schläpfer <spandi at users.sourceforge.net>
|
* Copyright (c) 2005-2006 Andreas Schläpfer <spandi at users.sourceforge.net>
|
||||||
*
|
*
|
||||||
* http://libusbjava.sourceforge.net
|
* http://libusbjava.sourceforge.net
|
||||||
* This library is covered by the LGPL, read LGPL.txt for details.
|
* This library is covered by the LGPL, read LGPL.txt for details.
|
||||||
*/
|
*/
|
||||||
package ch.ntb.usb;
|
package ch.ntb.usb;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
public class USBException extends IOException {
|
public class USBException extends IOException {
|
||||||
|
|
||||||
public USBException(String string) {
|
public USBException(String string) {
|
||||||
super(string);
|
super(string);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
private static final long serialVersionUID = 1690857437804284710L;
|
private static final long serialVersionUID = 1690857437804284710L;
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -1,21 +1,21 @@
|
|||||||
/*
|
/*
|
||||||
* Java libusb wrapper
|
* Java libusb wrapper
|
||||||
* Copyright (c) 2005-2006 Andreas Schläpfer <spandi at users.sourceforge.net>
|
* Copyright (c) 2005-2006 Andreas Schläpfer <spandi at users.sourceforge.net>
|
||||||
*
|
*
|
||||||
* http://libusbjava.sourceforge.net
|
* http://libusbjava.sourceforge.net
|
||||||
* This library is covered by the LGPL, read LGPL.txt for details.
|
* This library is covered by the LGPL, read LGPL.txt for details.
|
||||||
*/
|
*/
|
||||||
package ch.ntb.usb;
|
package ch.ntb.usb;
|
||||||
|
|
||||||
public class USBTimeoutException extends USBException {
|
public class USBTimeoutException extends USBException {
|
||||||
|
|
||||||
public USBTimeoutException(String string) {
|
public USBTimeoutException(String string) {
|
||||||
super(string);
|
super(string);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
private static final long serialVersionUID = -1065328371159778249L;
|
private static final long serialVersionUID = -1065328371159778249L;
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -1,86 +1,86 @@
|
|||||||
/*
|
/*
|
||||||
* Java libusb wrapper
|
* Java libusb wrapper
|
||||||
* Copyright (c) 2005-2006 Andreas Schläpfer <spandi at users.sourceforge.net>
|
* Copyright (c) 2005-2006 Andreas Schläpfer <spandi at users.sourceforge.net>
|
||||||
*
|
*
|
||||||
* http://libusbjava.sourceforge.net
|
* http://libusbjava.sourceforge.net
|
||||||
* This library is covered by the LGPL, read LGPL.txt for details.
|
* This library is covered by the LGPL, read LGPL.txt for details.
|
||||||
*/
|
*/
|
||||||
package ch.ntb.usb;
|
package ch.ntb.usb;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Represents an USB bus.<br>
|
* Represents an USB bus.<br>
|
||||||
* This is the root class for the representation of the libusb USB structure.
|
* This is the root class for the representation of the libusb USB structure.
|
||||||
* Zero or more devices may be connected to an USB bus.
|
* Zero or more devices may be connected to an USB bus.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public class Usb_Bus {
|
public class Usb_Bus {
|
||||||
|
|
||||||
private Usb_Bus next, prev;
|
private Usb_Bus next, prev;
|
||||||
|
|
||||||
private String dirname;
|
private String dirname;
|
||||||
|
|
||||||
private Usb_Device devices;
|
private Usb_Device devices;
|
||||||
|
|
||||||
private long location;
|
private long location;
|
||||||
|
|
||||||
private Usb_Device root_dev;
|
private Usb_Device root_dev;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the first device ojects of the devices linked list.<br>
|
* Get the first device ojects of the devices linked list.<br>
|
||||||
*
|
*
|
||||||
* @return the first device ojects of the devices linked list or null
|
* @return the first device ojects of the devices linked list or null
|
||||||
*/
|
*/
|
||||||
public Usb_Device getDevices() {
|
public Usb_Device getDevices() {
|
||||||
return devices;
|
return devices;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the systems String representation of the bus.<br>
|
* Returns the systems String representation of the bus.<br>
|
||||||
*
|
*
|
||||||
* @return the systems String representation of the bus
|
* @return the systems String representation of the bus
|
||||||
*/
|
*/
|
||||||
public String getDirname() {
|
public String getDirname() {
|
||||||
return dirname;
|
return dirname;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the next bus object.<br>
|
* Returns the next bus object.<br>
|
||||||
*
|
*
|
||||||
* @return Returns the next bus object or null
|
* @return Returns the next bus object or null
|
||||||
*/
|
*/
|
||||||
public Usb_Bus getNext() {
|
public Usb_Bus getNext() {
|
||||||
return next;
|
return next;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the previous bus object.<br>
|
* Returns the previous bus object.<br>
|
||||||
*
|
*
|
||||||
* @return Returns the previous bus object or null
|
* @return Returns the previous bus object or null
|
||||||
*/
|
*/
|
||||||
public Usb_Bus getPrev() {
|
public Usb_Bus getPrev() {
|
||||||
return prev;
|
return prev;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the root device of this bus.<br>
|
* Get the root device of this bus.<br>
|
||||||
*
|
*
|
||||||
* @return the root device oject or null
|
* @return the root device oject or null
|
||||||
*/
|
*/
|
||||||
public Usb_Device getRootDev() {
|
public Usb_Device getRootDev() {
|
||||||
return root_dev;
|
return root_dev;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the location in the USB bus linked list.<br>
|
* Returns the location in the USB bus linked list.<br>
|
||||||
*
|
*
|
||||||
* @return the location in the USB bus linked list
|
* @return the location in the USB bus linked list
|
||||||
*/
|
*/
|
||||||
public long getLocation() {
|
public long getLocation() {
|
||||||
return location;
|
return location;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "Usb_Bus " + dirname;
|
return "Usb_Bus " + dirname;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,139 +1,139 @@
|
|||||||
/*
|
/*
|
||||||
* Java libusb wrapper
|
* Java libusb wrapper
|
||||||
* Copyright (c) 2005-2006 Andreas Schläpfer <spandi at users.sourceforge.net>
|
* Copyright (c) 2005-2006 Andreas Schläpfer <spandi at users.sourceforge.net>
|
||||||
*
|
*
|
||||||
* http://libusbjava.sourceforge.net
|
* http://libusbjava.sourceforge.net
|
||||||
* This library is covered by the LGPL, read LGPL.txt for details.
|
* This library is covered by the LGPL, read LGPL.txt for details.
|
||||||
*/
|
*/
|
||||||
package ch.ntb.usb;
|
package ch.ntb.usb;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Represents the descriptor of a USB configuration.<br>
|
* Represents the descriptor of a USB configuration.<br>
|
||||||
* A USB device can have several different configuration.<br>
|
* A USB device can have several different configuration.<br>
|
||||||
* <br>
|
* <br>
|
||||||
* The length of the configuration descriptor is
|
* The length of the configuration descriptor is
|
||||||
* {@link ch.ntb.usb.Usb_Descriptor#USB_DT_CONFIG_SIZE} and the type is
|
* {@link ch.ntb.usb.Usb_Descriptor#USB_DT_CONFIG_SIZE} and the type is
|
||||||
* {@link ch.ntb.usb.Usb_Descriptor#USB_DT_CONFIG}.
|
* {@link ch.ntb.usb.Usb_Descriptor#USB_DT_CONFIG}.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public class Usb_Config_Descriptor extends Usb_Descriptor {
|
public class Usb_Config_Descriptor extends Usb_Descriptor {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Maximum number of configurations per device
|
* Maximum number of configurations per device
|
||||||
*/
|
*/
|
||||||
public static final int USB_MAXCONFIG = 8;
|
public static final int USB_MAXCONFIG = 8;
|
||||||
|
|
||||||
private short wTotalLength;
|
private short wTotalLength;
|
||||||
|
|
||||||
private byte bNumInterfaces;
|
private byte bNumInterfaces;
|
||||||
|
|
||||||
private byte bConfigurationValue;
|
private byte bConfigurationValue;
|
||||||
|
|
||||||
private byte iConfiguration;
|
private byte iConfiguration;
|
||||||
|
|
||||||
private byte bmAttributes;
|
private byte bmAttributes;
|
||||||
|
|
||||||
private byte MaxPower;
|
private byte MaxPower;
|
||||||
|
|
||||||
private Usb_Interface[] interface_;
|
private Usb_Interface[] interface_;
|
||||||
|
|
||||||
private byte[] extra; /* Extra descriptors */
|
private byte[] extra; /* Extra descriptors */
|
||||||
|
|
||||||
private int extralen;
|
private int extralen;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the value to use as an argument to select this configuration ({@link LibusbJava#usb_set_configuration(long, int)}).
|
* Returns the value to use as an argument to select this configuration ({@link LibusbJava#usb_set_configuration(long, int)}).
|
||||||
*
|
*
|
||||||
* @return the value to use as an argument to select this configuration
|
* @return the value to use as an argument to select this configuration
|
||||||
*/
|
*/
|
||||||
public byte getBConfigurationValue() {
|
public byte getBConfigurationValue() {
|
||||||
return bConfigurationValue;
|
return bConfigurationValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the power parameters for this configuration.<br>
|
* Returns the power parameters for this configuration.<br>
|
||||||
* <br>
|
* <br>
|
||||||
* Bit 7: Reserved, set to 1 (USB 1.0 Bus Powered)<br>
|
* Bit 7: Reserved, set to 1 (USB 1.0 Bus Powered)<br>
|
||||||
* Bit 6: Self Powered<br>
|
* Bit 6: Self Powered<br>
|
||||||
* Bit 5: Remote Wakeup<br>
|
* Bit 5: Remote Wakeup<br>
|
||||||
* Bit 4..0: Reserved, set to 0
|
* Bit 4..0: Reserved, set to 0
|
||||||
*
|
*
|
||||||
* @return the power parameters for this configuration
|
* @return the power parameters for this configuration
|
||||||
*/
|
*/
|
||||||
public byte getBmAttributes() {
|
public byte getBmAttributes() {
|
||||||
return bmAttributes;
|
return bmAttributes;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the number of interfaces.<br>
|
* Returns the number of interfaces.<br>
|
||||||
*
|
*
|
||||||
* @return the number of interfaces
|
* @return the number of interfaces
|
||||||
*/
|
*/
|
||||||
public byte getBNumInterfaces() {
|
public byte getBNumInterfaces() {
|
||||||
return bNumInterfaces;
|
return bNumInterfaces;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the data of extra descriptor(s) if available.<br>
|
* Returns the data of extra descriptor(s) if available.<br>
|
||||||
*
|
*
|
||||||
* @return null or a byte array with the extra descriptor data
|
* @return null or a byte array with the extra descriptor data
|
||||||
*/
|
*/
|
||||||
public byte[] getExtra() {
|
public byte[] getExtra() {
|
||||||
return extra;
|
return extra;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the number of bytes of the extra descriptor.<br>
|
* Returns the number of bytes of the extra descriptor.<br>
|
||||||
*
|
*
|
||||||
* @return the number of bytes of the extra descriptor
|
* @return the number of bytes of the extra descriptor
|
||||||
*/
|
*/
|
||||||
public int getExtralen() {
|
public int getExtralen() {
|
||||||
return extralen;
|
return extralen;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the index of the String descriptor describing this configuration.<br>
|
* Returns the index of the String descriptor describing this configuration.<br>
|
||||||
*
|
*
|
||||||
* @return the index of the String descriptor
|
* @return the index of the String descriptor
|
||||||
*/
|
*/
|
||||||
public byte getIConfiguration() {
|
public byte getIConfiguration() {
|
||||||
return iConfiguration;
|
return iConfiguration;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the USB interface descriptors.<br>
|
* Returns the USB interface descriptors.<br>
|
||||||
*
|
*
|
||||||
* @return the USB interface descriptors
|
* @return the USB interface descriptors
|
||||||
*/
|
*/
|
||||||
public Usb_Interface[] getInterface() {
|
public Usb_Interface[] getInterface() {
|
||||||
return interface_;
|
return interface_;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the maximum power consumption in 2mA units.<br>
|
* Returns the maximum power consumption in 2mA units.<br>
|
||||||
*
|
*
|
||||||
* @return the maximum power consumption in 2mA units
|
* @return the maximum power consumption in 2mA units
|
||||||
*/
|
*/
|
||||||
public byte getMaxPower() {
|
public byte getMaxPower() {
|
||||||
return MaxPower;
|
return MaxPower;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the total length in bytes of all descriptors.<br>
|
* Returns the total length in bytes of all descriptors.<br>
|
||||||
* When the configuration descriptor is read, it returns the entire
|
* When the configuration descriptor is read, it returns the entire
|
||||||
* configuration hierarchy which includes all related interface and endpoint
|
* configuration hierarchy which includes all related interface and endpoint
|
||||||
* descriptors. The <code>wTotalLength</code> field reflects the number of
|
* descriptors. The <code>wTotalLength</code> field reflects the number of
|
||||||
* bytes in the hierarchy.
|
* bytes in the hierarchy.
|
||||||
*
|
*
|
||||||
* @return the total length in bytes of all descriptors
|
* @return the total length in bytes of all descriptors
|
||||||
*/
|
*/
|
||||||
public short getWTotalLength() {
|
public short getWTotalLength() {
|
||||||
return wTotalLength;
|
return wTotalLength;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "Usb_Config_Descriptor bNumInterfaces: 0x"
|
return "Usb_Config_Descriptor bNumInterfaces: 0x"
|
||||||
+ Integer.toHexString(bNumInterfaces);
|
+ Integer.toHexString(bNumInterfaces);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,59 +1,59 @@
|
|||||||
/*
|
/*
|
||||||
* Java libusb wrapper
|
* Java libusb wrapper
|
||||||
* Copyright (c) 2005-2006 Andreas Schläpfer <spandi at users.sourceforge.net>
|
* Copyright (c) 2005-2006 Andreas Schläpfer <spandi at users.sourceforge.net>
|
||||||
*
|
*
|
||||||
* http://libusbjava.sourceforge.net
|
* http://libusbjava.sourceforge.net
|
||||||
* This library is covered by the LGPL, read LGPL.txt for details.
|
* This library is covered by the LGPL, read LGPL.txt for details.
|
||||||
*/
|
*/
|
||||||
package ch.ntb.usb;
|
package ch.ntb.usb;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Common USB descriptor values.<br>
|
* Common USB descriptor values.<br>
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public class Usb_Descriptor {
|
public class Usb_Descriptor {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Descriptor types ({@link #bDescriptorType}).
|
* Descriptor types ({@link #bDescriptorType}).
|
||||||
*/
|
*/
|
||||||
public static final int USB_DT_DEVICE = 0x01, USB_DT_CONFIG = 0x02,
|
public static final int USB_DT_DEVICE = 0x01, USB_DT_CONFIG = 0x02,
|
||||||
USB_DT_STRING = 0x03, USB_DT_INTERFACE = 0x04,
|
USB_DT_STRING = 0x03, USB_DT_INTERFACE = 0x04,
|
||||||
USB_DT_ENDPOINT = 0x05;
|
USB_DT_ENDPOINT = 0x05;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Descriptor types ({@link #bDescriptorType}).
|
* Descriptor types ({@link #bDescriptorType}).
|
||||||
*/
|
*/
|
||||||
public static final int USB_DT_HID = 0x21, USB_DT_REPORT = 0x22,
|
public static final int USB_DT_HID = 0x21, USB_DT_REPORT = 0x22,
|
||||||
USB_DT_PHYSICAL = 0x23, USB_DT_HUB = 0x29;
|
USB_DT_PHYSICAL = 0x23, USB_DT_HUB = 0x29;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Descriptor sizes per descriptor type ({@link #bLength}).
|
* Descriptor sizes per descriptor type ({@link #bLength}).
|
||||||
*/
|
*/
|
||||||
public static final int USB_DT_DEVICE_SIZE = 18, USB_DT_CONFIG_SIZE = 9,
|
public static final int USB_DT_DEVICE_SIZE = 18, USB_DT_CONFIG_SIZE = 9,
|
||||||
USB_DT_INTERFACE_SIZE = 9, USB_DT_ENDPOINT_SIZE = 7,
|
USB_DT_INTERFACE_SIZE = 9, USB_DT_ENDPOINT_SIZE = 7,
|
||||||
USB_DT_ENDPOINT_AUDIO_SIZE = 9 /* Audio extension */,
|
USB_DT_ENDPOINT_AUDIO_SIZE = 9 /* Audio extension */,
|
||||||
USB_DT_HUB_NONVAR_SIZE = 7;
|
USB_DT_HUB_NONVAR_SIZE = 7;
|
||||||
|
|
||||||
private byte bLength;
|
private byte bLength;
|
||||||
|
|
||||||
private byte bDescriptorType;
|
private byte bDescriptorType;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the type of this descriptor.<br>
|
* Get the type of this descriptor.<br>
|
||||||
*
|
*
|
||||||
* @return the type of this descriptor
|
* @return the type of this descriptor
|
||||||
*/
|
*/
|
||||||
public byte getBDescriptorType() {
|
public byte getBDescriptorType() {
|
||||||
return bDescriptorType;
|
return bDescriptorType;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the size of this descriptor in bytes.<br>
|
* Get the size of this descriptor in bytes.<br>
|
||||||
*
|
*
|
||||||
* @return the size of this descriptor in bytes
|
* @return the size of this descriptor in bytes
|
||||||
*/
|
*/
|
||||||
public byte getBLength() {
|
public byte getBLength() {
|
||||||
return bLength;
|
return bLength;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -1,125 +1,125 @@
|
|||||||
/*
|
/*
|
||||||
* Java libusb wrapper
|
* Java libusb wrapper
|
||||||
* Copyright (c) 2005-2006 Andreas Schläpfer <spandi at users.sourceforge.net>
|
* Copyright (c) 2005-2006 Andreas Schläpfer <spandi at users.sourceforge.net>
|
||||||
*
|
*
|
||||||
* http://libusbjava.sourceforge.net
|
* http://libusbjava.sourceforge.net
|
||||||
* This library is covered by the LGPL, read LGPL.txt for details.
|
* This library is covered by the LGPL, read LGPL.txt for details.
|
||||||
*/
|
*/
|
||||||
package ch.ntb.usb;
|
package ch.ntb.usb;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Represents an USB device.<br>
|
* Represents an USB device.<br>
|
||||||
* An USB device has one device descriptor and it may have multiple
|
* An USB device has one device descriptor and it may have multiple
|
||||||
* configuration descriptors.
|
* configuration descriptors.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public class Usb_Device {
|
public class Usb_Device {
|
||||||
|
|
||||||
private Usb_Device next, prev;
|
private Usb_Device next, prev;
|
||||||
|
|
||||||
private String filename;
|
private String filename;
|
||||||
|
|
||||||
private Usb_Bus bus;
|
private Usb_Bus bus;
|
||||||
|
|
||||||
private Usb_Device_Descriptor descriptor;
|
private Usb_Device_Descriptor descriptor;
|
||||||
|
|
||||||
private Usb_Config_Descriptor[] config;
|
private Usb_Config_Descriptor[] config;
|
||||||
|
|
||||||
private byte devnum;
|
private byte devnum;
|
||||||
|
|
||||||
private byte num_children;
|
private byte num_children;
|
||||||
|
|
||||||
private Usb_Device children;
|
private Usb_Device children;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The address of the device structure to be passed to usb_open. This value
|
* The address of the device structure to be passed to usb_open. This value
|
||||||
* is used only internally so we don't use getter or setter methods.
|
* is used only internally so we don't use getter or setter methods.
|
||||||
*/
|
*/
|
||||||
public long devStructAddr;
|
public long devStructAddr;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the reference to the bus to which this device is connected.<br>
|
* Returns the reference to the bus to which this device is connected.<br>
|
||||||
*
|
*
|
||||||
* @return the reference to the bus to which this device is connected
|
* @return the reference to the bus to which this device is connected
|
||||||
*/
|
*/
|
||||||
public Usb_Bus getBus() {
|
public Usb_Bus getBus() {
|
||||||
return bus;
|
return bus;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns a reference to the first child.<br>
|
* Returns a reference to the first child.<br>
|
||||||
*
|
*
|
||||||
* @return a reference to the first child
|
* @return a reference to the first child
|
||||||
*/
|
*/
|
||||||
public Usb_Device getChildren() {
|
public Usb_Device getChildren() {
|
||||||
return children;
|
return children;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the USB config descriptors.<br>
|
* Returns the USB config descriptors.<br>
|
||||||
*
|
*
|
||||||
* @return the USB config descriptors
|
* @return the USB config descriptors
|
||||||
*/
|
*/
|
||||||
public Usb_Config_Descriptor[] getConfig() {
|
public Usb_Config_Descriptor[] getConfig() {
|
||||||
return config;
|
return config;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the USB device descriptor.<br>
|
* Returns the USB device descriptor.<br>
|
||||||
*
|
*
|
||||||
* @return the USB device descriptor
|
* @return the USB device descriptor
|
||||||
*/
|
*/
|
||||||
public Usb_Device_Descriptor getDescriptor() {
|
public Usb_Device_Descriptor getDescriptor() {
|
||||||
return descriptor;
|
return descriptor;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the number assigned to this device.<br>
|
* Returns the number assigned to this device.<br>
|
||||||
*
|
*
|
||||||
* @return the number assigned to this device
|
* @return the number assigned to this device
|
||||||
*/
|
*/
|
||||||
public byte getDevnum() {
|
public byte getDevnum() {
|
||||||
return devnum;
|
return devnum;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the systems String representation.<br>
|
* Returns the systems String representation.<br>
|
||||||
*
|
*
|
||||||
* @return the systems String representation
|
* @return the systems String representation
|
||||||
*/
|
*/
|
||||||
public String getFilename() {
|
public String getFilename() {
|
||||||
return filename;
|
return filename;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the pointer to the next device.<br>
|
* Returns the pointer to the next device.<br>
|
||||||
*
|
*
|
||||||
* @return the pointer to the next device or null
|
* @return the pointer to the next device or null
|
||||||
*/
|
*/
|
||||||
public Usb_Device getNext() {
|
public Usb_Device getNext() {
|
||||||
return next;
|
return next;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the number of children of this device.<br>
|
* Returns the number of children of this device.<br>
|
||||||
*
|
*
|
||||||
* @return the number of children of this device
|
* @return the number of children of this device
|
||||||
*/
|
*/
|
||||||
public byte getNumChildren() {
|
public byte getNumChildren() {
|
||||||
return num_children;
|
return num_children;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the pointer to the previous device.<br>
|
* Returns the pointer to the previous device.<br>
|
||||||
*
|
*
|
||||||
* @return the pointer to the previous device or null
|
* @return the pointer to the previous device or null
|
||||||
*/
|
*/
|
||||||
public Usb_Device getPrev() {
|
public Usb_Device getPrev() {
|
||||||
return prev;
|
return prev;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "Usb_Device " + filename;
|
return "Usb_Device " + filename;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,190 +1,190 @@
|
|||||||
/*
|
/*
|
||||||
* Java libusb wrapper
|
* Java libusb wrapper
|
||||||
* Copyright (c) 2005-2006 Andreas Schläpfer <spandi at users.sourceforge.net>
|
* Copyright (c) 2005-2006 Andreas Schläpfer <spandi at users.sourceforge.net>
|
||||||
*
|
*
|
||||||
* http://libusbjava.sourceforge.net
|
* http://libusbjava.sourceforge.net
|
||||||
* This library is covered by the LGPL, read LGPL.txt for details.
|
* This library is covered by the LGPL, read LGPL.txt for details.
|
||||||
*/
|
*/
|
||||||
package ch.ntb.usb;
|
package ch.ntb.usb;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Represents the descriptor of a USB device.<br>
|
* Represents the descriptor of a USB device.<br>
|
||||||
* A USB device can only have one device descriptor. It specifies some basic,
|
* A USB device can only have one device descriptor. It specifies some basic,
|
||||||
* yet important information about the device.<br>
|
* yet important information about the device.<br>
|
||||||
* <br>
|
* <br>
|
||||||
* The length of the device descriptor is
|
* The length of the device descriptor is
|
||||||
* {@link ch.ntb.usb.Usb_Descriptor#USB_DT_DEVICE_SIZE} and the type is
|
* {@link ch.ntb.usb.Usb_Descriptor#USB_DT_DEVICE_SIZE} and the type is
|
||||||
* {@link ch.ntb.usb.Usb_Descriptor#USB_DT_DEVICE}.
|
* {@link ch.ntb.usb.Usb_Descriptor#USB_DT_DEVICE}.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public class Usb_Device_Descriptor extends Usb_Descriptor {
|
public class Usb_Device_Descriptor extends Usb_Descriptor {
|
||||||
/**
|
/**
|
||||||
* Device and/or interface class codes.
|
* Device and/or interface class codes.
|
||||||
*/
|
*/
|
||||||
public static final int USB_CLASS_PER_INTERFACE = 0, USB_CLASS_AUDIO = 1,
|
public static final int USB_CLASS_PER_INTERFACE = 0, USB_CLASS_AUDIO = 1,
|
||||||
USB_CLASS_COMM = 2, USB_CLASS_HID = 3, USB_CLASS_PRINTER = 7,
|
USB_CLASS_COMM = 2, USB_CLASS_HID = 3, USB_CLASS_PRINTER = 7,
|
||||||
USB_CLASS_MASS_STORAGE = 8, USB_CLASS_HUB = 9, USB_CLASS_DATA = 10,
|
USB_CLASS_MASS_STORAGE = 8, USB_CLASS_HUB = 9, USB_CLASS_DATA = 10,
|
||||||
USB_CLASS_VENDOR_SPEC = 0xff;
|
USB_CLASS_VENDOR_SPEC = 0xff;
|
||||||
|
|
||||||
private short bcdUSB;
|
private short bcdUSB;
|
||||||
|
|
||||||
private byte bDeviceClass;
|
private byte bDeviceClass;
|
||||||
|
|
||||||
private byte bDeviceSubClass;
|
private byte bDeviceSubClass;
|
||||||
|
|
||||||
private byte bDeviceProtocol;
|
private byte bDeviceProtocol;
|
||||||
|
|
||||||
private byte bMaxPacketSize0;
|
private byte bMaxPacketSize0;
|
||||||
|
|
||||||
private short idVendor;
|
private short idVendor;
|
||||||
|
|
||||||
private short idProduct;
|
private short idProduct;
|
||||||
|
|
||||||
private short bcdDevice;
|
private short bcdDevice;
|
||||||
|
|
||||||
private byte iManufacturer;
|
private byte iManufacturer;
|
||||||
|
|
||||||
private byte iProduct;
|
private byte iProduct;
|
||||||
|
|
||||||
private byte iSerialNumber;
|
private byte iSerialNumber;
|
||||||
|
|
||||||
private byte bNumConfigurations;
|
private byte bNumConfigurations;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the device release number.<br>
|
* Returns the device release number.<br>
|
||||||
* Assigned by the manufacturer of the device.
|
* Assigned by the manufacturer of the device.
|
||||||
*
|
*
|
||||||
* @return the device release number
|
* @return the device release number
|
||||||
*/
|
*/
|
||||||
public short getBcdDevice() {
|
public short getBcdDevice() {
|
||||||
return bcdDevice;
|
return bcdDevice;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the USB specification number to which the device complies to.<br>
|
* Returns the USB specification number to which the device complies to.<br>
|
||||||
* This field reports the highest version of USB the device supports. The
|
* This field reports the highest version of USB the device supports. The
|
||||||
* value is in binary coded decimal with a format of 0xJJMN where JJ is the
|
* value is in binary coded decimal with a format of 0xJJMN where JJ is the
|
||||||
* major version number, M is the minor version number and N is the sub
|
* major version number, M is the minor version number and N is the sub
|
||||||
* minor version number.<br>
|
* minor version number.<br>
|
||||||
* Examples: USB 2.0 is reported as 0x0200, USB 1.1 as 0x0110 and USB 1.0 as
|
* Examples: USB 2.0 is reported as 0x0200, USB 1.1 as 0x0110 and USB 1.0 as
|
||||||
* 0x100
|
* 0x100
|
||||||
*
|
*
|
||||||
* @return the USB specification number to which the device complies to
|
* @return the USB specification number to which the device complies to
|
||||||
*/
|
*/
|
||||||
public short getBcdUSB() {
|
public short getBcdUSB() {
|
||||||
return bcdUSB;
|
return bcdUSB;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the class code (Assigned by <a
|
* Returns the class code (Assigned by <a
|
||||||
* href="http://www.usb.org">www.usb.org</a>)<br>
|
* href="http://www.usb.org">www.usb.org</a>)<br>
|
||||||
* If equal to zero, each interface specifies it's own class code. If equal
|
* If equal to zero, each interface specifies it's own class code. If equal
|
||||||
* to 0xFF, the class code is vendor specified. Otherwise the field is a
|
* to 0xFF, the class code is vendor specified. Otherwise the field is a
|
||||||
* valid class code.
|
* valid class code.
|
||||||
*
|
*
|
||||||
* @return the class code
|
* @return the class code
|
||||||
*/
|
*/
|
||||||
public byte getBDeviceClass() {
|
public byte getBDeviceClass() {
|
||||||
return bDeviceClass;
|
return bDeviceClass;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the protocol code (Assigned by <a
|
* Returns the protocol code (Assigned by <a
|
||||||
* href="http://www.usb.org">www.usb.org</a>)<br>
|
* href="http://www.usb.org">www.usb.org</a>)<br>
|
||||||
*
|
*
|
||||||
* @return the protocol code
|
* @return the protocol code
|
||||||
*/
|
*/
|
||||||
public byte getBDeviceProtocol() {
|
public byte getBDeviceProtocol() {
|
||||||
return bDeviceProtocol;
|
return bDeviceProtocol;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the subclass code (Assigned by <a
|
* Returns the subclass code (Assigned by <a
|
||||||
* href="http://www.usb.org">www.usb.org</a>)<br>
|
* href="http://www.usb.org">www.usb.org</a>)<br>
|
||||||
*
|
*
|
||||||
* @return the subclass code
|
* @return the subclass code
|
||||||
*/
|
*/
|
||||||
public byte getBDeviceSubClass() {
|
public byte getBDeviceSubClass() {
|
||||||
return bDeviceSubClass;
|
return bDeviceSubClass;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the maximum packet size for endpoint zero.<br>
|
* Returns the maximum packet size for endpoint zero.<br>
|
||||||
* Valid sizes are 8, 16, 32, 64.
|
* Valid sizes are 8, 16, 32, 64.
|
||||||
*
|
*
|
||||||
* @return the maximum packet size for endpoint zero
|
* @return the maximum packet size for endpoint zero
|
||||||
*/
|
*/
|
||||||
public byte getBMaxPacketSize0() {
|
public byte getBMaxPacketSize0() {
|
||||||
return bMaxPacketSize0;
|
return bMaxPacketSize0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the number of possible configurations supported at its current
|
* Returns the number of possible configurations supported at its current
|
||||||
* speed.<br>
|
* speed.<br>
|
||||||
*
|
*
|
||||||
* @return the number of possible configurations supported at its current
|
* @return the number of possible configurations supported at its current
|
||||||
* speed
|
* speed
|
||||||
*/
|
*/
|
||||||
public byte getBNumConfigurations() {
|
public byte getBNumConfigurations() {
|
||||||
return bNumConfigurations;
|
return bNumConfigurations;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the product ID (Assigned by <a
|
* Returns the product ID (Assigned by <a
|
||||||
* href="http://www.usb.org">www.usb.org</a>)<br>
|
* href="http://www.usb.org">www.usb.org</a>)<br>
|
||||||
*
|
*
|
||||||
* @return the product ID
|
* @return the product ID
|
||||||
*/
|
*/
|
||||||
public short getIdProduct() {
|
public short getIdProduct() {
|
||||||
return idProduct;
|
return idProduct;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the Vendor ID (Assigned by <a
|
* Returns the Vendor ID (Assigned by <a
|
||||||
* href="http://www.usb.org">www.usb.org</a>)<br>
|
* href="http://www.usb.org">www.usb.org</a>)<br>
|
||||||
*
|
*
|
||||||
* @return the Vendor ID
|
* @return the Vendor ID
|
||||||
*/
|
*/
|
||||||
public short getIdVendor() {
|
public short getIdVendor() {
|
||||||
return idVendor;
|
return idVendor;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the index of the manufacturer string descriptor.<br>
|
* Returns the index of the manufacturer string descriptor.<br>
|
||||||
* If this value is 0, no string descriptor is used.
|
* If this value is 0, no string descriptor is used.
|
||||||
*
|
*
|
||||||
* @return the index of the manufacturer string descriptor
|
* @return the index of the manufacturer string descriptor
|
||||||
*/
|
*/
|
||||||
public byte getIManufacturer() {
|
public byte getIManufacturer() {
|
||||||
return iManufacturer;
|
return iManufacturer;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the index of the product string descriptor.<br>
|
* Returns the index of the product string descriptor.<br>
|
||||||
* If this value is 0, no string descriptor is used.
|
* If this value is 0, no string descriptor is used.
|
||||||
*
|
*
|
||||||
* @return the index of the product string descriptor
|
* @return the index of the product string descriptor
|
||||||
*/
|
*/
|
||||||
public byte getIProduct() {
|
public byte getIProduct() {
|
||||||
return iProduct;
|
return iProduct;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the index of serial number string descriptor.<br>
|
* Returns the index of serial number string descriptor.<br>
|
||||||
* If this value is 0, no string descriptor is used.
|
* If this value is 0, no string descriptor is used.
|
||||||
*
|
*
|
||||||
* @return the index of serial number string descriptor
|
* @return the index of serial number string descriptor
|
||||||
*/
|
*/
|
||||||
public byte getISerialNumber() {
|
public byte getISerialNumber() {
|
||||||
return iSerialNumber;
|
return iSerialNumber;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
StringBuffer sb = new StringBuffer();
|
StringBuffer sb = new StringBuffer();
|
||||||
sb.append("Usb_Device_Descriptor idVendor: 0x"
|
sb.append("Usb_Device_Descriptor idVendor: 0x"
|
||||||
+ Integer.toHexString(idVendor & 0xFFFF) + ", idProduct: 0x"
|
+ Integer.toHexString(idVendor & 0xFFFF) + ", idProduct: 0x"
|
||||||
+ Integer.toHexString(idProduct & 0xFFFF));
|
+ Integer.toHexString(idProduct & 0xFFFF));
|
||||||
return sb.toString();
|
return sb.toString();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,158 +1,158 @@
|
|||||||
/*
|
/*
|
||||||
* Java libusb wrapper
|
* Java libusb wrapper
|
||||||
* Copyright (c) 2005-2006 Andreas Schläpfer <spandi at users.sourceforge.net>
|
* Copyright (c) 2005-2006 Andreas Schläpfer <spandi at users.sourceforge.net>
|
||||||
*
|
*
|
||||||
* http://libusbjava.sourceforge.net
|
* http://libusbjava.sourceforge.net
|
||||||
* This library is covered by the LGPL, read LGPL.txt for details.
|
* This library is covered by the LGPL, read LGPL.txt for details.
|
||||||
*/
|
*/
|
||||||
package ch.ntb.usb;
|
package ch.ntb.usb;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Represents the descriptor of an USB endpoint.<br>
|
* Represents the descriptor of an USB endpoint.<br>
|
||||||
* Endpoint descriptors are used to describe endpoints other than endpoint zero.
|
* Endpoint descriptors are used to describe endpoints other than endpoint zero.
|
||||||
* Endpoint zero is always assumed to be a control endpoint and is configured
|
* Endpoint zero is always assumed to be a control endpoint and is configured
|
||||||
* before any descriptors are even requested. The host will use the information
|
* before any descriptors are even requested. The host will use the information
|
||||||
* returned from these descriptors to determine the bandwidth requirements of
|
* returned from these descriptors to determine the bandwidth requirements of
|
||||||
* the bus.<br>
|
* the bus.<br>
|
||||||
* <br>
|
* <br>
|
||||||
* The length of the configuration descriptor is
|
* The length of the configuration descriptor is
|
||||||
* {@link ch.ntb.usb.Usb_Descriptor#USB_DT_ENDPOINT_SIZE} and the type is
|
* {@link ch.ntb.usb.Usb_Descriptor#USB_DT_ENDPOINT_SIZE} and the type is
|
||||||
* {@link ch.ntb.usb.Usb_Descriptor#USB_DT_ENDPOINT}.
|
* {@link ch.ntb.usb.Usb_Descriptor#USB_DT_ENDPOINT}.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public class Usb_Endpoint_Descriptor extends Usb_Descriptor {
|
public class Usb_Endpoint_Descriptor extends Usb_Descriptor {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Maximum number of endpoints
|
* Maximum number of endpoints
|
||||||
*/
|
*/
|
||||||
public static final int USB_MAXENDPOINTS = 32;
|
public static final int USB_MAXENDPOINTS = 32;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Endpoint address mask (in bEndpointAddress).
|
* Endpoint address mask (in bEndpointAddress).
|
||||||
*/
|
*/
|
||||||
public static final int USB_ENDPOINT_ADDRESS_MASK = 0x0f,
|
public static final int USB_ENDPOINT_ADDRESS_MASK = 0x0f,
|
||||||
USB_ENDPOINT_DIR_MASK = 0x80;
|
USB_ENDPOINT_DIR_MASK = 0x80;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Endpoint type mask (in bmAttributes).
|
* Endpoint type mask (in bmAttributes).
|
||||||
*/
|
*/
|
||||||
public static final int USB_ENDPOINT_TYPE_MASK = 0x03;
|
public static final int USB_ENDPOINT_TYPE_MASK = 0x03;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Possible endpoint types (in bmAttributes).
|
* Possible endpoint types (in bmAttributes).
|
||||||
*/
|
*/
|
||||||
public static final int USB_ENDPOINT_TYPE_CONTROL = 0,
|
public static final int USB_ENDPOINT_TYPE_CONTROL = 0,
|
||||||
USB_ENDPOINT_TYPE_ISOCHRONOUS = 1, USB_ENDPOINT_TYPE_BULK = 2,
|
USB_ENDPOINT_TYPE_ISOCHRONOUS = 1, USB_ENDPOINT_TYPE_BULK = 2,
|
||||||
USB_ENDPOINT_TYPE_INTERRUPT = 3;
|
USB_ENDPOINT_TYPE_INTERRUPT = 3;
|
||||||
|
|
||||||
private byte bEndpointAddress;
|
private byte bEndpointAddress;
|
||||||
|
|
||||||
private byte bmAttributes;
|
private byte bmAttributes;
|
||||||
|
|
||||||
private short wMaxPacketSize;
|
private short wMaxPacketSize;
|
||||||
|
|
||||||
private byte bInterval;
|
private byte bInterval;
|
||||||
|
|
||||||
private byte bRefresh;
|
private byte bRefresh;
|
||||||
|
|
||||||
private byte bSynchAddress;
|
private byte bSynchAddress;
|
||||||
|
|
||||||
private byte[] extra; /* Extra descriptors */
|
private byte[] extra; /* Extra descriptors */
|
||||||
|
|
||||||
private int extralen;
|
private int extralen;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the endpoint address.<br>
|
* Returns the endpoint address.<br>
|
||||||
* <br>
|
* <br>
|
||||||
* Bits 3..0: Endpoint number <br>
|
* Bits 3..0: Endpoint number <br>
|
||||||
* Bits 6..4: Reserved. Set to zero <br>
|
* Bits 6..4: Reserved. Set to zero <br>
|
||||||
* Bit 7: Direction (host to device). 0 = OUT (send data from host to
|
* Bit 7: Direction (host to device). 0 = OUT (send data from host to
|
||||||
* device), 1 = IN (host receives data from device). Note: these values are
|
* device), 1 = IN (host receives data from device). Note: these values are
|
||||||
* ignored for control endpoints.<br>
|
* ignored for control endpoints.<br>
|
||||||
*
|
*
|
||||||
* @return the endpoint address
|
* @return the endpoint address
|
||||||
*/
|
*/
|
||||||
public byte getBEndpointAddress() {
|
public byte getBEndpointAddress() {
|
||||||
return bEndpointAddress;
|
return bEndpointAddress;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the intervall for polling endpoint data transfers.<br>
|
* Returns the intervall for polling endpoint data transfers.<br>
|
||||||
* Value in frame counts. Ignored for Bulk & Control eEndpoints. Isochronous
|
* Value in frame counts. Ignored for Bulk & Control eEndpoints. Isochronous
|
||||||
* endpoints must equal 1 and field may range from 1 to 255 for interrupt
|
* endpoints must equal 1 and field may range from 1 to 255 for interrupt
|
||||||
* endpoints.
|
* endpoints.
|
||||||
*
|
*
|
||||||
* @return the intervall for polling endpoint data transfers
|
* @return the intervall for polling endpoint data transfers
|
||||||
*/
|
*/
|
||||||
public byte getBInterval() {
|
public byte getBInterval() {
|
||||||
return bInterval;
|
return bInterval;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the attributes of this endpoint.<br>
|
* Returns the attributes of this endpoint.<br>
|
||||||
*
|
*
|
||||||
* Bits 1..0: Transfer Type (see <i>USB_ENDPOINT_TYPE_XXX</i>).<br>
|
* Bits 1..0: Transfer Type (see <i>USB_ENDPOINT_TYPE_XXX</i>).<br>
|
||||||
* Bits 7..2: Reserved.<br>
|
* Bits 7..2: Reserved.<br>
|
||||||
*
|
*
|
||||||
* <pre>
|
* <pre>
|
||||||
* If isochronous endpoint:
|
* If isochronous endpoint:
|
||||||
* Bits 3..2: Synchronisation type
|
* Bits 3..2: Synchronisation type
|
||||||
* 00 = No synchronisation
|
* 00 = No synchronisation
|
||||||
* 01 = Asynchronous
|
* 01 = Asynchronous
|
||||||
* 10 = Adaptive
|
* 10 = Adaptive
|
||||||
* 11 = Synchronous
|
* 11 = Synchronous
|
||||||
* Bits 5..4: Usage Type
|
* Bits 5..4: Usage Type
|
||||||
* 00 = Data endpoint
|
* 00 = Data endpoint
|
||||||
* 01 = Feedback endpoint
|
* 01 = Feedback endpoint
|
||||||
* 10 = Explicit feedback data endpoint
|
* 10 = Explicit feedback data endpoint
|
||||||
* 11 = Reserved
|
* 11 = Reserved
|
||||||
* </pre>
|
* </pre>
|
||||||
*
|
*
|
||||||
* @return the attributes of this endpoint
|
* @return the attributes of this endpoint
|
||||||
*/
|
*/
|
||||||
public byte getBmAttributes() {
|
public byte getBmAttributes() {
|
||||||
return bmAttributes;
|
return bmAttributes;
|
||||||
}
|
}
|
||||||
|
|
||||||
public byte getBRefresh() {
|
public byte getBRefresh() {
|
||||||
return bRefresh;
|
return bRefresh;
|
||||||
}
|
}
|
||||||
|
|
||||||
public byte getBSynchAddress() {
|
public byte getBSynchAddress() {
|
||||||
return bSynchAddress;
|
return bSynchAddress;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the data of extra descriptor(s) if available.<br>
|
* Returns the data of extra descriptor(s) if available.<br>
|
||||||
*
|
*
|
||||||
* @return null or a byte array with the extra descriptor data
|
* @return null or a byte array with the extra descriptor data
|
||||||
*/
|
*/
|
||||||
public byte[] getExtra() {
|
public byte[] getExtra() {
|
||||||
return extra;
|
return extra;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the number of bytes of the extra descriptor.<br>
|
* Returns the number of bytes of the extra descriptor.<br>
|
||||||
*
|
*
|
||||||
* @return the number of bytes of the extra descriptor
|
* @return the number of bytes of the extra descriptor
|
||||||
*/
|
*/
|
||||||
public int getExtralen() {
|
public int getExtralen() {
|
||||||
return extralen;
|
return extralen;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the maximum packet size of this endpoint is capable of sending or
|
* Returns the maximum packet size of this endpoint is capable of sending or
|
||||||
* receiving.<br>
|
* receiving.<br>
|
||||||
*
|
*
|
||||||
* @return the maximum packet size
|
* @return the maximum packet size
|
||||||
*/
|
*/
|
||||||
public short getWMaxPacketSize() {
|
public short getWMaxPacketSize() {
|
||||||
return wMaxPacketSize;
|
return wMaxPacketSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "Usb_Endpoint_Descriptor bEndpointAddress: 0x"
|
return "Usb_Endpoint_Descriptor bEndpointAddress: 0x"
|
||||||
+ Integer.toHexString(bEndpointAddress & 0xFF);
|
+ Integer.toHexString(bEndpointAddress & 0xFF);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,50 +1,50 @@
|
|||||||
/*
|
/*
|
||||||
* Java libusb wrapper
|
* Java libusb wrapper
|
||||||
* Copyright (c) 2005-2006 Andreas Schläpfer <spandi at users.sourceforge.net>
|
* Copyright (c) 2005-2006 Andreas Schläpfer <spandi at users.sourceforge.net>
|
||||||
*
|
*
|
||||||
* http://libusbjava.sourceforge.net
|
* http://libusbjava.sourceforge.net
|
||||||
* This library is covered by the LGPL, read LGPL.txt for details.
|
* This library is covered by the LGPL, read LGPL.txt for details.
|
||||||
*/
|
*/
|
||||||
package ch.ntb.usb;
|
package ch.ntb.usb;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Represents an USB interface.<br>
|
* Represents an USB interface.<br>
|
||||||
* An interface is a group of alternate settings of a configuration.<br>
|
* An interface is a group of alternate settings of a configuration.<br>
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public class Usb_Interface {
|
public class Usb_Interface {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Maximal number of alternate settings
|
* Maximal number of alternate settings
|
||||||
*/
|
*/
|
||||||
public static final int USB_MAXALTSETTING = 128; /* Hard limit */
|
public static final int USB_MAXALTSETTING = 128; /* Hard limit */
|
||||||
|
|
||||||
private Usb_Interface_Descriptor[] altsetting;
|
private Usb_Interface_Descriptor[] altsetting;
|
||||||
|
|
||||||
private int num_altsetting;
|
private int num_altsetting;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "Usb_Interface num_altsetting: 0x"
|
return "Usb_Interface num_altsetting: 0x"
|
||||||
+ Integer.toHexString(num_altsetting);
|
+ Integer.toHexString(num_altsetting);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Retuns an array of interface descriptors.<br>
|
* Retuns an array of interface descriptors.<br>
|
||||||
*
|
*
|
||||||
* @return an array of interface descriptors
|
* @return an array of interface descriptors
|
||||||
*/
|
*/
|
||||||
public Usb_Interface_Descriptor[] getAltsetting() {
|
public Usb_Interface_Descriptor[] getAltsetting() {
|
||||||
return altsetting;
|
return altsetting;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the number of alternate settings.<br>
|
* Returns the number of alternate settings.<br>
|
||||||
*
|
*
|
||||||
* @return the number of alternate settings
|
* @return the number of alternate settings
|
||||||
*/
|
*/
|
||||||
public int getNumAltsetting() {
|
public int getNumAltsetting() {
|
||||||
return num_altsetting;
|
return num_altsetting;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -1,145 +1,145 @@
|
|||||||
/*
|
/*
|
||||||
* Java libusb wrapper
|
* Java libusb wrapper
|
||||||
* Copyright (c) 2005-2006 Andreas Schläpfer <spandi at users.sourceforge.net>
|
* Copyright (c) 2005-2006 Andreas Schläpfer <spandi at users.sourceforge.net>
|
||||||
*
|
*
|
||||||
* http://libusbjava.sourceforge.net
|
* http://libusbjava.sourceforge.net
|
||||||
* This library is covered by the LGPL, read LGPL.txt for details.
|
* This library is covered by the LGPL, read LGPL.txt for details.
|
||||||
*/
|
*/
|
||||||
package ch.ntb.usb;
|
package ch.ntb.usb;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Represents the descriptor of a USB interface.<br>
|
* Represents the descriptor of a USB interface.<br>
|
||||||
* The interface descriptor could be seen as a header or grouping of the
|
* The interface descriptor could be seen as a header or grouping of the
|
||||||
* endpoints into a functional group performing a single feature of the device.<br>
|
* endpoints into a functional group performing a single feature of the device.<br>
|
||||||
* <br>
|
* <br>
|
||||||
* The length of the interface descriptor is
|
* The length of the interface descriptor is
|
||||||
* {@link ch.ntb.usb.Usb_Descriptor#USB_DT_INTERFACE_SIZE} and the type is
|
* {@link ch.ntb.usb.Usb_Descriptor#USB_DT_INTERFACE_SIZE} and the type is
|
||||||
* {@link ch.ntb.usb.Usb_Descriptor#USB_DT_INTERFACE}.
|
* {@link ch.ntb.usb.Usb_Descriptor#USB_DT_INTERFACE}.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public class Usb_Interface_Descriptor extends Usb_Descriptor {
|
public class Usb_Interface_Descriptor extends Usb_Descriptor {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Maximum number of interfaces
|
* Maximum number of interfaces
|
||||||
*/
|
*/
|
||||||
public static final int USB_MAXINTERFACES = 32;
|
public static final int USB_MAXINTERFACES = 32;
|
||||||
|
|
||||||
private byte bInterfaceNumber;
|
private byte bInterfaceNumber;
|
||||||
|
|
||||||
private byte bAlternateSetting;
|
private byte bAlternateSetting;
|
||||||
|
|
||||||
private byte bNumEndpoints;
|
private byte bNumEndpoints;
|
||||||
|
|
||||||
private byte bInterfaceClass;
|
private byte bInterfaceClass;
|
||||||
|
|
||||||
private byte bInterfaceSubClass;
|
private byte bInterfaceSubClass;
|
||||||
|
|
||||||
private byte bInterfaceProtocol;
|
private byte bInterfaceProtocol;
|
||||||
|
|
||||||
private byte iInterface;
|
private byte iInterface;
|
||||||
|
|
||||||
private Usb_Endpoint_Descriptor[] endpoint;
|
private Usb_Endpoint_Descriptor[] endpoint;
|
||||||
|
|
||||||
private byte[] extra; /* Extra descriptors */
|
private byte[] extra; /* Extra descriptors */
|
||||||
|
|
||||||
private int extralen;
|
private int extralen;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "Usb_Interface_Descriptor bNumEndpoints: 0x"
|
return "Usb_Interface_Descriptor bNumEndpoints: 0x"
|
||||||
+ Integer.toHexString(bNumEndpoints);
|
+ Integer.toHexString(bNumEndpoints);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the value used to select the alternate setting ({@link LibusbJava#usb_set_altinterface(long, int)}).<br>
|
* Returns the value used to select the alternate setting ({@link LibusbJava#usb_set_altinterface(long, int)}).<br>
|
||||||
*
|
*
|
||||||
* @return the alternate setting
|
* @return the alternate setting
|
||||||
*/
|
*/
|
||||||
public byte getBAlternateSetting() {
|
public byte getBAlternateSetting() {
|
||||||
return bAlternateSetting;
|
return bAlternateSetting;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the class code (Assigned by <a
|
* Returns the class code (Assigned by <a
|
||||||
* href="http://www.usb.org">www.usb.org</a>).<br>
|
* href="http://www.usb.org">www.usb.org</a>).<br>
|
||||||
*
|
*
|
||||||
* @return the class code
|
* @return the class code
|
||||||
*/
|
*/
|
||||||
public byte getBInterfaceClass() {
|
public byte getBInterfaceClass() {
|
||||||
return bInterfaceClass;
|
return bInterfaceClass;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the number (identifier) of this interface.<br>
|
* Returns the number (identifier) of this interface.<br>
|
||||||
*
|
*
|
||||||
* @return the number (identifier) of this interface
|
* @return the number (identifier) of this interface
|
||||||
*/
|
*/
|
||||||
public byte getBInterfaceNumber() {
|
public byte getBInterfaceNumber() {
|
||||||
return bInterfaceNumber;
|
return bInterfaceNumber;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the protocol code (Assigned by <a
|
* Returns the protocol code (Assigned by <a
|
||||||
* href="http://www.usb.org">www.usb.org</a>).<br>
|
* href="http://www.usb.org">www.usb.org</a>).<br>
|
||||||
*
|
*
|
||||||
* @return the protocol code
|
* @return the protocol code
|
||||||
*/
|
*/
|
||||||
public byte getBInterfaceProtocol() {
|
public byte getBInterfaceProtocol() {
|
||||||
return bInterfaceProtocol;
|
return bInterfaceProtocol;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the subclass code (Assigned by <a
|
* Returns the subclass code (Assigned by <a
|
||||||
* href="http://www.usb.org">www.usb.org</a>).<br>
|
* href="http://www.usb.org">www.usb.org</a>).<br>
|
||||||
*
|
*
|
||||||
* @return the subclass code
|
* @return the subclass code
|
||||||
*/
|
*/
|
||||||
public byte getBInterfaceSubClass() {
|
public byte getBInterfaceSubClass() {
|
||||||
return bInterfaceSubClass;
|
return bInterfaceSubClass;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the number of endpoints used for this interface.<br>
|
* Returns the number of endpoints used for this interface.<br>
|
||||||
*
|
*
|
||||||
* @return the number of endpoints used for this interface
|
* @return the number of endpoints used for this interface
|
||||||
*/
|
*/
|
||||||
public byte getBNumEndpoints() {
|
public byte getBNumEndpoints() {
|
||||||
return bNumEndpoints;
|
return bNumEndpoints;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns an array of endpoint descriptors.<br>
|
* Returns an array of endpoint descriptors.<br>
|
||||||
*
|
*
|
||||||
* @return an array of endpoint descriptors
|
* @return an array of endpoint descriptors
|
||||||
*/
|
*/
|
||||||
public Usb_Endpoint_Descriptor[] getEndpoint() {
|
public Usb_Endpoint_Descriptor[] getEndpoint() {
|
||||||
return endpoint;
|
return endpoint;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the data of extra descriptor(s) if available.<br>
|
* Returns the data of extra descriptor(s) if available.<br>
|
||||||
*
|
*
|
||||||
* @return null or a byte array with the extra descriptor data
|
* @return null or a byte array with the extra descriptor data
|
||||||
*/
|
*/
|
||||||
public byte[] getExtra() {
|
public byte[] getExtra() {
|
||||||
return extra;
|
return extra;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the number of bytes of the extra descriptor.<br>
|
* Returns the number of bytes of the extra descriptor.<br>
|
||||||
*
|
*
|
||||||
* @return the number of bytes of the extra descriptor
|
* @return the number of bytes of the extra descriptor
|
||||||
*/
|
*/
|
||||||
public int getExtralen() {
|
public int getExtralen() {
|
||||||
return extralen;
|
return extralen;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the index of the String descriptor describing this interface.<br>
|
* Returns the index of the String descriptor describing this interface.<br>
|
||||||
*
|
*
|
||||||
* @return the index of the String descriptor
|
* @return the index of the String descriptor
|
||||||
*/
|
*/
|
||||||
public byte getIInterface() {
|
public byte getIInterface() {
|
||||||
return iInterface;
|
return iInterface;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,60 +1,60 @@
|
|||||||
/*
|
/*
|
||||||
* Java libusb wrapper
|
* Java libusb wrapper
|
||||||
* Copyright (c) 2005-2006 Andreas Schläpfer <spandi at users.sourceforge.net>
|
* Copyright (c) 2005-2006 Andreas Schläpfer <spandi at users.sourceforge.net>
|
||||||
*
|
*
|
||||||
* http://libusbjava.sourceforge.net
|
* http://libusbjava.sourceforge.net
|
||||||
* This library is covered by the LGPL, read LGPL.txt for details.
|
* This library is covered by the LGPL, read LGPL.txt for details.
|
||||||
*/
|
*/
|
||||||
package ch.ntb.usb;
|
package ch.ntb.usb;
|
||||||
|
|
||||||
import java.io.PrintStream;
|
import java.io.PrintStream;
|
||||||
|
|
||||||
public class Utils {
|
public class Utils {
|
||||||
|
|
||||||
public static void logBus(Usb_Bus bus) {
|
public static void logBus(Usb_Bus bus) {
|
||||||
logBus(bus, System.out);
|
logBus(bus, System.out);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void logBus(Usb_Bus bus, PrintStream out) {
|
public static void logBus(Usb_Bus bus, PrintStream out) {
|
||||||
Usb_Bus usb_Bus = bus;
|
Usb_Bus usb_Bus = bus;
|
||||||
while (usb_Bus != null) {
|
while (usb_Bus != null) {
|
||||||
out.println(usb_Bus.toString());
|
out.println(usb_Bus.toString());
|
||||||
Usb_Device dev = usb_Bus.getDevices();
|
Usb_Device dev = usb_Bus.getDevices();
|
||||||
while (dev != null) {
|
while (dev != null) {
|
||||||
out.println("\t" + dev.toString());
|
out.println("\t" + dev.toString());
|
||||||
// Usb_Device_Descriptor
|
// Usb_Device_Descriptor
|
||||||
Usb_Device_Descriptor defDesc = dev.getDescriptor();
|
Usb_Device_Descriptor defDesc = dev.getDescriptor();
|
||||||
out.println("\t\t" + defDesc.toString());
|
out.println("\t\t" + defDesc.toString());
|
||||||
// Usb_Config_Descriptor
|
// Usb_Config_Descriptor
|
||||||
Usb_Config_Descriptor[] confDesc = dev.getConfig();
|
Usb_Config_Descriptor[] confDesc = dev.getConfig();
|
||||||
for (int i = 0; i < confDesc.length; i++) {
|
for (int i = 0; i < confDesc.length; i++) {
|
||||||
out.println("\t\t" + confDesc[i].toString());
|
out.println("\t\t" + confDesc[i].toString());
|
||||||
Usb_Interface[] int_ = confDesc[i].getInterface();
|
Usb_Interface[] int_ = confDesc[i].getInterface();
|
||||||
if (int_ != null) {
|
if (int_ != null) {
|
||||||
for (int j = 0; j < int_.length; j++) {
|
for (int j = 0; j < int_.length; j++) {
|
||||||
out.println("\t\t\t" + int_[j].toString());
|
out.println("\t\t\t" + int_[j].toString());
|
||||||
Usb_Interface_Descriptor[] intDesc = int_[j]
|
Usb_Interface_Descriptor[] intDesc = int_[j]
|
||||||
.getAltsetting();
|
.getAltsetting();
|
||||||
if (intDesc != null) {
|
if (intDesc != null) {
|
||||||
for (int k = 0; k < intDesc.length; k++) {
|
for (int k = 0; k < intDesc.length; k++) {
|
||||||
out.println("\t\t\t\t"
|
out.println("\t\t\t\t"
|
||||||
+ intDesc[k].toString());
|
+ intDesc[k].toString());
|
||||||
Usb_Endpoint_Descriptor[] epDesc = intDesc[k]
|
Usb_Endpoint_Descriptor[] epDesc = intDesc[k]
|
||||||
.getEndpoint();
|
.getEndpoint();
|
||||||
if (epDesc != null) {
|
if (epDesc != null) {
|
||||||
for (int e = 0; e < epDesc.length; e++) {
|
for (int e = 0; e < epDesc.length; e++) {
|
||||||
out.println("\t\t\t\t\t"
|
out.println("\t\t\t\t\t"
|
||||||
+ epDesc[e].toString());
|
+ epDesc[e].toString());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
dev = dev.getNext();
|
dev = dev.getNext();
|
||||||
}
|
}
|
||||||
usb_Bus = usb_Bus.getNext();
|
usb_Bus = usb_Bus.getNext();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,135 +1,135 @@
|
|||||||
/*
|
/*
|
||||||
* Java libusb wrapper
|
* Java libusb wrapper
|
||||||
* Copyright (c) 2005-2006 Andreas Schläpfer <spandi at users.sourceforge.net>
|
* Copyright (c) 2005-2006 Andreas Schläpfer <spandi at users.sourceforge.net>
|
||||||
*
|
*
|
||||||
* http://libusbjava.sourceforge.net
|
* http://libusbjava.sourceforge.net
|
||||||
* This library is covered by the LGPL, read LGPL.txt for details.
|
* This library is covered by the LGPL, read LGPL.txt for details.
|
||||||
*/
|
*/
|
||||||
package ch.ntb.usb.logger;
|
package ch.ntb.usb.logger;
|
||||||
|
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.util.Properties;
|
import java.util.Properties;
|
||||||
import java.util.logging.ConsoleHandler;
|
import java.util.logging.ConsoleHandler;
|
||||||
import java.util.logging.Handler;
|
import java.util.logging.Handler;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
import java.util.logging.LogManager;
|
import java.util.logging.LogManager;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
public class LogUtil {
|
public class LogUtil {
|
||||||
|
|
||||||
// debug this class
|
// debug this class
|
||||||
private static final boolean debugLogUtil = false;
|
private static final boolean debugLogUtil = false;
|
||||||
|
|
||||||
private static final String PLUGIN_ID = "ch.ntb.usb";
|
private static final String PLUGIN_ID = "ch.ntb.usb";
|
||||||
private static final String PROPERTIES_FILE = ".configure";
|
private static final String PROPERTIES_FILE = ".configure";
|
||||||
private static final String LOGGER_WARNING = "Warning in class "
|
private static final String LOGGER_WARNING = "Warning in class "
|
||||||
+ LogUtil.class.getName()
|
+ LogUtil.class.getName()
|
||||||
+ ": could not load the logger properties file " + PROPERTIES_FILE;
|
+ ": could not load the logger properties file " + PROPERTIES_FILE;
|
||||||
|
|
||||||
private static boolean debugEnabled;
|
private static boolean debugEnabled;
|
||||||
|
|
||||||
static {
|
static {
|
||||||
createLoggersFromProperties();
|
createLoggersFromProperties();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void debugMsg(String method, String message) {
|
private static void debugMsg(String method, String message) {
|
||||||
if (debugLogUtil) {
|
if (debugLogUtil) {
|
||||||
System.out.println(method + ": " + message);
|
System.out.println(method + ": " + message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void setLevel(Logger logger, Level loglevel) {
|
public static void setLevel(Logger logger, Level loglevel) {
|
||||||
Handler[] h = logger.getHandlers();
|
Handler[] h = logger.getHandlers();
|
||||||
for (int i = 0; i < h.length; i++) {
|
for (int i = 0; i < h.length; i++) {
|
||||||
System.out.println("setLevel " + loglevel.toString());
|
System.out.println("setLevel " + loglevel.toString());
|
||||||
h[i].setLevel(loglevel);
|
h[i].setLevel(loglevel);
|
||||||
}
|
}
|
||||||
logger.setLevel(loglevel);
|
logger.setLevel(loglevel);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Logger getLogger(String name) {
|
public static Logger getLogger(String name) {
|
||||||
debugMsg("getLogger", name);
|
debugMsg("getLogger", name);
|
||||||
LogManager manager = LogManager.getLogManager();
|
LogManager manager = LogManager.getLogManager();
|
||||||
// check if logger is already registered
|
// check if logger is already registered
|
||||||
Logger logger = manager.getLogger(name);
|
Logger logger = manager.getLogger(name);
|
||||||
if (logger == null) {
|
if (logger == null) {
|
||||||
logger = Logger.getLogger(name);
|
logger = Logger.getLogger(name);
|
||||||
setLevel(logger, Level.OFF);
|
setLevel(logger, Level.OFF);
|
||||||
manager.addLogger(logger);
|
manager.addLogger(logger);
|
||||||
debugMsg("getLogger", "creating new logger");
|
debugMsg("getLogger", "creating new logger");
|
||||||
}
|
}
|
||||||
if (logger.getLevel() == null) {
|
if (logger.getLevel() == null) {
|
||||||
debugMsg("getLogger", "level == null -> setLevel to OFF ");
|
debugMsg("getLogger", "level == null -> setLevel to OFF ");
|
||||||
setLevel(logger, Level.OFF);
|
setLevel(logger, Level.OFF);
|
||||||
}
|
}
|
||||||
debugMsg("getLogger", "logLevel " + logger.getLevel().getName());
|
debugMsg("getLogger", "logLevel " + logger.getLevel().getName());
|
||||||
return logger;
|
return logger;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void initLevel(Logger logger, Level loglevel) {
|
private static void initLevel(Logger logger, Level loglevel) {
|
||||||
Handler[] h = logger.getHandlers();
|
Handler[] h = logger.getHandlers();
|
||||||
for (int i = 0; i < h.length; i++) {
|
for (int i = 0; i < h.length; i++) {
|
||||||
logger.removeHandler(h[i]);
|
logger.removeHandler(h[i]);
|
||||||
}
|
}
|
||||||
Handler console = new ConsoleHandler();
|
Handler console = new ConsoleHandler();
|
||||||
console.setLevel(loglevel);
|
console.setLevel(loglevel);
|
||||||
logger.addHandler(console);
|
logger.addHandler(console);
|
||||||
logger.setLevel(loglevel);
|
logger.setLevel(loglevel);
|
||||||
logger.setUseParentHandlers(false);
|
logger.setUseParentHandlers(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void createLoggersFromProperties() {
|
private static void createLoggersFromProperties() {
|
||||||
try {
|
try {
|
||||||
debugMsg(LogUtil.class.getName(), "createLoggersFromProperties");
|
debugMsg(LogUtil.class.getName(), "createLoggersFromProperties");
|
||||||
InputStream is = LogUtil.class.getClassLoader()
|
InputStream is = LogUtil.class.getClassLoader()
|
||||||
.getResourceAsStream(PROPERTIES_FILE);
|
.getResourceAsStream(PROPERTIES_FILE);
|
||||||
if (is == null) {
|
if (is == null) {
|
||||||
System.err.println(LOGGER_WARNING);
|
System.err.println(LOGGER_WARNING);
|
||||||
} else {
|
} else {
|
||||||
Properties prop = new Properties();
|
Properties prop = new Properties();
|
||||||
prop.load(is);
|
prop.load(is);
|
||||||
debugMsg("createLoggersFromProperties",
|
debugMsg("createLoggersFromProperties",
|
||||||
"properties file loaded: " + PROPERTIES_FILE);
|
"properties file loaded: " + PROPERTIES_FILE);
|
||||||
debugMsg("createLoggersFromProperties", "file content:\n"
|
debugMsg("createLoggersFromProperties", "file content:\n"
|
||||||
+ prop.toString());
|
+ prop.toString());
|
||||||
// get global debug enable flag
|
// get global debug enable flag
|
||||||
debugEnabled = Boolean.parseBoolean(prop.getProperty(PLUGIN_ID
|
debugEnabled = Boolean.parseBoolean(prop.getProperty(PLUGIN_ID
|
||||||
+ "/debug"));
|
+ "/debug"));
|
||||||
debugMsg("createLoggersFromProperties", "debuging enabled: "
|
debugMsg("createLoggersFromProperties", "debuging enabled: "
|
||||||
+ debugEnabled);
|
+ debugEnabled);
|
||||||
// get and configure loggers
|
// get and configure loggers
|
||||||
boolean moreLoggers = true;
|
boolean moreLoggers = true;
|
||||||
int loggerCount = 0;
|
int loggerCount = 0;
|
||||||
while (moreLoggers) {
|
while (moreLoggers) {
|
||||||
String loggerProp = prop.getProperty(PLUGIN_ID
|
String loggerProp = prop.getProperty(PLUGIN_ID
|
||||||
+ "/debug/logger" + loggerCount);
|
+ "/debug/logger" + loggerCount);
|
||||||
loggerCount++;
|
loggerCount++;
|
||||||
if (loggerProp != null) {
|
if (loggerProp != null) {
|
||||||
// parse string and get logger name and log level
|
// parse string and get logger name and log level
|
||||||
int slashIndex = loggerProp.indexOf('/');
|
int slashIndex = loggerProp.indexOf('/');
|
||||||
String loggerName = loggerProp.substring(0, slashIndex)
|
String loggerName = loggerProp.substring(0, slashIndex)
|
||||||
.trim();
|
.trim();
|
||||||
String logLevel = loggerProp.substring(slashIndex + 1,
|
String logLevel = loggerProp.substring(slashIndex + 1,
|
||||||
loggerProp.length());
|
loggerProp.length());
|
||||||
// register logger
|
// register logger
|
||||||
Level level;
|
Level level;
|
||||||
if (debugEnabled) {
|
if (debugEnabled) {
|
||||||
level = Level.parse(logLevel);
|
level = Level.parse(logLevel);
|
||||||
} else {
|
} else {
|
||||||
level = Level.OFF;
|
level = Level.OFF;
|
||||||
}
|
}
|
||||||
Logger logger = getLogger(loggerName);
|
Logger logger = getLogger(loggerName);
|
||||||
initLevel(logger, level);
|
initLevel(logger, level);
|
||||||
debugMsg("createLoggersFromProperties",
|
debugMsg("createLoggersFromProperties",
|
||||||
"create logger " + loggerName + " with level "
|
"create logger " + loggerName + " with level "
|
||||||
+ level.toString());
|
+ level.toString());
|
||||||
} else {
|
} else {
|
||||||
moreLoggers = false;
|
moreLoggers = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,16 +1,16 @@
|
|||||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
|
||||||
<html>
|
<html>
|
||||||
<head></head>
|
<head></head>
|
||||||
<body bgcolor="white">
|
<body bgcolor="white">
|
||||||
|
|
||||||
Logging related classes.
|
Logging related classes.
|
||||||
|
|
||||||
<h2>Related Resources</h2>
|
<h2>Related Resources</h2>
|
||||||
|
|
||||||
For more information about this project visit
|
For more information about this project visit
|
||||||
<a
|
<a
|
||||||
href="http://libusbjava.sourceforge.net">http://libusbjava.sourceforge.net</a>
|
href="http://libusbjava.sourceforge.net">http://libusbjava.sourceforge.net</a>
|
||||||
.
|
.
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
@@ -1,26 +1,26 @@
|
|||||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
|
||||||
<html>
|
<html>
|
||||||
<head></head>
|
<head></head>
|
||||||
<body bgcolor="white">
|
<body bgcolor="white">
|
||||||
|
|
||||||
Includes the main classes for the Java libusb wrapper.
|
Includes the main classes for the Java libusb wrapper.
|
||||||
<br>
|
<br>
|
||||||
<i>LibusbJava.java</i>
|
<i>LibusbJava.java</i>
|
||||||
is the JNI class to the
|
is the JNI class to the
|
||||||
<i>LibusbJava.dll</i>
|
<i>LibusbJava.dll</i>
|
||||||
. Every class starting with
|
. Every class starting with
|
||||||
<i>Usb_</i>
|
<i>Usb_</i>
|
||||||
represents a descriptor of the bus structure which is retrieved by
|
represents a descriptor of the bus structure which is retrieved by
|
||||||
calling
|
calling
|
||||||
<i>LibusbJava.usb_get_busses()</i>
|
<i>LibusbJava.usb_get_busses()</i>
|
||||||
.
|
.
|
||||||
|
|
||||||
<h2>Related Resources</h2>
|
<h2>Related Resources</h2>
|
||||||
|
|
||||||
For more information about this project visit
|
For more information about this project visit
|
||||||
<a
|
<a
|
||||||
href="http://libusbjava.sourceforge.net">http://libusbjava.sourceforge.net</a>
|
href="http://libusbjava.sourceforge.net">http://libusbjava.sourceforge.net</a>
|
||||||
.
|
.
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
@@ -1,495 +1,495 @@
|
|||||||
/*
|
/*
|
||||||
* Java libusb wrapper
|
* Java libusb wrapper
|
||||||
* Copyright (c) 2005-2006 Andreas Schläpfer <spandi at users.sourceforge.net>
|
* Copyright (c) 2005-2006 Andreas Schläpfer <spandi at users.sourceforge.net>
|
||||||
*
|
*
|
||||||
* http://libusbjava.sourceforge.net
|
* http://libusbjava.sourceforge.net
|
||||||
* This library is covered by the LGPL, read LGPL.txt for details.
|
* This library is covered by the LGPL, read LGPL.txt for details.
|
||||||
*/
|
*/
|
||||||
package ch.ntb.usb.usbView;
|
package ch.ntb.usb.usbView;
|
||||||
|
|
||||||
import java.util.Vector;
|
import java.util.Vector;
|
||||||
|
|
||||||
import javax.swing.JTextArea;
|
import javax.swing.JTextArea;
|
||||||
import javax.swing.JTree;
|
import javax.swing.JTree;
|
||||||
import javax.swing.event.TreeModelEvent;
|
import javax.swing.event.TreeModelEvent;
|
||||||
import javax.swing.event.TreeModelListener;
|
import javax.swing.event.TreeModelListener;
|
||||||
import javax.swing.event.TreeSelectionEvent;
|
import javax.swing.event.TreeSelectionEvent;
|
||||||
import javax.swing.event.TreeSelectionListener;
|
import javax.swing.event.TreeSelectionListener;
|
||||||
import javax.swing.tree.TreeModel;
|
import javax.swing.tree.TreeModel;
|
||||||
import javax.swing.tree.TreePath;
|
import javax.swing.tree.TreePath;
|
||||||
|
|
||||||
import ch.ntb.usb.LibusbJava;
|
import ch.ntb.usb.LibusbJava;
|
||||||
import ch.ntb.usb.Usb_Bus;
|
import ch.ntb.usb.Usb_Bus;
|
||||||
import ch.ntb.usb.Usb_Config_Descriptor;
|
import ch.ntb.usb.Usb_Config_Descriptor;
|
||||||
import ch.ntb.usb.Usb_Device;
|
import ch.ntb.usb.Usb_Device;
|
||||||
import ch.ntb.usb.Usb_Device_Descriptor;
|
import ch.ntb.usb.Usb_Device_Descriptor;
|
||||||
import ch.ntb.usb.Usb_Endpoint_Descriptor;
|
import ch.ntb.usb.Usb_Endpoint_Descriptor;
|
||||||
import ch.ntb.usb.Usb_Interface;
|
import ch.ntb.usb.Usb_Interface;
|
||||||
import ch.ntb.usb.Usb_Interface_Descriptor;
|
import ch.ntb.usb.Usb_Interface_Descriptor;
|
||||||
|
|
||||||
public class UsbTreeModel implements TreeModel, TreeSelectionListener {
|
public class UsbTreeModel implements TreeModel, TreeSelectionListener {
|
||||||
|
|
||||||
private Usb_Bus rootBus;
|
private Usb_Bus rootBus;
|
||||||
|
|
||||||
private static final String USB_ROOT = "USB";
|
private static final String USB_ROOT = "USB";
|
||||||
|
|
||||||
private JTextArea textArea;
|
private JTextArea textArea;
|
||||||
|
|
||||||
private Vector<TreeModelListener> treeModelListeners = new Vector<TreeModelListener>();
|
private Vector<TreeModelListener> treeModelListeners = new Vector<TreeModelListener>();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Default constructor.<br>
|
* Default constructor.<br>
|
||||||
*
|
*
|
||||||
* @param rootBus
|
* @param rootBus
|
||||||
* the root bus from which the data is read
|
* the root bus from which the data is read
|
||||||
* @param textArea
|
* @param textArea
|
||||||
* the text area to which the data is written
|
* the text area to which the data is written
|
||||||
*/
|
*/
|
||||||
public UsbTreeModel(Usb_Bus rootBus, JTextArea textArea) {
|
public UsbTreeModel(Usb_Bus rootBus, JTextArea textArea) {
|
||||||
this.rootBus = rootBus;
|
this.rootBus = rootBus;
|
||||||
this.textArea = textArea;
|
this.textArea = textArea;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the root of the tree.
|
* Returns the root of the tree.
|
||||||
*/
|
*/
|
||||||
public Object getRoot() {
|
public Object getRoot() {
|
||||||
return USB_ROOT;
|
return USB_ROOT;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the child of parent at index index in the parent's child array.
|
* Returns the child of parent at index index in the parent's child array.
|
||||||
*/
|
*/
|
||||||
public Object getChild(Object parent, int index) {
|
public Object getChild(Object parent, int index) {
|
||||||
|
|
||||||
if (parent instanceof String && ((String) parent).compareTo(USB_ROOT) == 0)
|
if (parent instanceof String && ((String) parent).compareTo(USB_ROOT) == 0)
|
||||||
{
|
{
|
||||||
Usb_Bus curBus = rootBus;
|
Usb_Bus curBus = rootBus;
|
||||||
|
|
||||||
for (int i = 0; curBus != null; curBus = curBus.getNext(), i++)
|
for (int i = 0; curBus != null; curBus = curBus.getNext(), i++)
|
||||||
{
|
{
|
||||||
if (i == index)
|
if (i == index)
|
||||||
return curBus;
|
return curBus;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (parent instanceof Usb_Bus) {
|
else if (parent instanceof Usb_Bus) {
|
||||||
Usb_Device device = ((Usb_Bus) parent).getDevices();
|
Usb_Device device = ((Usb_Bus) parent).getDevices();
|
||||||
int count = 0;
|
int count = 0;
|
||||||
while (device != null) {
|
while (device != null) {
|
||||||
if (count == index)
|
if (count == index)
|
||||||
return device;
|
return device;
|
||||||
count++;
|
count++;
|
||||||
device = device.getNext();
|
device = device.getNext();
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
} else if (parent instanceof Usb_Device) {
|
} else if (parent instanceof Usb_Device) {
|
||||||
Usb_Device dev = (Usb_Device) parent;
|
Usb_Device dev = (Usb_Device) parent;
|
||||||
// return the Usb_Device_Descriptor at index 0
|
// return the Usb_Device_Descriptor at index 0
|
||||||
if (index == 0) {
|
if (index == 0) {
|
||||||
return dev.getDescriptor();
|
return dev.getDescriptor();
|
||||||
}
|
}
|
||||||
Usb_Config_Descriptor[] confDescs = dev.getConfig();
|
Usb_Config_Descriptor[] confDescs = dev.getConfig();
|
||||||
if (index >= confDescs.length + 1)
|
if (index >= confDescs.length + 1)
|
||||||
return null;
|
return null;
|
||||||
return confDescs[index - 1];
|
return confDescs[index - 1];
|
||||||
} else if (parent instanceof Usb_Config_Descriptor) {
|
} else if (parent instanceof Usb_Config_Descriptor) {
|
||||||
Usb_Interface[] intDescs = ((Usb_Config_Descriptor) parent)
|
Usb_Interface[] intDescs = ((Usb_Config_Descriptor) parent)
|
||||||
.getInterface();
|
.getInterface();
|
||||||
if (index >= intDescs.length)
|
if (index >= intDescs.length)
|
||||||
return null;
|
return null;
|
||||||
return intDescs[index];
|
return intDescs[index];
|
||||||
} else if (parent instanceof Usb_Interface) {
|
} else if (parent instanceof Usb_Interface) {
|
||||||
Usb_Interface_Descriptor[] altSettings = ((Usb_Interface) parent)
|
Usb_Interface_Descriptor[] altSettings = ((Usb_Interface) parent)
|
||||||
.getAltsetting();
|
.getAltsetting();
|
||||||
if (index >= altSettings.length)
|
if (index >= altSettings.length)
|
||||||
return null;
|
return null;
|
||||||
return altSettings[index];
|
return altSettings[index];
|
||||||
} else if (parent instanceof Usb_Interface_Descriptor) {
|
} else if (parent instanceof Usb_Interface_Descriptor) {
|
||||||
Usb_Endpoint_Descriptor[] endpoints = ((Usb_Interface_Descriptor) parent)
|
Usb_Endpoint_Descriptor[] endpoints = ((Usb_Interface_Descriptor) parent)
|
||||||
.getEndpoint();
|
.getEndpoint();
|
||||||
if (index >= endpoints.length)
|
if (index >= endpoints.length)
|
||||||
return null;
|
return null;
|
||||||
return endpoints[index];
|
return endpoints[index];
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the number of children of parent.
|
* Returns the number of children of parent.
|
||||||
*/
|
*/
|
||||||
public int getChildCount(Object parent)
|
public int getChildCount(Object parent)
|
||||||
{
|
{
|
||||||
if (parent instanceof String && ((String) parent).compareTo(USB_ROOT) == 0)
|
if (parent instanceof String && ((String) parent).compareTo(USB_ROOT) == 0)
|
||||||
{
|
{
|
||||||
int count = 0;
|
int count = 0;
|
||||||
|
|
||||||
Usb_Bus curBus = rootBus;
|
Usb_Bus curBus = rootBus;
|
||||||
|
|
||||||
for (; curBus != null; curBus = curBus.getNext())
|
for (; curBus != null; curBus = curBus.getNext())
|
||||||
{
|
{
|
||||||
count++;
|
count++;
|
||||||
}
|
}
|
||||||
|
|
||||||
return count;
|
return count;
|
||||||
|
|
||||||
}
|
}
|
||||||
else if (parent instanceof Usb_Bus) {
|
else if (parent instanceof Usb_Bus) {
|
||||||
Usb_Device device = ((Usb_Bus) parent).getDevices();
|
Usb_Device device = ((Usb_Bus) parent).getDevices();
|
||||||
int count = 0;
|
int count = 0;
|
||||||
while (device != null) {
|
while (device != null) {
|
||||||
count++;
|
count++;
|
||||||
device = device.getNext();
|
device = device.getNext();
|
||||||
}
|
}
|
||||||
return count;
|
return count;
|
||||||
} else if (parent instanceof Usb_Device) {
|
} else if (parent instanceof Usb_Device) {
|
||||||
// add the Usb_Device_Descriptor
|
// add the Usb_Device_Descriptor
|
||||||
return ((Usb_Device) parent).getConfig().length + 1;
|
return ((Usb_Device) parent).getConfig().length + 1;
|
||||||
} else if (parent instanceof Usb_Config_Descriptor) {
|
} else if (parent instanceof Usb_Config_Descriptor) {
|
||||||
return ((Usb_Config_Descriptor) parent).getInterface().length;
|
return ((Usb_Config_Descriptor) parent).getInterface().length;
|
||||||
} else if (parent instanceof Usb_Interface) {
|
} else if (parent instanceof Usb_Interface) {
|
||||||
return ((Usb_Interface) parent).getAltsetting().length;
|
return ((Usb_Interface) parent).getAltsetting().length;
|
||||||
} else if (parent instanceof Usb_Interface_Descriptor) {
|
} else if (parent instanceof Usb_Interface_Descriptor) {
|
||||||
return ((Usb_Interface_Descriptor) parent).getEndpoint().length;
|
return ((Usb_Interface_Descriptor) parent).getEndpoint().length;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns true if node is a leaf.
|
* Returns true if node is a leaf.
|
||||||
*/
|
*/
|
||||||
public boolean isLeaf(Object node) {
|
public boolean isLeaf(Object node) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Messaged when the user has altered the value for the item identified by
|
* Messaged when the user has altered the value for the item identified by
|
||||||
* path to newValue. Not used by this model.
|
* path to newValue. Not used by this model.
|
||||||
*/
|
*/
|
||||||
public void valueForPathChanged(TreePath path, Object newValue) {
|
public void valueForPathChanged(TreePath path, Object newValue) {
|
||||||
System.out.println("*** valueForPathChanged : " + path + " --> "
|
System.out.println("*** valueForPathChanged : " + path + " --> "
|
||||||
+ newValue);
|
+ newValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the index of child in parent.
|
* Returns the index of child in parent.
|
||||||
*/
|
*/
|
||||||
public int getIndexOfChild(Object parent, Object child) {
|
public int getIndexOfChild(Object parent, Object child) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addTreeModelListener(TreeModelListener l) {
|
public void addTreeModelListener(TreeModelListener l) {
|
||||||
treeModelListeners.addElement(l);
|
treeModelListeners.addElement(l);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void removeTreeModelListener(TreeModelListener l) {
|
public void removeTreeModelListener(TreeModelListener l) {
|
||||||
treeModelListeners.removeElement(l);
|
treeModelListeners.removeElement(l);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The only event raised by this model is TreeStructureChanged with the root
|
* The only event raised by this model is TreeStructureChanged with the root
|
||||||
* as path, i.e. the whole tree has changed.
|
* as path, i.e. the whole tree has changed.
|
||||||
*/
|
*/
|
||||||
protected void fireTreeStructureChanged(Usb_Bus newRootBus) {
|
protected void fireTreeStructureChanged(Usb_Bus newRootBus) {
|
||||||
rootBus = newRootBus;
|
rootBus = newRootBus;
|
||||||
int len = treeModelListeners.size();
|
int len = treeModelListeners.size();
|
||||||
TreeModelEvent e = new TreeModelEvent(this, new Object[] { newRootBus });
|
TreeModelEvent e = new TreeModelEvent(this, new Object[] { newRootBus });
|
||||||
for (int i = 0; i < len; i++) {
|
for (int i = 0; i < len; i++) {
|
||||||
treeModelListeners.elementAt(i).treeStructureChanged(e);
|
treeModelListeners.elementAt(i).treeStructureChanged(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void valueChanged(TreeSelectionEvent e) {
|
public void valueChanged(TreeSelectionEvent e) {
|
||||||
JTree tree = (JTree) e.getSource();
|
JTree tree = (JTree) e.getSource();
|
||||||
Object component = tree.getLastSelectedPathComponent();
|
Object component = tree.getLastSelectedPathComponent();
|
||||||
if (component instanceof Usb_Bus) {
|
if (component instanceof Usb_Bus) {
|
||||||
Usb_Bus bus = (Usb_Bus) component;
|
Usb_Bus bus = (Usb_Bus) component;
|
||||||
StringBuffer sb = new StringBuffer("Usb_Bus\n");
|
StringBuffer sb = new StringBuffer("Usb_Bus\n");
|
||||||
sb.append("\tdirname: " + bus.getDirname() + "\n");
|
sb.append("\tdirname: " + bus.getDirname() + "\n");
|
||||||
sb.append("\tlocation: 0x" + Long.toHexString(bus.getLocation())
|
sb.append("\tlocation: 0x" + Long.toHexString(bus.getLocation())
|
||||||
+ "\n");
|
+ "\n");
|
||||||
textArea.setText(sb.toString());
|
textArea.setText(sb.toString());
|
||||||
} else if (component instanceof Usb_Device) {
|
} else if (component instanceof Usb_Device) {
|
||||||
Usb_Device device = (Usb_Device) component;
|
Usb_Device device = (Usb_Device) component;
|
||||||
StringBuffer sb = new StringBuffer("Usb_Device\n");
|
StringBuffer sb = new StringBuffer("Usb_Device\n");
|
||||||
sb.append("\tfilename: " + device.getFilename() + "\n");
|
sb.append("\tfilename: " + device.getFilename() + "\n");
|
||||||
sb.append("\tdevnum: " + device.getDevnum() + "\n");
|
sb.append("\tdevnum: " + device.getDevnum() + "\n");
|
||||||
sb.append("\tnum_children: " + device.getNumChildren() + "\n");
|
sb.append("\tnum_children: " + device.getNumChildren() + "\n");
|
||||||
textArea.setText(sb.toString());
|
textArea.setText(sb.toString());
|
||||||
} else if (component instanceof Usb_Device_Descriptor) {
|
} else if (component instanceof Usb_Device_Descriptor) {
|
||||||
Usb_Device_Descriptor devDesc = (Usb_Device_Descriptor) component;
|
Usb_Device_Descriptor devDesc = (Usb_Device_Descriptor) component;
|
||||||
StringBuffer sb = new StringBuffer("Usb_Device_Descriptor\n");
|
StringBuffer sb = new StringBuffer("Usb_Device_Descriptor\n");
|
||||||
sb.append("\tblenght: 0x"
|
sb.append("\tblenght: 0x"
|
||||||
+ Integer.toHexString(devDesc.getBLength() & 0xFF) + "\n");
|
+ Integer.toHexString(devDesc.getBLength() & 0xFF) + "\n");
|
||||||
sb.append("\tbDescriptorType: 0x"
|
sb.append("\tbDescriptorType: 0x"
|
||||||
+ Integer.toHexString(devDesc.getBDescriptorType() & 0xFF)
|
+ Integer.toHexString(devDesc.getBDescriptorType() & 0xFF)
|
||||||
+ "\n");
|
+ "\n");
|
||||||
sb.append("\tbcdUSB: 0x"
|
sb.append("\tbcdUSB: 0x"
|
||||||
+ Integer.toHexString(devDesc.getBcdUSB() & 0xFFFF) + "\n");
|
+ Integer.toHexString(devDesc.getBcdUSB() & 0xFFFF) + "\n");
|
||||||
sb.append("\tbDeviceClass: 0x"
|
sb.append("\tbDeviceClass: 0x"
|
||||||
+ Integer.toHexString(devDesc.getBDeviceClass() & 0xFF)
|
+ Integer.toHexString(devDesc.getBDeviceClass() & 0xFF)
|
||||||
+ "\n");
|
+ "\n");
|
||||||
sb.append("\tbDeviceSubClass: 0x"
|
sb.append("\tbDeviceSubClass: 0x"
|
||||||
+ Integer.toHexString(devDesc.getBDeviceSubClass() & 0xFF)
|
+ Integer.toHexString(devDesc.getBDeviceSubClass() & 0xFF)
|
||||||
+ "\n");
|
+ "\n");
|
||||||
sb.append("\tbDeviceProtocol: 0x"
|
sb.append("\tbDeviceProtocol: 0x"
|
||||||
+ Integer.toHexString(devDesc.getBDeviceProtocol() & 0xFF)
|
+ Integer.toHexString(devDesc.getBDeviceProtocol() & 0xFF)
|
||||||
+ "\n");
|
+ "\n");
|
||||||
sb.append("\tbMaxPacketSize0: 0x"
|
sb.append("\tbMaxPacketSize0: 0x"
|
||||||
+ Integer.toHexString(devDesc.getBMaxPacketSize0() & 0xFF)
|
+ Integer.toHexString(devDesc.getBMaxPacketSize0() & 0xFF)
|
||||||
+ " (" + devDesc.getBMaxPacketSize0() + ")\n");
|
+ " (" + devDesc.getBMaxPacketSize0() + ")\n");
|
||||||
sb.append("\tidVendor: 0x"
|
sb.append("\tidVendor: 0x"
|
||||||
+ Integer.toHexString(devDesc.getIdVendor() & 0xFFFF)
|
+ Integer.toHexString(devDesc.getIdVendor() & 0xFFFF)
|
||||||
+ "\n");
|
+ "\n");
|
||||||
sb.append("\tidProduct: 0x"
|
sb.append("\tidProduct: 0x"
|
||||||
+ Integer.toHexString(devDesc.getIdProduct() & 0xFFFF)
|
+ Integer.toHexString(devDesc.getIdProduct() & 0xFFFF)
|
||||||
+ "\n");
|
+ "\n");
|
||||||
sb
|
sb
|
||||||
.append("\tbcdDevice: 0x"
|
.append("\tbcdDevice: 0x"
|
||||||
+ Integer
|
+ Integer
|
||||||
.toHexString(devDesc.getBcdDevice() & 0xFF)
|
.toHexString(devDesc.getBcdDevice() & 0xFF)
|
||||||
+ "\n");
|
+ "\n");
|
||||||
sb.append("\tiManufacturer: 0x"
|
sb.append("\tiManufacturer: 0x"
|
||||||
+ Integer.toHexString(devDesc.getIManufacturer() & 0xFF)
|
+ Integer.toHexString(devDesc.getIManufacturer() & 0xFF)
|
||||||
+ "\n");
|
+ "\n");
|
||||||
sb.append("\tiProduct: 0x"
|
sb.append("\tiProduct: 0x"
|
||||||
+ Integer.toHexString(devDesc.getIProduct()) + "\n");
|
+ Integer.toHexString(devDesc.getIProduct()) + "\n");
|
||||||
sb.append("\tiSerialNumber: 0x"
|
sb.append("\tiSerialNumber: 0x"
|
||||||
+ Integer.toHexString(devDesc.getISerialNumber() & 0xFF)
|
+ Integer.toHexString(devDesc.getISerialNumber() & 0xFF)
|
||||||
+ "\n");
|
+ "\n");
|
||||||
sb
|
sb
|
||||||
.append("\tbNumConfigurations: 0x"
|
.append("\tbNumConfigurations: 0x"
|
||||||
+ Integer.toHexString(devDesc
|
+ Integer.toHexString(devDesc
|
||||||
.getBNumConfigurations() & 0xFF) + "\n");
|
.getBNumConfigurations() & 0xFF) + "\n");
|
||||||
// get device handle to retrieve string descriptors
|
// get device handle to retrieve string descriptors
|
||||||
Usb_Bus bus = rootBus;
|
Usb_Bus bus = rootBus;
|
||||||
while (bus != null) {
|
while (bus != null) {
|
||||||
Usb_Device dev = bus.getDevices();
|
Usb_Device dev = bus.getDevices();
|
||||||
while (dev != null) {
|
while (dev != null) {
|
||||||
Usb_Device_Descriptor tmpDevDesc = dev.getDescriptor();
|
Usb_Device_Descriptor tmpDevDesc = dev.getDescriptor();
|
||||||
if ((dev.getDescriptor() != null)
|
if ((dev.getDescriptor() != null)
|
||||||
&& ((dev.getDescriptor().getIManufacturer() > 0)
|
&& ((dev.getDescriptor().getIManufacturer() > 0)
|
||||||
|| (dev.getDescriptor().getIProduct() > 0) || (dev
|
|| (dev.getDescriptor().getIProduct() > 0) || (dev
|
||||||
.getDescriptor().getISerialNumber() > 0))) {
|
.getDescriptor().getISerialNumber() > 0))) {
|
||||||
if (tmpDevDesc.equals(devDesc)) {
|
if (tmpDevDesc.equals(devDesc)) {
|
||||||
long handle = LibusbJava.usb_open(dev);
|
long handle = LibusbJava.usb_open(dev);
|
||||||
sb.append("\nString descriptors\n");
|
sb.append("\nString descriptors\n");
|
||||||
if (handle <= 0) {
|
if (handle <= 0) {
|
||||||
sb.append("\terror opening the device\n");
|
sb.append("\terror opening the device\n");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (dev.getDescriptor().getIManufacturer() > 0) {
|
if (dev.getDescriptor().getIManufacturer() > 0) {
|
||||||
String manufacturer = LibusbJava
|
String manufacturer = LibusbJava
|
||||||
.usb_get_string_simple(handle, devDesc
|
.usb_get_string_simple(handle, devDesc
|
||||||
.getIManufacturer());
|
.getIManufacturer());
|
||||||
if (manufacturer == null)
|
if (manufacturer == null)
|
||||||
manufacturer = "unable to fetch manufacturer string";
|
manufacturer = "unable to fetch manufacturer string";
|
||||||
sb.append("\tiManufacturer: " + manufacturer
|
sb.append("\tiManufacturer: " + manufacturer
|
||||||
+ "\n");
|
+ "\n");
|
||||||
}
|
}
|
||||||
if (dev.getDescriptor().getIProduct() > 0) {
|
if (dev.getDescriptor().getIProduct() > 0) {
|
||||||
String product = LibusbJava
|
String product = LibusbJava
|
||||||
.usb_get_string_simple(handle, devDesc
|
.usb_get_string_simple(handle, devDesc
|
||||||
.getIProduct());
|
.getIProduct());
|
||||||
if (product == null)
|
if (product == null)
|
||||||
product = "unable to fetch product string";
|
product = "unable to fetch product string";
|
||||||
sb.append("\tiProduct: " + product + "\n");
|
sb.append("\tiProduct: " + product + "\n");
|
||||||
}
|
}
|
||||||
if (dev.getDescriptor().getISerialNumber() > 0) {
|
if (dev.getDescriptor().getISerialNumber() > 0) {
|
||||||
String serialNumber = LibusbJava
|
String serialNumber = LibusbJava
|
||||||
.usb_get_string_simple(handle, devDesc
|
.usb_get_string_simple(handle, devDesc
|
||||||
.getISerialNumber());
|
.getISerialNumber());
|
||||||
if (serialNumber == null)
|
if (serialNumber == null)
|
||||||
serialNumber = "unable to fetch serial number string";
|
serialNumber = "unable to fetch serial number string";
|
||||||
sb.append("\tiSerialNumber: " + serialNumber
|
sb.append("\tiSerialNumber: " + serialNumber
|
||||||
+ "\n");
|
+ "\n");
|
||||||
}
|
}
|
||||||
LibusbJava.usb_close(handle);
|
LibusbJava.usb_close(handle);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
dev = dev.getNext();
|
dev = dev.getNext();
|
||||||
}
|
}
|
||||||
bus = bus.getNext();
|
bus = bus.getNext();
|
||||||
}
|
}
|
||||||
textArea.setText(sb.toString());
|
textArea.setText(sb.toString());
|
||||||
} else if (component instanceof Usb_Config_Descriptor) {
|
} else if (component instanceof Usb_Config_Descriptor) {
|
||||||
Usb_Config_Descriptor confDesc = (Usb_Config_Descriptor) component;
|
Usb_Config_Descriptor confDesc = (Usb_Config_Descriptor) component;
|
||||||
StringBuffer sb = new StringBuffer("Usb_Config_Descriptor\n");
|
StringBuffer sb = new StringBuffer("Usb_Config_Descriptor\n");
|
||||||
sb.append("\tblenght: 0x"
|
sb.append("\tblenght: 0x"
|
||||||
+ Integer.toHexString(confDesc.getBLength()) + "\n");
|
+ Integer.toHexString(confDesc.getBLength()) + "\n");
|
||||||
sb.append("\tbDescriptorType: 0x"
|
sb.append("\tbDescriptorType: 0x"
|
||||||
+ Integer.toHexString(confDesc.getBDescriptorType() & 0xFF)
|
+ Integer.toHexString(confDesc.getBDescriptorType() & 0xFF)
|
||||||
+ "\n");
|
+ "\n");
|
||||||
sb.append("\tbNumInterfaces: 0x"
|
sb.append("\tbNumInterfaces: 0x"
|
||||||
+ Integer.toHexString(confDesc.getBNumInterfaces() & 0xFF)
|
+ Integer.toHexString(confDesc.getBNumInterfaces() & 0xFF)
|
||||||
+ "\n");
|
+ "\n");
|
||||||
sb
|
sb
|
||||||
.append("\tbConfigurationValue: 0x"
|
.append("\tbConfigurationValue: 0x"
|
||||||
+ Integer.toHexString(confDesc
|
+ Integer.toHexString(confDesc
|
||||||
.getBConfigurationValue() & 0xFF) + "\n");
|
.getBConfigurationValue() & 0xFF) + "\n");
|
||||||
sb.append("\tiConfiguration: 0x"
|
sb.append("\tiConfiguration: 0x"
|
||||||
+ Integer.toHexString(confDesc.getIConfiguration() & 0xFF)
|
+ Integer.toHexString(confDesc.getIConfiguration() & 0xFF)
|
||||||
+ "\n");
|
+ "\n");
|
||||||
sb.append("\tbmAttributes: 0x"
|
sb.append("\tbmAttributes: 0x"
|
||||||
+ Integer.toHexString(confDesc.getBmAttributes() & 0xFF)
|
+ Integer.toHexString(confDesc.getBmAttributes() & 0xFF)
|
||||||
+ "\n");
|
+ "\n");
|
||||||
sb.append("\tMaxPower [mA]: 0x"
|
sb.append("\tMaxPower [mA]: 0x"
|
||||||
+ Integer.toHexString(confDesc.getMaxPower() & 0xFF) + " ("
|
+ Integer.toHexString(confDesc.getMaxPower() & 0xFF) + " ("
|
||||||
+ confDesc.getMaxPower() + ")\n");
|
+ confDesc.getMaxPower() + ")\n");
|
||||||
sb.append("\textralen: 0x"
|
sb.append("\textralen: 0x"
|
||||||
+ Integer.toHexString(confDesc.getExtralen()) + "\n");
|
+ Integer.toHexString(confDesc.getExtralen()) + "\n");
|
||||||
sb.append("\textra: " + extraDescriptorToString(confDesc.getExtra()) + "\n");
|
sb.append("\textra: " + extraDescriptorToString(confDesc.getExtra()) + "\n");
|
||||||
// get device handle to retrieve string descriptors
|
// get device handle to retrieve string descriptors
|
||||||
Usb_Bus bus = rootBus;
|
Usb_Bus bus = rootBus;
|
||||||
while (bus != null) {
|
while (bus != null) {
|
||||||
Usb_Device dev = bus.getDevices();
|
Usb_Device dev = bus.getDevices();
|
||||||
while (dev != null) {
|
while (dev != null) {
|
||||||
Usb_Config_Descriptor[] tmpConfDesc = dev.getConfig();
|
Usb_Config_Descriptor[] tmpConfDesc = dev.getConfig();
|
||||||
for (int i = 0; i < tmpConfDesc.length; i++) {
|
for (int i = 0; i < tmpConfDesc.length; i++) {
|
||||||
if ((tmpConfDesc.equals(confDesc))
|
if ((tmpConfDesc.equals(confDesc))
|
||||||
&& (confDesc.getIConfiguration() > 0)) {
|
&& (confDesc.getIConfiguration() > 0)) {
|
||||||
long handle = LibusbJava.usb_open(dev);
|
long handle = LibusbJava.usb_open(dev);
|
||||||
sb.append("\nString descriptors\n");
|
sb.append("\nString descriptors\n");
|
||||||
if (handle <= 0) {
|
if (handle <= 0) {
|
||||||
sb.append("\terror opening the device\n");
|
sb.append("\terror opening the device\n");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
String configuration = LibusbJava
|
String configuration = LibusbJava
|
||||||
.usb_get_string_simple(handle, confDesc
|
.usb_get_string_simple(handle, confDesc
|
||||||
.getIConfiguration());
|
.getIConfiguration());
|
||||||
if (configuration == null)
|
if (configuration == null)
|
||||||
configuration = "unable to fetch configuration string";
|
configuration = "unable to fetch configuration string";
|
||||||
sb.append("\tiConfiguration: " + configuration
|
sb.append("\tiConfiguration: " + configuration
|
||||||
+ "\n");
|
+ "\n");
|
||||||
|
|
||||||
LibusbJava.usb_close(handle);
|
LibusbJava.usb_close(handle);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
dev = dev.getNext();
|
dev = dev.getNext();
|
||||||
}
|
}
|
||||||
bus = bus.getNext();
|
bus = bus.getNext();
|
||||||
}
|
}
|
||||||
textArea.setText(sb.toString());
|
textArea.setText(sb.toString());
|
||||||
} else if (component instanceof Usb_Interface) {
|
} else if (component instanceof Usb_Interface) {
|
||||||
Usb_Interface int_ = (Usb_Interface) component;
|
Usb_Interface int_ = (Usb_Interface) component;
|
||||||
StringBuffer sb = new StringBuffer("Usb_Interface\n");
|
StringBuffer sb = new StringBuffer("Usb_Interface\n");
|
||||||
sb.append("\tnum_altsetting: 0x"
|
sb.append("\tnum_altsetting: 0x"
|
||||||
+ Integer.toHexString(int_.getNumAltsetting()) + "\n");
|
+ Integer.toHexString(int_.getNumAltsetting()) + "\n");
|
||||||
sb.append("\taltsetting: " + int_.getAltsetting() + "\n");
|
sb.append("\taltsetting: " + int_.getAltsetting() + "\n");
|
||||||
textArea.setText(sb.toString());
|
textArea.setText(sb.toString());
|
||||||
} else if (component instanceof Usb_Interface_Descriptor) {
|
} else if (component instanceof Usb_Interface_Descriptor) {
|
||||||
Usb_Interface_Descriptor intDesc = (Usb_Interface_Descriptor) component;
|
Usb_Interface_Descriptor intDesc = (Usb_Interface_Descriptor) component;
|
||||||
StringBuffer sb = new StringBuffer("Usb_Interface_Descriptor\n");
|
StringBuffer sb = new StringBuffer("Usb_Interface_Descriptor\n");
|
||||||
sb.append("\tblenght: 0x"
|
sb.append("\tblenght: 0x"
|
||||||
+ Integer.toHexString(intDesc.getBLength() & 0xFF) + "\n");
|
+ Integer.toHexString(intDesc.getBLength() & 0xFF) + "\n");
|
||||||
sb.append("\tbDescriptorType: 0x"
|
sb.append("\tbDescriptorType: 0x"
|
||||||
+ Integer.toHexString(intDesc.getBDescriptorType() & 0xFF)
|
+ Integer.toHexString(intDesc.getBDescriptorType() & 0xFF)
|
||||||
+ "\n");
|
+ "\n");
|
||||||
sb.append("\tbInterfaceNumber: 0x"
|
sb.append("\tbInterfaceNumber: 0x"
|
||||||
+ Integer.toHexString(intDesc.getBInterfaceNumber() & 0xFF)
|
+ Integer.toHexString(intDesc.getBInterfaceNumber() & 0xFF)
|
||||||
+ "\n");
|
+ "\n");
|
||||||
sb.append("\tbAlternateSetting: 0x"
|
sb.append("\tbAlternateSetting: 0x"
|
||||||
+ Integer
|
+ Integer
|
||||||
.toHexString(intDesc.getBAlternateSetting() & 0xFF)
|
.toHexString(intDesc.getBAlternateSetting() & 0xFF)
|
||||||
+ "\n");
|
+ "\n");
|
||||||
sb.append("\tbNumEndpoints: 0x"
|
sb.append("\tbNumEndpoints: 0x"
|
||||||
+ Integer.toHexString(intDesc.getBNumEndpoints() & 0xFF)
|
+ Integer.toHexString(intDesc.getBNumEndpoints() & 0xFF)
|
||||||
+ "\n");
|
+ "\n");
|
||||||
sb.append("\tbInterfaceClass: 0x"
|
sb.append("\tbInterfaceClass: 0x"
|
||||||
+ Integer.toHexString(intDesc.getBInterfaceClass() & 0xFF)
|
+ Integer.toHexString(intDesc.getBInterfaceClass() & 0xFF)
|
||||||
+ "\n");
|
+ "\n");
|
||||||
sb
|
sb
|
||||||
.append("\tbInterfaceSubClass: 0x"
|
.append("\tbInterfaceSubClass: 0x"
|
||||||
+ Integer.toHexString(intDesc
|
+ Integer.toHexString(intDesc
|
||||||
.getBInterfaceSubClass() & 0xFF) + "\n");
|
.getBInterfaceSubClass() & 0xFF) + "\n");
|
||||||
sb
|
sb
|
||||||
.append("\tbInterfaceProtocol: 0x"
|
.append("\tbInterfaceProtocol: 0x"
|
||||||
+ Integer.toHexString(intDesc
|
+ Integer.toHexString(intDesc
|
||||||
.getBInterfaceProtocol() & 0xFF) + "\n");
|
.getBInterfaceProtocol() & 0xFF) + "\n");
|
||||||
sb.append("\tiInterface: 0x"
|
sb.append("\tiInterface: 0x"
|
||||||
+ Integer.toHexString(intDesc.getIInterface()) + "\n");
|
+ Integer.toHexString(intDesc.getIInterface()) + "\n");
|
||||||
sb.append("\textralen: 0x"
|
sb.append("\textralen: 0x"
|
||||||
+ Integer.toHexString(intDesc.getExtralen()) + "\n");
|
+ Integer.toHexString(intDesc.getExtralen()) + "\n");
|
||||||
sb.append("\textra: " + extraDescriptorToString(intDesc.getExtra()) + "\n");
|
sb.append("\textra: " + extraDescriptorToString(intDesc.getExtra()) + "\n");
|
||||||
// get device handle to retrieve string descriptors
|
// get device handle to retrieve string descriptors
|
||||||
Usb_Bus bus = rootBus;
|
Usb_Bus bus = rootBus;
|
||||||
while (bus != null) {
|
while (bus != null) {
|
||||||
Usb_Device dev = bus.getDevices();
|
Usb_Device dev = bus.getDevices();
|
||||||
while (dev != null) {
|
while (dev != null) {
|
||||||
Usb_Config_Descriptor[] confDescs = dev.getConfig();
|
Usb_Config_Descriptor[] confDescs = dev.getConfig();
|
||||||
for (int i = 0; i < confDescs.length; i++) {
|
for (int i = 0; i < confDescs.length; i++) {
|
||||||
Usb_Interface[] ints = confDescs[i].getInterface();
|
Usb_Interface[] ints = confDescs[i].getInterface();
|
||||||
for (int j = 0; j < ints.length; j++) {
|
for (int j = 0; j < ints.length; j++) {
|
||||||
Usb_Interface_Descriptor[] tmpIntDescs = ints[j]
|
Usb_Interface_Descriptor[] tmpIntDescs = ints[j]
|
||||||
.getAltsetting();
|
.getAltsetting();
|
||||||
for (int k = 0; k < ints.length; k++) {
|
for (int k = 0; k < ints.length; k++) {
|
||||||
if (i < tmpIntDescs.length && tmpIntDescs[i].equals(intDesc)
|
if (i < tmpIntDescs.length && tmpIntDescs[i].equals(intDesc)
|
||||||
&& (intDesc.getIInterface() > 0)) {
|
&& (intDesc.getIInterface() > 0)) {
|
||||||
long handle = LibusbJava.usb_open(dev);
|
long handle = LibusbJava.usb_open(dev);
|
||||||
sb.append("\nString descriptors\n");
|
sb.append("\nString descriptors\n");
|
||||||
if (handle <= 0) {
|
if (handle <= 0) {
|
||||||
sb
|
sb
|
||||||
.append("\terror opening the device\n");
|
.append("\terror opening the device\n");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
String interface_ = LibusbJava
|
String interface_ = LibusbJava
|
||||||
.usb_get_string_simple(handle,
|
.usb_get_string_simple(handle,
|
||||||
intDesc.getIInterface());
|
intDesc.getIInterface());
|
||||||
if (interface_ == null)
|
if (interface_ == null)
|
||||||
interface_ = "unable to fetch interface string";
|
interface_ = "unable to fetch interface string";
|
||||||
sb.append("\tiInterface: " + interface_
|
sb.append("\tiInterface: " + interface_
|
||||||
+ "\n");
|
+ "\n");
|
||||||
LibusbJava.usb_close(handle);
|
LibusbJava.usb_close(handle);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
dev = dev.getNext();
|
dev = dev.getNext();
|
||||||
}
|
}
|
||||||
bus = bus.getNext();
|
bus = bus.getNext();
|
||||||
}
|
}
|
||||||
textArea.setText(sb.toString());
|
textArea.setText(sb.toString());
|
||||||
} else if (component instanceof Usb_Endpoint_Descriptor) {
|
} else if (component instanceof Usb_Endpoint_Descriptor) {
|
||||||
Usb_Endpoint_Descriptor epDesc = (Usb_Endpoint_Descriptor) component;
|
Usb_Endpoint_Descriptor epDesc = (Usb_Endpoint_Descriptor) component;
|
||||||
StringBuffer sb = new StringBuffer("Usb_Endpoint_Descriptor\n");
|
StringBuffer sb = new StringBuffer("Usb_Endpoint_Descriptor\n");
|
||||||
sb.append("\tblenght: 0x"
|
sb.append("\tblenght: 0x"
|
||||||
+ Integer.toHexString(epDesc.getBLength() & 0xFF) + "\n");
|
+ Integer.toHexString(epDesc.getBLength() & 0xFF) + "\n");
|
||||||
sb.append("\tbDescriptorType: 0x"
|
sb.append("\tbDescriptorType: 0x"
|
||||||
+ Integer.toHexString(epDesc.getBDescriptorType() & 0xFF)
|
+ Integer.toHexString(epDesc.getBDescriptorType() & 0xFF)
|
||||||
+ "\n");
|
+ "\n");
|
||||||
sb.append("\tbEndpointAddress: 0x"
|
sb.append("\tbEndpointAddress: 0x"
|
||||||
+ Integer.toHexString(epDesc.getBEndpointAddress() & 0xFF)
|
+ Integer.toHexString(epDesc.getBEndpointAddress() & 0xFF)
|
||||||
+ "\n");
|
+ "\n");
|
||||||
sb.append("\tbmAttributes: 0x"
|
sb.append("\tbmAttributes: 0x"
|
||||||
+ Integer.toHexString(epDesc.getBmAttributes() & 0xFF)
|
+ Integer.toHexString(epDesc.getBmAttributes() & 0xFF)
|
||||||
+ "\n");
|
+ "\n");
|
||||||
sb.append("\twMaxPacketSize: 0x"
|
sb.append("\twMaxPacketSize: 0x"
|
||||||
+ Integer.toHexString(epDesc.getWMaxPacketSize() & 0xFFFF)
|
+ Integer.toHexString(epDesc.getWMaxPacketSize() & 0xFFFF)
|
||||||
+ " (" + epDesc.getWMaxPacketSize() + ")\n");
|
+ " (" + epDesc.getWMaxPacketSize() + ")\n");
|
||||||
sb.append("\tbInterval: 0x"
|
sb.append("\tbInterval: 0x"
|
||||||
+ Integer.toHexString(epDesc.getBInterval() & 0xFF) + "\n");
|
+ Integer.toHexString(epDesc.getBInterval() & 0xFF) + "\n");
|
||||||
sb.append("\tbRefresh: 0x"
|
sb.append("\tbRefresh: 0x"
|
||||||
+ Integer.toHexString(epDesc.getBRefresh() & 0xFF) + "\n");
|
+ Integer.toHexString(epDesc.getBRefresh() & 0xFF) + "\n");
|
||||||
sb.append("\tbSynchAddress: 0x"
|
sb.append("\tbSynchAddress: 0x"
|
||||||
+ Integer.toHexString(epDesc.getBSynchAddress()) + "\n");
|
+ Integer.toHexString(epDesc.getBSynchAddress()) + "\n");
|
||||||
sb.append("\textralen: 0x"
|
sb.append("\textralen: 0x"
|
||||||
+ Integer.toHexString(epDesc.getExtralen()) + "\n");
|
+ Integer.toHexString(epDesc.getExtralen()) + "\n");
|
||||||
sb.append("\textra: " + extraDescriptorToString(epDesc.getExtra()) + "\n");
|
sb.append("\textra: " + extraDescriptorToString(epDesc.getExtra()) + "\n");
|
||||||
textArea.setText(sb.toString());
|
textArea.setText(sb.toString());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private String extraDescriptorToString(byte[] extra) {
|
private String extraDescriptorToString(byte[] extra) {
|
||||||
if (extra != null) {
|
if (extra != null) {
|
||||||
StringBuffer sb = new StringBuffer();
|
StringBuffer sb = new StringBuffer();
|
||||||
for (int i = 0; i < extra.length; i++) {
|
for (int i = 0; i < extra.length; i++) {
|
||||||
sb.append("0x");
|
sb.append("0x");
|
||||||
sb.append(Integer.toHexString(extra[i] & 0xff));
|
sb.append(Integer.toHexString(extra[i] & 0xff));
|
||||||
sb.append(' ');
|
sb.append(' ');
|
||||||
}
|
}
|
||||||
return sb.toString();
|
return sb.toString();
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,403 +1,403 @@
|
|||||||
/*
|
/*
|
||||||
* Java libusb wrapper
|
* Java libusb wrapper
|
||||||
* Copyright (c) 2005-2006 Andreas Schläpfer <spandi at users.sourceforge.net>
|
* Copyright (c) 2005-2006 Andreas Schläpfer <spandi at users.sourceforge.net>
|
||||||
*
|
*
|
||||||
* http://libusbjava.sourceforge.net
|
* http://libusbjava.sourceforge.net
|
||||||
* This library is covered by the LGPL, read LGPL.txt for details.
|
* This library is covered by the LGPL, read LGPL.txt for details.
|
||||||
*/
|
*/
|
||||||
package ch.ntb.usb.usbView;
|
package ch.ntb.usb.usbView;
|
||||||
|
|
||||||
import java.awt.BorderLayout;
|
import java.awt.BorderLayout;
|
||||||
import java.awt.Component;
|
import java.awt.Component;
|
||||||
import java.awt.event.ActionEvent;
|
import java.awt.event.ActionEvent;
|
||||||
import java.awt.event.ActionListener;
|
import java.awt.event.ActionListener;
|
||||||
import java.awt.event.KeyEvent;
|
import java.awt.event.KeyEvent;
|
||||||
import java.awt.event.MouseAdapter;
|
import java.awt.event.MouseAdapter;
|
||||||
import java.awt.event.MouseEvent;
|
import java.awt.event.MouseEvent;
|
||||||
|
|
||||||
import javax.swing.JFrame;
|
import javax.swing.JFrame;
|
||||||
import javax.swing.JMenu;
|
import javax.swing.JMenu;
|
||||||
import javax.swing.JMenuBar;
|
import javax.swing.JMenuBar;
|
||||||
import javax.swing.JMenuItem;
|
import javax.swing.JMenuItem;
|
||||||
import javax.swing.JPanel;
|
import javax.swing.JPanel;
|
||||||
import javax.swing.JPopupMenu;
|
import javax.swing.JPopupMenu;
|
||||||
import javax.swing.JScrollPane;
|
import javax.swing.JScrollPane;
|
||||||
import javax.swing.JSplitPane;
|
import javax.swing.JSplitPane;
|
||||||
import javax.swing.JTextArea;
|
import javax.swing.JTextArea;
|
||||||
import javax.swing.JTree;
|
import javax.swing.JTree;
|
||||||
import javax.swing.KeyStroke;
|
import javax.swing.KeyStroke;
|
||||||
import javax.swing.tree.TreePath;
|
import javax.swing.tree.TreePath;
|
||||||
|
|
||||||
import ch.ntb.usb.LibusbJava;
|
import ch.ntb.usb.LibusbJava;
|
||||||
import ch.ntb.usb.Usb_Bus;
|
import ch.ntb.usb.Usb_Bus;
|
||||||
import ch.ntb.usb.Usb_Config_Descriptor;
|
import ch.ntb.usb.Usb_Config_Descriptor;
|
||||||
import ch.ntb.usb.Usb_Device;
|
import ch.ntb.usb.Usb_Device;
|
||||||
import ch.ntb.usb.Usb_Device_Descriptor;
|
import ch.ntb.usb.Usb_Device_Descriptor;
|
||||||
import ch.ntb.usb.Usb_Endpoint_Descriptor;
|
import ch.ntb.usb.Usb_Endpoint_Descriptor;
|
||||||
import ch.ntb.usb.Usb_Interface_Descriptor;
|
import ch.ntb.usb.Usb_Interface_Descriptor;
|
||||||
import ch.ntb.usb.testApp.TestApp;
|
import ch.ntb.usb.testApp.TestApp;
|
||||||
import ch.ntb.usb.testApp.TestDevice;
|
import ch.ntb.usb.testApp.TestDevice;
|
||||||
import ch.ntb.usb.testApp.AbstractDeviceInfo.TransferMode;
|
import ch.ntb.usb.testApp.AbstractDeviceInfo.TransferMode;
|
||||||
|
|
||||||
public class UsbView extends JFrame {
|
public class UsbView extends JFrame {
|
||||||
|
|
||||||
private static final long serialVersionUID = 4693554326612734263L;
|
private static final long serialVersionUID = 4693554326612734263L;
|
||||||
|
|
||||||
private static final int APP_WIDTH = 600, APP_HIGHT = 800;
|
private static final int APP_WIDTH = 600, APP_HIGHT = 800;
|
||||||
|
|
||||||
private JPanel jContentPane = null;
|
private JPanel jContentPane = null;
|
||||||
private JMenuBar jJMenuBar = null;
|
private JMenuBar jJMenuBar = null;
|
||||||
private JMenu commandsMenu = null;
|
private JMenu commandsMenu = null;
|
||||||
private JMenuItem exitMenuItem = null;
|
private JMenuItem exitMenuItem = null;
|
||||||
private JMenuItem updateMenuItem = null;
|
private JMenuItem updateMenuItem = null;
|
||||||
JTree usbTree = null;
|
JTree usbTree = null;
|
||||||
private JSplitPane jSplitPane = null;
|
private JSplitPane jSplitPane = null;
|
||||||
|
|
||||||
private JTextArea jPropertiesArea = null;
|
private JTextArea jPropertiesArea = null;
|
||||||
|
|
||||||
UsbTreeModel treeModel;
|
UsbTreeModel treeModel;
|
||||||
|
|
||||||
JPopupMenu testAppPopup;
|
JPopupMenu testAppPopup;
|
||||||
|
|
||||||
protected JPopupMenu endpointPopup;
|
protected JPopupMenu endpointPopup;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This is the default constructor
|
* This is the default constructor
|
||||||
*/
|
*/
|
||||||
public UsbView() {
|
public UsbView() {
|
||||||
super();
|
super();
|
||||||
initialize();
|
initialize();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method initializes this
|
* This method initializes this
|
||||||
*
|
*
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
private void initialize() {
|
private void initialize() {
|
||||||
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
||||||
this.setJMenuBar(getJJMenuBar());
|
this.setJMenuBar(getJJMenuBar());
|
||||||
this.setSize(APP_WIDTH, APP_HIGHT);
|
this.setSize(APP_WIDTH, APP_HIGHT);
|
||||||
this.setContentPane(getJContentPane());
|
this.setContentPane(getJContentPane());
|
||||||
this.setTitle("USB View");
|
this.setTitle("USB View");
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method initializes jContentPane
|
* This method initializes jContentPane
|
||||||
*
|
*
|
||||||
* @return javax.swing.JPanel
|
* @return javax.swing.JPanel
|
||||||
*/
|
*/
|
||||||
private JPanel getJContentPane() {
|
private JPanel getJContentPane() {
|
||||||
if (jContentPane == null) {
|
if (jContentPane == null) {
|
||||||
jContentPane = new JPanel();
|
jContentPane = new JPanel();
|
||||||
jContentPane.setLayout(new BorderLayout());
|
jContentPane.setLayout(new BorderLayout());
|
||||||
jContentPane.add(getJSplitPane(), java.awt.BorderLayout.CENTER);
|
jContentPane.add(getJSplitPane(), java.awt.BorderLayout.CENTER);
|
||||||
}
|
}
|
||||||
return jContentPane;
|
return jContentPane;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method initializes jJMenuBar
|
* This method initializes jJMenuBar
|
||||||
*
|
*
|
||||||
* @return javax.swing.JMenuBar
|
* @return javax.swing.JMenuBar
|
||||||
*/
|
*/
|
||||||
private JMenuBar getJJMenuBar() {
|
private JMenuBar getJJMenuBar() {
|
||||||
if (jJMenuBar == null) {
|
if (jJMenuBar == null) {
|
||||||
jJMenuBar = new JMenuBar();
|
jJMenuBar = new JMenuBar();
|
||||||
jJMenuBar.add(getFileMenu());
|
jJMenuBar.add(getFileMenu());
|
||||||
}
|
}
|
||||||
return jJMenuBar;
|
return jJMenuBar;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method initializes jMenu
|
* This method initializes jMenu
|
||||||
*
|
*
|
||||||
* @return javax.swing.JMenu
|
* @return javax.swing.JMenu
|
||||||
*/
|
*/
|
||||||
private JMenu getFileMenu() {
|
private JMenu getFileMenu() {
|
||||||
if (commandsMenu == null) {
|
if (commandsMenu == null) {
|
||||||
commandsMenu = new JMenu();
|
commandsMenu = new JMenu();
|
||||||
commandsMenu.setText("Commands");
|
commandsMenu.setText("Commands");
|
||||||
commandsMenu.add(getUpdateMenuItem());
|
commandsMenu.add(getUpdateMenuItem());
|
||||||
commandsMenu.add(getExitMenuItem());
|
commandsMenu.add(getExitMenuItem());
|
||||||
}
|
}
|
||||||
return commandsMenu;
|
return commandsMenu;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method initializes jMenuItem
|
* This method initializes jMenuItem
|
||||||
*
|
*
|
||||||
* @return javax.swing.JMenuItem
|
* @return javax.swing.JMenuItem
|
||||||
*/
|
*/
|
||||||
private JMenuItem getExitMenuItem() {
|
private JMenuItem getExitMenuItem() {
|
||||||
if (exitMenuItem == null) {
|
if (exitMenuItem == null) {
|
||||||
exitMenuItem = new JMenuItem();
|
exitMenuItem = new JMenuItem();
|
||||||
exitMenuItem.setText("Exit");
|
exitMenuItem.setText("Exit");
|
||||||
exitMenuItem.addActionListener(new ActionListener() {
|
exitMenuItem.addActionListener(new ActionListener() {
|
||||||
public void actionPerformed(ActionEvent e) {
|
public void actionPerformed(ActionEvent e) {
|
||||||
System.exit(0);
|
System.exit(0);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
return exitMenuItem;
|
return exitMenuItem;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method initializes jMenuItem
|
* This method initializes jMenuItem
|
||||||
*
|
*
|
||||||
* @return javax.swing.JMenuItem
|
* @return javax.swing.JMenuItem
|
||||||
*/
|
*/
|
||||||
private JMenuItem getUpdateMenuItem() {
|
private JMenuItem getUpdateMenuItem() {
|
||||||
if (updateMenuItem == null) {
|
if (updateMenuItem == null) {
|
||||||
updateMenuItem = new JMenuItem();
|
updateMenuItem = new JMenuItem();
|
||||||
updateMenuItem.setText("Update");
|
updateMenuItem.setText("Update");
|
||||||
updateMenuItem.setAccelerator(KeyStroke.getKeyStroke(
|
updateMenuItem.setAccelerator(KeyStroke.getKeyStroke(
|
||||||
KeyEvent.VK_F5, 0, true));
|
KeyEvent.VK_F5, 0, true));
|
||||||
updateMenuItem
|
updateMenuItem
|
||||||
.addActionListener(new java.awt.event.ActionListener() {
|
.addActionListener(new java.awt.event.ActionListener() {
|
||||||
public void actionPerformed(java.awt.event.ActionEvent e) {
|
public void actionPerformed(java.awt.event.ActionEvent e) {
|
||||||
// open bus
|
// open bus
|
||||||
LibusbJava.usb_init();
|
LibusbJava.usb_init();
|
||||||
LibusbJava.usb_find_busses();
|
LibusbJava.usb_find_busses();
|
||||||
LibusbJava.usb_find_devices();
|
LibusbJava.usb_find_devices();
|
||||||
|
|
||||||
Usb_Bus bus = LibusbJava.usb_get_busses();
|
Usb_Bus bus = LibusbJava.usb_get_busses();
|
||||||
if (bus != null) {
|
if (bus != null) {
|
||||||
treeModel.fireTreeStructureChanged(bus);
|
treeModel.fireTreeStructureChanged(bus);
|
||||||
expandAll(usbTree);
|
expandAll(usbTree);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
return updateMenuItem;
|
return updateMenuItem;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method initializes usbTree
|
* This method initializes usbTree
|
||||||
*
|
*
|
||||||
* @return javax.swing.JTree
|
* @return javax.swing.JTree
|
||||||
*/
|
*/
|
||||||
private JTree getUsbTree() {
|
private JTree getUsbTree() {
|
||||||
if (usbTree == null) {
|
if (usbTree == null) {
|
||||||
// open bus
|
// open bus
|
||||||
LibusbJava.usb_init();
|
LibusbJava.usb_init();
|
||||||
LibusbJava.usb_find_busses();
|
LibusbJava.usb_find_busses();
|
||||||
LibusbJava.usb_find_devices();
|
LibusbJava.usb_find_devices();
|
||||||
|
|
||||||
Usb_Bus bus = LibusbJava.usb_get_busses();
|
Usb_Bus bus = LibusbJava.usb_get_busses();
|
||||||
|
|
||||||
treeModel = new UsbTreeModel(bus, jPropertiesArea);
|
treeModel = new UsbTreeModel(bus, jPropertiesArea);
|
||||||
usbTree = new JTree(treeModel);
|
usbTree = new JTree(treeModel);
|
||||||
expandAll(usbTree);
|
expandAll(usbTree);
|
||||||
usbTree.addTreeSelectionListener(treeModel);
|
usbTree.addTreeSelectionListener(treeModel);
|
||||||
getJTestAppPopup();
|
getJTestAppPopup();
|
||||||
usbTree.addMouseListener(new MouseAdapter() {
|
usbTree.addMouseListener(new MouseAdapter() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void mousePressed(MouseEvent e) {
|
public void mousePressed(MouseEvent e) {
|
||||||
if (e.isPopupTrigger()) {
|
if (e.isPopupTrigger()) {
|
||||||
Object source = e.getSource();
|
Object source = e.getSource();
|
||||||
if (source instanceof JTree) {
|
if (source instanceof JTree) {
|
||||||
JTree tree = (JTree) source;
|
JTree tree = (JTree) source;
|
||||||
TreePath path = tree.getPathForLocation(e.getX(), e
|
TreePath path = tree.getPathForLocation(e.getX(), e
|
||||||
.getY());
|
.getY());
|
||||||
if (path != null
|
if (path != null
|
||||||
&& (path.getLastPathComponent() instanceof Usb_Interface_Descriptor)) {
|
&& (path.getLastPathComponent() instanceof Usb_Interface_Descriptor)) {
|
||||||
usbTree.setSelectionPath(path);
|
usbTree.setSelectionPath(path);
|
||||||
testAppPopup.show(tree, e.getX(), e.getY());
|
testAppPopup.show(tree, e.getX(), e.getY());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void mouseReleased(MouseEvent e) {
|
public void mouseReleased(MouseEvent e) {
|
||||||
if (e.isPopupTrigger()) {
|
if (e.isPopupTrigger()) {
|
||||||
if (e.isPopupTrigger()) {
|
if (e.isPopupTrigger()) {
|
||||||
Object source = e.getSource();
|
Object source = e.getSource();
|
||||||
if (source instanceof JTree) {
|
if (source instanceof JTree) {
|
||||||
JTree tree = (JTree) source;
|
JTree tree = (JTree) source;
|
||||||
TreePath path = tree.getPathForLocation(e
|
TreePath path = tree.getPathForLocation(e
|
||||||
.getX(), e.getY());
|
.getX(), e.getY());
|
||||||
if (path != null
|
if (path != null
|
||||||
&& (path.getLastPathComponent() instanceof Usb_Interface_Descriptor)) {
|
&& (path.getLastPathComponent() instanceof Usb_Interface_Descriptor)) {
|
||||||
usbTree.setSelectionPath(path);
|
usbTree.setSelectionPath(path);
|
||||||
testAppPopup.show(tree, e.getX(), e.getY());
|
testAppPopup.show(tree, e.getX(), e.getY());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
return usbTree;
|
return usbTree;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void getJTestAppPopup() {
|
private void getJTestAppPopup() {
|
||||||
// Create the popup menu.
|
// Create the popup menu.
|
||||||
testAppPopup = new JPopupMenu();
|
testAppPopup = new JPopupMenu();
|
||||||
endpointPopup = new JPopupMenu();
|
endpointPopup = new JPopupMenu();
|
||||||
JMenuItem menuItem = new JMenuItem(
|
JMenuItem menuItem = new JMenuItem(
|
||||||
"Start a test application using this interface");
|
"Start a test application using this interface");
|
||||||
menuItem.addActionListener(new java.awt.event.ActionListener() {
|
menuItem.addActionListener(new java.awt.event.ActionListener() {
|
||||||
public void actionPerformed(java.awt.event.ActionEvent e) {
|
public void actionPerformed(java.awt.event.ActionEvent e) {
|
||||||
initAndStartTestApp();
|
initAndStartTestApp();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initAndStartTestApp() {
|
private void initAndStartTestApp() {
|
||||||
JTree tree = (JTree) testAppPopup.getInvoker();
|
JTree tree = (JTree) testAppPopup.getInvoker();
|
||||||
TreePath path = tree.getSelectionPath();
|
TreePath path = tree.getSelectionPath();
|
||||||
TreePath parent = path;
|
TreePath parent = path;
|
||||||
Usb_Endpoint_Descriptor[] endpoints = null;
|
Usb_Endpoint_Descriptor[] endpoints = null;
|
||||||
int altinterface = -1;
|
int altinterface = -1;
|
||||||
int interface_ = -1;
|
int interface_ = -1;
|
||||||
int configuration = -1;
|
int configuration = -1;
|
||||||
short vendorId = -1;
|
short vendorId = -1;
|
||||||
short productId = -1;
|
short productId = -1;
|
||||||
while (parent != null
|
while (parent != null
|
||||||
&& !(parent.getLastPathComponent() instanceof Usb_Bus)) {
|
&& !(parent.getLastPathComponent() instanceof Usb_Bus)) {
|
||||||
Object usbObj = parent.getLastPathComponent();
|
Object usbObj = parent.getLastPathComponent();
|
||||||
if (usbObj instanceof Usb_Interface_Descriptor) {
|
if (usbObj instanceof Usb_Interface_Descriptor) {
|
||||||
Usb_Interface_Descriptor usbIntDesc = (Usb_Interface_Descriptor) usbObj;
|
Usb_Interface_Descriptor usbIntDesc = (Usb_Interface_Descriptor) usbObj;
|
||||||
endpoints = usbIntDesc.getEndpoint();
|
endpoints = usbIntDesc.getEndpoint();
|
||||||
interface_ = usbIntDesc.getBInterfaceNumber();
|
interface_ = usbIntDesc.getBInterfaceNumber();
|
||||||
altinterface = usbIntDesc.getBAlternateSetting();
|
altinterface = usbIntDesc.getBAlternateSetting();
|
||||||
} else if (usbObj instanceof Usb_Config_Descriptor) {
|
} else if (usbObj instanceof Usb_Config_Descriptor) {
|
||||||
configuration = ((Usb_Config_Descriptor) usbObj)
|
configuration = ((Usb_Config_Descriptor) usbObj)
|
||||||
.getBConfigurationValue();
|
.getBConfigurationValue();
|
||||||
} else if (usbObj instanceof Usb_Device) {
|
} else if (usbObj instanceof Usb_Device) {
|
||||||
Usb_Device_Descriptor devDesc = ((Usb_Device) usbObj)
|
Usb_Device_Descriptor devDesc = ((Usb_Device) usbObj)
|
||||||
.getDescriptor();
|
.getDescriptor();
|
||||||
productId = devDesc.getIdProduct();
|
productId = devDesc.getIdProduct();
|
||||||
vendorId = devDesc.getIdVendor();
|
vendorId = devDesc.getIdVendor();
|
||||||
}
|
}
|
||||||
parent = parent.getParentPath();
|
parent = parent.getParentPath();
|
||||||
}
|
}
|
||||||
if (parent != null) {
|
if (parent != null) {
|
||||||
// present a dialog to select in/out endpoint
|
// present a dialog to select in/out endpoint
|
||||||
// TODO: present dialog to select in/out endpoint
|
// TODO: present dialog to select in/out endpoint
|
||||||
Usb_Endpoint_Descriptor[] outEPs = null;
|
Usb_Endpoint_Descriptor[] outEPs = null;
|
||||||
int nofOutEPs = 0;
|
int nofOutEPs = 0;
|
||||||
Usb_Endpoint_Descriptor[] inEPs = null;
|
Usb_Endpoint_Descriptor[] inEPs = null;
|
||||||
int nofInEPs = 0;
|
int nofInEPs = 0;
|
||||||
|
|
||||||
if (endpoints != null) {
|
if (endpoints != null) {
|
||||||
outEPs = new Usb_Endpoint_Descriptor[endpoints.length];
|
outEPs = new Usb_Endpoint_Descriptor[endpoints.length];
|
||||||
inEPs = new Usb_Endpoint_Descriptor[endpoints.length];
|
inEPs = new Usb_Endpoint_Descriptor[endpoints.length];
|
||||||
for (int i = 0; i < endpoints.length; i++) {
|
for (int i = 0; i < endpoints.length; i++) {
|
||||||
int epAddr = endpoints[i].getBEndpointAddress() & 0xFF;
|
int epAddr = endpoints[i].getBEndpointAddress() & 0xFF;
|
||||||
if ((epAddr & 0x80) > 0) {
|
if ((epAddr & 0x80) > 0) {
|
||||||
// is IN endpoint
|
// is IN endpoint
|
||||||
inEPs[nofInEPs++] = endpoints[i];
|
inEPs[nofInEPs++] = endpoints[i];
|
||||||
} else {
|
} else {
|
||||||
// is OUT endpoint
|
// is OUT endpoint
|
||||||
outEPs[nofOutEPs++] = endpoints[i];
|
outEPs[nofOutEPs++] = endpoints[i];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// create a new TestDevice
|
// create a new TestDevice
|
||||||
TestDevice testDevice = new TestDevice();
|
TestDevice testDevice = new TestDevice();
|
||||||
testDevice.setIdProduct(productId);
|
testDevice.setIdProduct(productId);
|
||||||
testDevice.setIdVendor(vendorId);
|
testDevice.setIdVendor(vendorId);
|
||||||
testDevice.setAltinterface(altinterface);
|
testDevice.setAltinterface(altinterface);
|
||||||
testDevice.setConfiguration(configuration);
|
testDevice.setConfiguration(configuration);
|
||||||
testDevice.setInterface(interface_);
|
testDevice.setInterface(interface_);
|
||||||
if (inEPs != null) {
|
if (inEPs != null) {
|
||||||
for (int i = 0; i < nofInEPs; i++) {
|
for (int i = 0; i < nofInEPs; i++) {
|
||||||
int type = inEPs[i].getBmAttributes() & 0x03;
|
int type = inEPs[i].getBmAttributes() & 0x03;
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case Usb_Endpoint_Descriptor.USB_ENDPOINT_TYPE_BULK:
|
case Usb_Endpoint_Descriptor.USB_ENDPOINT_TYPE_BULK:
|
||||||
testDevice.setInEPBulk(inEPs[i]
|
testDevice.setInEPBulk(inEPs[i]
|
||||||
.getBEndpointAddress() & 0xff);
|
.getBEndpointAddress() & 0xff);
|
||||||
testDevice.setInMode(TransferMode.Bulk);
|
testDevice.setInMode(TransferMode.Bulk);
|
||||||
break;
|
break;
|
||||||
case Usb_Endpoint_Descriptor.USB_ENDPOINT_TYPE_INTERRUPT:
|
case Usb_Endpoint_Descriptor.USB_ENDPOINT_TYPE_INTERRUPT:
|
||||||
testDevice.setInEPInt(inEPs[i]
|
testDevice.setInEPInt(inEPs[i]
|
||||||
.getBEndpointAddress() & 0xff);
|
.getBEndpointAddress() & 0xff);
|
||||||
testDevice.setInMode(TransferMode.Interrupt);
|
testDevice.setInMode(TransferMode.Interrupt);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (outEPs != null) {
|
if (outEPs != null) {
|
||||||
for (int i = 0; i < nofOutEPs; i++) {
|
for (int i = 0; i < nofOutEPs; i++) {
|
||||||
int type = outEPs[i].getBmAttributes() & 0x03;
|
int type = outEPs[i].getBmAttributes() & 0x03;
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case Usb_Endpoint_Descriptor.USB_ENDPOINT_TYPE_BULK:
|
case Usb_Endpoint_Descriptor.USB_ENDPOINT_TYPE_BULK:
|
||||||
testDevice.setOutEPBulk(outEPs[i]
|
testDevice.setOutEPBulk(outEPs[i]
|
||||||
.getBEndpointAddress() & 0xff);
|
.getBEndpointAddress() & 0xff);
|
||||||
testDevice.setOutMode(TransferMode.Bulk);
|
testDevice.setOutMode(TransferMode.Bulk);
|
||||||
break;
|
break;
|
||||||
case Usb_Endpoint_Descriptor.USB_ENDPOINT_TYPE_INTERRUPT:
|
case Usb_Endpoint_Descriptor.USB_ENDPOINT_TYPE_INTERRUPT:
|
||||||
testDevice.setOutEPInt(outEPs[i]
|
testDevice.setOutEPInt(outEPs[i]
|
||||||
.getBEndpointAddress() & 0xff);
|
.getBEndpointAddress() & 0xff);
|
||||||
testDevice.setOutMode(TransferMode.Interrupt);
|
testDevice.setOutMode(TransferMode.Interrupt);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// open a new testApp
|
// open a new testApp
|
||||||
TestApp app = new TestApp(testDevice);
|
TestApp app = new TestApp(testDevice);
|
||||||
app.setVisible(true);
|
app.setVisible(true);
|
||||||
} else {
|
} else {
|
||||||
System.out.println("error, could not find device node");
|
System.out.println("error, could not find device node");
|
||||||
// TODO: handle error
|
// TODO: handle error
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
testAppPopup.add(menuItem);
|
testAppPopup.add(menuItem);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method initializes jSplitPane
|
* This method initializes jSplitPane
|
||||||
*
|
*
|
||||||
* @return javax.swing.JSplitPane
|
* @return javax.swing.JSplitPane
|
||||||
*/
|
*/
|
||||||
private JSplitPane getJSplitPane() {
|
private JSplitPane getJSplitPane() {
|
||||||
if (jSplitPane == null) {
|
if (jSplitPane == null) {
|
||||||
jSplitPane = new JSplitPane();
|
jSplitPane = new JSplitPane();
|
||||||
jSplitPane.setOrientation(javax.swing.JSplitPane.VERTICAL_SPLIT);
|
jSplitPane.setOrientation(javax.swing.JSplitPane.VERTICAL_SPLIT);
|
||||||
jSplitPane.setContinuousLayout(true);
|
jSplitPane.setContinuousLayout(true);
|
||||||
jSplitPane.setDividerLocation(APP_HIGHT / 2);
|
jSplitPane.setDividerLocation(APP_HIGHT / 2);
|
||||||
jSplitPane
|
jSplitPane
|
||||||
.setBottomComponent(createScrollPane(getJPropertiesArea()));
|
.setBottomComponent(createScrollPane(getJPropertiesArea()));
|
||||||
jSplitPane.setTopComponent(createScrollPane(getUsbTree()));
|
jSplitPane.setTopComponent(createScrollPane(getUsbTree()));
|
||||||
}
|
}
|
||||||
return jSplitPane;
|
return jSplitPane;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method initializes jPropertiesArea
|
* This method initializes jPropertiesArea
|
||||||
*
|
*
|
||||||
* @return javax.swing.JTextArea
|
* @return javax.swing.JTextArea
|
||||||
*/
|
*/
|
||||||
private JTextArea getJPropertiesArea() {
|
private JTextArea getJPropertiesArea() {
|
||||||
if (jPropertiesArea == null) {
|
if (jPropertiesArea == null) {
|
||||||
jPropertiesArea = new JTextArea();
|
jPropertiesArea = new JTextArea();
|
||||||
}
|
}
|
||||||
return jPropertiesArea;
|
return jPropertiesArea;
|
||||||
}
|
}
|
||||||
|
|
||||||
private JScrollPane createScrollPane(Component view) {
|
private JScrollPane createScrollPane(Component view) {
|
||||||
JScrollPane scrollPane = new JScrollPane(view);
|
JScrollPane scrollPane = new JScrollPane(view);
|
||||||
return scrollPane;
|
return scrollPane;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Launches this application
|
* Launches this application
|
||||||
*/
|
*/
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
UsbView application = new UsbView();
|
UsbView application = new UsbView();
|
||||||
application.setVisible(true);
|
application.setVisible(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
void expandAll(JTree tree) {
|
void expandAll(JTree tree) {
|
||||||
for (int row = 0; row < tree.getRowCount(); row++) {
|
for (int row = 0; row < tree.getRowCount(); row++) {
|
||||||
tree.expandRow(row);
|
tree.expandRow(row);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,17 +1,17 @@
|
|||||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
|
||||||
<html>
|
<html>
|
||||||
<head></head>
|
<head></head>
|
||||||
<body bgcolor="white">
|
<body bgcolor="white">
|
||||||
|
|
||||||
Displays the bus and device information of the currently attached
|
Displays the bus and device information of the currently attached
|
||||||
devices in a tree (based on Swing).
|
devices in a tree (based on Swing).
|
||||||
|
|
||||||
<h2>Related Resources</h2>
|
<h2>Related Resources</h2>
|
||||||
|
|
||||||
For more information about this project visit
|
For more information about this project visit
|
||||||
<a
|
<a
|
||||||
href="http://libusbjava.sourceforge.net">http://libusbjava.sourceforge.net</a>
|
href="http://libusbjava.sourceforge.net">http://libusbjava.sourceforge.net</a>
|
||||||
.
|
.
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
Reference in New Issue
Block a user