/* * Class: ch_ntb_usb_LibusbJava * Method: usb_get_descriptor_by_endpoint * Signature: (JIBBI)Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_ch_ntb_usb_LibusbJava_usb_1get_1descriptor_1by_1endpoint (JNIEnv *env, jclass obj, jlong dev_handle, jint ep, jbyte type, jbyte index, jint size) { clearLibusbJavaError(); char *string = (char *) malloc(size * sizeof(char)); int retVal = usb_get_descriptor_by_endpoint((usb_dev_handle *) dev_handle, ep, (unsigned) type, (unsigned) index, string, size); if (retVal > 0) return (*env)->NewStringUTF(env, string); return 0; }
static int l_usb_get_descriptor_by_endpoint(lua_State *L) { struct usb_dev_handle * dev_handle = lua_touserdata(L, 1); int ep = lua_tonumber (L, 2); int type = lua_tonumber(L, 3); int index = lua_tonumber (L, 4); int size = lua_tonumber (L, 5); if (size==0) {size=255;} //default value char buf[size]; int ret = usb_get_descriptor_by_endpoint(dev_handle, ep, (unsigned char)type, (unsigned char)index, buf, size); if( ret < 0 ) { lua_pushnil (L); lua_pushnumber (L, ret); return 2; /* number of results */ } else{ lua_pushlstring (L, buf, ret); return 1; /* number of results */ } }
/* USB::DevHandle#usb_get_descriptor_by_endpoint(endpoint, type, index, buf) */ static VALUE rusb_get_descriptor_by_endpoint( VALUE v, VALUE vep, VALUE vtype, VALUE vindex, VALUE vbuf) { usb_dev_handle *p = get_usb_devhandle(v); int ep = NUM2INT(vep); int type = NUM2INT(vtype); int index = NUM2INT(vindex); char *buf; int buflen; int ret; StringValue(vbuf); rb_str_modify(vbuf); buf = RSTRING_PTR(vbuf); buflen = RSTRING_LEN(vbuf); ret = usb_get_descriptor_by_endpoint(p, ep, type, index, buf, buflen); check_usb_error("usb_get_descriptor_by_endpoint", ret); return INT2NUM(ret); }