Roughly move files to fit gradle project
This commit is contained in:
8
.gitignore
vendored
Normal file
8
.gitignore
vendored
Normal file
@@ -0,0 +1,8 @@
|
||||
.gradle
|
||||
.settings
|
||||
.project
|
||||
.classpath
|
||||
.project
|
||||
.maven
|
||||
bin
|
||||
build
|
||||
File diff suppressed because it is too large
Load Diff
22
build.gradle
Normal file
22
build.gradle
Normal file
@@ -0,0 +1,22 @@
|
||||
apply plugin: 'java'
|
||||
apply plugin: 'cpp'
|
||||
apply plugin: 'maven'
|
||||
apply plugin: 'eclipse'
|
||||
|
||||
group = 'com.github.boukefalos'
|
||||
archivesBaseName = 'jlibusb'
|
||||
version = '0.5.7'
|
||||
|
||||
repositories {
|
||||
mavenCentral()
|
||||
}
|
||||
|
||||
dependencies {
|
||||
testCompile 'junit:junit:4.11'
|
||||
}
|
||||
|
||||
uploadArchives {
|
||||
repositories.mavenDeployer {
|
||||
repository(url: uri('.maven'))
|
||||
}
|
||||
}
|
||||
@@ -1,3 +0,0 @@
|
||||
#Thu Oct 06 09:12:32 CEST 2005
|
||||
eclipse.preferences.version=1
|
||||
internal.default.compliance=default
|
||||
@@ -1,13 +0,0 @@
|
||||
Manifest-Version: 1.0
|
||||
Bundle-ManifestVersion: 2
|
||||
Bundle-Name: Java libusb-1.0 wrapper
|
||||
Bundle-SymbolicName: ch.ntb.inf.libusbJava
|
||||
Bundle-Version: 1.0.2
|
||||
Bundle-Vendor: libusbjava.sourceforge.net
|
||||
Require-Bundle: org.junit4
|
||||
Export-Package: ch.ntb.inf.libusbJava,
|
||||
ch.ntb.inf.libusbJava.logger,
|
||||
ch.ntb.inf.libusbJava.testApp,
|
||||
ch.ntb.inf.libusbJava.usbView
|
||||
Bundle-RequiredExecutionEnvironment: J2SE-1.5
|
||||
Import-Package: ch.ntb.inf.libusbJava
|
||||
@@ -1,6 +0,0 @@
|
||||
# enable or disable logging
|
||||
ch.ntb.inf.libusbJava/debug = true
|
||||
# set and configure individual loggers here
|
||||
# the format is: projectName/debug/<loggerX> = <logger name>/<log level>
|
||||
ch.ntb.inf.libusbJava/debug/logger0 = ch.ntb.inf.libusbJava/OFF
|
||||
ch.ntb.inf.libusbJava/debug/logger1 = ch.ntb.inf.libusbJava.test/INFO
|
||||
@@ -1,126 +1,126 @@
|
||||
LIBRARY "libusb-1.0.dll"
|
||||
EXPORTS
|
||||
libusb_alloc_transfer
|
||||
libusb_alloc_transfer@4 = libusb_alloc_transfer
|
||||
libusb_attach_kernel_driver
|
||||
libusb_attach_kernel_driver@8 = libusb_attach_kernel_driver
|
||||
libusb_bulk_transfer
|
||||
libusb_bulk_transfer@24 = libusb_bulk_transfer
|
||||
libusb_cancel_transfer
|
||||
libusb_cancel_transfer@4 = libusb_cancel_transfer
|
||||
libusb_claim_interface
|
||||
libusb_claim_interface@8 = libusb_claim_interface
|
||||
libusb_clear_halt
|
||||
libusb_clear_halt@8 = libusb_clear_halt
|
||||
libusb_close
|
||||
libusb_close@4 = libusb_close
|
||||
libusb_control_transfer
|
||||
libusb_control_transfer@32 = libusb_control_transfer
|
||||
libusb_detach_kernel_driver
|
||||
libusb_detach_kernel_driver@8 = libusb_detach_kernel_driver
|
||||
libusb_error_name
|
||||
libusb_error_name@4 = libusb_error_name
|
||||
libusb_event_handler_active
|
||||
libusb_event_handler_active@4 = libusb_event_handler_active
|
||||
libusb_event_handling_ok
|
||||
libusb_event_handling_ok@4 = libusb_event_handling_ok
|
||||
libusb_exit
|
||||
libusb_exit@4 = libusb_exit
|
||||
libusb_free_config_descriptor
|
||||
libusb_free_config_descriptor@4 = libusb_free_config_descriptor
|
||||
libusb_free_device_list
|
||||
libusb_free_device_list@8 = libusb_free_device_list
|
||||
libusb_free_transfer
|
||||
libusb_free_transfer@4 = libusb_free_transfer
|
||||
libusb_get_active_config_descriptor
|
||||
libusb_get_active_config_descriptor@8 = libusb_get_active_config_descriptor
|
||||
libusb_get_bus_number
|
||||
libusb_get_bus_number@4 = libusb_get_bus_number
|
||||
libusb_get_config_descriptor
|
||||
libusb_get_config_descriptor@12 = libusb_get_config_descriptor
|
||||
libusb_get_config_descriptor_by_value
|
||||
libusb_get_config_descriptor_by_value@12 = libusb_get_config_descriptor_by_value
|
||||
libusb_get_configuration
|
||||
libusb_get_configuration@8 = libusb_get_configuration
|
||||
libusb_get_device
|
||||
libusb_get_device@4 = libusb_get_device
|
||||
libusb_get_device_address
|
||||
libusb_get_device_address@4 = libusb_get_device_address
|
||||
libusb_get_device_descriptor
|
||||
libusb_get_device_descriptor@8 = libusb_get_device_descriptor
|
||||
libusb_get_device_list
|
||||
libusb_get_device_list@8 = libusb_get_device_list
|
||||
libusb_get_device_speed
|
||||
libusb_get_device_speed@4 = libusb_get_device_speed
|
||||
libusb_get_max_iso_packet_size
|
||||
libusb_get_max_iso_packet_size@8 = libusb_get_max_iso_packet_size
|
||||
libusb_get_max_packet_size
|
||||
libusb_get_max_packet_size@8 = libusb_get_max_packet_size
|
||||
libusb_get_next_timeout
|
||||
libusb_get_next_timeout@8 = libusb_get_next_timeout
|
||||
libusb_get_parent
|
||||
libusb_get_parent@4 = libusb_get_parent
|
||||
libusb_get_pollfds
|
||||
libusb_get_pollfds@4 = libusb_get_pollfds
|
||||
libusb_get_port_number
|
||||
libusb_get_port_number@4 = libusb_get_port_number
|
||||
libusb_get_port_path
|
||||
libusb_get_port_path@16 = libusb_get_port_path
|
||||
libusb_get_string_descriptor_ascii
|
||||
libusb_get_string_descriptor_ascii@16 = libusb_get_string_descriptor_ascii
|
||||
libusb_get_version
|
||||
libusb_get_version@0 = libusb_get_version
|
||||
libusb_handle_events
|
||||
libusb_handle_events@4 = libusb_handle_events
|
||||
libusb_handle_events_completed
|
||||
libusb_handle_events_completed@8 = libusb_handle_events_completed
|
||||
libusb_handle_events_locked
|
||||
libusb_handle_events_locked@8 = libusb_handle_events_locked
|
||||
libusb_handle_events_timeout
|
||||
libusb_handle_events_timeout@8 = libusb_handle_events_timeout
|
||||
libusb_handle_events_timeout_completed
|
||||
libusb_handle_events_timeout_completed@12 = libusb_handle_events_timeout_completed
|
||||
libusb_has_capability
|
||||
libusb_has_capability@4 = libusb_has_capability
|
||||
libusb_init
|
||||
libusb_init@4 = libusb_init
|
||||
libusb_interrupt_transfer
|
||||
libusb_interrupt_transfer@24 = libusb_interrupt_transfer
|
||||
libusb_kernel_driver_active
|
||||
libusb_kernel_driver_active@8 = libusb_kernel_driver_active
|
||||
libusb_lock_event_waiters
|
||||
libusb_lock_event_waiters@4 = libusb_lock_event_waiters
|
||||
libusb_lock_events
|
||||
libusb_lock_events@4 = libusb_lock_events
|
||||
libusb_open
|
||||
libusb_open@8 = libusb_open
|
||||
libusb_open_device_with_vid_pid
|
||||
libusb_open_device_with_vid_pid@12 = libusb_open_device_with_vid_pid
|
||||
libusb_pollfds_handle_timeouts
|
||||
libusb_pollfds_handle_timeouts@4 = libusb_pollfds_handle_timeouts
|
||||
libusb_ref_device
|
||||
libusb_ref_device@4 = libusb_ref_device
|
||||
libusb_release_interface
|
||||
libusb_release_interface@8 = libusb_release_interface
|
||||
libusb_reset_device
|
||||
libusb_reset_device@4 = libusb_reset_device
|
||||
libusb_set_configuration
|
||||
libusb_set_configuration@8 = libusb_set_configuration
|
||||
libusb_set_debug
|
||||
libusb_set_debug@8 = libusb_set_debug
|
||||
libusb_set_interface_alt_setting
|
||||
libusb_set_interface_alt_setting@12 = libusb_set_interface_alt_setting
|
||||
libusb_set_pollfd_notifiers
|
||||
libusb_set_pollfd_notifiers@16 = libusb_set_pollfd_notifiers
|
||||
libusb_submit_transfer
|
||||
libusb_submit_transfer@4 = libusb_submit_transfer
|
||||
libusb_try_lock_events
|
||||
libusb_try_lock_events@4 = libusb_try_lock_events
|
||||
libusb_unlock_event_waiters
|
||||
libusb_unlock_event_waiters@4 = libusb_unlock_event_waiters
|
||||
libusb_unlock_events
|
||||
libusb_unlock_events@4 = libusb_unlock_events
|
||||
libusb_unref_device
|
||||
libusb_unref_device@4 = libusb_unref_device
|
||||
libusb_wait_for_event
|
||||
libusb_wait_for_event@8 = libusb_wait_for_event
|
||||
LIBRARY "libusb-1.0.dll"
|
||||
EXPORTS
|
||||
libusb_alloc_transfer
|
||||
libusb_alloc_transfer@4 = libusb_alloc_transfer
|
||||
libusb_attach_kernel_driver
|
||||
libusb_attach_kernel_driver@8 = libusb_attach_kernel_driver
|
||||
libusb_bulk_transfer
|
||||
libusb_bulk_transfer@24 = libusb_bulk_transfer
|
||||
libusb_cancel_transfer
|
||||
libusb_cancel_transfer@4 = libusb_cancel_transfer
|
||||
libusb_claim_interface
|
||||
libusb_claim_interface@8 = libusb_claim_interface
|
||||
libusb_clear_halt
|
||||
libusb_clear_halt@8 = libusb_clear_halt
|
||||
libusb_close
|
||||
libusb_close@4 = libusb_close
|
||||
libusb_control_transfer
|
||||
libusb_control_transfer@32 = libusb_control_transfer
|
||||
libusb_detach_kernel_driver
|
||||
libusb_detach_kernel_driver@8 = libusb_detach_kernel_driver
|
||||
libusb_error_name
|
||||
libusb_error_name@4 = libusb_error_name
|
||||
libusb_event_handler_active
|
||||
libusb_event_handler_active@4 = libusb_event_handler_active
|
||||
libusb_event_handling_ok
|
||||
libusb_event_handling_ok@4 = libusb_event_handling_ok
|
||||
libusb_exit
|
||||
libusb_exit@4 = libusb_exit
|
||||
libusb_free_config_descriptor
|
||||
libusb_free_config_descriptor@4 = libusb_free_config_descriptor
|
||||
libusb_free_device_list
|
||||
libusb_free_device_list@8 = libusb_free_device_list
|
||||
libusb_free_transfer
|
||||
libusb_free_transfer@4 = libusb_free_transfer
|
||||
libusb_get_active_config_descriptor
|
||||
libusb_get_active_config_descriptor@8 = libusb_get_active_config_descriptor
|
||||
libusb_get_bus_number
|
||||
libusb_get_bus_number@4 = libusb_get_bus_number
|
||||
libusb_get_config_descriptor
|
||||
libusb_get_config_descriptor@12 = libusb_get_config_descriptor
|
||||
libusb_get_config_descriptor_by_value
|
||||
libusb_get_config_descriptor_by_value@12 = libusb_get_config_descriptor_by_value
|
||||
libusb_get_configuration
|
||||
libusb_get_configuration@8 = libusb_get_configuration
|
||||
libusb_get_device
|
||||
libusb_get_device@4 = libusb_get_device
|
||||
libusb_get_device_address
|
||||
libusb_get_device_address@4 = libusb_get_device_address
|
||||
libusb_get_device_descriptor
|
||||
libusb_get_device_descriptor@8 = libusb_get_device_descriptor
|
||||
libusb_get_device_list
|
||||
libusb_get_device_list@8 = libusb_get_device_list
|
||||
libusb_get_device_speed
|
||||
libusb_get_device_speed@4 = libusb_get_device_speed
|
||||
libusb_get_max_iso_packet_size
|
||||
libusb_get_max_iso_packet_size@8 = libusb_get_max_iso_packet_size
|
||||
libusb_get_max_packet_size
|
||||
libusb_get_max_packet_size@8 = libusb_get_max_packet_size
|
||||
libusb_get_next_timeout
|
||||
libusb_get_next_timeout@8 = libusb_get_next_timeout
|
||||
libusb_get_parent
|
||||
libusb_get_parent@4 = libusb_get_parent
|
||||
libusb_get_pollfds
|
||||
libusb_get_pollfds@4 = libusb_get_pollfds
|
||||
libusb_get_port_number
|
||||
libusb_get_port_number@4 = libusb_get_port_number
|
||||
libusb_get_port_path
|
||||
libusb_get_port_path@16 = libusb_get_port_path
|
||||
libusb_get_string_descriptor_ascii
|
||||
libusb_get_string_descriptor_ascii@16 = libusb_get_string_descriptor_ascii
|
||||
libusb_get_version
|
||||
libusb_get_version@0 = libusb_get_version
|
||||
libusb_handle_events
|
||||
libusb_handle_events@4 = libusb_handle_events
|
||||
libusb_handle_events_completed
|
||||
libusb_handle_events_completed@8 = libusb_handle_events_completed
|
||||
libusb_handle_events_locked
|
||||
libusb_handle_events_locked@8 = libusb_handle_events_locked
|
||||
libusb_handle_events_timeout
|
||||
libusb_handle_events_timeout@8 = libusb_handle_events_timeout
|
||||
libusb_handle_events_timeout_completed
|
||||
libusb_handle_events_timeout_completed@12 = libusb_handle_events_timeout_completed
|
||||
libusb_has_capability
|
||||
libusb_has_capability@4 = libusb_has_capability
|
||||
libusb_init
|
||||
libusb_init@4 = libusb_init
|
||||
libusb_interrupt_transfer
|
||||
libusb_interrupt_transfer@24 = libusb_interrupt_transfer
|
||||
libusb_kernel_driver_active
|
||||
libusb_kernel_driver_active@8 = libusb_kernel_driver_active
|
||||
libusb_lock_event_waiters
|
||||
libusb_lock_event_waiters@4 = libusb_lock_event_waiters
|
||||
libusb_lock_events
|
||||
libusb_lock_events@4 = libusb_lock_events
|
||||
libusb_open
|
||||
libusb_open@8 = libusb_open
|
||||
libusb_open_device_with_vid_pid
|
||||
libusb_open_device_with_vid_pid@12 = libusb_open_device_with_vid_pid
|
||||
libusb_pollfds_handle_timeouts
|
||||
libusb_pollfds_handle_timeouts@4 = libusb_pollfds_handle_timeouts
|
||||
libusb_ref_device
|
||||
libusb_ref_device@4 = libusb_ref_device
|
||||
libusb_release_interface
|
||||
libusb_release_interface@8 = libusb_release_interface
|
||||
libusb_reset_device
|
||||
libusb_reset_device@4 = libusb_reset_device
|
||||
libusb_set_configuration
|
||||
libusb_set_configuration@8 = libusb_set_configuration
|
||||
libusb_set_debug
|
||||
libusb_set_debug@8 = libusb_set_debug
|
||||
libusb_set_interface_alt_setting
|
||||
libusb_set_interface_alt_setting@12 = libusb_set_interface_alt_setting
|
||||
libusb_set_pollfd_notifiers
|
||||
libusb_set_pollfd_notifiers@16 = libusb_set_pollfd_notifiers
|
||||
libusb_submit_transfer
|
||||
libusb_submit_transfer@4 = libusb_submit_transfer
|
||||
libusb_try_lock_events
|
||||
libusb_try_lock_events@4 = libusb_try_lock_events
|
||||
libusb_unlock_event_waiters
|
||||
libusb_unlock_event_waiters@4 = libusb_unlock_event_waiters
|
||||
libusb_unlock_events
|
||||
libusb_unlock_events@4 = libusb_unlock_events
|
||||
libusb_unref_device
|
||||
libusb_unref_device@4 = libusb_unref_device
|
||||
libusb_wait_for_event
|
||||
libusb_wait_for_event@8 = libusb_wait_for_event
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,141 +1,141 @@
|
||||
/*! \file
|
||||
*
|
||||
* C++ Stub for the java class of a java class ch.ntb.inf.libusbJava.Usb_Device.
|
||||
*
|
||||
* \author Ueli Niederer <ueli.niederer @ ntb.ch>
|
||||
*/
|
||||
#include "Usb_Device.h"
|
||||
#include <string.h>
|
||||
|
||||
#ifdef DO_UNIT_TEST
|
||||
# include <test/CuTest.h>
|
||||
|
||||
# define TEST_CASE(name) static void name(CuTest *tc)
|
||||
#endif
|
||||
|
||||
typedef struct JField {
|
||||
const char *type;
|
||||
const char *name;
|
||||
jfieldID id;
|
||||
}tJField;
|
||||
|
||||
typedef struct Usb_Device {
|
||||
int loaded;
|
||||
|
||||
jclass clazz;
|
||||
|
||||
jmethodID constructor;
|
||||
|
||||
jfieldID next;
|
||||
jfieldID prev;
|
||||
jfieldID filename;
|
||||
jfieldID bus;
|
||||
jfieldID descriptor;
|
||||
jfieldID config;
|
||||
jfieldID devnum;
|
||||
jfieldID num_children;
|
||||
jfieldID children;
|
||||
jfieldID devStructAddr;
|
||||
}tUsb_Device;
|
||||
|
||||
#define LOAD_FIELD(env, me, type, name) me->name = env->GetFieldID(me->clazz, #name, (type))
|
||||
#if 0
|
||||
#define SANITY_CHECK() { if (me->loaded == 0) Usb_Device_connect(env); }
|
||||
#else
|
||||
#define SANITY_CHECK()
|
||||
#endif
|
||||
|
||||
static tUsb_Device instance = { 0 };
|
||||
static tUsb_Device *me = &instance;
|
||||
|
||||
int Usb_Device_connect(JNIEnv *env)
|
||||
{
|
||||
jobject theClass = env->FindClass("ch/ntb/inf/libusbJava/Usb_Device");
|
||||
if (theClass == NULL) goto no_class;
|
||||
|
||||
me->clazz = (jclass) env->NewGlobalRef(theClass); // make it global to avoid class unloading and therefore
|
||||
// invalidating the references obtained.
|
||||
if (me->clazz == NULL) goto no_memory;
|
||||
|
||||
me->constructor = env->GetMethodID(me->clazz, "<init>", "()V");
|
||||
if (me->constructor == NULL) goto no_constructor;
|
||||
|
||||
LOAD_FIELD(env, me, "Lch/ntb/inf/libusbJava/Usb_Device;", next);
|
||||
LOAD_FIELD(env, me, "Lch/ntb/inf/libusbJava/Usb_Device;", prev);
|
||||
LOAD_FIELD(env, me, "Ljava/lang/String;", filename);
|
||||
LOAD_FIELD(env, me, "Lch/ntb/inf/libusbJava/Usb_Bus;", bus);
|
||||
LOAD_FIELD(env, me, "Lch/ntb/inf/libusbJava/Usb_Device_Descriptor;", descriptor);
|
||||
LOAD_FIELD(env, me, "[Lch/ntb/inf/libusbJava/Usb_Config_Descriptor;", config);
|
||||
LOAD_FIELD(env, me, "B", devnum);
|
||||
LOAD_FIELD(env, me, "B", num_children);
|
||||
LOAD_FIELD(env, me, "Lch/ntb/inf/libusbJava/Usb_Device;", children);
|
||||
LOAD_FIELD(env, me, "J", devStructAddr);
|
||||
|
||||
me->loaded = 1;
|
||||
return 0;
|
||||
|
||||
no_constructor:
|
||||
env->DeleteGlobalRef(me->clazz);
|
||||
no_memory:
|
||||
no_class:
|
||||
return -1;
|
||||
}
|
||||
|
||||
void Usb_Device_disconnect(JNIEnv *env)
|
||||
{
|
||||
if (me->loaded == 0) return;
|
||||
|
||||
env->DeleteGlobalRef(me->clazz);
|
||||
memset(me, 0, sizeof(tUsb_Device));
|
||||
}
|
||||
|
||||
jobject Usb_Device_create(JNIEnv *env, libusb_device *handle, uint8_t address){
|
||||
if (me->loaded == 0) return NULL;
|
||||
|
||||
jobject result = env->NewObject(me->clazz, me->constructor);
|
||||
|
||||
if (result != NULL) {
|
||||
char filename[4];
|
||||
|
||||
snprintf(filename, 4, "%03d", address);
|
||||
|
||||
env->SetLongField(result, me->devStructAddr, (jlong)handle);
|
||||
env->SetByteField(result, me->devnum, address);
|
||||
env->SetObjectField(result, me->filename, env->NewStringUTF(filename));
|
||||
|
||||
env->SetByteField(result, me->num_children, 0); /*Hardcoded to 0, like the compatibility Layer*/
|
||||
env->SetObjectField(result, me->children, NULL); /*Hardcoded to NULL, like the compatibility Layer*/
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
libusb_device * Usb_Device_HandleGet(JNIEnv *env, jobject dev)
|
||||
{
|
||||
if (me->loaded == 0) return NULL;
|
||||
|
||||
return (libusb_device*)env->GetLongField(dev, me->devStructAddr);
|
||||
}
|
||||
|
||||
void Usb_Device_HandleSet(JNIEnv *env, jobject dev, libusb_device *handle)
|
||||
{
|
||||
env->SetLongField(dev, me->devStructAddr, (jlong)handle);
|
||||
}
|
||||
|
||||
void Usb_Device_ConfigSet(JNIEnv *env, jobject dev, jobjectArray config)
|
||||
{
|
||||
env->SetObjectField(dev, me->config, config);
|
||||
}
|
||||
|
||||
void Usb_Device_DescriptorSet(JNIEnv *env, jobject dev, jobject desc)
|
||||
{
|
||||
env->SetObjectField(dev, me->descriptor, desc);
|
||||
}
|
||||
|
||||
void Usb_Device_NextSet(JNIEnv *env, jobject dev, jobject next) {
|
||||
env->SetObjectField(dev, me->next, next);
|
||||
}
|
||||
|
||||
void Usb_Device_PrevSet(JNIEnv *env, jobject dev, jobject prev) {
|
||||
env->SetObjectField(dev, me->prev, prev);
|
||||
}
|
||||
/*! \file
|
||||
*
|
||||
* C++ Stub for the java class of a java class ch.ntb.inf.libusbJava.Usb_Device.
|
||||
*
|
||||
* \author Ueli Niederer <ueli.niederer @ ntb.ch>
|
||||
*/
|
||||
#include "Usb_Device.h"
|
||||
#include <string.h>
|
||||
|
||||
#ifdef DO_UNIT_TEST
|
||||
# include <test/CuTest.h>
|
||||
|
||||
# define TEST_CASE(name) static void name(CuTest *tc)
|
||||
#endif
|
||||
|
||||
typedef struct JField {
|
||||
const char *type;
|
||||
const char *name;
|
||||
jfieldID id;
|
||||
}tJField;
|
||||
|
||||
typedef struct Usb_Device {
|
||||
int loaded;
|
||||
|
||||
jclass clazz;
|
||||
|
||||
jmethodID constructor;
|
||||
|
||||
jfieldID next;
|
||||
jfieldID prev;
|
||||
jfieldID filename;
|
||||
jfieldID bus;
|
||||
jfieldID descriptor;
|
||||
jfieldID config;
|
||||
jfieldID devnum;
|
||||
jfieldID num_children;
|
||||
jfieldID children;
|
||||
jfieldID devStructAddr;
|
||||
}tUsb_Device;
|
||||
|
||||
#define LOAD_FIELD(env, me, type, name) me->name = env->GetFieldID(me->clazz, #name, (type))
|
||||
#if 0
|
||||
#define SANITY_CHECK() { if (me->loaded == 0) Usb_Device_connect(env); }
|
||||
#else
|
||||
#define SANITY_CHECK()
|
||||
#endif
|
||||
|
||||
static tUsb_Device instance = { 0 };
|
||||
static tUsb_Device *me = &instance;
|
||||
|
||||
int Usb_Device_connect(JNIEnv *env)
|
||||
{
|
||||
jobject theClass = env->FindClass("ch/ntb/inf/libusbJava/Usb_Device");
|
||||
if (theClass == NULL) goto no_class;
|
||||
|
||||
me->clazz = (jclass) env->NewGlobalRef(theClass); // make it global to avoid class unloading and therefore
|
||||
// invalidating the references obtained.
|
||||
if (me->clazz == NULL) goto no_memory;
|
||||
|
||||
me->constructor = env->GetMethodID(me->clazz, "<init>", "()V");
|
||||
if (me->constructor == NULL) goto no_constructor;
|
||||
|
||||
LOAD_FIELD(env, me, "Lch/ntb/inf/libusbJava/Usb_Device;", next);
|
||||
LOAD_FIELD(env, me, "Lch/ntb/inf/libusbJava/Usb_Device;", prev);
|
||||
LOAD_FIELD(env, me, "Ljava/lang/String;", filename);
|
||||
LOAD_FIELD(env, me, "Lch/ntb/inf/libusbJava/Usb_Bus;", bus);
|
||||
LOAD_FIELD(env, me, "Lch/ntb/inf/libusbJava/Usb_Device_Descriptor;", descriptor);
|
||||
LOAD_FIELD(env, me, "[Lch/ntb/inf/libusbJava/Usb_Config_Descriptor;", config);
|
||||
LOAD_FIELD(env, me, "B", devnum);
|
||||
LOAD_FIELD(env, me, "B", num_children);
|
||||
LOAD_FIELD(env, me, "Lch/ntb/inf/libusbJava/Usb_Device;", children);
|
||||
LOAD_FIELD(env, me, "J", devStructAddr);
|
||||
|
||||
me->loaded = 1;
|
||||
return 0;
|
||||
|
||||
no_constructor:
|
||||
env->DeleteGlobalRef(me->clazz);
|
||||
no_memory:
|
||||
no_class:
|
||||
return -1;
|
||||
}
|
||||
|
||||
void Usb_Device_disconnect(JNIEnv *env)
|
||||
{
|
||||
if (me->loaded == 0) return;
|
||||
|
||||
env->DeleteGlobalRef(me->clazz);
|
||||
memset(me, 0, sizeof(tUsb_Device));
|
||||
}
|
||||
|
||||
jobject Usb_Device_create(JNIEnv *env, libusb_device *handle, uint8_t address){
|
||||
if (me->loaded == 0) return NULL;
|
||||
|
||||
jobject result = env->NewObject(me->clazz, me->constructor);
|
||||
|
||||
if (result != NULL) {
|
||||
char filename[4];
|
||||
|
||||
snprintf(filename, 4, "%03d", address);
|
||||
|
||||
env->SetLongField(result, me->devStructAddr, (jlong)handle);
|
||||
env->SetByteField(result, me->devnum, address);
|
||||
env->SetObjectField(result, me->filename, env->NewStringUTF(filename));
|
||||
|
||||
env->SetByteField(result, me->num_children, 0); /*Hardcoded to 0, like the compatibility Layer*/
|
||||
env->SetObjectField(result, me->children, NULL); /*Hardcoded to NULL, like the compatibility Layer*/
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
libusb_device * Usb_Device_HandleGet(JNIEnv *env, jobject dev)
|
||||
{
|
||||
if (me->loaded == 0) return NULL;
|
||||
|
||||
return (libusb_device*)env->GetLongField(dev, me->devStructAddr);
|
||||
}
|
||||
|
||||
void Usb_Device_HandleSet(JNIEnv *env, jobject dev, libusb_device *handle)
|
||||
{
|
||||
env->SetLongField(dev, me->devStructAddr, (jlong)handle);
|
||||
}
|
||||
|
||||
void Usb_Device_ConfigSet(JNIEnv *env, jobject dev, jobjectArray config)
|
||||
{
|
||||
env->SetObjectField(dev, me->config, config);
|
||||
}
|
||||
|
||||
void Usb_Device_DescriptorSet(JNIEnv *env, jobject dev, jobject desc)
|
||||
{
|
||||
env->SetObjectField(dev, me->descriptor, desc);
|
||||
}
|
||||
|
||||
void Usb_Device_NextSet(JNIEnv *env, jobject dev, jobject next) {
|
||||
env->SetObjectField(dev, me->next, next);
|
||||
}
|
||||
|
||||
void Usb_Device_PrevSet(JNIEnv *env, jobject dev, jobject prev) {
|
||||
env->SetObjectField(dev, me->prev, prev);
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,18 +1,18 @@
|
||||
#ifndef USBDEVICE_H_
|
||||
#define USBDEVICE_H_
|
||||
|
||||
#include <jni.h>
|
||||
#include <libusb.h>
|
||||
|
||||
int Usb_Device_connect(JNIEnv *env);
|
||||
void Usb_Device_disconnect(JNIEnv *env);
|
||||
|
||||
jobject Usb_Device_create(JNIEnv *env, libusb_device *handle, uint8_t address);
|
||||
libusb_device * Usb_Device_HandleGet(JNIEnv *env, jobject dev);
|
||||
void Usb_Device_HandleSet(JNIEnv *env, jobject dev, libusb_device *handle);
|
||||
void Usb_Device_ConfigSet(JNIEnv *env, jobject dev, jobjectArray config);
|
||||
void Usb_Device_DescriptorSet(JNIEnv *env, jobject dev, jobject desc);
|
||||
void Usb_Device_NextSet(JNIEnv *env, jobject dev, jobject next);
|
||||
void Usb_Device_PrevSet(JNIEnv *env, jobject dev, jobject prev);
|
||||
|
||||
#endif /* USBDEVICE_H_ */
|
||||
#ifndef USBDEVICE_H_
|
||||
#define USBDEVICE_H_
|
||||
|
||||
#include <jni.h>
|
||||
#include <libusb.h>
|
||||
|
||||
int Usb_Device_connect(JNIEnv *env);
|
||||
void Usb_Device_disconnect(JNIEnv *env);
|
||||
|
||||
jobject Usb_Device_create(JNIEnv *env, libusb_device *handle, uint8_t address);
|
||||
libusb_device * Usb_Device_HandleGet(JNIEnv *env, jobject dev);
|
||||
void Usb_Device_HandleSet(JNIEnv *env, jobject dev, libusb_device *handle);
|
||||
void Usb_Device_ConfigSet(JNIEnv *env, jobject dev, jobjectArray config);
|
||||
void Usb_Device_DescriptorSet(JNIEnv *env, jobject dev, jobject desc);
|
||||
void Usb_Device_NextSet(JNIEnv *env, jobject dev, jobject next);
|
||||
void Usb_Device_PrevSet(JNIEnv *env, jobject dev, jobject prev);
|
||||
|
||||
#endif /* USBDEVICE_H_ */
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,19 +1,19 @@
|
||||
package ch.ntb.inf.libusbJava;
|
||||
|
||||
public class Libusb_event {
|
||||
|
||||
public void transferCallback(){
|
||||
|
||||
}
|
||||
|
||||
public void fdAddedCallback(int fd){
|
||||
System.out.println("addedCallback");
|
||||
|
||||
}
|
||||
|
||||
public void fdRemovedCallback(int fd){
|
||||
System.out.println("removedCallback");
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
package ch.ntb.inf.libusbJava;
|
||||
|
||||
public class Libusb_event {
|
||||
|
||||
public void transferCallback(){
|
||||
|
||||
}
|
||||
|
||||
public void fdAddedCallback(int fd){
|
||||
System.out.println("addedCallback");
|
||||
|
||||
}
|
||||
|
||||
public void fdRemovedCallback(int fd){
|
||||
System.out.println("removedCallback");
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
package ch.ntb.inf.libusbJava;
|
||||
|
||||
public class Libusb_pollfd {
|
||||
int fd;
|
||||
byte events;
|
||||
|
||||
}
|
||||
package ch.ntb.inf.libusbJava;
|
||||
|
||||
public class Libusb_pollfd {
|
||||
int fd;
|
||||
byte events;
|
||||
|
||||
}
|
||||
@@ -1,318 +1,318 @@
|
||||
/*
|
||||
* Java libusb wrapper
|
||||
* Copyright (c) 2005-2006 Andreas Schlä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.inf.libusbJava;
|
||||
|
||||
import java.util.Iterator;
|
||||
import java.util.LinkedList;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import ch.ntb.inf.libusbJava.logger.LogUtil;
|
||||
|
||||
/**
|
||||
* This class manages all USB devices and defines some USB specific constants.<br>
|
||||
*
|
||||
*/
|
||||
public class USB {
|
||||
|
||||
// Standard requests (USB spec 9.4)
|
||||
/**
|
||||
* This request returns status for the specified recipient (USB spec 9.4.5).
|
||||
*
|
||||
* @see ch.ntb.inf.libusbJava.Device#controlMsg(int, int, int, int, byte[], int, int,
|
||||
* boolean)
|
||||
*/
|
||||
public static final int REQ_GET_STATUS = 0x00;
|
||||
/**
|
||||
* This request is used to clear or disable a specific feature (USB spec
|
||||
* 9.4.1).
|
||||
*
|
||||
* @see ch.ntb.inf.libusbJava.Device#controlMsg(int, int, int, int, byte[], int, int,
|
||||
* boolean)
|
||||
*/
|
||||
public static final int REQ_CLEAR_FEATURE = 0x01;
|
||||
// 0x02 is reserved
|
||||
/**
|
||||
* This request is used to set or enable a specific feature (USB spec
|
||||
* 9.4.9).
|
||||
*
|
||||
* @see ch.ntb.inf.libusbJava.Device#controlMsg(int, int, int, int, byte[], int, int,
|
||||
* boolean)
|
||||
*/
|
||||
public static final int REQ_SET_FEATURE = 0x03;
|
||||
// 0x04 is reserved
|
||||
/**
|
||||
* This request sets the device address for all future device accesses (USB
|
||||
* spec 9.4.6).
|
||||
*
|
||||
* @see ch.ntb.inf.libusbJava.Device#controlMsg(int, int, int, int, byte[], int, int,
|
||||
* boolean)
|
||||
*/
|
||||
public static final int REQ_SET_ADDRESS = 0x05;
|
||||
/**
|
||||
* This request returns the specified descriptor if the descriptor exists
|
||||
* (USB spec 9.4.3).
|
||||
*
|
||||
* @see ch.ntb.inf.libusbJava.Device#controlMsg(int, int, int, int, byte[], int, int,
|
||||
* boolean)
|
||||
*/
|
||||
public static final int REQ_GET_DESCRIPTOR = 0x06;
|
||||
/**
|
||||
* This request is optional and may be used to update existing descriptors
|
||||
* or new descriptors may be added (USB spec 9.4.8).
|
||||
*
|
||||
* @see ch.ntb.inf.libusbJava.Device#controlMsg(int, int, int, int, byte[], int, int,
|
||||
* boolean)
|
||||
*/
|
||||
public static final int REQ_SET_DESCRIPTOR = 0x07;
|
||||
/**
|
||||
* This request returns the current device configuration value (USB spec
|
||||
* 9.4.2).
|
||||
*
|
||||
* @see ch.ntb.inf.libusbJava.Device#controlMsg(int, int, int, int, byte[], int, int,
|
||||
* boolean)
|
||||
*/
|
||||
public static final int REQ_GET_CONFIGURATION = 0x08;
|
||||
/**
|
||||
* This request sets the device configuration (USB spec 9.4.7).
|
||||
*
|
||||
* @see ch.ntb.inf.libusbJava.Device#controlMsg(int, int, int, int, byte[], int, int,
|
||||
* boolean)
|
||||
*/
|
||||
public static final int REQ_SET_CONFIGURATION = 0x09;
|
||||
/**
|
||||
* This request returns the selected alternate setting for the specified
|
||||
* interface (USB spec 9.4.4).
|
||||
*
|
||||
* @see ch.ntb.inf.libusbJava.Device#controlMsg(int, int, int, int, byte[], int, int,
|
||||
* boolean)
|
||||
*/
|
||||
public static final int REQ_GET_INTERFACE = 0x0A;
|
||||
/**
|
||||
* This request allows the host to select an alternate setting for the
|
||||
* specified interface (USB spec 9.4.10).
|
||||
*
|
||||
* @see ch.ntb.inf.libusbJava.Device#controlMsg(int, int, int, int, byte[], int, int,
|
||||
* boolean)
|
||||
*/
|
||||
public static final int REQ_SET_INTERFACE = 0x0B;
|
||||
/**
|
||||
* This request is used to set and then report an endpoint’s synchronization
|
||||
* frame (USB spec 9.4.11).
|
||||
*
|
||||
* @see ch.ntb.inf.libusbJava.Device#controlMsg(int, int, int, int, byte[], int, int,
|
||||
* boolean)
|
||||
*/
|
||||
public static final int REQ_SYNCH_FRAME = 0x0C;
|
||||
|
||||
// data transfer direction (USB spec 9.3)
|
||||
/**
|
||||
* Identifies the direction of data transfer in the second phase of the
|
||||
* control transfer.<br>
|
||||
* The state of the Direction bit is ignored if the wLength field is zero,
|
||||
* signifying there is no Data stage.<br>
|
||||
* Specifies bit 7 of bmRequestType.
|
||||
*
|
||||
* @see ch.ntb.inf.libusbJava.Device#controlMsg(int, int, int, int, byte[], int, int,
|
||||
* boolean)
|
||||
*/
|
||||
public static final int REQ_TYPE_DIR_HOST_TO_DEVICE = (0x00 << 7),
|
||||
REQ_TYPE_DIR_DEVICE_TO_HOST = (0x01 << 7);
|
||||
|
||||
// request types (USB spec 9.3)
|
||||
/**
|
||||
* Specifies the type of the request.<br>
|
||||
* Specifies bits 6..5 of bmRequestType.
|
||||
*
|
||||
* @see ch.ntb.inf.libusbJava.Device#controlMsg(int, int, int, int, byte[], int, int,
|
||||
* boolean)
|
||||
*/
|
||||
public static final int REQ_TYPE_TYPE_STANDARD = (0x00 << 5),
|
||||
REQ_TYPE_TYPE_CLASS = (0x01 << 5),
|
||||
REQ_TYPE_TYPE_VENDOR = (0x02 << 5),
|
||||
REQ_TYPE_TYPE_RESERVED = (0x03 << 5);
|
||||
|
||||
// request recipient (USB spec 9.3)
|
||||
/**
|
||||
* Specifies the intended recipient of the request.<br>
|
||||
* Requests may be directed to the device, an interface on the device, or a
|
||||
* specific endpoint on a device. When an interface or endpoint is
|
||||
* specified, the wIndex field identifies the interface or endpoint.<br>
|
||||
* Specifies bits 4..0 of bmRequestType.
|
||||
*
|
||||
* @see ch.ntb.inf.libusbJava.Device#controlMsg(int, int, int, int, byte[], int, int,
|
||||
* boolean)
|
||||
*/
|
||||
public static final int REQ_TYPE_RECIP_DEVICE = 0x00,
|
||||
REQ_TYPE_RECIP_INTERFACE = 0x01, REQ_TYPE_RECIP_ENDPOINT = 0x02,
|
||||
REQ_TYPE_RECIP_OTHER = 0x03;
|
||||
|
||||
/**
|
||||
* The maximum packet size of a bulk transfer when operating in highspeed
|
||||
* (480 MB/s) mode.
|
||||
*/
|
||||
public static int HIGHSPEED_MAX_BULK_PACKET_SIZE = 512;
|
||||
|
||||
/**
|
||||
* The maximum packet size of a bulk transfer when operating in fullspeed
|
||||
* (12 MB/s) mode.
|
||||
*/
|
||||
public static int FULLSPEED_MAX_BULK_PACKET_SIZE = 64;
|
||||
|
||||
private static final Logger logger = LogUtil.getLogger("ch.ntb.inf.libusbJava");
|
||||
|
||||
private static LinkedList<Device> devices = new LinkedList<Device>();
|
||||
|
||||
private static boolean initUSBDone = false;
|
||||
|
||||
/**
|
||||
* Create a new device an register it in a device list. If the device is
|
||||
* already registered, a reference to it will be returned.<br>
|
||||
* After resetting or re-attaching a device the busName and filename may
|
||||
* change. You can unregister the current device instance (see
|
||||
* {@link #unregisterDevice(Device)}) and get a new instance with the
|
||||
* updated bus and filename.
|
||||
*
|
||||
* @param idVendor
|
||||
* the vendor id of the USB device
|
||||
* @param idProduct
|
||||
* the product id of the USB device
|
||||
* @param busName
|
||||
* optional name of the bus which can be used to distinguish
|
||||
* multiple devices with the same vendor and product id.<br>
|
||||
* see {@link Usb_Bus#getDirname()}
|
||||
* @param filename
|
||||
* optional filename which can be used to distinguish multiple
|
||||
* devices with the same vendor and product id.<br>
|
||||
* see {@link Usb_Device#getFilename()}
|
||||
* @return a newly created device or an already registered device
|
||||
*/
|
||||
public static Device getDevice(short idVendor, short idProduct,
|
||||
String busName, String filename) {
|
||||
|
||||
// check if this device is already registered
|
||||
Device dev = getRegisteredDevice(idVendor, idProduct, busName, filename);
|
||||
if (dev != null) {
|
||||
logger.info("return already registered device: " + dev);
|
||||
return dev;
|
||||
}
|
||||
dev = new Device(idVendor, idProduct, busName, filename);
|
||||
logger.info("create new device: " + dev);
|
||||
devices.add(dev);
|
||||
return dev;
|
||||
}
|
||||
|
||||
/**
|
||||
* See {@link #getDevice(short, short, String, String)}. The parameter
|
||||
* <code>filename</code> and <code>busName</code>is set to null.
|
||||
*
|
||||
* @param idVendor
|
||||
* @param idProduct
|
||||
* @return a newly created device or an already registered device
|
||||
*/
|
||||
public static Device getDevice(short idVendor, short idProduct) {
|
||||
return getDevice(idVendor, idProduct, null, null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Unregister a registered device.
|
||||
*
|
||||
* @param dev
|
||||
* the device to unregister
|
||||
* @return true if the device has been removed, else false
|
||||
*/
|
||||
public static boolean unregisterDevice(Device dev) {
|
||||
return devices.remove(dev);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get an already registered device or null if the device does not exist.<br>
|
||||
* To uniquely identify a device bus and filename should be set. If only one
|
||||
* of those is set the first device matching the criteria is returned.
|
||||
*
|
||||
* @param idVendor
|
||||
* the vendor id of the USB device
|
||||
* @param idProduct
|
||||
* the product id of the USB device
|
||||
* @param busName
|
||||
* the name of the bus which can be used to distinguish multiple
|
||||
* devices with the same vendor and product id.<br>
|
||||
* see {@link Usb_Bus#getDirname()}
|
||||
* @param filename
|
||||
* an optional filename which can be used to distinguish multiple
|
||||
* devices with the same vendor and product id. see
|
||||
* {@link Usb_Device#getFilename()}
|
||||
*
|
||||
* @return the device or null
|
||||
*/
|
||||
private static Device getRegisteredDevice(short idVendor, short idProduct,
|
||||
String busName, String filename) {
|
||||
for (Iterator<Device> iter = devices.iterator(); iter.hasNext();) {
|
||||
Device dev = iter.next();
|
||||
// bus and filename
|
||||
if (busName != null && filename != null) {
|
||||
if (busName.compareTo(dev.getBusName() == null ? "" : dev
|
||||
.getBusName()) == 0
|
||||
&& filename.compareTo(dev.getFilename() == null ? ""
|
||||
: dev.getFilename()) == 0
|
||||
&& dev.getIdVendor() == idVendor
|
||||
&& dev.getIdProduct() == idProduct) {
|
||||
return dev;
|
||||
}
|
||||
} else if (filename != null) {
|
||||
if (filename.compareTo(dev.getFilename() == null ? "" : dev
|
||||
.getFilename()) == 0
|
||||
&& dev.getIdVendor() == idVendor
|
||||
&& dev.getIdProduct() == idProduct) {
|
||||
return dev;
|
||||
}
|
||||
} else if (busName != null) {
|
||||
if (busName.compareTo(dev.getBusName() == null ? "" : dev
|
||||
.getBusName()) == 0
|
||||
&& dev.getIdVendor() == idVendor
|
||||
&& dev.getIdProduct() == idProduct) {
|
||||
return dev;
|
||||
}
|
||||
} else if (dev.getIdVendor() == idVendor
|
||||
&& dev.getIdProduct() == idProduct) {
|
||||
return dev;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the root {@link Usb_Bus} element.
|
||||
*
|
||||
* @return the root {@link Usb_Bus} element
|
||||
* @throws USBException
|
||||
*/
|
||||
public static Usb_Bus getBus() throws USBException {
|
||||
if (!initUSBDone) {
|
||||
init();
|
||||
}
|
||||
LibusbJava.usb_find_busses();
|
||||
LibusbJava.usb_find_devices();
|
||||
|
||||
Usb_Bus bus = LibusbJava.usb_get_busses();
|
||||
if (bus == null) {
|
||||
throw new USBException("LibusbJava.usb_get_busses(): "
|
||||
+ LibusbJava.usb_strerror());
|
||||
}
|
||||
return bus;
|
||||
}
|
||||
|
||||
/**
|
||||
* Explicitly calls {@link LibusbJava#usb_init()}. Note that you don't need
|
||||
* to call this procedure as it is called implicitly when creating a new
|
||||
* device with {@link USB#getDevice(short, short, String, String)}.
|
||||
*/
|
||||
public static void init() {
|
||||
LibusbJava.usb_init();
|
||||
initUSBDone = true;
|
||||
}
|
||||
}
|
||||
/*
|
||||
* Java libusb wrapper
|
||||
* Copyright (c) 2005-2006 Andreas Schlä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.inf.libusbJava;
|
||||
|
||||
import java.util.Iterator;
|
||||
import java.util.LinkedList;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import ch.ntb.inf.libusbJava.logger.LogUtil;
|
||||
|
||||
/**
|
||||
* This class manages all USB devices and defines some USB specific constants.<br>
|
||||
*
|
||||
*/
|
||||
public class USB {
|
||||
|
||||
// Standard requests (USB spec 9.4)
|
||||
/**
|
||||
* This request returns status for the specified recipient (USB spec 9.4.5).
|
||||
*
|
||||
* @see ch.ntb.inf.libusbJava.Device#controlMsg(int, int, int, int, byte[], int, int,
|
||||
* boolean)
|
||||
*/
|
||||
public static final int REQ_GET_STATUS = 0x00;
|
||||
/**
|
||||
* This request is used to clear or disable a specific feature (USB spec
|
||||
* 9.4.1).
|
||||
*
|
||||
* @see ch.ntb.inf.libusbJava.Device#controlMsg(int, int, int, int, byte[], int, int,
|
||||
* boolean)
|
||||
*/
|
||||
public static final int REQ_CLEAR_FEATURE = 0x01;
|
||||
// 0x02 is reserved
|
||||
/**
|
||||
* This request is used to set or enable a specific feature (USB spec
|
||||
* 9.4.9).
|
||||
*
|
||||
* @see ch.ntb.inf.libusbJava.Device#controlMsg(int, int, int, int, byte[], int, int,
|
||||
* boolean)
|
||||
*/
|
||||
public static final int REQ_SET_FEATURE = 0x03;
|
||||
// 0x04 is reserved
|
||||
/**
|
||||
* This request sets the device address for all future device accesses (USB
|
||||
* spec 9.4.6).
|
||||
*
|
||||
* @see ch.ntb.inf.libusbJava.Device#controlMsg(int, int, int, int, byte[], int, int,
|
||||
* boolean)
|
||||
*/
|
||||
public static final int REQ_SET_ADDRESS = 0x05;
|
||||
/**
|
||||
* This request returns the specified descriptor if the descriptor exists
|
||||
* (USB spec 9.4.3).
|
||||
*
|
||||
* @see ch.ntb.inf.libusbJava.Device#controlMsg(int, int, int, int, byte[], int, int,
|
||||
* boolean)
|
||||
*/
|
||||
public static final int REQ_GET_DESCRIPTOR = 0x06;
|
||||
/**
|
||||
* This request is optional and may be used to update existing descriptors
|
||||
* or new descriptors may be added (USB spec 9.4.8).
|
||||
*
|
||||
* @see ch.ntb.inf.libusbJava.Device#controlMsg(int, int, int, int, byte[], int, int,
|
||||
* boolean)
|
||||
*/
|
||||
public static final int REQ_SET_DESCRIPTOR = 0x07;
|
||||
/**
|
||||
* This request returns the current device configuration value (USB spec
|
||||
* 9.4.2).
|
||||
*
|
||||
* @see ch.ntb.inf.libusbJava.Device#controlMsg(int, int, int, int, byte[], int, int,
|
||||
* boolean)
|
||||
*/
|
||||
public static final int REQ_GET_CONFIGURATION = 0x08;
|
||||
/**
|
||||
* This request sets the device configuration (USB spec 9.4.7).
|
||||
*
|
||||
* @see ch.ntb.inf.libusbJava.Device#controlMsg(int, int, int, int, byte[], int, int,
|
||||
* boolean)
|
||||
*/
|
||||
public static final int REQ_SET_CONFIGURATION = 0x09;
|
||||
/**
|
||||
* This request returns the selected alternate setting for the specified
|
||||
* interface (USB spec 9.4.4).
|
||||
*
|
||||
* @see ch.ntb.inf.libusbJava.Device#controlMsg(int, int, int, int, byte[], int, int,
|
||||
* boolean)
|
||||
*/
|
||||
public static final int REQ_GET_INTERFACE = 0x0A;
|
||||
/**
|
||||
* This request allows the host to select an alternate setting for the
|
||||
* specified interface (USB spec 9.4.10).
|
||||
*
|
||||
* @see ch.ntb.inf.libusbJava.Device#controlMsg(int, int, int, int, byte[], int, int,
|
||||
* boolean)
|
||||
*/
|
||||
public static final int REQ_SET_INTERFACE = 0x0B;
|
||||
/**
|
||||
* This request is used to set and then report an endpoint’s synchronization
|
||||
* frame (USB spec 9.4.11).
|
||||
*
|
||||
* @see ch.ntb.inf.libusbJava.Device#controlMsg(int, int, int, int, byte[], int, int,
|
||||
* boolean)
|
||||
*/
|
||||
public static final int REQ_SYNCH_FRAME = 0x0C;
|
||||
|
||||
// data transfer direction (USB spec 9.3)
|
||||
/**
|
||||
* Identifies the direction of data transfer in the second phase of the
|
||||
* control transfer.<br>
|
||||
* The state of the Direction bit is ignored if the wLength field is zero,
|
||||
* signifying there is no Data stage.<br>
|
||||
* Specifies bit 7 of bmRequestType.
|
||||
*
|
||||
* @see ch.ntb.inf.libusbJava.Device#controlMsg(int, int, int, int, byte[], int, int,
|
||||
* boolean)
|
||||
*/
|
||||
public static final int REQ_TYPE_DIR_HOST_TO_DEVICE = (0x00 << 7),
|
||||
REQ_TYPE_DIR_DEVICE_TO_HOST = (0x01 << 7);
|
||||
|
||||
// request types (USB spec 9.3)
|
||||
/**
|
||||
* Specifies the type of the request.<br>
|
||||
* Specifies bits 6..5 of bmRequestType.
|
||||
*
|
||||
* @see ch.ntb.inf.libusbJava.Device#controlMsg(int, int, int, int, byte[], int, int,
|
||||
* boolean)
|
||||
*/
|
||||
public static final int REQ_TYPE_TYPE_STANDARD = (0x00 << 5),
|
||||
REQ_TYPE_TYPE_CLASS = (0x01 << 5),
|
||||
REQ_TYPE_TYPE_VENDOR = (0x02 << 5),
|
||||
REQ_TYPE_TYPE_RESERVED = (0x03 << 5);
|
||||
|
||||
// request recipient (USB spec 9.3)
|
||||
/**
|
||||
* Specifies the intended recipient of the request.<br>
|
||||
* Requests may be directed to the device, an interface on the device, or a
|
||||
* specific endpoint on a device. When an interface or endpoint is
|
||||
* specified, the wIndex field identifies the interface or endpoint.<br>
|
||||
* Specifies bits 4..0 of bmRequestType.
|
||||
*
|
||||
* @see ch.ntb.inf.libusbJava.Device#controlMsg(int, int, int, int, byte[], int, int,
|
||||
* boolean)
|
||||
*/
|
||||
public static final int REQ_TYPE_RECIP_DEVICE = 0x00,
|
||||
REQ_TYPE_RECIP_INTERFACE = 0x01, REQ_TYPE_RECIP_ENDPOINT = 0x02,
|
||||
REQ_TYPE_RECIP_OTHER = 0x03;
|
||||
|
||||
/**
|
||||
* The maximum packet size of a bulk transfer when operating in highspeed
|
||||
* (480 MB/s) mode.
|
||||
*/
|
||||
public static int HIGHSPEED_MAX_BULK_PACKET_SIZE = 512;
|
||||
|
||||
/**
|
||||
* The maximum packet size of a bulk transfer when operating in fullspeed
|
||||
* (12 MB/s) mode.
|
||||
*/
|
||||
public static int FULLSPEED_MAX_BULK_PACKET_SIZE = 64;
|
||||
|
||||
private static final Logger logger = LogUtil.getLogger("ch.ntb.inf.libusbJava");
|
||||
|
||||
private static LinkedList<Device> devices = new LinkedList<Device>();
|
||||
|
||||
private static boolean initUSBDone = false;
|
||||
|
||||
/**
|
||||
* Create a new device an register it in a device list. If the device is
|
||||
* already registered, a reference to it will be returned.<br>
|
||||
* After resetting or re-attaching a device the busName and filename may
|
||||
* change. You can unregister the current device instance (see
|
||||
* {@link #unregisterDevice(Device)}) and get a new instance with the
|
||||
* updated bus and filename.
|
||||
*
|
||||
* @param idVendor
|
||||
* the vendor id of the USB device
|
||||
* @param idProduct
|
||||
* the product id of the USB device
|
||||
* @param busName
|
||||
* optional name of the bus which can be used to distinguish
|
||||
* multiple devices with the same vendor and product id.<br>
|
||||
* see {@link Usb_Bus#getDirname()}
|
||||
* @param filename
|
||||
* optional filename which can be used to distinguish multiple
|
||||
* devices with the same vendor and product id.<br>
|
||||
* see {@link Usb_Device#getFilename()}
|
||||
* @return a newly created device or an already registered device
|
||||
*/
|
||||
public static Device getDevice(short idVendor, short idProduct,
|
||||
String busName, String filename) {
|
||||
|
||||
// check if this device is already registered
|
||||
Device dev = getRegisteredDevice(idVendor, idProduct, busName, filename);
|
||||
if (dev != null) {
|
||||
logger.info("return already registered device: " + dev);
|
||||
return dev;
|
||||
}
|
||||
dev = new Device(idVendor, idProduct, busName, filename);
|
||||
logger.info("create new device: " + dev);
|
||||
devices.add(dev);
|
||||
return dev;
|
||||
}
|
||||
|
||||
/**
|
||||
* See {@link #getDevice(short, short, String, String)}. The parameter
|
||||
* <code>filename</code> and <code>busName</code>is set to null.
|
||||
*
|
||||
* @param idVendor
|
||||
* @param idProduct
|
||||
* @return a newly created device or an already registered device
|
||||
*/
|
||||
public static Device getDevice(short idVendor, short idProduct) {
|
||||
return getDevice(idVendor, idProduct, null, null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Unregister a registered device.
|
||||
*
|
||||
* @param dev
|
||||
* the device to unregister
|
||||
* @return true if the device has been removed, else false
|
||||
*/
|
||||
public static boolean unregisterDevice(Device dev) {
|
||||
return devices.remove(dev);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get an already registered device or null if the device does not exist.<br>
|
||||
* To uniquely identify a device bus and filename should be set. If only one
|
||||
* of those is set the first device matching the criteria is returned.
|
||||
*
|
||||
* @param idVendor
|
||||
* the vendor id of the USB device
|
||||
* @param idProduct
|
||||
* the product id of the USB device
|
||||
* @param busName
|
||||
* the name of the bus which can be used to distinguish multiple
|
||||
* devices with the same vendor and product id.<br>
|
||||
* see {@link Usb_Bus#getDirname()}
|
||||
* @param filename
|
||||
* an optional filename which can be used to distinguish multiple
|
||||
* devices with the same vendor and product id. see
|
||||
* {@link Usb_Device#getFilename()}
|
||||
*
|
||||
* @return the device or null
|
||||
*/
|
||||
private static Device getRegisteredDevice(short idVendor, short idProduct,
|
||||
String busName, String filename) {
|
||||
for (Iterator<Device> iter = devices.iterator(); iter.hasNext();) {
|
||||
Device dev = iter.next();
|
||||
// bus and filename
|
||||
if (busName != null && filename != null) {
|
||||
if (busName.compareTo(dev.getBusName() == null ? "" : dev
|
||||
.getBusName()) == 0
|
||||
&& filename.compareTo(dev.getFilename() == null ? ""
|
||||
: dev.getFilename()) == 0
|
||||
&& dev.getIdVendor() == idVendor
|
||||
&& dev.getIdProduct() == idProduct) {
|
||||
return dev;
|
||||
}
|
||||
} else if (filename != null) {
|
||||
if (filename.compareTo(dev.getFilename() == null ? "" : dev
|
||||
.getFilename()) == 0
|
||||
&& dev.getIdVendor() == idVendor
|
||||
&& dev.getIdProduct() == idProduct) {
|
||||
return dev;
|
||||
}
|
||||
} else if (busName != null) {
|
||||
if (busName.compareTo(dev.getBusName() == null ? "" : dev
|
||||
.getBusName()) == 0
|
||||
&& dev.getIdVendor() == idVendor
|
||||
&& dev.getIdProduct() == idProduct) {
|
||||
return dev;
|
||||
}
|
||||
} else if (dev.getIdVendor() == idVendor
|
||||
&& dev.getIdProduct() == idProduct) {
|
||||
return dev;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the root {@link Usb_Bus} element.
|
||||
*
|
||||
* @return the root {@link Usb_Bus} element
|
||||
* @throws USBException
|
||||
*/
|
||||
public static Usb_Bus getBus() throws USBException {
|
||||
if (!initUSBDone) {
|
||||
init();
|
||||
}
|
||||
LibusbJava.usb_find_busses();
|
||||
LibusbJava.usb_find_devices();
|
||||
|
||||
Usb_Bus bus = LibusbJava.usb_get_busses();
|
||||
if (bus == null) {
|
||||
throw new USBException("LibusbJava.usb_get_busses(): "
|
||||
+ LibusbJava.usb_strerror());
|
||||
}
|
||||
return bus;
|
||||
}
|
||||
|
||||
/**
|
||||
* Explicitly calls {@link LibusbJava#usb_init()}. Note that you don't need
|
||||
* to call this procedure as it is called implicitly when creating a new
|
||||
* device with {@link USB#getDevice(short, short, String, String)}.
|
||||
*/
|
||||
public static void init() {
|
||||
LibusbJava.usb_init();
|
||||
initUSBDone = true;
|
||||
}
|
||||
}
|
||||
@@ -1,23 +1,23 @@
|
||||
/*
|
||||
* Java libusb wrapper
|
||||
* Copyright (c) 2005-2006 Andreas Schlä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.inf.libusbJava;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
public class USBException extends IOException {
|
||||
|
||||
public USBException(String string) {
|
||||
super(string);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private static final long serialVersionUID = 1690857437804284710L;
|
||||
|
||||
}
|
||||
/*
|
||||
* Java libusb wrapper
|
||||
* Copyright (c) 2005-2006 Andreas Schlä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.inf.libusbJava;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
public class USBException extends IOException {
|
||||
|
||||
public USBException(String string) {
|
||||
super(string);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private static final long serialVersionUID = 1690857437804284710L;
|
||||
|
||||
}
|
||||
@@ -1,21 +1,21 @@
|
||||
/*
|
||||
* Java libusb wrapper
|
||||
* Copyright (c) 2005-2006 Andreas Schlä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.inf.libusbJava;
|
||||
|
||||
public class USBTimeoutException extends USBException {
|
||||
|
||||
public USBTimeoutException(String string) {
|
||||
super(string);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private static final long serialVersionUID = -1065328371159778249L;
|
||||
|
||||
}
|
||||
/*
|
||||
* Java libusb wrapper
|
||||
* Copyright (c) 2005-2006 Andreas Schlä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.inf.libusbJava;
|
||||
|
||||
public class USBTimeoutException extends USBException {
|
||||
|
||||
public USBTimeoutException(String string) {
|
||||
super(string);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private static final long serialVersionUID = -1065328371159778249L;
|
||||
|
||||
}
|
||||
@@ -1,107 +1,107 @@
|
||||
/*
|
||||
* Java libusb wrapper
|
||||
* Copyright (c) 2005-2006 Andreas Schlä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.inf.libusbJava;
|
||||
|
||||
/**
|
||||
* Represents an USB bus.<br>
|
||||
* This is the root class for the representation of the libusb USB structure.
|
||||
* Zero or more devices may be connected to an USB bus.
|
||||
*
|
||||
*/
|
||||
public class Usb_Bus {
|
||||
|
||||
private Usb_Bus next, prev;
|
||||
|
||||
private String dirname;
|
||||
|
||||
private Usb_Device devices;
|
||||
|
||||
private long location;
|
||||
|
||||
private Usb_Device root_dev;
|
||||
|
||||
public Usb_Bus(String dirname, long location) {
|
||||
this.dirname = dirname;
|
||||
this.location = location;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the first device ojects of the devices linked list.<br>
|
||||
*
|
||||
* @return the first device ojects of the devices linked list or null
|
||||
*/
|
||||
public Usb_Device getDevices() {
|
||||
return devices;
|
||||
}
|
||||
|
||||
protected void setDevices(Usb_Device devices) {
|
||||
this.devices = devices;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the systems String representation of the bus.<br>
|
||||
*
|
||||
* @return the systems String representation of the bus
|
||||
*/
|
||||
public String getDirname() {
|
||||
return dirname;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the next bus object.<br>
|
||||
*
|
||||
* @return Returns the next bus object or null
|
||||
*/
|
||||
public Usb_Bus getNext() {
|
||||
return next;
|
||||
}
|
||||
|
||||
protected void setNext(Usb_Bus bus) {
|
||||
next = bus;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the previous bus object.<br>
|
||||
*
|
||||
* @return Returns the previous bus object or null
|
||||
*/
|
||||
public Usb_Bus getPrev() {
|
||||
return prev;
|
||||
}
|
||||
|
||||
protected void setPrev(Usb_Bus bus) {
|
||||
prev = bus;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the root device of this bus.<br>
|
||||
*
|
||||
* @return the root device oject or null
|
||||
*/
|
||||
public Usb_Device getRootDev() {
|
||||
return root_dev;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the location in the USB bus linked list.<br>
|
||||
*
|
||||
* @return the location in the USB bus linked list
|
||||
*/
|
||||
public long getLocation() {
|
||||
return location;
|
||||
}
|
||||
|
||||
protected void setLocation(long busnumber) {
|
||||
location = busnumber;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "Usb_Bus " + dirname;
|
||||
}
|
||||
/*
|
||||
* Java libusb wrapper
|
||||
* Copyright (c) 2005-2006 Andreas Schlä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.inf.libusbJava;
|
||||
|
||||
/**
|
||||
* Represents an USB bus.<br>
|
||||
* This is the root class for the representation of the libusb USB structure.
|
||||
* Zero or more devices may be connected to an USB bus.
|
||||
*
|
||||
*/
|
||||
public class Usb_Bus {
|
||||
|
||||
private Usb_Bus next, prev;
|
||||
|
||||
private String dirname;
|
||||
|
||||
private Usb_Device devices;
|
||||
|
||||
private long location;
|
||||
|
||||
private Usb_Device root_dev;
|
||||
|
||||
public Usb_Bus(String dirname, long location) {
|
||||
this.dirname = dirname;
|
||||
this.location = location;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the first device ojects of the devices linked list.<br>
|
||||
*
|
||||
* @return the first device ojects of the devices linked list or null
|
||||
*/
|
||||
public Usb_Device getDevices() {
|
||||
return devices;
|
||||
}
|
||||
|
||||
protected void setDevices(Usb_Device devices) {
|
||||
this.devices = devices;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the systems String representation of the bus.<br>
|
||||
*
|
||||
* @return the systems String representation of the bus
|
||||
*/
|
||||
public String getDirname() {
|
||||
return dirname;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the next bus object.<br>
|
||||
*
|
||||
* @return Returns the next bus object or null
|
||||
*/
|
||||
public Usb_Bus getNext() {
|
||||
return next;
|
||||
}
|
||||
|
||||
protected void setNext(Usb_Bus bus) {
|
||||
next = bus;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the previous bus object.<br>
|
||||
*
|
||||
* @return Returns the previous bus object or null
|
||||
*/
|
||||
public Usb_Bus getPrev() {
|
||||
return prev;
|
||||
}
|
||||
|
||||
protected void setPrev(Usb_Bus bus) {
|
||||
prev = bus;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the root device of this bus.<br>
|
||||
*
|
||||
* @return the root device oject or null
|
||||
*/
|
||||
public Usb_Device getRootDev() {
|
||||
return root_dev;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the location in the USB bus linked list.<br>
|
||||
*
|
||||
* @return the location in the USB bus linked list
|
||||
*/
|
||||
public long getLocation() {
|
||||
return location;
|
||||
}
|
||||
|
||||
protected void setLocation(long busnumber) {
|
||||
location = busnumber;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "Usb_Bus " + dirname;
|
||||
}
|
||||
}
|
||||
@@ -1,139 +1,139 @@
|
||||
/*
|
||||
* Java libusb wrapper
|
||||
* Copyright (c) 2005-2006 Andreas Schlä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.inf.libusbJava;
|
||||
|
||||
/**
|
||||
* Represents the descriptor of a USB configuration.<br>
|
||||
* A USB device can have several different configuration.<br>
|
||||
* <br>
|
||||
* The length of the configuration descriptor is
|
||||
* {@link ch.ntb.inf.libusbJava.Usb_Descriptor#USB_DT_CONFIG_SIZE} and the type is
|
||||
* {@link ch.ntb.inf.libusbJava.Usb_Descriptor#USB_DT_CONFIG}.
|
||||
*
|
||||
*/
|
||||
public class Usb_Config_Descriptor extends Usb_Descriptor {
|
||||
|
||||
/**
|
||||
* Maximum number of configurations per device
|
||||
*/
|
||||
public static final int USB_MAXCONFIG = 8;
|
||||
|
||||
private short wTotalLength;
|
||||
|
||||
private byte bNumInterfaces;
|
||||
|
||||
private byte bConfigurationValue;
|
||||
|
||||
private byte iConfiguration;
|
||||
|
||||
private byte bmAttributes;
|
||||
|
||||
private byte MaxPower;
|
||||
|
||||
private Usb_Interface[] interface_;
|
||||
|
||||
private byte[] extra; /* Extra descriptors */
|
||||
|
||||
private int extralen;
|
||||
|
||||
/**
|
||||
* Returns the value to use as an argument to select this configuration ({@link LibusbJava#usb_set_configuration(long, int)}).
|
||||
*
|
||||
* @return the value to use as an argument to select this configuration
|
||||
*/
|
||||
public byte getBConfigurationValue() {
|
||||
return bConfigurationValue;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the power parameters for this configuration.<br>
|
||||
* <br>
|
||||
* Bit 7: Reserved, set to 1 (USB 1.0 Bus Powered)<br>
|
||||
* Bit 6: Self Powered<br>
|
||||
* Bit 5: Remote Wakeup<br>
|
||||
* Bit 4..0: Reserved, set to 0
|
||||
*
|
||||
* @return the power parameters for this configuration
|
||||
*/
|
||||
public byte getBmAttributes() {
|
||||
return bmAttributes;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the number of interfaces.<br>
|
||||
*
|
||||
* @return the number of interfaces
|
||||
*/
|
||||
public byte getBNumInterfaces() {
|
||||
return bNumInterfaces;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the data of extra descriptor(s) if available.<br>
|
||||
*
|
||||
* @return null or a byte array with the extra descriptor data
|
||||
*/
|
||||
public byte[] getExtra() {
|
||||
return extra;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the number of bytes of the extra descriptor.<br>
|
||||
*
|
||||
* @return the number of bytes of the extra descriptor
|
||||
*/
|
||||
public int getExtralen() {
|
||||
return extralen;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the index of the String descriptor describing this configuration.<br>
|
||||
*
|
||||
* @return the index of the String descriptor
|
||||
*/
|
||||
public byte getIConfiguration() {
|
||||
return iConfiguration;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the USB interface descriptors.<br>
|
||||
*
|
||||
* @return the USB interface descriptors
|
||||
*/
|
||||
public Usb_Interface[] getInterface() {
|
||||
return interface_;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the maximum power consumption in 2mA units.<br>
|
||||
*
|
||||
* @return the maximum power consumption in 2mA units
|
||||
*/
|
||||
public byte getMaxPower() {
|
||||
return MaxPower;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the total length in bytes of all descriptors.<br>
|
||||
* When the configuration descriptor is read, it returns the entire
|
||||
* configuration hierarchy which includes all related interface and endpoint
|
||||
* descriptors. The <code>wTotalLength</code> field reflects the number of
|
||||
* bytes in the hierarchy.
|
||||
*
|
||||
* @return the total length in bytes of all descriptors
|
||||
*/
|
||||
public short getWTotalLength() {
|
||||
return wTotalLength;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "Usb_Config_Descriptor bNumInterfaces: 0x"
|
||||
+ Integer.toHexString(bNumInterfaces);
|
||||
}
|
||||
/*
|
||||
* Java libusb wrapper
|
||||
* Copyright (c) 2005-2006 Andreas Schlä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.inf.libusbJava;
|
||||
|
||||
/**
|
||||
* Represents the descriptor of a USB configuration.<br>
|
||||
* A USB device can have several different configuration.<br>
|
||||
* <br>
|
||||
* The length of the configuration descriptor is
|
||||
* {@link ch.ntb.inf.libusbJava.Usb_Descriptor#USB_DT_CONFIG_SIZE} and the type is
|
||||
* {@link ch.ntb.inf.libusbJava.Usb_Descriptor#USB_DT_CONFIG}.
|
||||
*
|
||||
*/
|
||||
public class Usb_Config_Descriptor extends Usb_Descriptor {
|
||||
|
||||
/**
|
||||
* Maximum number of configurations per device
|
||||
*/
|
||||
public static final int USB_MAXCONFIG = 8;
|
||||
|
||||
private short wTotalLength;
|
||||
|
||||
private byte bNumInterfaces;
|
||||
|
||||
private byte bConfigurationValue;
|
||||
|
||||
private byte iConfiguration;
|
||||
|
||||
private byte bmAttributes;
|
||||
|
||||
private byte MaxPower;
|
||||
|
||||
private Usb_Interface[] interface_;
|
||||
|
||||
private byte[] extra; /* Extra descriptors */
|
||||
|
||||
private int extralen;
|
||||
|
||||
/**
|
||||
* Returns the value to use as an argument to select this configuration ({@link LibusbJava#usb_set_configuration(long, int)}).
|
||||
*
|
||||
* @return the value to use as an argument to select this configuration
|
||||
*/
|
||||
public byte getBConfigurationValue() {
|
||||
return bConfigurationValue;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the power parameters for this configuration.<br>
|
||||
* <br>
|
||||
* Bit 7: Reserved, set to 1 (USB 1.0 Bus Powered)<br>
|
||||
* Bit 6: Self Powered<br>
|
||||
* Bit 5: Remote Wakeup<br>
|
||||
* Bit 4..0: Reserved, set to 0
|
||||
*
|
||||
* @return the power parameters for this configuration
|
||||
*/
|
||||
public byte getBmAttributes() {
|
||||
return bmAttributes;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the number of interfaces.<br>
|
||||
*
|
||||
* @return the number of interfaces
|
||||
*/
|
||||
public byte getBNumInterfaces() {
|
||||
return bNumInterfaces;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the data of extra descriptor(s) if available.<br>
|
||||
*
|
||||
* @return null or a byte array with the extra descriptor data
|
||||
*/
|
||||
public byte[] getExtra() {
|
||||
return extra;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the number of bytes of the extra descriptor.<br>
|
||||
*
|
||||
* @return the number of bytes of the extra descriptor
|
||||
*/
|
||||
public int getExtralen() {
|
||||
return extralen;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the index of the String descriptor describing this configuration.<br>
|
||||
*
|
||||
* @return the index of the String descriptor
|
||||
*/
|
||||
public byte getIConfiguration() {
|
||||
return iConfiguration;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the USB interface descriptors.<br>
|
||||
*
|
||||
* @return the USB interface descriptors
|
||||
*/
|
||||
public Usb_Interface[] getInterface() {
|
||||
return interface_;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the maximum power consumption in 2mA units.<br>
|
||||
*
|
||||
* @return the maximum power consumption in 2mA units
|
||||
*/
|
||||
public byte getMaxPower() {
|
||||
return MaxPower;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the total length in bytes of all descriptors.<br>
|
||||
* When the configuration descriptor is read, it returns the entire
|
||||
* configuration hierarchy which includes all related interface and endpoint
|
||||
* descriptors. The <code>wTotalLength</code> field reflects the number of
|
||||
* bytes in the hierarchy.
|
||||
*
|
||||
* @return the total length in bytes of all descriptors
|
||||
*/
|
||||
public short getWTotalLength() {
|
||||
return wTotalLength;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "Usb_Config_Descriptor bNumInterfaces: 0x"
|
||||
+ Integer.toHexString(bNumInterfaces);
|
||||
}
|
||||
}
|
||||
@@ -1,61 +1,61 @@
|
||||
/*
|
||||
* Java libusb wrapper
|
||||
* Copyright (c) 2005-2006 Andreas Schlä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.inf.libusbJava;
|
||||
|
||||
/**
|
||||
* Common USB descriptor values.<br>
|
||||
*
|
||||
*/
|
||||
public class Usb_Descriptor {
|
||||
|
||||
/**
|
||||
* Descriptor types ({@link #bDescriptorType}).
|
||||
*/
|
||||
public static final int USB_DT_DEVICE = 0x01, USB_DT_CONFIG = 0x02,
|
||||
USB_DT_STRING = 0x03, USB_DT_INTERFACE = 0x04,
|
||||
USB_DT_ENDPOINT = 0x05;
|
||||
|
||||
/**
|
||||
* Descriptor types ({@link #bDescriptorType}).
|
||||
*/
|
||||
public static final int LIBUSB_DT_DEVICE = 0x01, LIBUSB_DT_CONFIG = 0x02,
|
||||
LIBUSB_DT_STRING = 0x03, LIBUSB_DT_INTERFACE = 0x04,
|
||||
LIBUSB_DT_ENDPOINT = 0x05, USB_DT_HID = 0x21, USB_DT_REPORT = 0x22,
|
||||
USB_DT_PHYSICAL = 0x23, USB_DT_HUB = 0x29;
|
||||
|
||||
/**
|
||||
* Descriptor sizes per descriptor type ({@link #bLength}).
|
||||
*/
|
||||
public static final int USB_DT_DEVICE_SIZE = 18, USB_DT_CONFIG_SIZE = 9,
|
||||
USB_DT_INTERFACE_SIZE = 9, USB_DT_ENDPOINT_SIZE = 7,
|
||||
USB_DT_ENDPOINT_AUDIO_SIZE = 9 /* Audio extension */,
|
||||
USB_DT_HUB_NONVAR_SIZE = 7;
|
||||
|
||||
private byte bLength;
|
||||
|
||||
private byte bDescriptorType;
|
||||
|
||||
/**
|
||||
* Get the type of this descriptor.<br>
|
||||
*
|
||||
* @return the type of this descriptor
|
||||
*/
|
||||
public byte getBDescriptorType() {
|
||||
return bDescriptorType;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the size of this descriptor in bytes.<br>
|
||||
*
|
||||
* @return the size of this descriptor in bytes
|
||||
*/
|
||||
public byte getBLength() {
|
||||
return bLength;
|
||||
}
|
||||
|
||||
}
|
||||
/*
|
||||
* Java libusb wrapper
|
||||
* Copyright (c) 2005-2006 Andreas Schlä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.inf.libusbJava;
|
||||
|
||||
/**
|
||||
* Common USB descriptor values.<br>
|
||||
*
|
||||
*/
|
||||
public class Usb_Descriptor {
|
||||
|
||||
/**
|
||||
* Descriptor types ({@link #bDescriptorType}).
|
||||
*/
|
||||
public static final int USB_DT_DEVICE = 0x01, USB_DT_CONFIG = 0x02,
|
||||
USB_DT_STRING = 0x03, USB_DT_INTERFACE = 0x04,
|
||||
USB_DT_ENDPOINT = 0x05;
|
||||
|
||||
/**
|
||||
* Descriptor types ({@link #bDescriptorType}).
|
||||
*/
|
||||
public static final int LIBUSB_DT_DEVICE = 0x01, LIBUSB_DT_CONFIG = 0x02,
|
||||
LIBUSB_DT_STRING = 0x03, LIBUSB_DT_INTERFACE = 0x04,
|
||||
LIBUSB_DT_ENDPOINT = 0x05, USB_DT_HID = 0x21, USB_DT_REPORT = 0x22,
|
||||
USB_DT_PHYSICAL = 0x23, USB_DT_HUB = 0x29;
|
||||
|
||||
/**
|
||||
* Descriptor sizes per descriptor type ({@link #bLength}).
|
||||
*/
|
||||
public static final int USB_DT_DEVICE_SIZE = 18, USB_DT_CONFIG_SIZE = 9,
|
||||
USB_DT_INTERFACE_SIZE = 9, USB_DT_ENDPOINT_SIZE = 7,
|
||||
USB_DT_ENDPOINT_AUDIO_SIZE = 9 /* Audio extension */,
|
||||
USB_DT_HUB_NONVAR_SIZE = 7;
|
||||
|
||||
private byte bLength;
|
||||
|
||||
private byte bDescriptorType;
|
||||
|
||||
/**
|
||||
* Get the type of this descriptor.<br>
|
||||
*
|
||||
* @return the type of this descriptor
|
||||
*/
|
||||
public byte getBDescriptorType() {
|
||||
return bDescriptorType;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the size of this descriptor in bytes.<br>
|
||||
*
|
||||
* @return the size of this descriptor in bytes
|
||||
*/
|
||||
public byte getBLength() {
|
||||
return bLength;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,165 +1,165 @@
|
||||
/*
|
||||
* Java libusb wrapper
|
||||
* Copyright (c) 2005-2006 Andreas Schlä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.inf.libusbJava;
|
||||
|
||||
/**
|
||||
* Represents an USB device.<br>
|
||||
* An USB device has one device descriptor and it may have multiple
|
||||
* configuration descriptors.
|
||||
*
|
||||
*/
|
||||
public class Usb_Device {
|
||||
|
||||
private Usb_Device next, prev;
|
||||
|
||||
private String filename;
|
||||
|
||||
private Usb_Bus bus;
|
||||
|
||||
private Usb_Device_Descriptor descriptor;
|
||||
|
||||
private Usb_Config_Descriptor[] config;
|
||||
|
||||
private byte devnum;
|
||||
|
||||
private byte num_children;
|
||||
|
||||
private Usb_Device children;
|
||||
|
||||
/**
|
||||
* The address of the device structure to be passed to usb_open. This value
|
||||
* is used only internally so we don't use getter or setter methods.
|
||||
*/
|
||||
public long devStructAddr;
|
||||
|
||||
/**
|
||||
* Returns the reference to the bus to which this device is connected.<br>
|
||||
*
|
||||
* @return the reference to the bus to which this device is connected
|
||||
*/
|
||||
public Usb_Bus getBus() {
|
||||
return bus;
|
||||
}
|
||||
protected void setBus(Usb_Bus bus){
|
||||
this.bus = bus;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a reference to the first child.<br>
|
||||
*
|
||||
* @return a reference to the first child
|
||||
*/
|
||||
public Usb_Device getChildren() {
|
||||
return children;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the USB config descriptors.<br>
|
||||
*
|
||||
* @return the USB config descriptors
|
||||
*/
|
||||
public Usb_Config_Descriptor[] getConfig() {
|
||||
return config;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the USB device descriptor.<br>
|
||||
*
|
||||
* @return the USB device descriptor
|
||||
*/
|
||||
public Usb_Device_Descriptor getDescriptor() {
|
||||
return descriptor;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the number assigned to this device.<br>
|
||||
*
|
||||
* @return the number assigned to this device
|
||||
*/
|
||||
public byte getDevnum() {
|
||||
return devnum;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the systems String representation.<br>
|
||||
*
|
||||
* @return the systems String representation
|
||||
*/
|
||||
public String getFilename() {
|
||||
return filename;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the pointer to the next device.<br>
|
||||
*
|
||||
* @return the pointer to the next device or null
|
||||
*/
|
||||
public Usb_Device getNext() {
|
||||
return next;
|
||||
}
|
||||
|
||||
protected void setNext(Usb_Device dev){
|
||||
next = dev;
|
||||
}
|
||||
|
||||
public static void freeDeviceList(Usb_Device device)
|
||||
{
|
||||
Usb_Device curr = device.getPrev();
|
||||
|
||||
/* Detach the left part of the list */
|
||||
device.setPrev(null);
|
||||
|
||||
/* First walk to the left of the list and free all
|
||||
devices on our way */
|
||||
while (curr != null)
|
||||
{
|
||||
freeDevice(curr);
|
||||
curr = curr.getPrev();
|
||||
}
|
||||
|
||||
curr = device;
|
||||
/* Then walk to the right of the list and free all */
|
||||
while (curr != null)
|
||||
{
|
||||
freeDevice(curr);
|
||||
curr = curr.getNext();
|
||||
}
|
||||
}
|
||||
|
||||
public static void freeDevice(Usb_Device device)
|
||||
{
|
||||
freeDeviceList(device.getChildren());
|
||||
LibusbJava1.libusb_unref_device(device);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the number of children of this device.<br>
|
||||
*
|
||||
* @return the number of children of this device
|
||||
*/
|
||||
public byte getNumChildren() {
|
||||
return num_children;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the pointer to the previous device.<br>
|
||||
*
|
||||
* @return the pointer to the previous device or null
|
||||
*/
|
||||
public Usb_Device getPrev() {
|
||||
return prev;
|
||||
}
|
||||
protected void setPrev(Usb_Device dev){
|
||||
prev = dev;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "Usb_Device " + filename;
|
||||
}
|
||||
/*
|
||||
* Java libusb wrapper
|
||||
* Copyright (c) 2005-2006 Andreas Schlä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.inf.libusbJava;
|
||||
|
||||
/**
|
||||
* Represents an USB device.<br>
|
||||
* An USB device has one device descriptor and it may have multiple
|
||||
* configuration descriptors.
|
||||
*
|
||||
*/
|
||||
public class Usb_Device {
|
||||
|
||||
private Usb_Device next, prev;
|
||||
|
||||
private String filename;
|
||||
|
||||
private Usb_Bus bus;
|
||||
|
||||
private Usb_Device_Descriptor descriptor;
|
||||
|
||||
private Usb_Config_Descriptor[] config;
|
||||
|
||||
private byte devnum;
|
||||
|
||||
private byte num_children;
|
||||
|
||||
private Usb_Device children;
|
||||
|
||||
/**
|
||||
* The address of the device structure to be passed to usb_open. This value
|
||||
* is used only internally so we don't use getter or setter methods.
|
||||
*/
|
||||
public long devStructAddr;
|
||||
|
||||
/**
|
||||
* Returns the reference to the bus to which this device is connected.<br>
|
||||
*
|
||||
* @return the reference to the bus to which this device is connected
|
||||
*/
|
||||
public Usb_Bus getBus() {
|
||||
return bus;
|
||||
}
|
||||
protected void setBus(Usb_Bus bus){
|
||||
this.bus = bus;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a reference to the first child.<br>
|
||||
*
|
||||
* @return a reference to the first child
|
||||
*/
|
||||
public Usb_Device getChildren() {
|
||||
return children;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the USB config descriptors.<br>
|
||||
*
|
||||
* @return the USB config descriptors
|
||||
*/
|
||||
public Usb_Config_Descriptor[] getConfig() {
|
||||
return config;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the USB device descriptor.<br>
|
||||
*
|
||||
* @return the USB device descriptor
|
||||
*/
|
||||
public Usb_Device_Descriptor getDescriptor() {
|
||||
return descriptor;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the number assigned to this device.<br>
|
||||
*
|
||||
* @return the number assigned to this device
|
||||
*/
|
||||
public byte getDevnum() {
|
||||
return devnum;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the systems String representation.<br>
|
||||
*
|
||||
* @return the systems String representation
|
||||
*/
|
||||
public String getFilename() {
|
||||
return filename;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the pointer to the next device.<br>
|
||||
*
|
||||
* @return the pointer to the next device or null
|
||||
*/
|
||||
public Usb_Device getNext() {
|
||||
return next;
|
||||
}
|
||||
|
||||
protected void setNext(Usb_Device dev){
|
||||
next = dev;
|
||||
}
|
||||
|
||||
public static void freeDeviceList(Usb_Device device)
|
||||
{
|
||||
Usb_Device curr = device.getPrev();
|
||||
|
||||
/* Detach the left part of the list */
|
||||
device.setPrev(null);
|
||||
|
||||
/* First walk to the left of the list and free all
|
||||
devices on our way */
|
||||
while (curr != null)
|
||||
{
|
||||
freeDevice(curr);
|
||||
curr = curr.getPrev();
|
||||
}
|
||||
|
||||
curr = device;
|
||||
/* Then walk to the right of the list and free all */
|
||||
while (curr != null)
|
||||
{
|
||||
freeDevice(curr);
|
||||
curr = curr.getNext();
|
||||
}
|
||||
}
|
||||
|
||||
public static void freeDevice(Usb_Device device)
|
||||
{
|
||||
freeDeviceList(device.getChildren());
|
||||
LibusbJava1.libusb_unref_device(device);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the number of children of this device.<br>
|
||||
*
|
||||
* @return the number of children of this device
|
||||
*/
|
||||
public byte getNumChildren() {
|
||||
return num_children;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the pointer to the previous device.<br>
|
||||
*
|
||||
* @return the pointer to the previous device or null
|
||||
*/
|
||||
public Usb_Device getPrev() {
|
||||
return prev;
|
||||
}
|
||||
protected void setPrev(Usb_Device dev){
|
||||
prev = dev;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "Usb_Device " + filename;
|
||||
}
|
||||
}
|
||||
@@ -1,191 +1,191 @@
|
||||
/*
|
||||
* Java libusb wrapper
|
||||
* Copyright (c) 2005-2006 Andreas Schlä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.inf.libusbJava;
|
||||
|
||||
/**
|
||||
* Represents the descriptor of a USB device.<br>
|
||||
* A USB device can only have one device descriptor. It specifies some basic,
|
||||
* yet important information about the device.<br>
|
||||
* <br>
|
||||
* The length of the device descriptor is
|
||||
* {@link ch.ntb.inf.libusbJava.Usb_Descriptor#USB_DT_DEVICE_SIZE} and the type is
|
||||
* {@link ch.ntb.inf.libusbJava.Usb_Descriptor#USB_DT_DEVICE}.
|
||||
*
|
||||
*/
|
||||
public class Usb_Device_Descriptor extends Usb_Descriptor {
|
||||
/**
|
||||
* Device and/or interface class codes.
|
||||
*/
|
||||
public static final int USB_CLASS_PER_INTERFACE = 0, USB_CLASS_AUDIO = 1,
|
||||
USB_CLASS_COMM = 2, USB_CLASS_HID = 3, LIBUSB_CLASS_PTP = 6,
|
||||
USB_CLASS_PRINTER = 7, USB_CLASS_MASS_STORAGE = 8,
|
||||
USB_CLASS_HUB = 9, USB_CLASS_DATA = 10,
|
||||
USB_CLASS_VENDOR_SPEC = 0xff;
|
||||
|
||||
private short bcdUSB;
|
||||
|
||||
private byte bDeviceClass;
|
||||
|
||||
private byte bDeviceSubClass;
|
||||
|
||||
private byte bDeviceProtocol;
|
||||
|
||||
private byte bMaxPacketSize0;
|
||||
|
||||
private short idVendor;
|
||||
|
||||
private short idProduct;
|
||||
|
||||
private short bcdDevice;
|
||||
|
||||
private byte iManufacturer;
|
||||
|
||||
private byte iProduct;
|
||||
|
||||
private byte iSerialNumber;
|
||||
|
||||
private byte bNumConfigurations;
|
||||
|
||||
/**
|
||||
* Returns the device release number.<br>
|
||||
* Assigned by the manufacturer of the device.
|
||||
*
|
||||
* @return the device release number
|
||||
*/
|
||||
public short getBcdDevice() {
|
||||
return bcdDevice;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the USB specification number to which the device complies to.<br>
|
||||
* This field reports the highest version of USB the device supports. The
|
||||
* value is in binary coded decimal with a format of 0xJJMN where JJ is the
|
||||
* major version number, M is the minor version number and N is the sub
|
||||
* minor version number.<br>
|
||||
* Examples: USB 2.0 is reported as 0x0200, USB 1.1 as 0x0110 and USB 1.0 as
|
||||
* 0x100
|
||||
*
|
||||
* @return the USB specification number to which the device complies to
|
||||
*/
|
||||
public short getBcdUSB() {
|
||||
return bcdUSB;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the class code (Assigned by <a
|
||||
* href="http://www.usb.org">www.usb.org</a>)<br>
|
||||
* If equal to zero, each interface specifies it's own class code. If equal
|
||||
* to 0xFF, the class code is vendor specified. Otherwise the field is a
|
||||
* valid class code.
|
||||
*
|
||||
* @return the class code
|
||||
*/
|
||||
public byte getBDeviceClass() {
|
||||
return bDeviceClass;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the protocol code (Assigned by <a
|
||||
* href="http://www.usb.org">www.usb.org</a>)<br>
|
||||
*
|
||||
* @return the protocol code
|
||||
*/
|
||||
public byte getBDeviceProtocol() {
|
||||
return bDeviceProtocol;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the subclass code (Assigned by <a
|
||||
* href="http://www.usb.org">www.usb.org</a>)<br>
|
||||
*
|
||||
* @return the subclass code
|
||||
*/
|
||||
public byte getBDeviceSubClass() {
|
||||
return bDeviceSubClass;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the maximum packet size for endpoint zero.<br>
|
||||
* Valid sizes are 8, 16, 32, 64.
|
||||
*
|
||||
* @return the maximum packet size for endpoint zero
|
||||
*/
|
||||
public byte getBMaxPacketSize0() {
|
||||
return bMaxPacketSize0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the number of possible configurations supported at its current
|
||||
* speed.<br>
|
||||
*
|
||||
* @return the number of possible configurations supported at its current
|
||||
* speed
|
||||
*/
|
||||
public byte getBNumConfigurations() {
|
||||
return bNumConfigurations;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the product ID (Assigned by <a
|
||||
* href="http://www.usb.org">www.usb.org</a>)<br>
|
||||
*
|
||||
* @return the product ID
|
||||
*/
|
||||
public short getIdProduct() {
|
||||
return idProduct;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the Vendor ID (Assigned by <a
|
||||
* href="http://www.usb.org">www.usb.org</a>)<br>
|
||||
*
|
||||
* @return the Vendor ID
|
||||
*/
|
||||
public short getIdVendor() {
|
||||
return idVendor;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the index of the manufacturer string descriptor.<br>
|
||||
* If this value is 0, no string descriptor is used.
|
||||
*
|
||||
* @return the index of the manufacturer string descriptor
|
||||
*/
|
||||
public byte getIManufacturer() {
|
||||
return iManufacturer;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the index of the product string descriptor.<br>
|
||||
* If this value is 0, no string descriptor is used.
|
||||
*
|
||||
* @return the index of the product string descriptor
|
||||
*/
|
||||
public byte getIProduct() {
|
||||
return iProduct;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the index of serial number string descriptor.<br>
|
||||
* If this value is 0, no string descriptor is used.
|
||||
*
|
||||
* @return the index of serial number string descriptor
|
||||
*/
|
||||
public byte getISerialNumber() {
|
||||
return iSerialNumber;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
StringBuffer sb = new StringBuffer();
|
||||
sb.append("Usb_Device_Descriptor idVendor: 0x"
|
||||
+ Integer.toHexString(idVendor & 0xFFFF) + ", idProduct: 0x"
|
||||
+ Integer.toHexString(idProduct & 0xFFFF));
|
||||
return sb.toString();
|
||||
}
|
||||
/*
|
||||
* Java libusb wrapper
|
||||
* Copyright (c) 2005-2006 Andreas Schlä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.inf.libusbJava;
|
||||
|
||||
/**
|
||||
* Represents the descriptor of a USB device.<br>
|
||||
* A USB device can only have one device descriptor. It specifies some basic,
|
||||
* yet important information about the device.<br>
|
||||
* <br>
|
||||
* The length of the device descriptor is
|
||||
* {@link ch.ntb.inf.libusbJava.Usb_Descriptor#USB_DT_DEVICE_SIZE} and the type is
|
||||
* {@link ch.ntb.inf.libusbJava.Usb_Descriptor#USB_DT_DEVICE}.
|
||||
*
|
||||
*/
|
||||
public class Usb_Device_Descriptor extends Usb_Descriptor {
|
||||
/**
|
||||
* Device and/or interface class codes.
|
||||
*/
|
||||
public static final int USB_CLASS_PER_INTERFACE = 0, USB_CLASS_AUDIO = 1,
|
||||
USB_CLASS_COMM = 2, USB_CLASS_HID = 3, LIBUSB_CLASS_PTP = 6,
|
||||
USB_CLASS_PRINTER = 7, USB_CLASS_MASS_STORAGE = 8,
|
||||
USB_CLASS_HUB = 9, USB_CLASS_DATA = 10,
|
||||
USB_CLASS_VENDOR_SPEC = 0xff;
|
||||
|
||||
private short bcdUSB;
|
||||
|
||||
private byte bDeviceClass;
|
||||
|
||||
private byte bDeviceSubClass;
|
||||
|
||||
private byte bDeviceProtocol;
|
||||
|
||||
private byte bMaxPacketSize0;
|
||||
|
||||
private short idVendor;
|
||||
|
||||
private short idProduct;
|
||||
|
||||
private short bcdDevice;
|
||||
|
||||
private byte iManufacturer;
|
||||
|
||||
private byte iProduct;
|
||||
|
||||
private byte iSerialNumber;
|
||||
|
||||
private byte bNumConfigurations;
|
||||
|
||||
/**
|
||||
* Returns the device release number.<br>
|
||||
* Assigned by the manufacturer of the device.
|
||||
*
|
||||
* @return the device release number
|
||||
*/
|
||||
public short getBcdDevice() {
|
||||
return bcdDevice;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the USB specification number to which the device complies to.<br>
|
||||
* This field reports the highest version of USB the device supports. The
|
||||
* value is in binary coded decimal with a format of 0xJJMN where JJ is the
|
||||
* major version number, M is the minor version number and N is the sub
|
||||
* minor version number.<br>
|
||||
* Examples: USB 2.0 is reported as 0x0200, USB 1.1 as 0x0110 and USB 1.0 as
|
||||
* 0x100
|
||||
*
|
||||
* @return the USB specification number to which the device complies to
|
||||
*/
|
||||
public short getBcdUSB() {
|
||||
return bcdUSB;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the class code (Assigned by <a
|
||||
* href="http://www.usb.org">www.usb.org</a>)<br>
|
||||
* If equal to zero, each interface specifies it's own class code. If equal
|
||||
* to 0xFF, the class code is vendor specified. Otherwise the field is a
|
||||
* valid class code.
|
||||
*
|
||||
* @return the class code
|
||||
*/
|
||||
public byte getBDeviceClass() {
|
||||
return bDeviceClass;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the protocol code (Assigned by <a
|
||||
* href="http://www.usb.org">www.usb.org</a>)<br>
|
||||
*
|
||||
* @return the protocol code
|
||||
*/
|
||||
public byte getBDeviceProtocol() {
|
||||
return bDeviceProtocol;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the subclass code (Assigned by <a
|
||||
* href="http://www.usb.org">www.usb.org</a>)<br>
|
||||
*
|
||||
* @return the subclass code
|
||||
*/
|
||||
public byte getBDeviceSubClass() {
|
||||
return bDeviceSubClass;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the maximum packet size for endpoint zero.<br>
|
||||
* Valid sizes are 8, 16, 32, 64.
|
||||
*
|
||||
* @return the maximum packet size for endpoint zero
|
||||
*/
|
||||
public byte getBMaxPacketSize0() {
|
||||
return bMaxPacketSize0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the number of possible configurations supported at its current
|
||||
* speed.<br>
|
||||
*
|
||||
* @return the number of possible configurations supported at its current
|
||||
* speed
|
||||
*/
|
||||
public byte getBNumConfigurations() {
|
||||
return bNumConfigurations;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the product ID (Assigned by <a
|
||||
* href="http://www.usb.org">www.usb.org</a>)<br>
|
||||
*
|
||||
* @return the product ID
|
||||
*/
|
||||
public short getIdProduct() {
|
||||
return idProduct;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the Vendor ID (Assigned by <a
|
||||
* href="http://www.usb.org">www.usb.org</a>)<br>
|
||||
*
|
||||
* @return the Vendor ID
|
||||
*/
|
||||
public short getIdVendor() {
|
||||
return idVendor;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the index of the manufacturer string descriptor.<br>
|
||||
* If this value is 0, no string descriptor is used.
|
||||
*
|
||||
* @return the index of the manufacturer string descriptor
|
||||
*/
|
||||
public byte getIManufacturer() {
|
||||
return iManufacturer;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the index of the product string descriptor.<br>
|
||||
* If this value is 0, no string descriptor is used.
|
||||
*
|
||||
* @return the index of the product string descriptor
|
||||
*/
|
||||
public byte getIProduct() {
|
||||
return iProduct;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the index of serial number string descriptor.<br>
|
||||
* If this value is 0, no string descriptor is used.
|
||||
*
|
||||
* @return the index of serial number string descriptor
|
||||
*/
|
||||
public byte getISerialNumber() {
|
||||
return iSerialNumber;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
StringBuffer sb = new StringBuffer();
|
||||
sb.append("Usb_Device_Descriptor idVendor: 0x"
|
||||
+ Integer.toHexString(idVendor & 0xFFFF) + ", idProduct: 0x"
|
||||
+ Integer.toHexString(idProduct & 0xFFFF));
|
||||
return sb.toString();
|
||||
}
|
||||
}
|
||||
@@ -1,175 +1,175 @@
|
||||
/*
|
||||
* Java libusb wrapper
|
||||
* Copyright (c) 2005-2006 Andreas Schlä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.inf.libusbJava;
|
||||
|
||||
/**
|
||||
* Represents the descriptor of an USB endpoint.<br>
|
||||
* Endpoint descriptors are used to describe endpoints other than endpoint zero.
|
||||
* 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
|
||||
* returned from these descriptors to determine the bandwidth requirements of
|
||||
* the bus.<br>
|
||||
* <br>
|
||||
* The length of the configuration descriptor is
|
||||
* {@link ch.ntb.inf.libusbJava.Usb_Descriptor#USB_DT_ENDPOINT_SIZE} and the type is
|
||||
* {@link ch.ntb.inf.libusbJava.Usb_Descriptor#USB_DT_ENDPOINT}.
|
||||
*
|
||||
*/
|
||||
public class Usb_Endpoint_Descriptor extends Usb_Descriptor {
|
||||
|
||||
/**
|
||||
* Maximum number of endpoints
|
||||
*/
|
||||
public static final int USB_MAXENDPOINTS = 32;
|
||||
|
||||
/**
|
||||
* Endpoint address mask (in bEndpointAddress).
|
||||
*/
|
||||
public static final int USB_ENDPOINT_ADDRESS_MASK = 0x0f,
|
||||
USB_ENDPOINT_DIR_MASK = 0x80;
|
||||
|
||||
/**
|
||||
* Endpoint type mask (in bmAttributes).
|
||||
*/
|
||||
public static final int USB_ENDPOINT_TRANSFER_TYPE_MASK = 0x03,
|
||||
USB_ENDPOINT_ISO_SYNC_TYPE = 0x0C,
|
||||
USB_ENDPOINT_ISO_USAGE_TYPE = 0x30;
|
||||
|
||||
/**
|
||||
* Possible endpoint types (in bmAttributes).
|
||||
*/
|
||||
public static final int USB_ENDPOINT_TRANSFER_TYPE_CONTROL = 0,
|
||||
USB_ENDPOINT_TRANSFER_TYPE_ISOCHRONOUS = 1,
|
||||
USB_ENDPOINT_TRANSFER_TYPE_BULK = 2,
|
||||
USB_ENDPOINT_TRANSFER_TYPE_INTERRUPT = 3;
|
||||
/**
|
||||
* Possible synchronization types for isochronous endpoints.
|
||||
*/
|
||||
public static final int USB_ENDPOINT_ISO_SYNC_TYPE_NONE = 0,
|
||||
USB_ENDPOINT_ISO_SYNC_TYPE_ASYNC = 1,
|
||||
USB_ENDPOINT_ISO_SYNC_TYPE_ADAPTIVE = 2,
|
||||
USB_ENDPOINT_ISO_SYNC_TYPE_SYNC = 3;
|
||||
|
||||
/**
|
||||
* Possible usage types for isochronous endpoints
|
||||
*/
|
||||
public static final int USB_ENDPOINT_ISO_USAGE_TYPE_DATA = 0,
|
||||
USB_ENDPOINT_ISO_USAGE_TYPE_FEEDBACK = 1,
|
||||
USB_ENDPOINT_ISO_USAGE_TYPE_IMPLICIT = 2;
|
||||
|
||||
private byte bEndpointAddress;
|
||||
|
||||
private byte bmAttributes;
|
||||
|
||||
private short wMaxPacketSize;
|
||||
|
||||
private byte bInterval;
|
||||
|
||||
private byte bRefresh;
|
||||
|
||||
private byte bSynchAddress;
|
||||
|
||||
private byte[] extra; /* Extra descriptors */
|
||||
|
||||
private int extralen;
|
||||
|
||||
/**
|
||||
* Returns the endpoint address.<br>
|
||||
* <br>
|
||||
* Bits 3..0: Endpoint number <br>
|
||||
* Bits 6..4: Reserved. Set to zero <br>
|
||||
* Bit 7: Direction (host to device). 0 = OUT (send data from host to
|
||||
* device), 1 = IN (host receives data from device). Note: these values are
|
||||
* ignored for control endpoints.<br>
|
||||
*
|
||||
* @return the endpoint address
|
||||
*/
|
||||
public byte getBEndpointAddress() {
|
||||
return bEndpointAddress;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the intervall for polling endpoint data transfers.<br>
|
||||
* Value in frame counts. Ignored for Bulk & Control eEndpoints. Isochronous
|
||||
* endpoints must equal 1 and field may range from 1 to 255 for interrupt
|
||||
* endpoints.
|
||||
*
|
||||
* @return the intervall for polling endpoint data transfers
|
||||
*/
|
||||
public byte getBInterval() {
|
||||
return bInterval;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the attributes of this endpoint.<br>
|
||||
*
|
||||
* Bits 1..0: Transfer Type (see <i>USB_ENDPOINT_TYPE_XXX</i>).<br>
|
||||
* Bits 7..2: Reserved.<br>
|
||||
*
|
||||
* <pre>
|
||||
* If isochronous endpoint:
|
||||
* Bits 3..2: Synchronisation type
|
||||
* 00 = No synchronisation
|
||||
* 01 = Asynchronous
|
||||
* 10 = Adaptive
|
||||
* 11 = Synchronous
|
||||
* Bits 5..4: Usage Type
|
||||
* 00 = Data endpoint
|
||||
* 01 = Feedback endpoint
|
||||
* 10 = Explicit feedback data endpoint
|
||||
* 11 = Reserved
|
||||
* </pre>
|
||||
*
|
||||
* @return the attributes of this endpoint
|
||||
*/
|
||||
public byte getBmAttributes() {
|
||||
return bmAttributes;
|
||||
}
|
||||
|
||||
public byte getBRefresh() {
|
||||
return bRefresh;
|
||||
}
|
||||
|
||||
public byte getBSynchAddress() {
|
||||
return bSynchAddress;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the data of extra descriptor(s) if available.<br>
|
||||
*
|
||||
* @return null or a byte array with the extra descriptor data
|
||||
*/
|
||||
public byte[] getExtra() {
|
||||
return extra;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the number of bytes of the extra descriptor.<br>
|
||||
*
|
||||
* @return the number of bytes of the extra descriptor
|
||||
*/
|
||||
public int getExtralen() {
|
||||
return extralen;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the maximum packet size of this endpoint is capable of sending or
|
||||
* receiving.<br>
|
||||
*
|
||||
* @return the maximum packet size
|
||||
*/
|
||||
public short getWMaxPacketSize() {
|
||||
return wMaxPacketSize;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "Usb_Endpoint_Descriptor bEndpointAddress: 0x"
|
||||
+ Integer.toHexString(bEndpointAddress & 0xFF);
|
||||
}
|
||||
}
|
||||
/*
|
||||
* Java libusb wrapper
|
||||
* Copyright (c) 2005-2006 Andreas Schlä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.inf.libusbJava;
|
||||
|
||||
/**
|
||||
* Represents the descriptor of an USB endpoint.<br>
|
||||
* Endpoint descriptors are used to describe endpoints other than endpoint zero.
|
||||
* 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
|
||||
* returned from these descriptors to determine the bandwidth requirements of
|
||||
* the bus.<br>
|
||||
* <br>
|
||||
* The length of the configuration descriptor is
|
||||
* {@link ch.ntb.inf.libusbJava.Usb_Descriptor#USB_DT_ENDPOINT_SIZE} and the type is
|
||||
* {@link ch.ntb.inf.libusbJava.Usb_Descriptor#USB_DT_ENDPOINT}.
|
||||
*
|
||||
*/
|
||||
public class Usb_Endpoint_Descriptor extends Usb_Descriptor {
|
||||
|
||||
/**
|
||||
* Maximum number of endpoints
|
||||
*/
|
||||
public static final int USB_MAXENDPOINTS = 32;
|
||||
|
||||
/**
|
||||
* Endpoint address mask (in bEndpointAddress).
|
||||
*/
|
||||
public static final int USB_ENDPOINT_ADDRESS_MASK = 0x0f,
|
||||
USB_ENDPOINT_DIR_MASK = 0x80;
|
||||
|
||||
/**
|
||||
* Endpoint type mask (in bmAttributes).
|
||||
*/
|
||||
public static final int USB_ENDPOINT_TRANSFER_TYPE_MASK = 0x03,
|
||||
USB_ENDPOINT_ISO_SYNC_TYPE = 0x0C,
|
||||
USB_ENDPOINT_ISO_USAGE_TYPE = 0x30;
|
||||
|
||||
/**
|
||||
* Possible endpoint types (in bmAttributes).
|
||||
*/
|
||||
public static final int USB_ENDPOINT_TRANSFER_TYPE_CONTROL = 0,
|
||||
USB_ENDPOINT_TRANSFER_TYPE_ISOCHRONOUS = 1,
|
||||
USB_ENDPOINT_TRANSFER_TYPE_BULK = 2,
|
||||
USB_ENDPOINT_TRANSFER_TYPE_INTERRUPT = 3;
|
||||
/**
|
||||
* Possible synchronization types for isochronous endpoints.
|
||||
*/
|
||||
public static final int USB_ENDPOINT_ISO_SYNC_TYPE_NONE = 0,
|
||||
USB_ENDPOINT_ISO_SYNC_TYPE_ASYNC = 1,
|
||||
USB_ENDPOINT_ISO_SYNC_TYPE_ADAPTIVE = 2,
|
||||
USB_ENDPOINT_ISO_SYNC_TYPE_SYNC = 3;
|
||||
|
||||
/**
|
||||
* Possible usage types for isochronous endpoints
|
||||
*/
|
||||
public static final int USB_ENDPOINT_ISO_USAGE_TYPE_DATA = 0,
|
||||
USB_ENDPOINT_ISO_USAGE_TYPE_FEEDBACK = 1,
|
||||
USB_ENDPOINT_ISO_USAGE_TYPE_IMPLICIT = 2;
|
||||
|
||||
private byte bEndpointAddress;
|
||||
|
||||
private byte bmAttributes;
|
||||
|
||||
private short wMaxPacketSize;
|
||||
|
||||
private byte bInterval;
|
||||
|
||||
private byte bRefresh;
|
||||
|
||||
private byte bSynchAddress;
|
||||
|
||||
private byte[] extra; /* Extra descriptors */
|
||||
|
||||
private int extralen;
|
||||
|
||||
/**
|
||||
* Returns the endpoint address.<br>
|
||||
* <br>
|
||||
* Bits 3..0: Endpoint number <br>
|
||||
* Bits 6..4: Reserved. Set to zero <br>
|
||||
* Bit 7: Direction (host to device). 0 = OUT (send data from host to
|
||||
* device), 1 = IN (host receives data from device). Note: these values are
|
||||
* ignored for control endpoints.<br>
|
||||
*
|
||||
* @return the endpoint address
|
||||
*/
|
||||
public byte getBEndpointAddress() {
|
||||
return bEndpointAddress;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the intervall for polling endpoint data transfers.<br>
|
||||
* Value in frame counts. Ignored for Bulk & Control eEndpoints. Isochronous
|
||||
* endpoints must equal 1 and field may range from 1 to 255 for interrupt
|
||||
* endpoints.
|
||||
*
|
||||
* @return the intervall for polling endpoint data transfers
|
||||
*/
|
||||
public byte getBInterval() {
|
||||
return bInterval;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the attributes of this endpoint.<br>
|
||||
*
|
||||
* Bits 1..0: Transfer Type (see <i>USB_ENDPOINT_TYPE_XXX</i>).<br>
|
||||
* Bits 7..2: Reserved.<br>
|
||||
*
|
||||
* <pre>
|
||||
* If isochronous endpoint:
|
||||
* Bits 3..2: Synchronisation type
|
||||
* 00 = No synchronisation
|
||||
* 01 = Asynchronous
|
||||
* 10 = Adaptive
|
||||
* 11 = Synchronous
|
||||
* Bits 5..4: Usage Type
|
||||
* 00 = Data endpoint
|
||||
* 01 = Feedback endpoint
|
||||
* 10 = Explicit feedback data endpoint
|
||||
* 11 = Reserved
|
||||
* </pre>
|
||||
*
|
||||
* @return the attributes of this endpoint
|
||||
*/
|
||||
public byte getBmAttributes() {
|
||||
return bmAttributes;
|
||||
}
|
||||
|
||||
public byte getBRefresh() {
|
||||
return bRefresh;
|
||||
}
|
||||
|
||||
public byte getBSynchAddress() {
|
||||
return bSynchAddress;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the data of extra descriptor(s) if available.<br>
|
||||
*
|
||||
* @return null or a byte array with the extra descriptor data
|
||||
*/
|
||||
public byte[] getExtra() {
|
||||
return extra;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the number of bytes of the extra descriptor.<br>
|
||||
*
|
||||
* @return the number of bytes of the extra descriptor
|
||||
*/
|
||||
public int getExtralen() {
|
||||
return extralen;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the maximum packet size of this endpoint is capable of sending or
|
||||
* receiving.<br>
|
||||
*
|
||||
* @return the maximum packet size
|
||||
*/
|
||||
public short getWMaxPacketSize() {
|
||||
return wMaxPacketSize;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "Usb_Endpoint_Descriptor bEndpointAddress: 0x"
|
||||
+ Integer.toHexString(bEndpointAddress & 0xFF);
|
||||
}
|
||||
}
|
||||
@@ -1,50 +1,50 @@
|
||||
/*
|
||||
* Java libusb wrapper
|
||||
* Copyright (c) 2005-2006 Andreas Schlä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.inf.libusbJava;
|
||||
|
||||
/**
|
||||
* Represents an USB interface.<br>
|
||||
* An interface is a group of alternate settings of a configuration.<br>
|
||||
*
|
||||
*/
|
||||
public class Usb_Interface {
|
||||
|
||||
/**
|
||||
* Maximal number of alternate settings
|
||||
*/
|
||||
public static final int USB_MAXALTSETTING = 128; /* Hard limit */
|
||||
|
||||
private Usb_Interface_Descriptor[] altsetting;
|
||||
|
||||
private int num_altsetting;
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "Usb_Interface num_altsetting: 0x"
|
||||
+ Integer.toHexString(num_altsetting);
|
||||
}
|
||||
|
||||
/**
|
||||
* Retuns an array of interface descriptors.<br>
|
||||
*
|
||||
* @return an array of interface descriptors
|
||||
*/
|
||||
public Usb_Interface_Descriptor[] getAltsetting() {
|
||||
return altsetting;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the number of alternate settings.<br>
|
||||
*
|
||||
* @return the number of alternate settings
|
||||
*/
|
||||
public int getNumAltsetting() {
|
||||
return num_altsetting;
|
||||
}
|
||||
|
||||
}
|
||||
/*
|
||||
* Java libusb wrapper
|
||||
* Copyright (c) 2005-2006 Andreas Schlä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.inf.libusbJava;
|
||||
|
||||
/**
|
||||
* Represents an USB interface.<br>
|
||||
* An interface is a group of alternate settings of a configuration.<br>
|
||||
*
|
||||
*/
|
||||
public class Usb_Interface {
|
||||
|
||||
/**
|
||||
* Maximal number of alternate settings
|
||||
*/
|
||||
public static final int USB_MAXALTSETTING = 128; /* Hard limit */
|
||||
|
||||
private Usb_Interface_Descriptor[] altsetting;
|
||||
|
||||
private int num_altsetting;
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "Usb_Interface num_altsetting: 0x"
|
||||
+ Integer.toHexString(num_altsetting);
|
||||
}
|
||||
|
||||
/**
|
||||
* Retuns an array of interface descriptors.<br>
|
||||
*
|
||||
* @return an array of interface descriptors
|
||||
*/
|
||||
public Usb_Interface_Descriptor[] getAltsetting() {
|
||||
return altsetting;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the number of alternate settings.<br>
|
||||
*
|
||||
* @return the number of alternate settings
|
||||
*/
|
||||
public int getNumAltsetting() {
|
||||
return num_altsetting;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,146 +1,146 @@
|
||||
/*
|
||||
* Java libusb wrapper
|
||||
* Copyright (c) 2005-2006 Andreas Schlä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.inf.libusbJava;
|
||||
|
||||
/**
|
||||
* Represents the descriptor of a USB interface.<br>
|
||||
* 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>
|
||||
* <br>
|
||||
* The length of the interface descriptor is
|
||||
* {@link ch.ntb.inf.libusbJava.Usb_Descriptor#USB_DT_INTERFACE_SIZE} and the
|
||||
* type is {@link ch.ntb.inf.libusbJava.Usb_Descriptor#USB_DT_INTERFACE}.
|
||||
*
|
||||
*/
|
||||
public class Usb_Interface_Descriptor extends Usb_Descriptor {
|
||||
|
||||
/**
|
||||
* Maximum number of interfaces
|
||||
*/
|
||||
public static final int USB_MAXINTERFACES = 32;
|
||||
|
||||
private byte bInterfaceNumber;
|
||||
|
||||
private byte bAlternateSetting;
|
||||
|
||||
private byte bNumEndpoints;
|
||||
|
||||
private byte bInterfaceClass;
|
||||
|
||||
private byte bInterfaceSubClass;
|
||||
|
||||
private byte bInterfaceProtocol;
|
||||
|
||||
private byte iInterface;
|
||||
|
||||
private Usb_Endpoint_Descriptor[] endpoint;
|
||||
|
||||
private byte[] extra; /* Extra descriptors */
|
||||
|
||||
private int extralen;
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "Usb_Interface_Descriptor bNumEndpoints: 0x"
|
||||
+ Integer.toHexString(bNumEndpoints);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the value used to select the alternate setting (
|
||||
* {@link LibusbJava#usb_set_altinterface(long, int)}).<br>
|
||||
*
|
||||
* @return the alternate setting
|
||||
*/
|
||||
public byte getBAlternateSetting() {
|
||||
return bAlternateSetting;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the class code (Assigned by <a
|
||||
* href="http://www.usb.org">www.usb.org</a>).<br>
|
||||
*
|
||||
* @return the class code
|
||||
*/
|
||||
public byte getBInterfaceClass() {
|
||||
return bInterfaceClass;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the number (identifier) of this interface.<br>
|
||||
*
|
||||
* @return the number (identifier) of this interface
|
||||
*/
|
||||
public byte getBInterfaceNumber() {
|
||||
return bInterfaceNumber;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the protocol code (Assigned by <a
|
||||
* href="http://www.usb.org">www.usb.org</a>).<br>
|
||||
*
|
||||
* @return the protocol code
|
||||
*/
|
||||
public byte getBInterfaceProtocol() {
|
||||
return bInterfaceProtocol;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the subclass code (Assigned by <a
|
||||
* href="http://www.usb.org">www.usb.org</a>).<br>
|
||||
*
|
||||
* @return the subclass code
|
||||
*/
|
||||
public byte getBInterfaceSubClass() {
|
||||
return bInterfaceSubClass;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the number of endpoints used for this interface.<br>
|
||||
*
|
||||
* @return the number of endpoints used for this interface
|
||||
*/
|
||||
public byte getBNumEndpoints() {
|
||||
return bNumEndpoints;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an array of endpoint descriptors.<br>
|
||||
*
|
||||
* @return an array of endpoint descriptors
|
||||
*/
|
||||
public Usb_Endpoint_Descriptor[] getEndpoint() {
|
||||
return endpoint;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the data of extra descriptor(s) if available.<br>
|
||||
*
|
||||
* @return null or a byte array with the extra descriptor data
|
||||
*/
|
||||
public byte[] getExtra() {
|
||||
return extra;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the number of bytes of the extra descriptor.<br>
|
||||
*
|
||||
* @return the number of bytes of the extra descriptor
|
||||
*/
|
||||
public int getExtralen() {
|
||||
return extralen;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the index of the String descriptor describing this interface.<br>
|
||||
*
|
||||
* @return the index of the String descriptor
|
||||
*/
|
||||
public byte getIInterface() {
|
||||
return iInterface;
|
||||
}
|
||||
}
|
||||
/*
|
||||
* Java libusb wrapper
|
||||
* Copyright (c) 2005-2006 Andreas Schlä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.inf.libusbJava;
|
||||
|
||||
/**
|
||||
* Represents the descriptor of a USB interface.<br>
|
||||
* 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>
|
||||
* <br>
|
||||
* The length of the interface descriptor is
|
||||
* {@link ch.ntb.inf.libusbJava.Usb_Descriptor#USB_DT_INTERFACE_SIZE} and the
|
||||
* type is {@link ch.ntb.inf.libusbJava.Usb_Descriptor#USB_DT_INTERFACE}.
|
||||
*
|
||||
*/
|
||||
public class Usb_Interface_Descriptor extends Usb_Descriptor {
|
||||
|
||||
/**
|
||||
* Maximum number of interfaces
|
||||
*/
|
||||
public static final int USB_MAXINTERFACES = 32;
|
||||
|
||||
private byte bInterfaceNumber;
|
||||
|
||||
private byte bAlternateSetting;
|
||||
|
||||
private byte bNumEndpoints;
|
||||
|
||||
private byte bInterfaceClass;
|
||||
|
||||
private byte bInterfaceSubClass;
|
||||
|
||||
private byte bInterfaceProtocol;
|
||||
|
||||
private byte iInterface;
|
||||
|
||||
private Usb_Endpoint_Descriptor[] endpoint;
|
||||
|
||||
private byte[] extra; /* Extra descriptors */
|
||||
|
||||
private int extralen;
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "Usb_Interface_Descriptor bNumEndpoints: 0x"
|
||||
+ Integer.toHexString(bNumEndpoints);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the value used to select the alternate setting (
|
||||
* {@link LibusbJava#usb_set_altinterface(long, int)}).<br>
|
||||
*
|
||||
* @return the alternate setting
|
||||
*/
|
||||
public byte getBAlternateSetting() {
|
||||
return bAlternateSetting;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the class code (Assigned by <a
|
||||
* href="http://www.usb.org">www.usb.org</a>).<br>
|
||||
*
|
||||
* @return the class code
|
||||
*/
|
||||
public byte getBInterfaceClass() {
|
||||
return bInterfaceClass;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the number (identifier) of this interface.<br>
|
||||
*
|
||||
* @return the number (identifier) of this interface
|
||||
*/
|
||||
public byte getBInterfaceNumber() {
|
||||
return bInterfaceNumber;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the protocol code (Assigned by <a
|
||||
* href="http://www.usb.org">www.usb.org</a>).<br>
|
||||
*
|
||||
* @return the protocol code
|
||||
*/
|
||||
public byte getBInterfaceProtocol() {
|
||||
return bInterfaceProtocol;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the subclass code (Assigned by <a
|
||||
* href="http://www.usb.org">www.usb.org</a>).<br>
|
||||
*
|
||||
* @return the subclass code
|
||||
*/
|
||||
public byte getBInterfaceSubClass() {
|
||||
return bInterfaceSubClass;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the number of endpoints used for this interface.<br>
|
||||
*
|
||||
* @return the number of endpoints used for this interface
|
||||
*/
|
||||
public byte getBNumEndpoints() {
|
||||
return bNumEndpoints;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an array of endpoint descriptors.<br>
|
||||
*
|
||||
* @return an array of endpoint descriptors
|
||||
*/
|
||||
public Usb_Endpoint_Descriptor[] getEndpoint() {
|
||||
return endpoint;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the data of extra descriptor(s) if available.<br>
|
||||
*
|
||||
* @return null or a byte array with the extra descriptor data
|
||||
*/
|
||||
public byte[] getExtra() {
|
||||
return extra;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the number of bytes of the extra descriptor.<br>
|
||||
*
|
||||
* @return the number of bytes of the extra descriptor
|
||||
*/
|
||||
public int getExtralen() {
|
||||
return extralen;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the index of the String descriptor describing this interface.<br>
|
||||
*
|
||||
* @return the index of the String descriptor
|
||||
*/
|
||||
public byte getIInterface() {
|
||||
return iInterface;
|
||||
}
|
||||
}
|
||||
@@ -1,60 +1,60 @@
|
||||
/*
|
||||
* Java libusb wrapper
|
||||
* Copyright (c) 2005-2006 Andreas Schlä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.inf.libusbJava;
|
||||
|
||||
import java.io.PrintStream;
|
||||
|
||||
public class Utils {
|
||||
|
||||
public static void logBus(Usb_Bus bus) {
|
||||
logBus(bus, System.out);
|
||||
}
|
||||
|
||||
public static void logBus(Usb_Bus bus, PrintStream out) {
|
||||
Usb_Bus usb_Bus = bus;
|
||||
while (usb_Bus != null) {
|
||||
out.println(usb_Bus.toString());
|
||||
Usb_Device dev = usb_Bus.getDevices();
|
||||
while (dev != null) {
|
||||
out.println("\t" + dev.toString());
|
||||
// Usb_Device_Descriptor
|
||||
Usb_Device_Descriptor defDesc = dev.getDescriptor();
|
||||
out.println("\t\t" + defDesc.toString());
|
||||
// Usb_Config_Descriptor
|
||||
Usb_Config_Descriptor[] confDesc = dev.getConfig();
|
||||
for (int i = 0; i < confDesc.length; i++) {
|
||||
out.println("\t\t" + confDesc[i].toString());
|
||||
Usb_Interface[] int_ = confDesc[i].getInterface();
|
||||
if (int_ != null) {
|
||||
for (int j = 0; j < int_.length; j++) {
|
||||
out.println("\t\t\t" + int_[j].toString());
|
||||
Usb_Interface_Descriptor[] intDesc = int_[j]
|
||||
.getAltsetting();
|
||||
if (intDesc != null) {
|
||||
for (int k = 0; k < intDesc.length; k++) {
|
||||
out.println("\t\t\t\t"
|
||||
+ intDesc[k].toString());
|
||||
Usb_Endpoint_Descriptor[] epDesc = intDesc[k]
|
||||
.getEndpoint();
|
||||
if (epDesc != null) {
|
||||
for (int e = 0; e < epDesc.length; e++) {
|
||||
out.println("\t\t\t\t\t"
|
||||
+ epDesc[e].toString());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
dev = dev.getNext();
|
||||
}
|
||||
usb_Bus = usb_Bus.getNext();
|
||||
}
|
||||
}
|
||||
}
|
||||
/*
|
||||
* Java libusb wrapper
|
||||
* Copyright (c) 2005-2006 Andreas Schlä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.inf.libusbJava;
|
||||
|
||||
import java.io.PrintStream;
|
||||
|
||||
public class Utils {
|
||||
|
||||
public static void logBus(Usb_Bus bus) {
|
||||
logBus(bus, System.out);
|
||||
}
|
||||
|
||||
public static void logBus(Usb_Bus bus, PrintStream out) {
|
||||
Usb_Bus usb_Bus = bus;
|
||||
while (usb_Bus != null) {
|
||||
out.println(usb_Bus.toString());
|
||||
Usb_Device dev = usb_Bus.getDevices();
|
||||
while (dev != null) {
|
||||
out.println("\t" + dev.toString());
|
||||
// Usb_Device_Descriptor
|
||||
Usb_Device_Descriptor defDesc = dev.getDescriptor();
|
||||
out.println("\t\t" + defDesc.toString());
|
||||
// Usb_Config_Descriptor
|
||||
Usb_Config_Descriptor[] confDesc = dev.getConfig();
|
||||
for (int i = 0; i < confDesc.length; i++) {
|
||||
out.println("\t\t" + confDesc[i].toString());
|
||||
Usb_Interface[] int_ = confDesc[i].getInterface();
|
||||
if (int_ != null) {
|
||||
for (int j = 0; j < int_.length; j++) {
|
||||
out.println("\t\t\t" + int_[j].toString());
|
||||
Usb_Interface_Descriptor[] intDesc = int_[j]
|
||||
.getAltsetting();
|
||||
if (intDesc != null) {
|
||||
for (int k = 0; k < intDesc.length; k++) {
|
||||
out.println("\t\t\t\t"
|
||||
+ intDesc[k].toString());
|
||||
Usb_Endpoint_Descriptor[] epDesc = intDesc[k]
|
||||
.getEndpoint();
|
||||
if (epDesc != null) {
|
||||
for (int e = 0; e < epDesc.length; e++) {
|
||||
out.println("\t\t\t\t\t"
|
||||
+ epDesc[e].toString());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
dev = dev.getNext();
|
||||
}
|
||||
usb_Bus = usb_Bus.getNext();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,42 +1,42 @@
|
||||
/*
|
||||
* Java libusb wrapper
|
||||
* Copyright (c) 2005-2006 Andreas Schlä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.inf.libusbJava.demo;
|
||||
|
||||
import ch.ntb.inf.libusbJava.LibusbJava;
|
||||
import ch.ntb.inf.libusbJava.Usb_Bus;
|
||||
import ch.ntb.inf.libusbJava.Utils;
|
||||
|
||||
/**
|
||||
* Initalises Libusb and prints the bus(ses) with attached devices to the
|
||||
* standard out.<br>
|
||||
*
|
||||
* @deprecated This class will be removed with the legacy {@link LibusbJava}
|
||||
* class
|
||||
*/
|
||||
public class LogBus {
|
||||
|
||||
private static void logBus() {
|
||||
// if you don't use the ch.ntb.inf.libusbJava.Device class you must
|
||||
// initialise
|
||||
// Libusb before use
|
||||
LibusbJava.usb_init();
|
||||
LibusbJava.usb_find_busses();
|
||||
LibusbJava.usb_find_devices();
|
||||
|
||||
// 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();
|
||||
}
|
||||
}
|
||||
/*
|
||||
* Java libusb wrapper
|
||||
* Copyright (c) 2005-2006 Andreas Schlä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.inf.libusbJava.demo;
|
||||
|
||||
import ch.ntb.inf.libusbJava.LibusbJava;
|
||||
import ch.ntb.inf.libusbJava.Usb_Bus;
|
||||
import ch.ntb.inf.libusbJava.Utils;
|
||||
|
||||
/**
|
||||
* Initalises Libusb and prints the bus(ses) with attached devices to the
|
||||
* standard out.<br>
|
||||
*
|
||||
* @deprecated This class will be removed with the legacy {@link LibusbJava}
|
||||
* class
|
||||
*/
|
||||
public class LogBus {
|
||||
|
||||
private static void logBus() {
|
||||
// if you don't use the ch.ntb.inf.libusbJava.Device class you must
|
||||
// initialise
|
||||
// Libusb before use
|
||||
LibusbJava.usb_init();
|
||||
LibusbJava.usb_find_busses();
|
||||
LibusbJava.usb_find_devices();
|
||||
|
||||
// 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 +1,60 @@
|
||||
/*
|
||||
* Java libusb wrapper
|
||||
* Copyright (c) 2005-2006 Andreas Schlä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.inf.libusbJava.demo;
|
||||
|
||||
import ch.ntb.inf.libusbJava.Device;
|
||||
import ch.ntb.inf.libusbJava.USB;
|
||||
import ch.ntb.inf.libusbJava.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) 0x0100);
|
||||
try {
|
||||
// data to write to the device
|
||||
byte[] data = new byte[] { 0, 1, 2, 3 };
|
||||
// data read from the device
|
||||
byte[] readData = new byte[data.length];
|
||||
|
||||
// open the device with configuration 1, interface 0 and without
|
||||
// altinterface
|
||||
// this will initialise Libusb for you
|
||||
dev.open(1, 0, -1);
|
||||
// write some data to the device
|
||||
// 0x03 is the endpoint address of the OUT endpoint 3 (from PC to
|
||||
// device)
|
||||
dev.writeInterrupt(0x02, data, data.length, 2000, false);
|
||||
// read some data from the device
|
||||
// 0x84 is the endpoint address of the IN endpoint 4 (from PC to
|
||||
// device)
|
||||
// bit 7 (0x80) is set in case of an IN endpoint
|
||||
dev.readInterrupt(0x86, readData, readData.length, 2000, false);
|
||||
// log the data from the device
|
||||
logData(readData);
|
||||
// close the device
|
||||
dev.close();
|
||||
} catch (USBException e) {
|
||||
// if an exception occures during connect or read/write an exception
|
||||
// is thrown
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
/*
|
||||
* Java libusb wrapper
|
||||
* Copyright (c) 2005-2006 Andreas Schlä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.inf.libusbJava.demo;
|
||||
|
||||
import ch.ntb.inf.libusbJava.Device;
|
||||
import ch.ntb.inf.libusbJava.USB;
|
||||
import ch.ntb.inf.libusbJava.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) 0x0100);
|
||||
try {
|
||||
// data to write to the device
|
||||
byte[] data = new byte[] { 0, 1, 2, 3 };
|
||||
// data read from the device
|
||||
byte[] readData = new byte[data.length];
|
||||
|
||||
// open the device with configuration 1, interface 0 and without
|
||||
// altinterface
|
||||
// this will initialise Libusb for you
|
||||
dev.open(1, 0, -1);
|
||||
// write some data to the device
|
||||
// 0x03 is the endpoint address of the OUT endpoint 3 (from PC to
|
||||
// device)
|
||||
dev.writeInterrupt(0x02, data, data.length, 2000, false);
|
||||
// read some data from the device
|
||||
// 0x84 is the endpoint address of the IN endpoint 4 (from PC to
|
||||
// device)
|
||||
// bit 7 (0x80) is set in case of an IN endpoint
|
||||
dev.readInterrupt(0x86, readData, readData.length, 2000, false);
|
||||
// log the data from the device
|
||||
logData(readData);
|
||||
// close the device
|
||||
dev.close();
|
||||
} catch (USBException e) {
|
||||
// if an exception occures during connect or read/write an exception
|
||||
// is thrown
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,150 +1,150 @@
|
||||
package ch.ntb.inf.libusbJava.exceptions;
|
||||
|
||||
public class LibusbError extends Exception {
|
||||
private static final long serialVersionUID = 9096323614080207236L;
|
||||
|
||||
/**
|
||||
* libusb error codes
|
||||
*/
|
||||
public static final int ERROR_NONE = 0;
|
||||
public static final int ERROR_IO = -1;
|
||||
public static final int ERROR_INVALID_PARAM = -2;
|
||||
public static final int ERROR_ACCESS = -3;
|
||||
public static final int ERROR_NO_DEVICE = -4;
|
||||
public static final int ERROR_NOT_FOUND = -5;
|
||||
public static final int ERROR_BUSY = -6;
|
||||
public static final int ERROR_TIMEOUT = -7;
|
||||
public static final int ERROR_OVERFLOW = -8;
|
||||
public static final int ERROR_PIPE = -9;
|
||||
public static final int ERROR_INTERRUPTED = -10;
|
||||
public static final int ERROR_NO_MEM = -11;
|
||||
public static final int ERROR_NOT_SUPPORTED = -12;
|
||||
public static final int ERROR_OTHER = -99;
|
||||
public static final int ERROR_JAVA_REFERENCES_NOT_LOADED = -100;
|
||||
public static final int ERROR_JAVA_WRONG_ENVIRONMENT = -101;
|
||||
public static final int ERROR_JAVA_ILEGAL_DEVICE_HANDLE = -102;
|
||||
|
||||
private int code = ERROR_NONE;
|
||||
|
||||
public LibusbError(int code)
|
||||
{
|
||||
super("libusb result: " + getStringFromCode(code));
|
||||
this.code = code;
|
||||
}
|
||||
|
||||
public int getErrorCode()
|
||||
{
|
||||
return code;
|
||||
}
|
||||
|
||||
public static String getStringFromCode(int code)
|
||||
{
|
||||
String result;
|
||||
|
||||
switch (code)
|
||||
{
|
||||
case ERROR_IO:
|
||||
{
|
||||
result = "ERROR_IO";
|
||||
break;
|
||||
}
|
||||
case ERROR_INVALID_PARAM:
|
||||
{
|
||||
result = "ERROR_INVALID_PARAM";
|
||||
break;
|
||||
}
|
||||
case ERROR_ACCESS:
|
||||
{
|
||||
result = "ERROR_ACCESS";
|
||||
break;
|
||||
}
|
||||
case ERROR_NO_DEVICE:
|
||||
{
|
||||
result = "ERROR_NO_DEVICE";
|
||||
break;
|
||||
}
|
||||
case ERROR_NOT_FOUND:
|
||||
{
|
||||
result = "ERROR_NOT_FOUND";
|
||||
break;
|
||||
}
|
||||
case ERROR_BUSY:
|
||||
{
|
||||
result = "ERROR_BUSY";
|
||||
break;
|
||||
}
|
||||
|
||||
case ERROR_TIMEOUT:
|
||||
{
|
||||
result = "ERROR_TIMEOUT";
|
||||
break;
|
||||
}
|
||||
|
||||
case ERROR_OVERFLOW:
|
||||
{
|
||||
result = "ERROR_OVERFLOW";
|
||||
break;
|
||||
}
|
||||
|
||||
case ERROR_PIPE:
|
||||
{
|
||||
result = "ERROR_PIPE";
|
||||
break;
|
||||
}
|
||||
|
||||
case ERROR_INTERRUPTED:
|
||||
{
|
||||
result = "ERROR_INTERRUPTED";
|
||||
break;
|
||||
}
|
||||
|
||||
case ERROR_NO_MEM:
|
||||
{
|
||||
result = "ERROR_NO_MEM";
|
||||
break;
|
||||
}
|
||||
|
||||
case ERROR_NOT_SUPPORTED:
|
||||
{
|
||||
result = "ERROR_NOT_SUPPORTED";
|
||||
break;
|
||||
}
|
||||
|
||||
case ERROR_OTHER:
|
||||
{
|
||||
result = "ERROR_OTHER";
|
||||
break;
|
||||
}
|
||||
|
||||
case ERROR_JAVA_REFERENCES_NOT_LOADED:
|
||||
{
|
||||
result = "ERROR_JAVA_REFERENCES_NOT_LOADED";
|
||||
break;
|
||||
}
|
||||
|
||||
case ERROR_JAVA_WRONG_ENVIRONMENT:
|
||||
{
|
||||
result = "ERROR_JAVA_WRONG_ENVIRONMENT";
|
||||
break;
|
||||
}
|
||||
|
||||
case ERROR_JAVA_ILEGAL_DEVICE_HANDLE:
|
||||
{
|
||||
result = "ERROR_JAVA_ILEGAL_DEVICE_HANDLE";
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
{
|
||||
result = "ERROR_UNKNWON (" + code + ")";
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public String getErrorString() {
|
||||
return getStringFromCode(getErrorCode());
|
||||
}
|
||||
}
|
||||
package ch.ntb.inf.libusbJava.exceptions;
|
||||
|
||||
public class LibusbError extends Exception {
|
||||
private static final long serialVersionUID = 9096323614080207236L;
|
||||
|
||||
/**
|
||||
* libusb error codes
|
||||
*/
|
||||
public static final int ERROR_NONE = 0;
|
||||
public static final int ERROR_IO = -1;
|
||||
public static final int ERROR_INVALID_PARAM = -2;
|
||||
public static final int ERROR_ACCESS = -3;
|
||||
public static final int ERROR_NO_DEVICE = -4;
|
||||
public static final int ERROR_NOT_FOUND = -5;
|
||||
public static final int ERROR_BUSY = -6;
|
||||
public static final int ERROR_TIMEOUT = -7;
|
||||
public static final int ERROR_OVERFLOW = -8;
|
||||
public static final int ERROR_PIPE = -9;
|
||||
public static final int ERROR_INTERRUPTED = -10;
|
||||
public static final int ERROR_NO_MEM = -11;
|
||||
public static final int ERROR_NOT_SUPPORTED = -12;
|
||||
public static final int ERROR_OTHER = -99;
|
||||
public static final int ERROR_JAVA_REFERENCES_NOT_LOADED = -100;
|
||||
public static final int ERROR_JAVA_WRONG_ENVIRONMENT = -101;
|
||||
public static final int ERROR_JAVA_ILEGAL_DEVICE_HANDLE = -102;
|
||||
|
||||
private int code = ERROR_NONE;
|
||||
|
||||
public LibusbError(int code)
|
||||
{
|
||||
super("libusb result: " + getStringFromCode(code));
|
||||
this.code = code;
|
||||
}
|
||||
|
||||
public int getErrorCode()
|
||||
{
|
||||
return code;
|
||||
}
|
||||
|
||||
public static String getStringFromCode(int code)
|
||||
{
|
||||
String result;
|
||||
|
||||
switch (code)
|
||||
{
|
||||
case ERROR_IO:
|
||||
{
|
||||
result = "ERROR_IO";
|
||||
break;
|
||||
}
|
||||
case ERROR_INVALID_PARAM:
|
||||
{
|
||||
result = "ERROR_INVALID_PARAM";
|
||||
break;
|
||||
}
|
||||
case ERROR_ACCESS:
|
||||
{
|
||||
result = "ERROR_ACCESS";
|
||||
break;
|
||||
}
|
||||
case ERROR_NO_DEVICE:
|
||||
{
|
||||
result = "ERROR_NO_DEVICE";
|
||||
break;
|
||||
}
|
||||
case ERROR_NOT_FOUND:
|
||||
{
|
||||
result = "ERROR_NOT_FOUND";
|
||||
break;
|
||||
}
|
||||
case ERROR_BUSY:
|
||||
{
|
||||
result = "ERROR_BUSY";
|
||||
break;
|
||||
}
|
||||
|
||||
case ERROR_TIMEOUT:
|
||||
{
|
||||
result = "ERROR_TIMEOUT";
|
||||
break;
|
||||
}
|
||||
|
||||
case ERROR_OVERFLOW:
|
||||
{
|
||||
result = "ERROR_OVERFLOW";
|
||||
break;
|
||||
}
|
||||
|
||||
case ERROR_PIPE:
|
||||
{
|
||||
result = "ERROR_PIPE";
|
||||
break;
|
||||
}
|
||||
|
||||
case ERROR_INTERRUPTED:
|
||||
{
|
||||
result = "ERROR_INTERRUPTED";
|
||||
break;
|
||||
}
|
||||
|
||||
case ERROR_NO_MEM:
|
||||
{
|
||||
result = "ERROR_NO_MEM";
|
||||
break;
|
||||
}
|
||||
|
||||
case ERROR_NOT_SUPPORTED:
|
||||
{
|
||||
result = "ERROR_NOT_SUPPORTED";
|
||||
break;
|
||||
}
|
||||
|
||||
case ERROR_OTHER:
|
||||
{
|
||||
result = "ERROR_OTHER";
|
||||
break;
|
||||
}
|
||||
|
||||
case ERROR_JAVA_REFERENCES_NOT_LOADED:
|
||||
{
|
||||
result = "ERROR_JAVA_REFERENCES_NOT_LOADED";
|
||||
break;
|
||||
}
|
||||
|
||||
case ERROR_JAVA_WRONG_ENVIRONMENT:
|
||||
{
|
||||
result = "ERROR_JAVA_WRONG_ENVIRONMENT";
|
||||
break;
|
||||
}
|
||||
|
||||
case ERROR_JAVA_ILEGAL_DEVICE_HANDLE:
|
||||
{
|
||||
result = "ERROR_JAVA_ILEGAL_DEVICE_HANDLE";
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
{
|
||||
result = "ERROR_UNKNWON (" + code + ")";
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public String getErrorString() {
|
||||
return getStringFromCode(getErrorCode());
|
||||
}
|
||||
}
|
||||
@@ -1,135 +1,135 @@
|
||||
/*
|
||||
* Java libusb wrapper
|
||||
* Copyright (c) 2005-2006 Andreas Schlä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.inf.libusbJava.logger;
|
||||
|
||||
import java.io.InputStream;
|
||||
import java.util.Properties;
|
||||
import java.util.logging.ConsoleHandler;
|
||||
import java.util.logging.Handler;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.LogManager;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
public class LogUtil {
|
||||
|
||||
// debug this class
|
||||
private static final boolean debugLogUtil = false;
|
||||
|
||||
private static final String PLUGIN_ID = "ch.ntb.inf.libusbJava";
|
||||
private static final String PROPERTIES_FILE = ".configure";
|
||||
private static final String LOGGER_WARNING = "Warning in class "
|
||||
+ LogUtil.class.getName()
|
||||
+ ": could not load the logger properties file " + PROPERTIES_FILE;
|
||||
|
||||
private static boolean debugEnabled;
|
||||
|
||||
static {
|
||||
createLoggersFromProperties();
|
||||
}
|
||||
|
||||
private static void debugMsg(String method, String message) {
|
||||
if (debugLogUtil) {
|
||||
System.out.println(method + ": " + message);
|
||||
}
|
||||
}
|
||||
|
||||
public static void setLevel(Logger logger, Level loglevel) {
|
||||
Handler[] h = logger.getHandlers();
|
||||
for (int i = 0; i < h.length; i++) {
|
||||
System.out.println("setLevel " + loglevel.toString());
|
||||
h[i].setLevel(loglevel);
|
||||
}
|
||||
logger.setLevel(loglevel);
|
||||
}
|
||||
|
||||
public static Logger getLogger(String name) {
|
||||
debugMsg("getLogger", name);
|
||||
LogManager manager = LogManager.getLogManager();
|
||||
// check if logger is already registered
|
||||
Logger logger = manager.getLogger(name);
|
||||
if (logger == null) {
|
||||
logger = Logger.getLogger(name);
|
||||
setLevel(logger, Level.OFF);
|
||||
manager.addLogger(logger);
|
||||
debugMsg("getLogger", "creating new logger");
|
||||
}
|
||||
if (logger.getLevel() == null) {
|
||||
debugMsg("getLogger", "level == null -> setLevel to OFF ");
|
||||
setLevel(logger, Level.OFF);
|
||||
}
|
||||
debugMsg("getLogger", "logLevel " + logger.getLevel().getName());
|
||||
return logger;
|
||||
}
|
||||
|
||||
private static void initLevel(Logger logger, Level loglevel) {
|
||||
Handler[] h = logger.getHandlers();
|
||||
for (int i = 0; i < h.length; i++) {
|
||||
logger.removeHandler(h[i]);
|
||||
}
|
||||
Handler console = new ConsoleHandler();
|
||||
console.setLevel(loglevel);
|
||||
logger.addHandler(console);
|
||||
logger.setLevel(loglevel);
|
||||
logger.setUseParentHandlers(false);
|
||||
}
|
||||
|
||||
private static void createLoggersFromProperties() {
|
||||
try {
|
||||
debugMsg(LogUtil.class.getName(), "createLoggersFromProperties");
|
||||
InputStream is = LogUtil.class.getClassLoader()
|
||||
.getResourceAsStream(PROPERTIES_FILE);
|
||||
if (is == null) {
|
||||
System.err.println(LOGGER_WARNING);
|
||||
} else {
|
||||
Properties prop = new Properties();
|
||||
prop.load(is);
|
||||
debugMsg("createLoggersFromProperties",
|
||||
"properties file loaded: " + PROPERTIES_FILE);
|
||||
debugMsg("createLoggersFromProperties", "file content:\n"
|
||||
+ prop.toString());
|
||||
// get global debug enable flag
|
||||
debugEnabled = Boolean.parseBoolean(prop.getProperty(PLUGIN_ID
|
||||
+ "/debug"));
|
||||
debugMsg("createLoggersFromProperties", "debuging enabled: "
|
||||
+ debugEnabled);
|
||||
// get and configure loggers
|
||||
boolean moreLoggers = true;
|
||||
int loggerCount = 0;
|
||||
while (moreLoggers) {
|
||||
String loggerProp = prop.getProperty(PLUGIN_ID
|
||||
+ "/debug/logger" + loggerCount);
|
||||
loggerCount++;
|
||||
if (loggerProp != null) {
|
||||
// parse string and get logger name and log level
|
||||
int slashIndex = loggerProp.indexOf('/');
|
||||
String loggerName = loggerProp.substring(0, slashIndex)
|
||||
.trim();
|
||||
String logLevel = loggerProp.substring(slashIndex + 1,
|
||||
loggerProp.length());
|
||||
// register logger
|
||||
Level level;
|
||||
if (debugEnabled) {
|
||||
level = Level.parse(logLevel);
|
||||
} else {
|
||||
level = Level.OFF;
|
||||
}
|
||||
Logger logger = getLogger(loggerName);
|
||||
initLevel(logger, level);
|
||||
debugMsg("createLoggersFromProperties",
|
||||
"create logger " + loggerName + " with level "
|
||||
+ level.toString());
|
||||
} else {
|
||||
moreLoggers = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
/*
|
||||
* Java libusb wrapper
|
||||
* Copyright (c) 2005-2006 Andreas Schlä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.inf.libusbJava.logger;
|
||||
|
||||
import java.io.InputStream;
|
||||
import java.util.Properties;
|
||||
import java.util.logging.ConsoleHandler;
|
||||
import java.util.logging.Handler;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.LogManager;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
public class LogUtil {
|
||||
|
||||
// debug this class
|
||||
private static final boolean debugLogUtil = false;
|
||||
|
||||
private static final String PLUGIN_ID = "ch.ntb.inf.libusbJava";
|
||||
private static final String PROPERTIES_FILE = ".configure";
|
||||
private static final String LOGGER_WARNING = "Warning in class "
|
||||
+ LogUtil.class.getName()
|
||||
+ ": could not load the logger properties file " + PROPERTIES_FILE;
|
||||
|
||||
private static boolean debugEnabled;
|
||||
|
||||
static {
|
||||
createLoggersFromProperties();
|
||||
}
|
||||
|
||||
private static void debugMsg(String method, String message) {
|
||||
if (debugLogUtil) {
|
||||
System.out.println(method + ": " + message);
|
||||
}
|
||||
}
|
||||
|
||||
public static void setLevel(Logger logger, Level loglevel) {
|
||||
Handler[] h = logger.getHandlers();
|
||||
for (int i = 0; i < h.length; i++) {
|
||||
System.out.println("setLevel " + loglevel.toString());
|
||||
h[i].setLevel(loglevel);
|
||||
}
|
||||
logger.setLevel(loglevel);
|
||||
}
|
||||
|
||||
public static Logger getLogger(String name) {
|
||||
debugMsg("getLogger", name);
|
||||
LogManager manager = LogManager.getLogManager();
|
||||
// check if logger is already registered
|
||||
Logger logger = manager.getLogger(name);
|
||||
if (logger == null) {
|
||||
logger = Logger.getLogger(name);
|
||||
setLevel(logger, Level.OFF);
|
||||
manager.addLogger(logger);
|
||||
debugMsg("getLogger", "creating new logger");
|
||||
}
|
||||
if (logger.getLevel() == null) {
|
||||
debugMsg("getLogger", "level == null -> setLevel to OFF ");
|
||||
setLevel(logger, Level.OFF);
|
||||
}
|
||||
debugMsg("getLogger", "logLevel " + logger.getLevel().getName());
|
||||
return logger;
|
||||
}
|
||||
|
||||
private static void initLevel(Logger logger, Level loglevel) {
|
||||
Handler[] h = logger.getHandlers();
|
||||
for (int i = 0; i < h.length; i++) {
|
||||
logger.removeHandler(h[i]);
|
||||
}
|
||||
Handler console = new ConsoleHandler();
|
||||
console.setLevel(loglevel);
|
||||
logger.addHandler(console);
|
||||
logger.setLevel(loglevel);
|
||||
logger.setUseParentHandlers(false);
|
||||
}
|
||||
|
||||
private static void createLoggersFromProperties() {
|
||||
try {
|
||||
debugMsg(LogUtil.class.getName(), "createLoggersFromProperties");
|
||||
InputStream is = LogUtil.class.getClassLoader()
|
||||
.getResourceAsStream(PROPERTIES_FILE);
|
||||
if (is == null) {
|
||||
System.err.println(LOGGER_WARNING);
|
||||
} else {
|
||||
Properties prop = new Properties();
|
||||
prop.load(is);
|
||||
debugMsg("createLoggersFromProperties",
|
||||
"properties file loaded: " + PROPERTIES_FILE);
|
||||
debugMsg("createLoggersFromProperties", "file content:\n"
|
||||
+ prop.toString());
|
||||
// get global debug enable flag
|
||||
debugEnabled = Boolean.parseBoolean(prop.getProperty(PLUGIN_ID
|
||||
+ "/debug"));
|
||||
debugMsg("createLoggersFromProperties", "debuging enabled: "
|
||||
+ debugEnabled);
|
||||
// get and configure loggers
|
||||
boolean moreLoggers = true;
|
||||
int loggerCount = 0;
|
||||
while (moreLoggers) {
|
||||
String loggerProp = prop.getProperty(PLUGIN_ID
|
||||
+ "/debug/logger" + loggerCount);
|
||||
loggerCount++;
|
||||
if (loggerProp != null) {
|
||||
// parse string and get logger name and log level
|
||||
int slashIndex = loggerProp.indexOf('/');
|
||||
String loggerName = loggerProp.substring(0, slashIndex)
|
||||
.trim();
|
||||
String logLevel = loggerProp.substring(slashIndex + 1,
|
||||
loggerProp.length());
|
||||
// register logger
|
||||
Level level;
|
||||
if (debugEnabled) {
|
||||
level = Level.parse(logLevel);
|
||||
} else {
|
||||
level = Level.OFF;
|
||||
}
|
||||
Logger logger = getLogger(loggerName);
|
||||
initLevel(logger, level);
|
||||
debugMsg("createLoggersFromProperties",
|
||||
"create logger " + loggerName + " with level "
|
||||
+ level.toString());
|
||||
} else {
|
||||
moreLoggers = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,16 +1,16 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
|
||||
<html>
|
||||
<head></head>
|
||||
<body bgcolor="white">
|
||||
|
||||
Logging related classes.
|
||||
|
||||
<h2>Related Resources</h2>
|
||||
|
||||
For more information about this project visit
|
||||
<a
|
||||
href="http://libusbjava.sourceforge.net">http://libusbjava.sourceforge.net</a>
|
||||
.
|
||||
|
||||
</body>
|
||||
</html>
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
|
||||
<html>
|
||||
<head></head>
|
||||
<body bgcolor="white">
|
||||
|
||||
Logging related classes.
|
||||
|
||||
<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,26 +1,26 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
|
||||
<html>
|
||||
<head></head>
|
||||
<body bgcolor="white">
|
||||
|
||||
Includes the main classes for the Java libusb wrapper.
|
||||
<br>
|
||||
<i>LibusbJava.java</i>
|
||||
is the JNI class to the
|
||||
<i>LibusbJava.dll</i>
|
||||
. Every class starting with
|
||||
<i>Usb_</i>
|
||||
represents a descriptor of the bus structure which is retrieved by
|
||||
calling
|
||||
<i>LibusbJava.usb_get_busses()</i>
|
||||
.
|
||||
|
||||
<h2>Related Resources</h2>
|
||||
|
||||
For more information about this project visit
|
||||
<a
|
||||
href="http://libusbjava.sourceforge.net">http://libusbjava.sourceforge.net</a>
|
||||
.
|
||||
|
||||
</body>
|
||||
</html>
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
|
||||
<html>
|
||||
<head></head>
|
||||
<body bgcolor="white">
|
||||
|
||||
Includes the main classes for the Java libusb wrapper.
|
||||
<br>
|
||||
<i>LibusbJava.java</i>
|
||||
is the JNI class to the
|
||||
<i>LibusbJava.dll</i>
|
||||
. Every class starting with
|
||||
<i>Usb_</i>
|
||||
represents a descriptor of the bus structure which is retrieved by
|
||||
calling
|
||||
<i>LibusbJava.usb_get_busses()</i>
|
||||
.
|
||||
|
||||
<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,211 +1,211 @@
|
||||
/*
|
||||
* Java libusb wrapper
|
||||
* Copyright (c) 2005-2006 Andreas Schlä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.inf.libusbJava.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;
|
||||
}
|
||||
}
|
||||
/*
|
||||
* Java libusb wrapper
|
||||
* Copyright (c) 2005-2006 Andreas Schlä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.inf.libusbJava.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;
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,191 +1,191 @@
|
||||
/*
|
||||
* Java libusb wrapper
|
||||
* Copyright (c) 2005-2006 Andreas Schlä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.inf.libusbJava.testApp;
|
||||
|
||||
import java.util.Vector;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import ch.ntb.inf.libusbJava.Device;
|
||||
import ch.ntb.inf.libusbJava.USB;
|
||||
import ch.ntb.inf.libusbJava.USBException;
|
||||
import ch.ntb.inf.libusbJava.logger.LogUtil;
|
||||
|
||||
public class TestDevice extends AbstractDeviceInfo {
|
||||
|
||||
private static final Logger logger = LogUtil.getLogger("ch.ntb.inf.libusbJava.test");
|
||||
|
||||
private String sendData = "0x5b 0x02 0x01 0x00 0x03 0x03 0xf0 0xf0 0x1f";
|
||||
|
||||
private 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) 0x0200);
|
||||
setTimeout(2000);
|
||||
setConfiguration(1);
|
||||
setInterface(0);
|
||||
setAltinterface(-1);
|
||||
setOutEPBulk(0x01);
|
||||
setInEPBulk(0x82);
|
||||
setOutEPInt(0x01);
|
||||
setInEPInt(0x82);
|
||||
setSleepTimeout(2000);
|
||||
setMaxDataSize(USB.FULLSPEED_MAX_BULK_PACKET_SIZE);
|
||||
setMode(TransferMode.Bulk);
|
||||
}
|
||||
|
||||
public void openUsbDevice() {
|
||||
dev = USB.getDevice(getIdVendor(), getIdProduct());
|
||||
try {
|
||||
dev.open(getConfiguration(), getInterface(), getAltinterface());
|
||||
logger.info("device opened, interface claimed");
|
||||
} catch (USBException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
public void 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;
|
||||
}
|
||||
}
|
||||
/*
|
||||
* Java libusb wrapper
|
||||
* Copyright (c) 2005-2006 Andreas Schlä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.inf.libusbJava.testApp;
|
||||
|
||||
import java.util.Vector;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import ch.ntb.inf.libusbJava.Device;
|
||||
import ch.ntb.inf.libusbJava.USB;
|
||||
import ch.ntb.inf.libusbJava.USBException;
|
||||
import ch.ntb.inf.libusbJava.logger.LogUtil;
|
||||
|
||||
public class TestDevice extends AbstractDeviceInfo {
|
||||
|
||||
private static final Logger logger = LogUtil.getLogger("ch.ntb.inf.libusbJava.test");
|
||||
|
||||
private String sendData = "0x5b 0x02 0x01 0x00 0x03 0x03 0xf0 0xf0 0x1f";
|
||||
|
||||
private 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) 0x0200);
|
||||
setTimeout(2000);
|
||||
setConfiguration(1);
|
||||
setInterface(0);
|
||||
setAltinterface(-1);
|
||||
setOutEPBulk(0x01);
|
||||
setInEPBulk(0x82);
|
||||
setOutEPInt(0x01);
|
||||
setInEPInt(0x82);
|
||||
setSleepTimeout(2000);
|
||||
setMaxDataSize(USB.FULLSPEED_MAX_BULK_PACKET_SIZE);
|
||||
setMode(TransferMode.Bulk);
|
||||
}
|
||||
|
||||
public void openUsbDevice() {
|
||||
dev = USB.getDevice(getIdVendor(), getIdProduct());
|
||||
try {
|
||||
dev.open(getConfiguration(), getInterface(), getAltinterface());
|
||||
logger.info("device opened, interface claimed");
|
||||
} catch (USBException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
public void 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 +1,16 @@
|
||||
<!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>
|
||||
<!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>
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,403 +1,403 @@
|
||||
/*
|
||||
* Java libusb wrapper
|
||||
* Copyright (c) 2005-2006 Andreas Schlä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.inf.libusbJava.usbView;
|
||||
|
||||
import java.awt.BorderLayout;
|
||||
import java.awt.Component;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
import java.awt.event.KeyEvent;
|
||||
import java.awt.event.MouseAdapter;
|
||||
import java.awt.event.MouseEvent;
|
||||
|
||||
import javax.swing.JFrame;
|
||||
import javax.swing.JMenu;
|
||||
import javax.swing.JMenuBar;
|
||||
import javax.swing.JMenuItem;
|
||||
import javax.swing.JPanel;
|
||||
import javax.swing.JPopupMenu;
|
||||
import javax.swing.JScrollPane;
|
||||
import javax.swing.JSplitPane;
|
||||
import javax.swing.JTextArea;
|
||||
import javax.swing.JTree;
|
||||
import javax.swing.KeyStroke;
|
||||
import javax.swing.tree.TreePath;
|
||||
|
||||
import ch.ntb.inf.libusbJava.LibusbJava;
|
||||
import ch.ntb.inf.libusbJava.Usb_Bus;
|
||||
import ch.ntb.inf.libusbJava.Usb_Config_Descriptor;
|
||||
import ch.ntb.inf.libusbJava.Usb_Device;
|
||||
import ch.ntb.inf.libusbJava.Usb_Device_Descriptor;
|
||||
import ch.ntb.inf.libusbJava.Usb_Endpoint_Descriptor;
|
||||
import ch.ntb.inf.libusbJava.Usb_Interface_Descriptor;
|
||||
import ch.ntb.inf.libusbJava.testApp.TestApp;
|
||||
import ch.ntb.inf.libusbJava.testApp.TestDevice;
|
||||
import ch.ntb.inf.libusbJava.testApp.AbstractDeviceInfo.TransferMode;
|
||||
|
||||
public class UsbView extends JFrame {
|
||||
|
||||
private static final long serialVersionUID = 4693554326612734263L;
|
||||
|
||||
private static final int APP_WIDTH = 600, APP_HIGHT = 800;
|
||||
|
||||
private JPanel jContentPane = null;
|
||||
private JMenuBar jJMenuBar = null;
|
||||
private JMenu commandsMenu = null;
|
||||
private JMenuItem exitMenuItem = null;
|
||||
private JMenuItem updateMenuItem = null;
|
||||
JTree usbTree = null;
|
||||
private JSplitPane jSplitPane = null;
|
||||
|
||||
private JTextArea jPropertiesArea = null;
|
||||
|
||||
UsbTreeModel treeModel;
|
||||
|
||||
JPopupMenu testAppPopup;
|
||||
|
||||
protected JPopupMenu endpointPopup;
|
||||
|
||||
/**
|
||||
* This is the default constructor
|
||||
*/
|
||||
public UsbView() {
|
||||
super();
|
||||
initialize();
|
||||
}
|
||||
|
||||
/**
|
||||
* This method initializes this
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
private void initialize() {
|
||||
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
||||
this.setJMenuBar(getJJMenuBar());
|
||||
this.setSize(APP_WIDTH, APP_HIGHT);
|
||||
this.setContentPane(getJContentPane());
|
||||
this.setTitle("USB View");
|
||||
}
|
||||
|
||||
/**
|
||||
* This method initializes jContentPane
|
||||
*
|
||||
* @return javax.swing.JPanel
|
||||
*/
|
||||
private JPanel getJContentPane() {
|
||||
if (jContentPane == null) {
|
||||
jContentPane = new JPanel();
|
||||
jContentPane.setLayout(new BorderLayout());
|
||||
jContentPane.add(getJSplitPane(), java.awt.BorderLayout.CENTER);
|
||||
}
|
||||
return jContentPane;
|
||||
}
|
||||
|
||||
/**
|
||||
* This method initializes jJMenuBar
|
||||
*
|
||||
* @return javax.swing.JMenuBar
|
||||
*/
|
||||
private JMenuBar getJJMenuBar() {
|
||||
if (jJMenuBar == null) {
|
||||
jJMenuBar = new JMenuBar();
|
||||
jJMenuBar.add(getFileMenu());
|
||||
}
|
||||
return jJMenuBar;
|
||||
}
|
||||
|
||||
/**
|
||||
* This method initializes jMenu
|
||||
*
|
||||
* @return javax.swing.JMenu
|
||||
*/
|
||||
private JMenu getFileMenu() {
|
||||
if (commandsMenu == null) {
|
||||
commandsMenu = new JMenu();
|
||||
commandsMenu.setText("Commands");
|
||||
commandsMenu.add(getUpdateMenuItem());
|
||||
commandsMenu.add(getExitMenuItem());
|
||||
}
|
||||
return commandsMenu;
|
||||
}
|
||||
|
||||
/**
|
||||
* This method initializes jMenuItem
|
||||
*
|
||||
* @return javax.swing.JMenuItem
|
||||
*/
|
||||
private JMenuItem getExitMenuItem() {
|
||||
if (exitMenuItem == null) {
|
||||
exitMenuItem = new JMenuItem();
|
||||
exitMenuItem.setText("Exit");
|
||||
exitMenuItem.addActionListener(new ActionListener() {
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
System.exit(0);
|
||||
}
|
||||
});
|
||||
}
|
||||
return exitMenuItem;
|
||||
}
|
||||
|
||||
/**
|
||||
* This method initializes jMenuItem
|
||||
*
|
||||
* @return javax.swing.JMenuItem
|
||||
*/
|
||||
private JMenuItem getUpdateMenuItem() {
|
||||
if (updateMenuItem == null) {
|
||||
updateMenuItem = new JMenuItem();
|
||||
updateMenuItem.setText("Update");
|
||||
updateMenuItem.setAccelerator(KeyStroke.getKeyStroke(
|
||||
KeyEvent.VK_F5, 0, true));
|
||||
updateMenuItem
|
||||
.addActionListener(new java.awt.event.ActionListener() {
|
||||
public void actionPerformed(java.awt.event.ActionEvent e) {
|
||||
// open bus
|
||||
LibusbJava.usb_init();
|
||||
LibusbJava.usb_find_busses();
|
||||
LibusbJava.usb_find_devices();
|
||||
|
||||
Usb_Bus bus = LibusbJava.usb_get_busses();
|
||||
if (bus != null) {
|
||||
treeModel.fireTreeStructureChanged(bus);
|
||||
expandAll(usbTree);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
return updateMenuItem;
|
||||
}
|
||||
|
||||
/**
|
||||
* This method initializes usbTree
|
||||
*
|
||||
* @return javax.swing.JTree
|
||||
*/
|
||||
private JTree getUsbTree() {
|
||||
if (usbTree == null) {
|
||||
// open bus
|
||||
LibusbJava.usb_init();
|
||||
LibusbJava.usb_find_busses();
|
||||
LibusbJava.usb_find_devices();
|
||||
|
||||
Usb_Bus bus = LibusbJava.usb_get_busses();
|
||||
|
||||
treeModel = new UsbTreeModel(bus, jPropertiesArea);
|
||||
usbTree = new JTree(treeModel);
|
||||
expandAll(usbTree);
|
||||
usbTree.addTreeSelectionListener(treeModel);
|
||||
getJTestAppPopup();
|
||||
usbTree.addMouseListener(new MouseAdapter() {
|
||||
|
||||
@Override
|
||||
public void mousePressed(MouseEvent e) {
|
||||
if (e.isPopupTrigger()) {
|
||||
Object source = e.getSource();
|
||||
if (source instanceof JTree) {
|
||||
JTree tree = (JTree) source;
|
||||
TreePath path = tree.getPathForLocation(e.getX(), e
|
||||
.getY());
|
||||
if (path != null
|
||||
&& (path.getLastPathComponent() instanceof Usb_Interface_Descriptor)) {
|
||||
usbTree.setSelectionPath(path);
|
||||
testAppPopup.show(tree, e.getX(), e.getY());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mouseReleased(MouseEvent e) {
|
||||
if (e.isPopupTrigger()) {
|
||||
if (e.isPopupTrigger()) {
|
||||
Object source = e.getSource();
|
||||
if (source instanceof JTree) {
|
||||
JTree tree = (JTree) source;
|
||||
TreePath path = tree.getPathForLocation(e
|
||||
.getX(), e.getY());
|
||||
if (path != null
|
||||
&& (path.getLastPathComponent() instanceof Usb_Interface_Descriptor)) {
|
||||
usbTree.setSelectionPath(path);
|
||||
testAppPopup.show(tree, e.getX(), e.getY());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
return usbTree;
|
||||
}
|
||||
|
||||
private void getJTestAppPopup() {
|
||||
// Create the popup menu.
|
||||
testAppPopup = new JPopupMenu();
|
||||
endpointPopup = new JPopupMenu();
|
||||
JMenuItem menuItem = new JMenuItem(
|
||||
"Start a test application using this interface");
|
||||
menuItem.addActionListener(new java.awt.event.ActionListener() {
|
||||
public void actionPerformed(java.awt.event.ActionEvent e) {
|
||||
initAndStartTestApp();
|
||||
}
|
||||
|
||||
private void initAndStartTestApp() {
|
||||
JTree tree = (JTree) testAppPopup.getInvoker();
|
||||
TreePath path = tree.getSelectionPath();
|
||||
TreePath parent = path;
|
||||
Usb_Endpoint_Descriptor[] endpoints = null;
|
||||
int altinterface = -1;
|
||||
int interface_ = -1;
|
||||
int configuration = -1;
|
||||
short vendorId = -1;
|
||||
short productId = -1;
|
||||
while (parent != null
|
||||
&& !(parent.getLastPathComponent() instanceof Usb_Bus)) {
|
||||
Object usbObj = parent.getLastPathComponent();
|
||||
if (usbObj instanceof Usb_Interface_Descriptor) {
|
||||
Usb_Interface_Descriptor usbIntDesc = (Usb_Interface_Descriptor) usbObj;
|
||||
endpoints = usbIntDesc.getEndpoint();
|
||||
interface_ = usbIntDesc.getBInterfaceNumber();
|
||||
altinterface = usbIntDesc.getBAlternateSetting();
|
||||
} else if (usbObj instanceof Usb_Config_Descriptor) {
|
||||
configuration = ((Usb_Config_Descriptor) usbObj)
|
||||
.getBConfigurationValue();
|
||||
} else if (usbObj instanceof Usb_Device) {
|
||||
Usb_Device_Descriptor devDesc = ((Usb_Device) usbObj)
|
||||
.getDescriptor();
|
||||
productId = devDesc.getIdProduct();
|
||||
vendorId = devDesc.getIdVendor();
|
||||
}
|
||||
parent = parent.getParentPath();
|
||||
}
|
||||
if (parent != null) {
|
||||
// present a dialog to select in/out endpoint
|
||||
// TODO: present dialog to select in/out endpoint
|
||||
Usb_Endpoint_Descriptor[] outEPs = null;
|
||||
int nofOutEPs = 0;
|
||||
Usb_Endpoint_Descriptor[] inEPs = null;
|
||||
int nofInEPs = 0;
|
||||
|
||||
if (endpoints != null) {
|
||||
outEPs = new Usb_Endpoint_Descriptor[endpoints.length];
|
||||
inEPs = new Usb_Endpoint_Descriptor[endpoints.length];
|
||||
for (int i = 0; i < endpoints.length; i++) {
|
||||
int epAddr = endpoints[i].getBEndpointAddress() & 0xFF;
|
||||
if ((epAddr & 0x80) > 0) {
|
||||
// is IN endpoint
|
||||
inEPs[nofInEPs++] = endpoints[i];
|
||||
} else {
|
||||
// is OUT endpoint
|
||||
outEPs[nofOutEPs++] = endpoints[i];
|
||||
}
|
||||
}
|
||||
}
|
||||
// create a new TestDevice
|
||||
TestDevice testDevice = new TestDevice();
|
||||
testDevice.setIdProduct(productId);
|
||||
testDevice.setIdVendor(vendorId);
|
||||
testDevice.setAltinterface(altinterface);
|
||||
testDevice.setConfiguration(configuration);
|
||||
testDevice.setInterface(interface_);
|
||||
if (inEPs != null) {
|
||||
for (int i = 0; i < nofInEPs; i++) {
|
||||
int type = inEPs[i].getBmAttributes() & 0x03;
|
||||
switch (type) {
|
||||
case Usb_Endpoint_Descriptor.USB_ENDPOINT_TRANSFER_TYPE_BULK:
|
||||
testDevice.setInEPBulk(inEPs[i]
|
||||
.getBEndpointAddress() & 0xff);
|
||||
testDevice.setInMode(TransferMode.Bulk);
|
||||
break;
|
||||
case Usb_Endpoint_Descriptor.USB_ENDPOINT_TRANSFER_TYPE_INTERRUPT:
|
||||
testDevice.setInEPInt(inEPs[i]
|
||||
.getBEndpointAddress() & 0xff);
|
||||
testDevice.setInMode(TransferMode.Interrupt);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (outEPs != null) {
|
||||
for (int i = 0; i < nofOutEPs; i++) {
|
||||
int type = outEPs[i].getBmAttributes() & 0x03;
|
||||
switch (type) {
|
||||
case Usb_Endpoint_Descriptor.USB_ENDPOINT_TRANSFER_TYPE_BULK:
|
||||
testDevice.setOutEPBulk(outEPs[i]
|
||||
.getBEndpointAddress() & 0xff);
|
||||
testDevice.setOutMode(TransferMode.Bulk);
|
||||
break;
|
||||
case Usb_Endpoint_Descriptor.USB_ENDPOINT_TRANSFER_TYPE_INTERRUPT:
|
||||
testDevice.setOutEPInt(outEPs[i]
|
||||
.getBEndpointAddress() & 0xff);
|
||||
testDevice.setOutMode(TransferMode.Interrupt);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
// open a new testApp
|
||||
TestApp app = new TestApp(testDevice);
|
||||
app.setVisible(true);
|
||||
} else {
|
||||
System.out.println("error, could not find device node");
|
||||
// TODO: handle error
|
||||
}
|
||||
}
|
||||
});
|
||||
testAppPopup.add(menuItem);
|
||||
}
|
||||
|
||||
/**
|
||||
* This method initializes jSplitPane
|
||||
*
|
||||
* @return javax.swing.JSplitPane
|
||||
*/
|
||||
private JSplitPane getJSplitPane() {
|
||||
if (jSplitPane == null) {
|
||||
jSplitPane = new JSplitPane();
|
||||
jSplitPane.setOrientation(javax.swing.JSplitPane.VERTICAL_SPLIT);
|
||||
jSplitPane.setContinuousLayout(true);
|
||||
jSplitPane.setDividerLocation(APP_HIGHT / 2);
|
||||
jSplitPane
|
||||
.setBottomComponent(createScrollPane(getJPropertiesArea()));
|
||||
jSplitPane.setTopComponent(createScrollPane(getUsbTree()));
|
||||
}
|
||||
return jSplitPane;
|
||||
}
|
||||
|
||||
/**
|
||||
* This method initializes jPropertiesArea
|
||||
*
|
||||
* @return javax.swing.JTextArea
|
||||
*/
|
||||
private JTextArea getJPropertiesArea() {
|
||||
if (jPropertiesArea == null) {
|
||||
jPropertiesArea = new JTextArea();
|
||||
}
|
||||
return jPropertiesArea;
|
||||
}
|
||||
|
||||
private JScrollPane createScrollPane(Component view) {
|
||||
JScrollPane scrollPane = new JScrollPane(view);
|
||||
return scrollPane;
|
||||
}
|
||||
|
||||
/**
|
||||
* Launches this application
|
||||
*/
|
||||
public static void main(String[] args) {
|
||||
UsbView application = new UsbView();
|
||||
application.setVisible(true);
|
||||
}
|
||||
|
||||
void expandAll(JTree tree) {
|
||||
for (int row = 0; row < tree.getRowCount(); row++) {
|
||||
tree.expandRow(row);
|
||||
}
|
||||
}
|
||||
}
|
||||
/*
|
||||
* Java libusb wrapper
|
||||
* Copyright (c) 2005-2006 Andreas Schlä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.inf.libusbJava.usbView;
|
||||
|
||||
import java.awt.BorderLayout;
|
||||
import java.awt.Component;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
import java.awt.event.KeyEvent;
|
||||
import java.awt.event.MouseAdapter;
|
||||
import java.awt.event.MouseEvent;
|
||||
|
||||
import javax.swing.JFrame;
|
||||
import javax.swing.JMenu;
|
||||
import javax.swing.JMenuBar;
|
||||
import javax.swing.JMenuItem;
|
||||
import javax.swing.JPanel;
|
||||
import javax.swing.JPopupMenu;
|
||||
import javax.swing.JScrollPane;
|
||||
import javax.swing.JSplitPane;
|
||||
import javax.swing.JTextArea;
|
||||
import javax.swing.JTree;
|
||||
import javax.swing.KeyStroke;
|
||||
import javax.swing.tree.TreePath;
|
||||
|
||||
import ch.ntb.inf.libusbJava.LibusbJava;
|
||||
import ch.ntb.inf.libusbJava.Usb_Bus;
|
||||
import ch.ntb.inf.libusbJava.Usb_Config_Descriptor;
|
||||
import ch.ntb.inf.libusbJava.Usb_Device;
|
||||
import ch.ntb.inf.libusbJava.Usb_Device_Descriptor;
|
||||
import ch.ntb.inf.libusbJava.Usb_Endpoint_Descriptor;
|
||||
import ch.ntb.inf.libusbJava.Usb_Interface_Descriptor;
|
||||
import ch.ntb.inf.libusbJava.testApp.TestApp;
|
||||
import ch.ntb.inf.libusbJava.testApp.TestDevice;
|
||||
import ch.ntb.inf.libusbJava.testApp.AbstractDeviceInfo.TransferMode;
|
||||
|
||||
public class UsbView extends JFrame {
|
||||
|
||||
private static final long serialVersionUID = 4693554326612734263L;
|
||||
|
||||
private static final int APP_WIDTH = 600, APP_HIGHT = 800;
|
||||
|
||||
private JPanel jContentPane = null;
|
||||
private JMenuBar jJMenuBar = null;
|
||||
private JMenu commandsMenu = null;
|
||||
private JMenuItem exitMenuItem = null;
|
||||
private JMenuItem updateMenuItem = null;
|
||||
JTree usbTree = null;
|
||||
private JSplitPane jSplitPane = null;
|
||||
|
||||
private JTextArea jPropertiesArea = null;
|
||||
|
||||
UsbTreeModel treeModel;
|
||||
|
||||
JPopupMenu testAppPopup;
|
||||
|
||||
protected JPopupMenu endpointPopup;
|
||||
|
||||
/**
|
||||
* This is the default constructor
|
||||
*/
|
||||
public UsbView() {
|
||||
super();
|
||||
initialize();
|
||||
}
|
||||
|
||||
/**
|
||||
* This method initializes this
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
private void initialize() {
|
||||
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
||||
this.setJMenuBar(getJJMenuBar());
|
||||
this.setSize(APP_WIDTH, APP_HIGHT);
|
||||
this.setContentPane(getJContentPane());
|
||||
this.setTitle("USB View");
|
||||
}
|
||||
|
||||
/**
|
||||
* This method initializes jContentPane
|
||||
*
|
||||
* @return javax.swing.JPanel
|
||||
*/
|
||||
private JPanel getJContentPane() {
|
||||
if (jContentPane == null) {
|
||||
jContentPane = new JPanel();
|
||||
jContentPane.setLayout(new BorderLayout());
|
||||
jContentPane.add(getJSplitPane(), java.awt.BorderLayout.CENTER);
|
||||
}
|
||||
return jContentPane;
|
||||
}
|
||||
|
||||
/**
|
||||
* This method initializes jJMenuBar
|
||||
*
|
||||
* @return javax.swing.JMenuBar
|
||||
*/
|
||||
private JMenuBar getJJMenuBar() {
|
||||
if (jJMenuBar == null) {
|
||||
jJMenuBar = new JMenuBar();
|
||||
jJMenuBar.add(getFileMenu());
|
||||
}
|
||||
return jJMenuBar;
|
||||
}
|
||||
|
||||
/**
|
||||
* This method initializes jMenu
|
||||
*
|
||||
* @return javax.swing.JMenu
|
||||
*/
|
||||
private JMenu getFileMenu() {
|
||||
if (commandsMenu == null) {
|
||||
commandsMenu = new JMenu();
|
||||
commandsMenu.setText("Commands");
|
||||
commandsMenu.add(getUpdateMenuItem());
|
||||
commandsMenu.add(getExitMenuItem());
|
||||
}
|
||||
return commandsMenu;
|
||||
}
|
||||
|
||||
/**
|
||||
* This method initializes jMenuItem
|
||||
*
|
||||
* @return javax.swing.JMenuItem
|
||||
*/
|
||||
private JMenuItem getExitMenuItem() {
|
||||
if (exitMenuItem == null) {
|
||||
exitMenuItem = new JMenuItem();
|
||||
exitMenuItem.setText("Exit");
|
||||
exitMenuItem.addActionListener(new ActionListener() {
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
System.exit(0);
|
||||
}
|
||||
});
|
||||
}
|
||||
return exitMenuItem;
|
||||
}
|
||||
|
||||
/**
|
||||
* This method initializes jMenuItem
|
||||
*
|
||||
* @return javax.swing.JMenuItem
|
||||
*/
|
||||
private JMenuItem getUpdateMenuItem() {
|
||||
if (updateMenuItem == null) {
|
||||
updateMenuItem = new JMenuItem();
|
||||
updateMenuItem.setText("Update");
|
||||
updateMenuItem.setAccelerator(KeyStroke.getKeyStroke(
|
||||
KeyEvent.VK_F5, 0, true));
|
||||
updateMenuItem
|
||||
.addActionListener(new java.awt.event.ActionListener() {
|
||||
public void actionPerformed(java.awt.event.ActionEvent e) {
|
||||
// open bus
|
||||
LibusbJava.usb_init();
|
||||
LibusbJava.usb_find_busses();
|
||||
LibusbJava.usb_find_devices();
|
||||
|
||||
Usb_Bus bus = LibusbJava.usb_get_busses();
|
||||
if (bus != null) {
|
||||
treeModel.fireTreeStructureChanged(bus);
|
||||
expandAll(usbTree);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
return updateMenuItem;
|
||||
}
|
||||
|
||||
/**
|
||||
* This method initializes usbTree
|
||||
*
|
||||
* @return javax.swing.JTree
|
||||
*/
|
||||
private JTree getUsbTree() {
|
||||
if (usbTree == null) {
|
||||
// open bus
|
||||
LibusbJava.usb_init();
|
||||
LibusbJava.usb_find_busses();
|
||||
LibusbJava.usb_find_devices();
|
||||
|
||||
Usb_Bus bus = LibusbJava.usb_get_busses();
|
||||
|
||||
treeModel = new UsbTreeModel(bus, jPropertiesArea);
|
||||
usbTree = new JTree(treeModel);
|
||||
expandAll(usbTree);
|
||||
usbTree.addTreeSelectionListener(treeModel);
|
||||
getJTestAppPopup();
|
||||
usbTree.addMouseListener(new MouseAdapter() {
|
||||
|
||||
@Override
|
||||
public void mousePressed(MouseEvent e) {
|
||||
if (e.isPopupTrigger()) {
|
||||
Object source = e.getSource();
|
||||
if (source instanceof JTree) {
|
||||
JTree tree = (JTree) source;
|
||||
TreePath path = tree.getPathForLocation(e.getX(), e
|
||||
.getY());
|
||||
if (path != null
|
||||
&& (path.getLastPathComponent() instanceof Usb_Interface_Descriptor)) {
|
||||
usbTree.setSelectionPath(path);
|
||||
testAppPopup.show(tree, e.getX(), e.getY());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mouseReleased(MouseEvent e) {
|
||||
if (e.isPopupTrigger()) {
|
||||
if (e.isPopupTrigger()) {
|
||||
Object source = e.getSource();
|
||||
if (source instanceof JTree) {
|
||||
JTree tree = (JTree) source;
|
||||
TreePath path = tree.getPathForLocation(e
|
||||
.getX(), e.getY());
|
||||
if (path != null
|
||||
&& (path.getLastPathComponent() instanceof Usb_Interface_Descriptor)) {
|
||||
usbTree.setSelectionPath(path);
|
||||
testAppPopup.show(tree, e.getX(), e.getY());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
return usbTree;
|
||||
}
|
||||
|
||||
private void getJTestAppPopup() {
|
||||
// Create the popup menu.
|
||||
testAppPopup = new JPopupMenu();
|
||||
endpointPopup = new JPopupMenu();
|
||||
JMenuItem menuItem = new JMenuItem(
|
||||
"Start a test application using this interface");
|
||||
menuItem.addActionListener(new java.awt.event.ActionListener() {
|
||||
public void actionPerformed(java.awt.event.ActionEvent e) {
|
||||
initAndStartTestApp();
|
||||
}
|
||||
|
||||
private void initAndStartTestApp() {
|
||||
JTree tree = (JTree) testAppPopup.getInvoker();
|
||||
TreePath path = tree.getSelectionPath();
|
||||
TreePath parent = path;
|
||||
Usb_Endpoint_Descriptor[] endpoints = null;
|
||||
int altinterface = -1;
|
||||
int interface_ = -1;
|
||||
int configuration = -1;
|
||||
short vendorId = -1;
|
||||
short productId = -1;
|
||||
while (parent != null
|
||||
&& !(parent.getLastPathComponent() instanceof Usb_Bus)) {
|
||||
Object usbObj = parent.getLastPathComponent();
|
||||
if (usbObj instanceof Usb_Interface_Descriptor) {
|
||||
Usb_Interface_Descriptor usbIntDesc = (Usb_Interface_Descriptor) usbObj;
|
||||
endpoints = usbIntDesc.getEndpoint();
|
||||
interface_ = usbIntDesc.getBInterfaceNumber();
|
||||
altinterface = usbIntDesc.getBAlternateSetting();
|
||||
} else if (usbObj instanceof Usb_Config_Descriptor) {
|
||||
configuration = ((Usb_Config_Descriptor) usbObj)
|
||||
.getBConfigurationValue();
|
||||
} else if (usbObj instanceof Usb_Device) {
|
||||
Usb_Device_Descriptor devDesc = ((Usb_Device) usbObj)
|
||||
.getDescriptor();
|
||||
productId = devDesc.getIdProduct();
|
||||
vendorId = devDesc.getIdVendor();
|
||||
}
|
||||
parent = parent.getParentPath();
|
||||
}
|
||||
if (parent != null) {
|
||||
// present a dialog to select in/out endpoint
|
||||
// TODO: present dialog to select in/out endpoint
|
||||
Usb_Endpoint_Descriptor[] outEPs = null;
|
||||
int nofOutEPs = 0;
|
||||
Usb_Endpoint_Descriptor[] inEPs = null;
|
||||
int nofInEPs = 0;
|
||||
|
||||
if (endpoints != null) {
|
||||
outEPs = new Usb_Endpoint_Descriptor[endpoints.length];
|
||||
inEPs = new Usb_Endpoint_Descriptor[endpoints.length];
|
||||
for (int i = 0; i < endpoints.length; i++) {
|
||||
int epAddr = endpoints[i].getBEndpointAddress() & 0xFF;
|
||||
if ((epAddr & 0x80) > 0) {
|
||||
// is IN endpoint
|
||||
inEPs[nofInEPs++] = endpoints[i];
|
||||
} else {
|
||||
// is OUT endpoint
|
||||
outEPs[nofOutEPs++] = endpoints[i];
|
||||
}
|
||||
}
|
||||
}
|
||||
// create a new TestDevice
|
||||
TestDevice testDevice = new TestDevice();
|
||||
testDevice.setIdProduct(productId);
|
||||
testDevice.setIdVendor(vendorId);
|
||||
testDevice.setAltinterface(altinterface);
|
||||
testDevice.setConfiguration(configuration);
|
||||
testDevice.setInterface(interface_);
|
||||
if (inEPs != null) {
|
||||
for (int i = 0; i < nofInEPs; i++) {
|
||||
int type = inEPs[i].getBmAttributes() & 0x03;
|
||||
switch (type) {
|
||||
case Usb_Endpoint_Descriptor.USB_ENDPOINT_TRANSFER_TYPE_BULK:
|
||||
testDevice.setInEPBulk(inEPs[i]
|
||||
.getBEndpointAddress() & 0xff);
|
||||
testDevice.setInMode(TransferMode.Bulk);
|
||||
break;
|
||||
case Usb_Endpoint_Descriptor.USB_ENDPOINT_TRANSFER_TYPE_INTERRUPT:
|
||||
testDevice.setInEPInt(inEPs[i]
|
||||
.getBEndpointAddress() & 0xff);
|
||||
testDevice.setInMode(TransferMode.Interrupt);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (outEPs != null) {
|
||||
for (int i = 0; i < nofOutEPs; i++) {
|
||||
int type = outEPs[i].getBmAttributes() & 0x03;
|
||||
switch (type) {
|
||||
case Usb_Endpoint_Descriptor.USB_ENDPOINT_TRANSFER_TYPE_BULK:
|
||||
testDevice.setOutEPBulk(outEPs[i]
|
||||
.getBEndpointAddress() & 0xff);
|
||||
testDevice.setOutMode(TransferMode.Bulk);
|
||||
break;
|
||||
case Usb_Endpoint_Descriptor.USB_ENDPOINT_TRANSFER_TYPE_INTERRUPT:
|
||||
testDevice.setOutEPInt(outEPs[i]
|
||||
.getBEndpointAddress() & 0xff);
|
||||
testDevice.setOutMode(TransferMode.Interrupt);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
// open a new testApp
|
||||
TestApp app = new TestApp(testDevice);
|
||||
app.setVisible(true);
|
||||
} else {
|
||||
System.out.println("error, could not find device node");
|
||||
// TODO: handle error
|
||||
}
|
||||
}
|
||||
});
|
||||
testAppPopup.add(menuItem);
|
||||
}
|
||||
|
||||
/**
|
||||
* This method initializes jSplitPane
|
||||
*
|
||||
* @return javax.swing.JSplitPane
|
||||
*/
|
||||
private JSplitPane getJSplitPane() {
|
||||
if (jSplitPane == null) {
|
||||
jSplitPane = new JSplitPane();
|
||||
jSplitPane.setOrientation(javax.swing.JSplitPane.VERTICAL_SPLIT);
|
||||
jSplitPane.setContinuousLayout(true);
|
||||
jSplitPane.setDividerLocation(APP_HIGHT / 2);
|
||||
jSplitPane
|
||||
.setBottomComponent(createScrollPane(getJPropertiesArea()));
|
||||
jSplitPane.setTopComponent(createScrollPane(getUsbTree()));
|
||||
}
|
||||
return jSplitPane;
|
||||
}
|
||||
|
||||
/**
|
||||
* This method initializes jPropertiesArea
|
||||
*
|
||||
* @return javax.swing.JTextArea
|
||||
*/
|
||||
private JTextArea getJPropertiesArea() {
|
||||
if (jPropertiesArea == null) {
|
||||
jPropertiesArea = new JTextArea();
|
||||
}
|
||||
return jPropertiesArea;
|
||||
}
|
||||
|
||||
private JScrollPane createScrollPane(Component view) {
|
||||
JScrollPane scrollPane = new JScrollPane(view);
|
||||
return scrollPane;
|
||||
}
|
||||
|
||||
/**
|
||||
* Launches this application
|
||||
*/
|
||||
public static void main(String[] args) {
|
||||
UsbView application = new UsbView();
|
||||
application.setVisible(true);
|
||||
}
|
||||
|
||||
void expandAll(JTree tree) {
|
||||
for (int row = 0; row < tree.getRowCount(); row++) {
|
||||
tree.expandRow(row);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,17 +1,17 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
|
||||
<html>
|
||||
<head></head>
|
||||
<body bgcolor="white">
|
||||
|
||||
Displays the bus and device information of the currently attached
|
||||
devices in a tree (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>
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
|
||||
<html>
|
||||
<head></head>
|
||||
<body bgcolor="white">
|
||||
|
||||
Displays the bus and device information of the currently attached
|
||||
devices in a tree (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>
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,334 +1,334 @@
|
||||
package ch.ntb.inf.libusbJava.test;
|
||||
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
import static org.junit.Assert.assertNull;
|
||||
import static org.junit.Assert.fail;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
import ch.ntb.inf.libusbJava.LibusbJava1;
|
||||
import ch.ntb.inf.libusbJava.Usb_Device;
|
||||
import ch.ntb.inf.libusbJava.exceptions.LibusbError;
|
||||
|
||||
public class LibusbJava1Test {
|
||||
/**
|
||||
* This method does not need to be tested. This test only exists to document
|
||||
* the fact that this function has not been forgotten.
|
||||
*/
|
||||
@Test
|
||||
public void testLibusb_set_debug() {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_init() {
|
||||
try {
|
||||
long handle = LibusbJava1.libusb_init();
|
||||
LibusbJava1.libusb_exit(handle);
|
||||
} catch (LibusbError e) {
|
||||
fail("Initialization failed, Code: " + e.getErrorString());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* This method can not be tested (yet). This test only exists to document
|
||||
* the fact that this function has not been forgotten.
|
||||
*/
|
||||
@Test
|
||||
public void testLibusb_exit() {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_get_device_list() throws LibusbError {
|
||||
long handle = LibusbJava1.libusb_init();
|
||||
Usb_Device devices = LibusbJava1.libusb_get_device_list(handle);
|
||||
assertNotNull("Got devices", devices);
|
||||
System.out.println(devices.toString());
|
||||
assertNull("Bus is null", devices.getBus());
|
||||
LibusbJava1.libusb_exit(handle);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_get_bus_number() throws LibusbError {
|
||||
long handle = LibusbJava1.libusb_init();
|
||||
Usb_Device devices = LibusbJava1.libusb_get_device_list(handle);
|
||||
assertNotNull("Got devices", devices);
|
||||
System.out.println(devices.getBus());
|
||||
LibusbJava1.libusb_exit(handle);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_get_max_iso_packet_size() {
|
||||
fail("Not yet implemented");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_ref_device() {
|
||||
fail("Not yet implemented");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_unref_device() {
|
||||
fail("Not yet implemented");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_open() {
|
||||
fail("Not yet implemented");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_open_device_with_vid_pid() {
|
||||
fail("Not yet implemented");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_close() {
|
||||
fail("Not yet implemented");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_get_device() {
|
||||
fail("Not yet implemented");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_get_configuration() {
|
||||
fail("Not yet implemented");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_set_configuration() {
|
||||
fail("Not yet implemented");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_claim_interface() {
|
||||
fail("Not yet implemented");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_release_interface() {
|
||||
fail("Not yet implemented");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_set_interface_alt_setting() {
|
||||
fail("Not yet implemented");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_clear_halt() {
|
||||
fail("Not yet implemented");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_reset_device() {
|
||||
fail("Not yet implemented");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_kernel_driver_active() {
|
||||
fail("Not yet implemented");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_detach_kernel_driver() {
|
||||
fail("Not yet implemented");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_attach_kernel_driver() {
|
||||
fail("Not yet implemented");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_get_active_config_descriptor() {
|
||||
fail("Not yet implemented");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_get_string_descriptor_ascii() {
|
||||
fail("Not yet implemented");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_get_descriptor() {
|
||||
fail("Not yet implemented");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_get_string_descriptor() {
|
||||
fail("Not yet implemented");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_alloc_transfer() {
|
||||
fail("Not yet implemented");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_free_transfer() {
|
||||
fail("Not yet implemented");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_submit_transfer() {
|
||||
fail("Not yet implemented");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_cancel_transfer() {
|
||||
fail("Not yet implemented");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_control_transfer_get_data() {
|
||||
fail("Not yet implemented");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_control_transfer_get_setup() {
|
||||
fail("Not yet implemented");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_fill_control_setup() {
|
||||
fail("Not yet implemented");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_fill_control_transfer() {
|
||||
fail("Not yet implemented");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_fill_bulk_transfer() {
|
||||
fail("Not yet implemented");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_fill_interrupt_transfer() {
|
||||
fail("Not yet implemented");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_fill_iso_transfer() {
|
||||
fail("Not yet implemented");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_set_iso_packet_lengths() {
|
||||
fail("Not yet implemented");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_get_iso_packet_buffer() {
|
||||
fail("Not yet implemented");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_get_iso_packet_buffer_simple() {
|
||||
fail("Not yet implemented");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_try_lock_events() {
|
||||
fail("Not yet implemented");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_lock_events() {
|
||||
fail("Not yet implemented");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_unlock_events() {
|
||||
fail("Not yet implemented");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_event_handling_ok() {
|
||||
fail("Not yet implemented");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_event_handler_active() {
|
||||
fail("Not yet implemented");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_lock_event_waiters() {
|
||||
fail("Not yet implemented");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_unlock_event_waiters() {
|
||||
fail("Not yet implemented");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_wait_for_event() {
|
||||
fail("Not yet implemented");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_handle_events_timeout() {
|
||||
fail("Not yet implemented");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_handle_events() {
|
||||
fail("Not yet implemented");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_handle_events_locked() {
|
||||
fail("Not yet implemented");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_pollfds_handle_timeouts() {
|
||||
fail("Not yet implemented");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_get_next_timeout() {
|
||||
fail("Not yet implemented");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_set_pollfd_notifiers() {
|
||||
fail("Not yet implemented");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_get_pollfds() {
|
||||
fail("Not yet implemented");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_control_transfer() {
|
||||
fail("Not yet implemented");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_bulk_transfer() {
|
||||
fail("Not yet implemented");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_interrupt_transfer() {
|
||||
fail("Not yet implemented");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_strerror() {
|
||||
fail("Not yet implemented");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testIsHandleValid() {
|
||||
fail("Not yet implemented");
|
||||
}
|
||||
|
||||
}
|
||||
package ch.ntb.inf.libusbJava.test;
|
||||
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
import static org.junit.Assert.assertNull;
|
||||
import static org.junit.Assert.fail;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
import ch.ntb.inf.libusbJava.LibusbJava1;
|
||||
import ch.ntb.inf.libusbJava.Usb_Device;
|
||||
import ch.ntb.inf.libusbJava.exceptions.LibusbError;
|
||||
|
||||
public class LibusbJava1Test {
|
||||
/**
|
||||
* This method does not need to be tested. This test only exists to document
|
||||
* the fact that this function has not been forgotten.
|
||||
*/
|
||||
@Test
|
||||
public void testLibusb_set_debug() {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_init() {
|
||||
try {
|
||||
long handle = LibusbJava1.libusb_init();
|
||||
LibusbJava1.libusb_exit(handle);
|
||||
} catch (LibusbError e) {
|
||||
fail("Initialization failed, Code: " + e.getErrorString());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* This method can not be tested (yet). This test only exists to document
|
||||
* the fact that this function has not been forgotten.
|
||||
*/
|
||||
@Test
|
||||
public void testLibusb_exit() {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_get_device_list() throws LibusbError {
|
||||
long handle = LibusbJava1.libusb_init();
|
||||
Usb_Device devices = LibusbJava1.libusb_get_device_list(handle);
|
||||
assertNotNull("Got devices", devices);
|
||||
System.out.println(devices.toString());
|
||||
assertNull("Bus is null", devices.getBus());
|
||||
LibusbJava1.libusb_exit(handle);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_get_bus_number() throws LibusbError {
|
||||
long handle = LibusbJava1.libusb_init();
|
||||
Usb_Device devices = LibusbJava1.libusb_get_device_list(handle);
|
||||
assertNotNull("Got devices", devices);
|
||||
System.out.println(devices.getBus());
|
||||
LibusbJava1.libusb_exit(handle);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_get_max_iso_packet_size() {
|
||||
fail("Not yet implemented");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_ref_device() {
|
||||
fail("Not yet implemented");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_unref_device() {
|
||||
fail("Not yet implemented");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_open() {
|
||||
fail("Not yet implemented");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_open_device_with_vid_pid() {
|
||||
fail("Not yet implemented");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_close() {
|
||||
fail("Not yet implemented");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_get_device() {
|
||||
fail("Not yet implemented");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_get_configuration() {
|
||||
fail("Not yet implemented");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_set_configuration() {
|
||||
fail("Not yet implemented");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_claim_interface() {
|
||||
fail("Not yet implemented");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_release_interface() {
|
||||
fail("Not yet implemented");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_set_interface_alt_setting() {
|
||||
fail("Not yet implemented");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_clear_halt() {
|
||||
fail("Not yet implemented");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_reset_device() {
|
||||
fail("Not yet implemented");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_kernel_driver_active() {
|
||||
fail("Not yet implemented");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_detach_kernel_driver() {
|
||||
fail("Not yet implemented");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_attach_kernel_driver() {
|
||||
fail("Not yet implemented");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_get_active_config_descriptor() {
|
||||
fail("Not yet implemented");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_get_string_descriptor_ascii() {
|
||||
fail("Not yet implemented");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_get_descriptor() {
|
||||
fail("Not yet implemented");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_get_string_descriptor() {
|
||||
fail("Not yet implemented");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_alloc_transfer() {
|
||||
fail("Not yet implemented");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_free_transfer() {
|
||||
fail("Not yet implemented");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_submit_transfer() {
|
||||
fail("Not yet implemented");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_cancel_transfer() {
|
||||
fail("Not yet implemented");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_control_transfer_get_data() {
|
||||
fail("Not yet implemented");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_control_transfer_get_setup() {
|
||||
fail("Not yet implemented");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_fill_control_setup() {
|
||||
fail("Not yet implemented");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_fill_control_transfer() {
|
||||
fail("Not yet implemented");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_fill_bulk_transfer() {
|
||||
fail("Not yet implemented");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_fill_interrupt_transfer() {
|
||||
fail("Not yet implemented");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_fill_iso_transfer() {
|
||||
fail("Not yet implemented");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_set_iso_packet_lengths() {
|
||||
fail("Not yet implemented");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_get_iso_packet_buffer() {
|
||||
fail("Not yet implemented");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_get_iso_packet_buffer_simple() {
|
||||
fail("Not yet implemented");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_try_lock_events() {
|
||||
fail("Not yet implemented");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_lock_events() {
|
||||
fail("Not yet implemented");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_unlock_events() {
|
||||
fail("Not yet implemented");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_event_handling_ok() {
|
||||
fail("Not yet implemented");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_event_handler_active() {
|
||||
fail("Not yet implemented");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_lock_event_waiters() {
|
||||
fail("Not yet implemented");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_unlock_event_waiters() {
|
||||
fail("Not yet implemented");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_wait_for_event() {
|
||||
fail("Not yet implemented");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_handle_events_timeout() {
|
||||
fail("Not yet implemented");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_handle_events() {
|
||||
fail("Not yet implemented");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_handle_events_locked() {
|
||||
fail("Not yet implemented");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_pollfds_handle_timeouts() {
|
||||
fail("Not yet implemented");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_get_next_timeout() {
|
||||
fail("Not yet implemented");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_set_pollfd_notifiers() {
|
||||
fail("Not yet implemented");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_get_pollfds() {
|
||||
fail("Not yet implemented");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_control_transfer() {
|
||||
fail("Not yet implemented");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_bulk_transfer() {
|
||||
fail("Not yet implemented");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_interrupt_transfer() {
|
||||
fail("Not yet implemented");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLibusb_strerror() {
|
||||
fail("Not yet implemented");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testIsHandleValid() {
|
||||
fail("Not yet implemented");
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,199 +1,199 @@
|
||||
/*
|
||||
* Java libusb wrapper
|
||||
* Copyright (c) 2005-2008 Andreas Schlä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.inf.libusbJava.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.inf.libusbJava.Device;
|
||||
import ch.ntb.inf.libusbJava.LibusbJava;
|
||||
import ch.ntb.inf.libusbJava.USB;
|
||||
import ch.ntb.inf.libusbJava.USBException;
|
||||
import ch.ntb.inf.libusbJava.Usb_Bus;
|
||||
import ch.ntb.inf.libusbJava.Utils;
|
||||
import ch.ntb.inf.libusbJava.testApp.AbstractDeviceInfo;
|
||||
import ch.ntb.inf.libusbJava.testApp.AbstractDeviceInfo.TransferMode;
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
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
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
/*
|
||||
* Java libusb wrapper
|
||||
* Copyright (c) 2005-2008 Andreas Schlä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.inf.libusbJava.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.inf.libusbJava.Device;
|
||||
import ch.ntb.inf.libusbJava.LibusbJava;
|
||||
import ch.ntb.inf.libusbJava.USB;
|
||||
import ch.ntb.inf.libusbJava.USBException;
|
||||
import ch.ntb.inf.libusbJava.Usb_Bus;
|
||||
import ch.ntb.inf.libusbJava.Utils;
|
||||
import ch.ntb.inf.libusbJava.testApp.AbstractDeviceInfo;
|
||||
import ch.ntb.inf.libusbJava.testApp.AbstractDeviceInfo.TransferMode;
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
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
|
||||
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,239 +1,239 @@
|
||||
/*
|
||||
* Java libusb wrapper
|
||||
* Copyright (c) 2005-2007 Andreas Schlä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.inf.libusbJava.test;
|
||||
|
||||
import ch.ntb.inf.libusbJava.LibusbJava;
|
||||
import ch.ntb.inf.libusbJava.Usb_Bus;
|
||||
import ch.ntb.inf.libusbJava.Usb_Config_Descriptor;
|
||||
import ch.ntb.inf.libusbJava.Usb_Device;
|
||||
import ch.ntb.inf.libusbJava.Usb_Endpoint_Descriptor;
|
||||
import ch.ntb.inf.libusbJava.Usb_Interface;
|
||||
import ch.ntb.inf.libusbJava.Usb_Interface_Descriptor;
|
||||
|
||||
/**
|
||||
* This class replicates the code from testlibusb.c supplied in the
|
||||
* libusb-0.1.12 release.
|
||||
*/
|
||||
@SuppressWarnings("deprecation")
|
||||
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_init();
|
||||
LibusbJava.usb_set_debug(255);
|
||||
|
||||
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
|
||||
/*
|
||||
* Java libusb wrapper
|
||||
* Copyright (c) 2005-2007 Andreas Schlä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.inf.libusbJava.test;
|
||||
|
||||
import ch.ntb.inf.libusbJava.LibusbJava;
|
||||
import ch.ntb.inf.libusbJava.Usb_Bus;
|
||||
import ch.ntb.inf.libusbJava.Usb_Config_Descriptor;
|
||||
import ch.ntb.inf.libusbJava.Usb_Device;
|
||||
import ch.ntb.inf.libusbJava.Usb_Endpoint_Descriptor;
|
||||
import ch.ntb.inf.libusbJava.Usb_Interface;
|
||||
import ch.ntb.inf.libusbJava.Usb_Interface_Descriptor;
|
||||
|
||||
/**
|
||||
* This class replicates the code from testlibusb.c supplied in the
|
||||
* libusb-0.1.12 release.
|
||||
*/
|
||||
@SuppressWarnings("deprecation")
|
||||
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_init();
|
||||
LibusbJava.usb_set_debug(255);
|
||||
|
||||
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 +1,34 @@
|
||||
/*
|
||||
* Java libusb wrapper
|
||||
* Copyright (c) 2005-2006 Andreas Schlä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.inf.libusbJava.test.devices;
|
||||
|
||||
import ch.ntb.inf.libusbJava.USB;
|
||||
import ch.ntb.inf.libusbJava.testApp.AbstractDeviceInfo;
|
||||
|
||||
public class AT90USB1287 extends AbstractDeviceInfo {
|
||||
|
||||
@Override
|
||||
public void initValues() {
|
||||
setIdVendor((short) 0x8235);
|
||||
setIdProduct((short) 0x0200);
|
||||
setTimeout(2000);
|
||||
setConfiguration(1);
|
||||
setInterface(0);
|
||||
setAltinterface(-1);
|
||||
setOutEPBulk(0x01);
|
||||
setInEPBulk(0x82);
|
||||
setOutEPInt(0x01);
|
||||
setInEPInt(0x82);
|
||||
setSleepTimeout(2000);
|
||||
setMaxDataSize(USB.FULLSPEED_MAX_BULK_PACKET_SIZE);
|
||||
setMode(TransferMode.Bulk);
|
||||
setManufacturer("inf.ntb.ch");
|
||||
setProduct("JUnit Test Board");
|
||||
setSerialVersion("00.10.00");
|
||||
}
|
||||
}
|
||||
/*
|
||||
* Java libusb wrapper
|
||||
* Copyright (c) 2005-2006 Andreas Schlä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.inf.libusbJava.test.devices;
|
||||
|
||||
import ch.ntb.inf.libusbJava.USB;
|
||||
import ch.ntb.inf.libusbJava.testApp.AbstractDeviceInfo;
|
||||
|
||||
public class AT90USB1287 extends AbstractDeviceInfo {
|
||||
|
||||
@Override
|
||||
public void initValues() {
|
||||
setIdVendor((short) 0x8235);
|
||||
setIdProduct((short) 0x0200);
|
||||
setTimeout(2000);
|
||||
setConfiguration(1);
|
||||
setInterface(0);
|
||||
setAltinterface(-1);
|
||||
setOutEPBulk(0x01);
|
||||
setInEPBulk(0x82);
|
||||
setOutEPInt(0x01);
|
||||
setInEPInt(0x82);
|
||||
setSleepTimeout(2000);
|
||||
setMaxDataSize(USB.FULLSPEED_MAX_BULK_PACKET_SIZE);
|
||||
setMode(TransferMode.Bulk);
|
||||
setManufacturer("inf.ntb.ch");
|
||||
setProduct("JUnit Test Board");
|
||||
setSerialVersion("00.10.00");
|
||||
}
|
||||
}
|
||||
@@ -1,31 +1,31 @@
|
||||
/*
|
||||
* Java libusb wrapper
|
||||
* Copyright (c) 2005-2006 Andreas Schlä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.inf.libusbJava.test.devices;
|
||||
|
||||
import ch.ntb.inf.libusbJava.USB;
|
||||
import ch.ntb.inf.libusbJava.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);
|
||||
}
|
||||
}
|
||||
/*
|
||||
* Java libusb wrapper
|
||||
* Copyright (c) 2005-2006 Andreas Schlä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.inf.libusbJava.test.devices;
|
||||
|
||||
import ch.ntb.inf.libusbJava.USB;
|
||||
import ch.ntb.inf.libusbJava.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 +1,32 @@
|
||||
/*
|
||||
* Java libusb wrapper
|
||||
* Copyright (c) 2005-2006 Andreas Schlä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.inf.libusbJava.test.devices;
|
||||
|
||||
import ch.ntb.inf.libusbJava.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);
|
||||
}
|
||||
}
|
||||
/*
|
||||
* Java libusb wrapper
|
||||
* Copyright (c) 2005-2006 Andreas Schlä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.inf.libusbJava.test.devices;
|
||||
|
||||
import ch.ntb.inf.libusbJava.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 +1,34 @@
|
||||
/*
|
||||
* Java libusb wrapper
|
||||
* Copyright (c) 2005-2006 Andreas Schlä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.inf.libusbJava.test.devices;
|
||||
|
||||
import ch.ntb.inf.libusbJava.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);
|
||||
}
|
||||
}
|
||||
/*
|
||||
* Java libusb wrapper
|
||||
* Copyright (c) 2005-2006 Andreas Schlä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.inf.libusbJava.test.devices;
|
||||
|
||||
import ch.ntb.inf.libusbJava.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,76 +1,76 @@
|
||||
package ch.ntb.inf.libusbJava.test.exceptions;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.junit.runners.Parameterized;
|
||||
import org.junit.runners.Parameterized.Parameters;
|
||||
|
||||
import ch.ntb.inf.libusbJava.exceptions.LibusbError;
|
||||
|
||||
@RunWith(Parameterized.class)
|
||||
public class LibusbErrorTest {
|
||||
@Parameters
|
||||
public static Collection<Object[]> codesToTest() {
|
||||
return Arrays.asList(new Object[][] { {"ERROR_UNKNWON (0)", 0 },
|
||||
{"ERROR_IO", -1 },
|
||||
{"ERROR_INVALID_PARAM", -2},
|
||||
{"ERROR_ACCESS", -3},
|
||||
{"ERROR_NO_DEVICE", -4},
|
||||
{"ERROR_NOT_FOUND", -5},
|
||||
{"ERROR_BUSY", -6},
|
||||
{"ERROR_TIMEOUT", -7},
|
||||
{"ERROR_OVERFLOW", -8},
|
||||
{"ERROR_PIPE", -9},
|
||||
{"ERROR_INTERRUPTED", -10},
|
||||
{"ERROR_NO_MEM", -11},
|
||||
{"ERROR_NOT_SUPPORTED", -12},
|
||||
{"ERROR_UNKNWON (-13)", -13},
|
||||
{"ERROR_UNKNWON (-98)", -98},
|
||||
{"ERROR_JAVA_REFERENCES_NOT_LOADED", -100},
|
||||
{"ERROR_JAVA_WRONG_ENVIRONMENT", -101},
|
||||
{"ERROR_JAVA_ILEGAL_DEVICE_HANDLE", -102},
|
||||
{"ERROR_UNKNWON (-103)", -103},
|
||||
{"ERROR_OTHER", -99} });
|
||||
}
|
||||
|
||||
private String exp_desc;
|
||||
private int code;
|
||||
private LibusbError e;
|
||||
|
||||
public LibusbErrorTest(String exp_desc, int code) {
|
||||
this.exp_desc = exp_desc;
|
||||
this.code = code;
|
||||
try {
|
||||
throw new LibusbError(code);
|
||||
} catch (LibusbError e) {
|
||||
this.e = e;
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetErrorCode() {
|
||||
assertEquals("Error code is correct", e.getErrorCode(), code);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetStringFromCode() {
|
||||
String gen_desc = LibusbError.getStringFromCode(code);
|
||||
assertEquals("Correct error description for " + code, exp_desc, gen_desc);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetErrorString() {
|
||||
assertEquals("Correct error string for " + code, e.getErrorString(), exp_desc);
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testGetMessage() {
|
||||
assertEquals("Correct error string for " + code, e.getMessage(), "libusb result: " + exp_desc);
|
||||
}
|
||||
}
|
||||
package ch.ntb.inf.libusbJava.test.exceptions;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.junit.runners.Parameterized;
|
||||
import org.junit.runners.Parameterized.Parameters;
|
||||
|
||||
import ch.ntb.inf.libusbJava.exceptions.LibusbError;
|
||||
|
||||
@RunWith(Parameterized.class)
|
||||
public class LibusbErrorTest {
|
||||
@Parameters
|
||||
public static Collection<Object[]> codesToTest() {
|
||||
return Arrays.asList(new Object[][] { {"ERROR_UNKNWON (0)", 0 },
|
||||
{"ERROR_IO", -1 },
|
||||
{"ERROR_INVALID_PARAM", -2},
|
||||
{"ERROR_ACCESS", -3},
|
||||
{"ERROR_NO_DEVICE", -4},
|
||||
{"ERROR_NOT_FOUND", -5},
|
||||
{"ERROR_BUSY", -6},
|
||||
{"ERROR_TIMEOUT", -7},
|
||||
{"ERROR_OVERFLOW", -8},
|
||||
{"ERROR_PIPE", -9},
|
||||
{"ERROR_INTERRUPTED", -10},
|
||||
{"ERROR_NO_MEM", -11},
|
||||
{"ERROR_NOT_SUPPORTED", -12},
|
||||
{"ERROR_UNKNWON (-13)", -13},
|
||||
{"ERROR_UNKNWON (-98)", -98},
|
||||
{"ERROR_JAVA_REFERENCES_NOT_LOADED", -100},
|
||||
{"ERROR_JAVA_WRONG_ENVIRONMENT", -101},
|
||||
{"ERROR_JAVA_ILEGAL_DEVICE_HANDLE", -102},
|
||||
{"ERROR_UNKNWON (-103)", -103},
|
||||
{"ERROR_OTHER", -99} });
|
||||
}
|
||||
|
||||
private String exp_desc;
|
||||
private int code;
|
||||
private LibusbError e;
|
||||
|
||||
public LibusbErrorTest(String exp_desc, int code) {
|
||||
this.exp_desc = exp_desc;
|
||||
this.code = code;
|
||||
try {
|
||||
throw new LibusbError(code);
|
||||
} catch (LibusbError e) {
|
||||
this.e = e;
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetErrorCode() {
|
||||
assertEquals("Error code is correct", e.getErrorCode(), code);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetStringFromCode() {
|
||||
String gen_desc = LibusbError.getStringFromCode(code);
|
||||
assertEquals("Correct error description for " + code, exp_desc, gen_desc);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetErrorString() {
|
||||
assertEquals("Correct error string for " + code, e.getErrorString(), exp_desc);
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testGetMessage() {
|
||||
assertEquals("Correct error string for " + code, e.getMessage(), "libusb result: " + exp_desc);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user