diff options
Diffstat (limited to 'core/jni/android_hardware_UsbDevice.cpp')
| -rw-r--r-- | core/jni/android_hardware_UsbDevice.cpp | 37 |
1 files changed, 33 insertions, 4 deletions
diff --git a/core/jni/android_hardware_UsbDevice.cpp b/core/jni/android_hardware_UsbDevice.cpp index 4bc9154..9014450 100644 --- a/core/jni/android_hardware_UsbDevice.cpp +++ b/core/jni/android_hardware_UsbDevice.cpp @@ -123,7 +123,7 @@ android_hardware_UsbDevice_release_interface(JNIEnv *env, jobject thiz, int inte static jint android_hardware_UsbDevice_control_request(JNIEnv *env, jobject thiz, jint requestType, jint request, jint value, jint index, - jbyteArray buffer, jint length) + jbyteArray buffer, jint length, jint timeout) { struct usb_device* device = get_device_from_object(env, thiz); if (!device) { @@ -140,8 +140,35 @@ android_hardware_UsbDevice_control_request(JNIEnv *env, jobject thiz, bufferBytes = env->GetByteArrayElements(buffer, 0); } - jint result = usb_device_send_control(device, requestType, request, - value, index, length, bufferBytes); + jint result = usb_device_control_transfer(device, requestType, request, + value, index, bufferBytes, length, timeout); + + if (bufferBytes) + env->ReleaseByteArrayElements(buffer, bufferBytes, 0); + + return result; +} + +static jint +android_hardware_UsbDevice_bulk_request(JNIEnv *env, jobject thiz, + jint endpoint, jbyteArray buffer, jint length, jint timeout) +{ + struct usb_device* device = get_device_from_object(env, thiz); + if (!device) { + LOGE("device is closed in native_control_request"); + return -1; + } + + jbyte* bufferBytes = NULL; + if (buffer) { + if (env->GetArrayLength(buffer) < length) { + env->ThrowNew(env->FindClass("java/lang/ArrayIndexOutOfBoundsException"), NULL); + return -1; + } + bufferBytes = env->GetByteArrayElements(buffer, 0); + } + + jint result = usb_device_bulk_transfer(device, endpoint, bufferBytes, length, timeout); if (bufferBytes) env->ReleaseByteArrayElements(buffer, bufferBytes, 0); @@ -206,8 +233,10 @@ static JNINativeMethod method_table[] = { {"native_get_fd", "()I", (void *)android_hardware_UsbDevice_get_fd}, {"native_claim_interface", "(IZ)Z",(void *)android_hardware_UsbDevice_claim_interface}, {"native_release_interface","(I)Z", (void *)android_hardware_UsbDevice_release_interface}, - {"native_control_request", "(IIII[BI)I", + {"native_control_request", "(IIII[BII)I", (void *)android_hardware_UsbDevice_control_request}, + {"native_bulk_request", "(I[BII)I", + (void *)android_hardware_UsbDevice_bulk_request}, {"native_request_wait", "()Landroid/hardware/UsbRequest;", (void *)android_hardware_UsbDevice_request_wait}, { "native_get_serial", "()Ljava/lang/String;", |
