summaryrefslogtreecommitdiffstats
path: root/core/jni/android_hardware_UsbDevice.cpp
diff options
context:
space:
mode:
authorMike Lockwood <lockwood@android.com>2011-01-27 10:47:40 -0800
committerMike Lockwood <lockwood@android.com>2011-01-27 16:22:15 -0800
commit1fce24b241e386af19ba7c5bc29af5d18461f4ff (patch)
treefa61c49409b571c28e1dbee1522d1b11354f22db /core/jni/android_hardware_UsbDevice.cpp
parent05b536e671b60740a47c37e8be6adbfff6fad3eb (diff)
downloadframeworks_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.cpp37
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;",