diff --git a/LibusbJava/.cdtproject b/LibusbJava/.cdtproject index 9bf0da2..b95c82a 100644 --- a/LibusbJava/.cdtproject +++ b/LibusbJava/.cdtproject @@ -49,8 +49,6 @@ - - diff --git a/LibusbJava/LibusbJava.cpp b/LibusbJava/LibusbJava.cpp index 566cad0..57530a9 100644 --- a/LibusbJava/LibusbJava.cpp +++ b/LibusbJava/LibusbJava.cpp @@ -188,7 +188,7 @@ JNIEXPORT jobject JNICALL Java_ch_ntb_usb_LibusbJava_usb_1get_1busses usb_confDescFID_bmAttributes = env->GetFieldID(usb_confDescClazz, "bmAttributes", "B"); usb_confDescFID_MaxPower = env->GetFieldID(usb_confDescClazz, "MaxPower", "B"); usb_confDescFID_interface_ = env->GetFieldID(usb_confDescClazz, "interface_", "[Lch/ntb/usb/Usb_Interface;"); - usb_confDescFID_extra = env->GetFieldID(usb_confDescClazz, "extra", "Lch/ntb/usb/Usb_Config_Descriptor;"); + usb_confDescFID_extra = env->GetFieldID(usb_confDescClazz, "extra", "[B"); usb_confDescFID_extralen = env->GetFieldID(usb_confDescClazz, "extralen", "I"); // usb_interface @@ -216,7 +216,7 @@ JNIEXPORT jobject JNICALL Java_ch_ntb_usb_LibusbJava_usb_1get_1busses usb_intDescFID_bInterfaceProtocol = env->GetFieldID(usb_intDescClazz, "bInterfaceProtocol", "B"); usb_intDescFID_iInterface = env->GetFieldID(usb_intDescClazz, "iInterface", "B"); usb_intDescFID_endpoint = env->GetFieldID(usb_intDescClazz, "endpoint", "[Lch/ntb/usb/Usb_Endpoint_Descriptor;"); - usb_intDescFID_extra = env->GetFieldID(usb_intDescClazz, "extra", "Lch/ntb/usb/Usb_Interface_Descriptor;"); + usb_intDescFID_extra = env->GetFieldID(usb_intDescClazz, "extra", "[B"); usb_intDescFID_extralen = env->GetFieldID(usb_intDescClazz, "extralen", "I"); // usb_endpoint_descriptor @@ -233,7 +233,7 @@ JNIEXPORT jobject JNICALL Java_ch_ntb_usb_LibusbJava_usb_1get_1busses usb_epDescFID_bInterval = env->GetFieldID(usb_epDescClazz, "bInterval", "B"); usb_epDescFID_bRefresh = env->GetFieldID(usb_epDescClazz, "bRefresh", "B"); usb_epDescFID_bSynchAddress = env->GetFieldID(usb_epDescClazz, "bSynchAddress", "B"); - usb_epDescFID_extra = env->GetFieldID(usb_epDescClazz, "extra", "Lch/ntb/usb/Usb_Endpoint_Descriptor;"); + usb_epDescFID_extra = env->GetFieldID(usb_epDescClazz, "extra", "[B"); usb_epDescFID_extralen = env->GetFieldID(usb_epDescClazz, "extralen", "I"); #ifdef DEBUGON printf("usb_get_busses: Field initialization done (1)\n"); @@ -363,11 +363,12 @@ JNIEXPORT jobject JNICALL Java_ch_ntb_usb_LibusbJava_usb_1get_1busses env->SetByteField(usb_confDescObj, usb_confDescFID_bmAttributes, dev->config[c].bmAttributes); env->SetByteField(usb_confDescObj, usb_confDescFID_MaxPower, dev->config[c].MaxPower); env->SetIntField(usb_confDescObj, usb_confDescFID_extralen, dev->config[c].extralen); - // extra descriptors are not interpreted!!! - env->SetObjectField(usb_confDescObj, usb_confDescFID_extra, NULL); if (dev->config[c].extra){ - printf("The Device %d contains an extra descriptor!\n", dev->devnum); - printf("Extra descriptors are not passed to java!\n"); + jbyteArray jbExtraDesc = env->NewByteArray(dev->config[c].extralen); + env->SetByteArrayRegion(jbExtraDesc, 0, dev->config[c].extralen, (jbyte *) dev->config[c].extra); + env->SetObjectField(usb_confDescObj, usb_confDescFID_extra, jbExtraDesc); + } else { + env->SetObjectField(usb_confDescObj, usb_confDescFID_extra, NULL); } // interface usb_intObjArray = (jobjectArray) env->NewObjectArray(dev->config[c].bNumInterfaces, usb_intClazz, NULL); @@ -412,12 +413,13 @@ JNIEXPORT jobject JNICALL Java_ch_ntb_usb_LibusbJava_usb_1get_1busses env->SetByteField(usb_intDescObj, usb_intDescFID_bInterfaceProtocol, dev->config[c].interface[i].altsetting[a].bInterfaceProtocol); env->SetByteField(usb_intDescObj, usb_intDescFID_iInterface, dev->config[c].interface[i].altsetting[a].iInterface); env->SetIntField(usb_intDescObj, usb_intDescFID_extralen, dev->config[c].interface[i].altsetting[a].extralen); - // extra descriptors are not interpreted!!! if (dev->config[c].interface[i].altsetting[a].extra){ - printf("The Device %d contains an extra interface descriptor!\n", dev->devnum); - printf("Extra descriptors are not passed to java!\n"); + jbyteArray jbExtraDesc = env->NewByteArray(dev->config[c].interface[i].altsetting[a].extralen); + env->SetByteArrayRegion(jbExtraDesc, 0, dev->config[c].interface[i].altsetting[a].extralen, (jbyte *) dev->config[c].interface[i].altsetting[a].extra); + env->SetObjectField(usb_intDescObj, usb_intDescFID_extra, jbExtraDesc); + } else { + env->SetObjectField(usb_intDescObj, usb_intDescFID_extra, NULL); } - env->SetObjectField(usb_intDescObj, usb_intDescFID_extra, NULL); // endpoint descriptor usb_epDescObjArray = (jobjectArray) env->NewObjectArray(dev->config[c].interface[i].altsetting[a].bNumEndpoints, usb_epDescClazz, NULL); if (!usb_epDescObjArray) { printf("Error NewObject (usb_epDescObjArray)\n"); return NULL; } @@ -442,12 +444,13 @@ JNIEXPORT jobject JNICALL Java_ch_ntb_usb_LibusbJava_usb_1get_1busses env->SetByteField(usb_epDescObj, usb_epDescFID_bRefresh, dev->config[c].interface[i].altsetting[a].endpoint[e].bRefresh); env->SetByteField(usb_epDescObj, usb_epDescFID_bSynchAddress, dev->config[c].interface[i].altsetting[a].endpoint[e].bSynchAddress); env->SetIntField(usb_epDescObj, usb_epDescFID_extralen, dev->config[c].interface[i].altsetting[a].endpoint[e].extralen); - // extra descriptors are not interpreted!!! if (dev->config[c].interface[i].altsetting[a].endpoint[e].extra){ - printf("The Device %d contains an extra endpoint descriptor!\n", dev->devnum); - printf("Extra descriptors are not passed to java!\n"); + jbyteArray jbExtraDesc = env->NewByteArray(dev->config[c].interface[i].altsetting[a].endpoint[e].extralen); + env->SetByteArrayRegion(jbExtraDesc, 0, dev->config[c].interface[i].altsetting[a].endpoint[e].extralen, (jbyte *) dev->config[c].interface[i].altsetting[a].endpoint[e].extra); + env->SetObjectField(usb_epDescObj, usb_epDescFID_extra, jbExtraDesc); + } else { + env->SetObjectField(usb_epDescObj, usb_epDescFID_extra, NULL); } - env->SetObjectField(usb_epDescObj, usb_epDescFID_extra, NULL); } env->SetObjectField(usb_intDescObj, usb_intDescFID_endpoint, usb_epDescObjArray); } diff --git a/LibusbJava/resource.rc b/LibusbJava/resource.rc index 3e100cc..a8b76b7 100644 --- a/LibusbJava/resource.rc +++ b/LibusbJava/resource.rc @@ -2,6 +2,6 @@ #define RC_FILE_SUB_TYPE VFT2_UNKNOWN #define RC_PRODUCT_STR "Java LibUsb-Win32 wrapper - DLL" #define RC_FILE_NAME_STR "LibusbJava.dll" -#define RC_VERSION_STR "0.1.0.1" +#define RC_VERSION_STR "0.1.1.0" #include "common.rc" diff --git a/LibusbJava/version.properties b/LibusbJava/version.properties index 2fe2049..b0071b2 100644 --- a/LibusbJava/version.properties +++ b/LibusbJava/version.properties @@ -1,5 +1,5 @@ # NOTE: if the version is changed -> change the define in resource.rc" version.major=0 -version.minor=1 +version.minor=2 version.micro=0 -version.nano=1 \ No newline at end of file +version.nano=0 \ No newline at end of file diff --git a/java/src/ch/ntb/usb/Usb_Config_Descriptor.java b/java/src/ch/ntb/usb/Usb_Config_Descriptor.java index 4f2be9f..7f87948 100644 --- a/java/src/ch/ntb/usb/Usb_Config_Descriptor.java +++ b/java/src/ch/ntb/usb/Usb_Config_Descriptor.java @@ -39,7 +39,7 @@ public class Usb_Config_Descriptor extends Usb_Descriptor { private Usb_Interface[] interface_; - private Usb_Config_Descriptor extra; /* Extra descriptors */ + private byte[] extra; /* Extra descriptors */ private int extralen; @@ -76,13 +76,11 @@ public class Usb_Config_Descriptor extends Usb_Descriptor { } /** - * Extra descriptors are currently not interpreted because of their unknown - * structure. + * Returns the data of extra descriptor(s) if available.
* - * @return null + * @return null or a byte array with the extra descriptor data */ - // TODO: implementation - public Usb_Config_Descriptor getExtra() { + public byte[] getExtra() { return extra; } diff --git a/java/src/ch/ntb/usb/Usb_Endpoint_Descriptor.java b/java/src/ch/ntb/usb/Usb_Endpoint_Descriptor.java index f235f8c..b50c5ad 100644 --- a/java/src/ch/ntb/usb/Usb_Endpoint_Descriptor.java +++ b/java/src/ch/ntb/usb/Usb_Endpoint_Descriptor.java @@ -59,7 +59,7 @@ public class Usb_Endpoint_Descriptor extends Usb_Descriptor { private byte bSynchAddress; - private Usb_Endpoint_Descriptor extra; /* Extra descriptors */ + private byte[] extra; /* Extra descriptors */ private int extralen; @@ -123,13 +123,11 @@ public class Usb_Endpoint_Descriptor extends Usb_Descriptor { } /** - * Extra descriptors are currently not interpreted because of their unknown - * structure. + * Returns the data of extra descriptor(s) if available.
* - * @return null + * @return null or a byte array with the extra descriptor data */ - // TODO: implementation - public Usb_Endpoint_Descriptor getExtra() { + public byte[] getExtra() { return extra; } diff --git a/java/src/ch/ntb/usb/Usb_Interface_Descriptor.java b/java/src/ch/ntb/usb/Usb_Interface_Descriptor.java index 7b236f7..21bc1df 100644 --- a/java/src/ch/ntb/usb/Usb_Interface_Descriptor.java +++ b/java/src/ch/ntb/usb/Usb_Interface_Descriptor.java @@ -42,7 +42,7 @@ public class Usb_Interface_Descriptor extends Usb_Descriptor { private Usb_Endpoint_Descriptor[] endpoint; - private Usb_Interface_Descriptor extra; /* Extra descriptors */ + private byte[] extra; /* Extra descriptors */ private int extralen; @@ -119,13 +119,11 @@ public class Usb_Interface_Descriptor extends Usb_Descriptor { } /** - * Extra descriptors are currently not interpreted because of their unknown - * structure. + * Returns the data of extra descriptor(s) if available.
* - * @return null + * @return null or a byte array with the extra descriptor data */ - // TODO: implementation - public Usb_Interface_Descriptor getExtra() { + public byte[] getExtra() { return extra; } diff --git a/java/version.properties b/java/version.properties index 5862152..b2b156a 100644 --- a/java/version.properties +++ b/java/version.properties @@ -1,4 +1,4 @@ #Thu Aug 24 14:28:28 CEST 2006 version.major=0 -version.minor=4 +version.minor=5 version.release=2