Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b46bf19b authored by Elliott Hughes's avatar Elliott Hughes
Browse files

usb: remove duplication in descriptor reading code.

The motivation for this is Sony needing to deal with >4KiB descriptor on
a UVC device. Let's factor out the callers here and combine them with
the code in libusbhost that also needs a limit. (I've separately bumped
libusbhost to 16KiB, which was the largest of the three places we had a
limit previously.)

Also remove some inappropriate <asm/*> includes --- that's never a good
idea, and they weren't needed anyway.

(#include re-ordering was insisted upon by a presubmit hook.)

Test: treehugger
Change-Id: I552d97adc2a4ade4b89b9fe6b3262e012fdb8602
parent f28ab362
Loading
Loading
Loading
Loading
+9 −24
Original line number Diff line number Diff line
@@ -16,20 +16,19 @@

#define LOG_TAG "UsbDeviceConnectionJNI"

#include "utils/Log.h"

#include "jni.h"
#include <fcntl.h>
#include <nativehelper/JNIPlatformHelp.h>
#include "core_jni_helpers.h"

#include <stdio.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <usbhost/usbhost.h>
#include <usbhost/usbhost_jni.h>

#include <chrono>

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include "core_jni_helpers.h"
#include "jni.h"
#include "utils/Log.h"

using namespace android;
using namespace std::chrono;
@@ -91,22 +90,8 @@ android_hardware_UsbDeviceConnection_get_fd(JNIEnv *env, jobject thiz)
static jbyteArray
android_hardware_UsbDeviceConnection_get_desc(JNIEnv *env, jobject thiz)
{
    char buffer[16384];
    int fd = android_hardware_UsbDeviceConnection_get_fd(env, thiz);
    if (fd < 0) return NULL;
    lseek(fd, 0, SEEK_SET);
    int length = read(fd, buffer, sizeof(buffer));
    if (length < 0) return NULL;

    jbyteArray ret = env->NewByteArray(length);
    if (ret) {
        jbyte* bytes = (jbyte*)env->GetPrimitiveArrayCritical(ret, 0);
        if (bytes) {
            memcpy(bytes, buffer, length);
            env->ReleasePrimitiveArrayCritical(ret, bytes, 0);
        }
    }
    return ret;
    return usb_jni_read_descriptors(env, fd);
}

static jboolean
+0 −1
Original line number Diff line number Diff line
@@ -25,7 +25,6 @@

#include <stdio.h>
#include <string.h>
#include <asm/byteorder.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
+6 −25
Original line number Diff line number Diff line
@@ -15,16 +15,14 @@
 */

#define LOG_TAG "UsbHostManagerJNI"
#include "utils/Log.h"

#include <nativehelper/JNIHelp.h>
#include <stdlib.h>
#include <usbhost/usbhost.h>
#include <usbhost/usbhost_jni.h>

#include "jni.h"
#include <nativehelper/JNIHelp.h>

#include <usbhost/usbhost.h>
#include "utils/Log.h"

#define MAX_DESCRIPTORS_LENGTH 4096
static const int USB_CONTROL_TRANSFER_TIMEOUT_MS = 200;

// com.android.server.usb.descriptors
@@ -41,26 +39,9 @@ jbyteArray JNICALL Java_com_android_server_usb_descriptors_UsbDescriptorParser_g
    }

    int fd = usb_device_get_fd(device);
    if (fd < 0) {
        usb_device_close(device);
        return NULL;
    }

    // from android_hardware_UsbDeviceConnection_get_desc()
    jbyte buffer[MAX_DESCRIPTORS_LENGTH];
    lseek(fd, 0, SEEK_SET);
    int numBytes = read(fd, buffer, sizeof(buffer));
    jbyteArray ret = NULL;
    jbyteArray descriptors = usb_jni_read_descriptors(env, fd);
    usb_device_close(device);

    if (numBytes > 0) {
        ret = env->NewByteArray(numBytes);
        env->SetByteArrayRegion(ret, 0, numBytes, buffer);
    } else {
        ALOGE("error reading descriptors\n");
    }

    return ret;
    return descriptors;
}

jstring JNICALL Java_com_android_server_usb_descriptors_UsbDescriptorParser_getDescriptorString_1native(
+0 −1
Original line number Diff line number Diff line
@@ -25,7 +25,6 @@
#include "MtpDescriptors.h"

#include <stdio.h>
#include <asm/byteorder.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
+0 −3
Original line number Diff line number Diff line
@@ -23,7 +23,6 @@
#include "android_runtime/Log.h"

#include <stdio.h>
#include <asm/byteorder.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
@@ -31,8 +30,6 @@

#include <usbhost/usbhost.h>

#define MAX_DESCRIPTORS_LENGTH 4096

namespace android
{