use the address of the device structure for device selection in usb_open instead of the device number
git-svn-id: https://svn.code.sf.net/p/libusbjava/code/trunk@266 94ad28fe-ef68-46b1-9651-e7ae4fcf1c4c
This commit is contained in:
@@ -49,7 +49,8 @@ jfieldID usb_busFID_next, usb_busFID_prev, usb_busFID_dirname, \
|
|||||||
// usb_device
|
// usb_device
|
||||||
jfieldID usb_devFID_next, usb_devFID_prev, usb_devFID_filename, \
|
jfieldID usb_devFID_next, usb_devFID_prev, usb_devFID_filename, \
|
||||||
usb_devFID_bus, usb_devFID_descriptor, usb_devFID_config, \
|
usb_devFID_bus, usb_devFID_descriptor, usb_devFID_config, \
|
||||||
usb_devFID_devnum, usb_devFID_num_children, usb_devFID_children;
|
usb_devFID_devnum, usb_devFID_num_children, usb_devFID_children, \
|
||||||
|
usb_devFID_devStructAddr;
|
||||||
// usb_deviceDescriptor
|
// usb_deviceDescriptor
|
||||||
jfieldID usb_devDescFID_bLength, usb_devDescFID_bDescriptorType, \
|
jfieldID usb_devDescFID_bLength, usb_devDescFID_bDescriptorType, \
|
||||||
usb_devDescFID_bcdUSB, usb_devDescFID_bDeviceClass, \
|
usb_devDescFID_bcdUSB, usb_devDescFID_bDeviceClass, \
|
||||||
@@ -168,6 +169,7 @@ JNIEXPORT jobject JNICALL Java_ch_ntb_usb_LibusbJava_usb_1get_1busses
|
|||||||
usb_devFID_devnum = env->GetFieldID(usb_devClazz, "devnum", "B");
|
usb_devFID_devnum = env->GetFieldID(usb_devClazz, "devnum", "B");
|
||||||
usb_devFID_num_children = env->GetFieldID(usb_devClazz, "num_children", "B");
|
usb_devFID_num_children = env->GetFieldID(usb_devClazz, "num_children", "B");
|
||||||
usb_devFID_children = env->GetFieldID(usb_devClazz, "children", "Lch/ntb/usb/Usb_Device;");
|
usb_devFID_children = env->GetFieldID(usb_devClazz, "children", "Lch/ntb/usb/Usb_Device;");
|
||||||
|
usb_devFID_devStructAddr = env->GetFieldID(usb_devClazz, "devStructAddr", "J");
|
||||||
|
|
||||||
|
|
||||||
// usb_device_descriptor
|
// usb_device_descriptor
|
||||||
@@ -347,6 +349,7 @@ JNIEXPORT jobject JNICALL Java_ch_ntb_usb_LibusbJava_usb_1get_1busses
|
|||||||
env->SetObjectField(usb_devObj, usb_devFID_filename, env->NewStringUTF(dev->filename));
|
env->SetObjectField(usb_devObj, usb_devFID_filename, env->NewStringUTF(dev->filename));
|
||||||
env->SetByteField(usb_devObj, usb_devFID_devnum, dev->devnum);
|
env->SetByteField(usb_devObj, usb_devFID_devnum, dev->devnum);
|
||||||
env->SetByteField(usb_devObj, usb_devFID_num_children, dev->num_children);
|
env->SetByteField(usb_devObj, usb_devFID_num_children, dev->num_children);
|
||||||
|
env->SetLongField(usb_devObj, usb_devFID_devStructAddr, (jlong) dev);
|
||||||
|
|
||||||
// device descriptor
|
// device descriptor
|
||||||
usb_devDescObj = env->NewObject(usb_devDescClazz, usb_devDescMid);
|
usb_devDescObj = env->NewObject(usb_devDescClazz, usb_devDescMid);
|
||||||
@@ -552,12 +555,14 @@ JNIEXPORT jlong JNICALL Java_ch_ntb_usb_LibusbJava_usb_1open
|
|||||||
}
|
}
|
||||||
|
|
||||||
unsigned char devnum = env->GetByteField(dev, usb_devFID_devnum);
|
unsigned char devnum = env->GetByteField(dev, usb_devFID_devnum);
|
||||||
|
struct usb_device *usb_device_cmp;
|
||||||
|
jlong usb_device_cmp_addr = env->GetLongField(dev, usb_devFID_devStructAddr);
|
||||||
struct usb_bus *tmpBus;
|
struct usb_bus *tmpBus;
|
||||||
|
|
||||||
for (tmpBus = busses; tmpBus; tmpBus = tmpBus->next) {
|
for (tmpBus = busses; tmpBus; tmpBus = tmpBus->next) {
|
||||||
struct usb_device *device;
|
struct usb_device *device;
|
||||||
for (device = tmpBus->devices; device; device = device->next) {
|
for (device = tmpBus->devices; device; device = device->next) {
|
||||||
if (device->devnum == devnum){
|
if ((jlong) device == usb_device_cmp_addr){
|
||||||
return (jlong) usb_open(device);
|
return (jlong) usb_open(device);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -31,6 +31,13 @@ public class Usb_Device {
|
|||||||
|
|
||||||
private Usb_Device children;
|
private Usb_Device children;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The address of the device structure to be passed to usb_open. This value
|
||||||
|
* is used only internally so we don't use getter or setter methods.
|
||||||
|
*/
|
||||||
|
@SuppressWarnings("unused")
|
||||||
|
public long devStructAddr;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the reference to the bus to which this device is connected.<br>
|
* Returns the reference to the bus to which this device is connected.<br>
|
||||||
*
|
*
|
||||||
|
|||||||
Reference in New Issue
Block a user