diff options
author | Mike Lockwood <lockwood@android.com> | 2011-01-27 10:47:40 -0800 |
---|---|---|
committer | Mike Lockwood <lockwood@android.com> | 2011-01-27 16:22:15 -0800 |
commit | 1fce24b241e386af19ba7c5bc29af5d18461f4ff (patch) | |
tree | fa61c49409b571c28e1dbee1522d1b11354f22db /core/jni/android_hardware_UsbDevice.cpp | |
parent | 05b536e671b60740a47c37e8be6adbfff6fad3eb (diff) | |
download | frameworks_base-1fce24b241e386af19ba7c5bc29af5d18461f4ff.zip frameworks_base-1fce24b241e386af19ba7c5bc29af5d18461f4ff.tar.gz frameworks_base-1fce24b241e386af19ba7c5bc29af5d18461f4ff.tar.bz2 |
Add support for synchronous bulk USB transfers
Change-Id: Id5de49e4d728a702fa1583ecc24f83f36cc57d21
Signed-off-by: Mike Lockwood <lockwood@android.com>
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;", |