diff --git a/LibusbJava/.cproject b/LibusbJava/.cproject
new file mode 100644
index 0000000..a2a934a
--- /dev/null
+++ b/LibusbJava/.cproject
@@ -0,0 +1,64 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/LibusbJava/.settings/org.eclipse.cdt.core.prefs b/LibusbJava/.settings/org.eclipse.cdt.core.prefs
index 444eabb..ae32dbf 100644
--- a/LibusbJava/.settings/org.eclipse.cdt.core.prefs
+++ b/LibusbJava/.settings/org.eclipse.cdt.core.prefs
@@ -1,3 +1,4 @@
-#Fri Nov 24 10:21:40 CET 2006
+#Sat Aug 11 13:28:28 CEST 2007
eclipse.preferences.version=1
+indexer/indexerId=org.eclipse.cdt.core.domsourceindexer
indexerId=org.eclipse.cdt.core.domsourceindexer
diff --git a/LibusbJava/LibusbJava.cpp b/LibusbJava/LibusbJava.cpp
index 57530a9..d3ed13d 100644
--- a/LibusbJava/LibusbJava.cpp
+++ b/LibusbJava/LibusbJava.cpp
@@ -1,10 +1,9 @@
/*
- * 2005/2006
- * Interstate University of Applied Sciences of Technology Buchs NTB
- * Computer Science Laboratory, inf.ntb.ch
- * Andreas Schl�pfer, aschlaepfer@ntb.ch
- *
- * Version 00.02.00
+ * Java libusb wrapper
+ * Copyright (c) 2005-2006 Andreas Schläpfer
+ *
+ * http://libusbjava.sourceforge.net
+ * This library is covered by the LGPL, read LGPL.txt for details.
*/
#include
@@ -22,6 +21,13 @@ struct usb_bus *busses;
// global flag for loading all class, method and field ID references
int java_references_loaded = 0;
+// if > 0 an LibusbJava specific error string is set
+char *libusbJavaError = NULL;
+
+// macros to set and clear LibusbJava specific errors
+#define setLibusbJavaError(error) libusbJavaError = error
+#define clearLibusbJavaError() libusbJavaError = NULL
+
// class references
jclass usb_busClazz, usb_devClazz, usb_devDescClazz, usb_confDescClazz, \
usb_intClazz, usb_intDescClazz, usb_epDescClazz;
@@ -75,6 +81,7 @@ jfieldID usb_epDescFID_bLength, usb_epDescFID_bDescriptorType, \
JNIEXPORT void JNICALL Java_ch_ntb_usb_LibusbJava_usb_1set_1debug
(JNIEnv *env, jclass obj, jint level)
{
+ clearLibusbJavaError();
usb_set_debug(level);
}
/*
@@ -85,6 +92,7 @@ JNIEXPORT void JNICALL Java_ch_ntb_usb_LibusbJava_usb_1set_1debug
JNIEXPORT void JNICALL Java_ch_ntb_usb_LibusbJava_usb_1init
(JNIEnv *env, jclass obj)
{
+ clearLibusbJavaError();
usb_init();
}
@@ -96,6 +104,7 @@ JNIEXPORT void JNICALL Java_ch_ntb_usb_LibusbJava_usb_1init
JNIEXPORT jint JNICALL Java_ch_ntb_usb_LibusbJava_usb_1find_1busses
(JNIEnv *env, jclass obj)
{
+ clearLibusbJavaError();
return usb_find_busses();
}
@@ -107,6 +116,7 @@ JNIEXPORT jint JNICALL Java_ch_ntb_usb_LibusbJava_usb_1find_1busses
JNIEXPORT jint JNICALL Java_ch_ntb_usb_LibusbJava_usb_1find_1devices
(JNIEnv *env, jclass obj)
{
+ clearLibusbJavaError();
return usb_find_devices();
}
@@ -119,6 +129,8 @@ JNIEXPORT jobject JNICALL Java_ch_ntb_usb_LibusbJava_usb_1get_1busses
(JNIEnv *env, jclass obj)
{
+ clearLibusbJavaError();
+
// only load class, method and field ID references once
if (!java_references_loaded) {
// find classes and field ids
@@ -275,7 +287,10 @@ JNIEXPORT jobject JNICALL Java_ch_ntb_usb_LibusbJava_usb_1get_1busses
// create a new object for every bus
if (!usb_busObj) {
usb_busObj = env->NewObject(usb_busClazz, usb_busMid);
- if (!usb_busObj) { printf("Error NewObject (usb_busObj)\n"); return NULL; }
+ if (!usb_busObj) {
+ setLibusbJavaError("shared library error: Error NewObject (usb_busObj)");
+ return NULL;
+ }
main_usb_busObj = usb_busObj;
}
@@ -283,7 +298,10 @@ JNIEXPORT jobject JNICALL Java_ch_ntb_usb_LibusbJava_usb_1get_1busses
usb_busObj_next = NULL;
if (bus->next){
usb_busObj_next = env->NewObject(usb_busClazz, usb_busMid);
- if (!usb_busObj_next) { printf("Error NewObject (usb_busObj_next)\n"); return NULL; }
+ if (!usb_busObj_next) {
+ setLibusbJavaError("shared library error: Error NewObject (usb_busObj_next)");
+ return NULL;
+ }
}
env->SetObjectField(usb_busObj, usb_busFID_next, usb_busObj_next);
env->SetObjectField(usb_busObj, usb_busFID_prev, usb_busObj_prev);
@@ -302,14 +320,20 @@ JNIEXPORT jobject JNICALL Java_ch_ntb_usb_LibusbJava_usb_1get_1busses
// create a new object for every device
if (!usb_devObj){
usb_devObj = env->NewObject(usb_devClazz, usb_devMid);
- if (!usb_devObj) { printf("Error NewObject (usb_devObj)\n"); return NULL; }
+ if (!usb_devObj) {
+ setLibusbJavaError("shared library error: Error NewObject (usb_devObj)");
+ return NULL;
+ }
main_usb_devObj = usb_devObj;
}
// fill the fields of the object
usb_devObj_next = NULL;
if (dev->next){
usb_devObj_next = env->NewObject(usb_devClazz, usb_devMid);
- if (!usb_devObj_next) { printf("Error NewObject (usb_devObj_next)\n"); return NULL; }
+ if (!usb_devObj_next) {
+ setLibusbJavaError("shared library error: Error NewObject (usb_devObj_next)");
+ return NULL;
+ }
}
env->SetObjectField(usb_devObj, usb_devFID_next, usb_devObj_next);
env->SetObjectField(usb_devObj, usb_devFID_prev, usb_devObj_prev);
@@ -320,7 +344,10 @@ JNIEXPORT jobject JNICALL Java_ch_ntb_usb_LibusbJava_usb_1get_1busses
// device descriptor
usb_devDescObj = env->NewObject(usb_devDescClazz, usb_devDescMid);
- if (!usb_devDescObj) { printf("Error NewObject (usb_devDescObj)\n"); return NULL; }
+ if (!usb_devDescObj) {
+ setLibusbJavaError("shared library error: Error NewObject (usb_devDescObj)");
+ return NULL;
+ }
env->SetByteField(usb_devDescObj, usb_devDescFID_bLength, dev->descriptor.bLength);
env->SetByteField(usb_devDescObj, usb_devDescFID_bDescriptorType, dev->descriptor.bDescriptorType);
env->SetShortField(usb_devDescObj, usb_devDescFID_bcdUSB, dev->descriptor.bcdUSB);
@@ -340,19 +367,25 @@ JNIEXPORT jobject JNICALL Java_ch_ntb_usb_LibusbJava_usb_1get_1busses
// configuration descriptor
// Loop through all of the configurations
usb_confDescObjArray = (jobjectArray) env->NewObjectArray(dev->descriptor.bNumConfigurations, usb_confDescClazz, NULL);
- if (!usb_confDescObjArray) { printf("Error NewObject 6\n"); return NULL; }
+ if (!usb_confDescObjArray) {
+ setLibusbJavaError("shared library error: Error NewObject 6");
+ return NULL;
+ }
for (int c = 0; c < dev->descriptor.bNumConfigurations; c++){
#ifdef DEBUGON
printf("\t\tusb_get_busses: configuration %x (5)\n", c);
#endif
if (dev->config == NULL) {
// this shouldn't happen, but it did occasionally (maybe this is (or probably was) a libusb bug)
- printf("dev->config == NULL\n");
+ setLibusbJavaError("shared library error: dev->config == NULL");
return main_usb_busObj;
}
usb_confDescObj = env->NewObject(usb_confDescClazz, usb_confDescMid);
- if (!usb_confDescObj) { printf("Error NewObject (usb_confDescObj)\n"); return NULL; }
+ if (!usb_confDescObj) {
+ setLibusbJavaError("shared library error: Error NewObject (usb_confDescObj)");
+ return NULL;
+ }
env->SetObjectArrayElement(usb_confDescObjArray, c, usb_confDescObj);
env->SetByteField(usb_confDescObj, usb_confDescFID_bLength, dev->config[c].bLength);
env->SetByteField(usb_confDescObj, usb_confDescFID_bDescriptorType, dev->config[c].bDescriptorType);
@@ -372,36 +405,48 @@ JNIEXPORT jobject JNICALL Java_ch_ntb_usb_LibusbJava_usb_1get_1busses
}
// interface
usb_intObjArray = (jobjectArray) env->NewObjectArray(dev->config[c].bNumInterfaces, usb_intClazz, NULL);
- if (!usb_intObjArray) { printf("Error NewObject (usb_intObjArray)\n"); return NULL; }
+ if (!usb_intObjArray) {
+ setLibusbJavaError("shared library error: Error NewObject (usb_intObjArray)");
+ return NULL;
+ }
for (int i = 0; i < dev->config[c].bNumInterfaces; i++){
#ifdef DEBUGON
printf("\t\t\tusb_get_busses: interface %x (6)\n", i);
#endif
if (dev->config[c].interface == NULL) {
// this shouldn't happen
- printf("dev->config[c].interface == NULL\n");
+ printf("dev->config[c].interface == NULL");
return main_usb_busObj;
}
usb_intObj = env->NewObject(usb_intClazz, usb_intMid);
- if (!usb_intObj) { printf("Error NewObject (usb_intObj)\n"); return NULL; }
+ if (!usb_intObj) {
+ setLibusbJavaError("shared library error: Error NewObject (usb_intObj)");
+ return NULL;
+ }
env->SetObjectArrayElement(usb_intObjArray, i, usb_intObj);
env->SetIntField(usb_intObj, usb_intFID_num_altsetting, dev->config[c].interface[i].num_altsetting);
// interface descriptor
usb_intDescObjArray = (jobjectArray) env->NewObjectArray(dev->config[c].interface[i].num_altsetting, usb_intDescClazz, NULL);
- if (!usb_intDescObjArray) { printf("Error NewObject (usb_intDescObjArray)\n"); return NULL; }
+ if (!usb_intDescObjArray) {
+ setLibusbJavaError("shared library error: Error NewObject (usb_intDescObjArray)");
+ return NULL;
+ }
for (int a = 0; a < dev->config[c].interface[i].num_altsetting; a++){
#ifdef DEBUGON
printf("\t\t\t\tusb_get_busses: interface descriptor %x (7)\n", a);
#endif
if (dev->config[c].interface[i].altsetting == NULL) {
// this shouldn't happen
- printf("dev->config[c].interface[i].altsetting == NULL\n");
+ printf("LibusbJava: usb_get_busses: dev->config[c].interface[i].altsetting == NULL\n");
return main_usb_busObj;
}
usb_intDescObj = env->NewObject(usb_intDescClazz, usb_intDescMid);
- if (!usb_intDescObj) { printf("Error NewObject (usb_intDescObj)\n"); return NULL; }
+ if (!usb_intDescObj) {
+ setLibusbJavaError("shared library error: Error NewObject (usb_intDescObj)");
+ return NULL;
+ }
env->SetObjectArrayElement(usb_intDescObjArray, a, usb_intDescObj);
env->SetByteField(usb_intDescObj, usb_intDescFID_bLength, dev->config[c].interface[i].altsetting[a].bLength);
env->SetByteField(usb_intDescObj, usb_intDescFID_bDescriptorType, dev->config[c].interface[i].altsetting[a].bDescriptorType);
@@ -422,18 +467,24 @@ JNIEXPORT jobject JNICALL Java_ch_ntb_usb_LibusbJava_usb_1get_1busses
}
// 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; }
+ if (!usb_epDescObjArray) {
+ setLibusbJavaError("shared library error: Error NewObject (usb_epDescObjArray)");
+ return NULL;
+ }
for (int e = 0; e < dev->config[c].interface[i].altsetting[a].bNumEndpoints; e++){
#ifdef DEBUGON
printf("\t\t\t\t\tusb_get_busses: endpoint descriptor %x (8)\n", e);
#endif
if (dev->config[c].interface[i].altsetting[a].endpoint == NULL) {
- printf("dev->config[c].interface[i].altsetting[a].endpoint == NULL\n");
+ printf("LibusbJava: usb_get_busses: dev->config[c].interface[i].altsetting[a].endpoint == NULL\n");
return main_usb_busObj;
}
usb_epDescObj = env->NewObject(usb_epDescClazz, usb_epDescMid);
- if (!usb_epDescObj) { printf("Error NewObject (usb_epDescObj)\n"); return NULL; }
+ if (!usb_epDescObj) {
+ setLibusbJavaError("shared library error: Error NewObject (usb_epDescObj)");
+ return NULL;
+ }
env->SetObjectArrayElement(usb_epDescObjArray, e, usb_epDescObj);
env->SetByteField(usb_epDescObj, usb_epDescFID_bLength, dev->config[c].interface[i].altsetting[a].endpoint[e].bLength);
env->SetByteField(usb_epDescObj, usb_epDescFID_bDescriptorType, dev->config[c].interface[i].altsetting[a].endpoint[e].bDescriptorType);
@@ -488,7 +539,11 @@ JNIEXPORT jobject JNICALL Java_ch_ntb_usb_LibusbJava_usb_1get_1busses
JNIEXPORT jint JNICALL Java_ch_ntb_usb_LibusbJava_usb_1open
(JNIEnv *env, jclass obj, jobject dev)
{
- if (busses == NULL) { return -1; }
+ clearLibusbJavaError();
+ if (busses == NULL) {
+ setLibusbJavaError("shared library error: busses is null");
+ return 0;
+ }
unsigned char devnum = env->GetByteField(dev, usb_devFID_devnum);
struct usb_bus *tmpBus;
@@ -501,7 +556,8 @@ JNIEXPORT jint JNICALL Java_ch_ntb_usb_LibusbJava_usb_1open
}
}
}
- return -3;
+ setLibusbJavaError("shared library error: no device with dev.devnum found on busses");
+ return 0;
}
/*
@@ -512,6 +568,7 @@ JNIEXPORT jint JNICALL Java_ch_ntb_usb_LibusbJava_usb_1open
JNIEXPORT jint JNICALL Java_ch_ntb_usb_LibusbJava_usb_1close
(JNIEnv *env, jclass obj, jint dev_handle)
{
+ clearLibusbJavaError();
return (jint) usb_close((usb_dev_handle *) dev_handle);
}
@@ -523,6 +580,7 @@ JNIEXPORT jint JNICALL Java_ch_ntb_usb_LibusbJava_usb_1close
JNIEXPORT jint JNICALL Java_ch_ntb_usb_LibusbJava_usb_1set_1configuration
(JNIEnv *env, jclass obj, jint dev_handle, jint configuration)
{
+ clearLibusbJavaError();
return usb_set_configuration((usb_dev_handle *) dev_handle, configuration);
}
@@ -534,6 +592,7 @@ JNIEXPORT jint JNICALL Java_ch_ntb_usb_LibusbJava_usb_1set_1configuration
JNIEXPORT jint JNICALL Java_ch_ntb_usb_LibusbJava_usb_1set_1altinterface
(JNIEnv *env, jclass obj, jint dev_handle, jint alternate)
{
+ clearLibusbJavaError();
return usb_set_altinterface((usb_dev_handle *) dev_handle, alternate);
}
@@ -545,6 +604,7 @@ JNIEXPORT jint JNICALL Java_ch_ntb_usb_LibusbJava_usb_1set_1altinterface
JNIEXPORT jint JNICALL Java_ch_ntb_usb_LibusbJava_usb_1clear_1halt
(JNIEnv *env, jclass obj, jint dev_handle, jint ep)
{
+ clearLibusbJavaError();
return usb_clear_halt((usb_dev_handle *) dev_handle, (unsigned) ep);
}
@@ -556,6 +616,7 @@ JNIEXPORT jint JNICALL Java_ch_ntb_usb_LibusbJava_usb_1clear_1halt
JNIEXPORT jint JNICALL Java_ch_ntb_usb_LibusbJava_usb_1reset
(JNIEnv *env, jclass obj, jint dev_handle)
{
+ clearLibusbJavaError();
return usb_reset((usb_dev_handle *) dev_handle);
}
@@ -567,6 +628,7 @@ JNIEXPORT jint JNICALL Java_ch_ntb_usb_LibusbJava_usb_1reset
JNIEXPORT jint JNICALL Java_ch_ntb_usb_LibusbJava_usb_1claim_1interface
(JNIEnv *env, jclass obj, jint dev_handle, jint interface)
{
+ clearLibusbJavaError();
return usb_claim_interface((usb_dev_handle *) dev_handle, interface);
}
@@ -578,6 +640,7 @@ JNIEXPORT jint JNICALL Java_ch_ntb_usb_LibusbJava_usb_1claim_1interface
JNIEXPORT jint JNICALL Java_ch_ntb_usb_LibusbJava_usb_1release_1interface
(JNIEnv *env, jclass obj, jint dev_handle, jint interface)
{
+ clearLibusbJavaError();
return usb_release_interface((usb_dev_handle *) dev_handle, interface);
}
@@ -589,6 +652,7 @@ JNIEXPORT jint JNICALL Java_ch_ntb_usb_LibusbJava_usb_1release_1interface
JNIEXPORT jint JNICALL Java_ch_ntb_usb_LibusbJava_usb_1control_1msg
(JNIEnv *env, jclass obj, jint dev_handle, jint requesttype, jint request, jint value, jint index, jbyteArray jbytes, jint size, jint timeout)
{
+ clearLibusbJavaError();
jbyte *bytes = env->GetByteArrayElements(jbytes, NULL);
int retVal = usb_control_msg((usb_dev_handle *) dev_handle, requesttype, request, value, index, (char *) bytes, size, timeout);
env->SetByteArrayRegion(jbytes, 0, size, bytes);
@@ -603,6 +667,7 @@ JNIEXPORT jint JNICALL Java_ch_ntb_usb_LibusbJava_usb_1control_1msg
JNIEXPORT jstring JNICALL Java_ch_ntb_usb_LibusbJava_usb_1get_1string
(JNIEnv *env, jclass obj, jint dev_handle, jint index, jint langid)
{
+ clearLibusbJavaError();
char string[256];
int retVal = usb_get_string((usb_dev_handle *) dev_handle, index, langid, string, 256);
if (retVal > 0)
@@ -618,6 +683,7 @@ JNIEXPORT jstring JNICALL Java_ch_ntb_usb_LibusbJava_usb_1get_1string
JNIEXPORT jstring JNICALL Java_ch_ntb_usb_LibusbJava_usb_1get_1string_1simple
(JNIEnv *env, jclass obj, jint dev_handle, jint index)
{
+ clearLibusbJavaError();
char string[256];
int retVal = usb_get_string_simple((usb_dev_handle *) dev_handle, index, string, 256);
if (retVal > 0)
@@ -633,6 +699,7 @@ JNIEXPORT jstring JNICALL Java_ch_ntb_usb_LibusbJava_usb_1get_1string_1simple
JNIEXPORT jstring JNICALL Java_ch_ntb_usb_LibusbJava_usb_1get_1descriptor
(JNIEnv *env, jclass obj, jint dev_handle, jbyte type, jbyte index, jint size)
{
+ clearLibusbJavaError();
char *string = (char *) malloc(size * sizeof(char));
int retVal = usb_get_descriptor((usb_dev_handle *) dev_handle, (unsigned) type,
(unsigned) index, string, size);
@@ -649,6 +716,7 @@ JNIEXPORT jstring JNICALL Java_ch_ntb_usb_LibusbJava_usb_1get_1descriptor
JNIEXPORT jstring JNICALL Java_ch_ntb_usb_LibusbJava_usb_1get_1descriptor_1by_1endpoint
(JNIEnv *env, jclass obj, jint dev_handle, jint ep, jbyte type, jbyte index, jint size)
{
+ clearLibusbJavaError();
char *string = (char *) malloc(size * sizeof(char));
int retVal = usb_get_descriptor_by_endpoint((usb_dev_handle *) dev_handle, ep, (unsigned) type,
(unsigned) index, string, size);
@@ -665,6 +733,7 @@ JNIEXPORT jstring JNICALL Java_ch_ntb_usb_LibusbJava_usb_1get_1descriptor_1by_1e
JNIEXPORT jint JNICALL Java_ch_ntb_usb_LibusbJava_usb_1bulk_1write
(JNIEnv *env, jclass obj, jint dev_handle, jint ep, jbyteArray jbytes, jint size, jint timeout)
{
+ clearLibusbJavaError();
jbyte *bytes = env->GetByteArrayElements(jbytes, NULL);
return usb_bulk_write((usb_dev_handle *) dev_handle, ep, (char *) bytes, size, timeout);
}
@@ -677,6 +746,7 @@ JNIEXPORT jint JNICALL Java_ch_ntb_usb_LibusbJava_usb_1bulk_1write
JNIEXPORT jint JNICALL Java_ch_ntb_usb_LibusbJava_usb_1bulk_1read
(JNIEnv *env, jclass obj, jint dev_handle, jint ep, jbyteArray jbytes, jint size, jint timeout)
{
+ clearLibusbJavaError();
char *bytes = (char *) malloc(size * sizeof(char));
int retVal = usb_bulk_read((usb_dev_handle *) dev_handle, ep, bytes, size, timeout);
if (!bytes) { return retVal; }
@@ -693,6 +763,7 @@ JNIEXPORT jint JNICALL Java_ch_ntb_usb_LibusbJava_usb_1bulk_1read
JNIEXPORT jint JNICALL Java_ch_ntb_usb_LibusbJava_usb_1interrupt_1write
(JNIEnv *env, jclass obj, jint dev_handle, jint ep, jbyteArray jbytes, jint size, jint timeout)
{
+ clearLibusbJavaError();
jbyte *bytes = env->GetByteArrayElements(jbytes, NULL);
return usb_interrupt_write((usb_dev_handle *) dev_handle, ep, (char *) bytes, size, timeout);
}
@@ -705,6 +776,7 @@ JNIEXPORT jint JNICALL Java_ch_ntb_usb_LibusbJava_usb_1interrupt_1write
JNIEXPORT jint JNICALL Java_ch_ntb_usb_LibusbJava_usb_1interrupt_1read
(JNIEnv *env, jclass obj, jint dev_handle, jint ep, jbyteArray jbytes, jint size, jint timeout)
{
+ clearLibusbJavaError();
char *bytes = (char *) malloc(size * sizeof(char));
int retVal = usb_interrupt_read((usb_dev_handle *) dev_handle, ep, bytes, size, timeout);
if (!bytes) { return retVal; }
@@ -721,7 +793,15 @@ JNIEXPORT jint JNICALL Java_ch_ntb_usb_LibusbJava_usb_1interrupt_1read
JNIEXPORT jstring JNICALL Java_ch_ntb_usb_LibusbJava_usb_1strerror
(JNIEnv *env, jclass obj){
- char *str = usb_strerror();
+ char *str;
+ // check for LibusbJava specific errors first
+ if (libusbJavaError != NULL) {
+ str = libusbJavaError;
+ clearLibusbJavaError();
+ } else {
+ str = usb_strerror();
+ }
+
return env->NewStringUTF(str);
}
diff --git a/LibusbJava/resource.rc b/LibusbJava/resource.rc
index a8b76b7..e19bd34 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.1.0"
+#define RC_VERSION_STR "0.2.1.0"
#include "common.rc"
diff --git a/LibusbJava/version.properties b/LibusbJava/version.properties
index b0071b2..4e6d305 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=2
-version.micro=0
+version.micro=1
version.nano=0
\ No newline at end of file