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

Commit 4ce86bfb authored by Elliott Hughes's avatar Elliott Hughes Committed by Automerger Merge Worker
Browse files

Merge "libusbhost: factor out frameworks descriptors -> byte[] code." am:...

Merge "libusbhost: factor out frameworks descriptors -> byte[] code." am: e3eada52 am: d4022bc7 am: 93265a29

Original change: https://android-review.googlesource.com/c/platform/system/core/+/1954696

Change-Id: I757e4f59279794ef3b9569795e7c6397c13241c3
parents 8a53262d 93265a29
Loading
Loading
Loading
Loading
+2 −4
Original line number Diff line number Diff line
@@ -30,11 +30,9 @@ cc_library {
    export_include_dirs: ["include"],
    target: {
        android: {
            cflags: [
                "-g",
                "-DUSE_LIBLOG",
            ],
            header_libs: ["jni_headers"],
            shared_libs: ["liblog"],
            srcs: ["usbhost_jni.cpp"],
        },
        darwin: {
            enabled: false,
+1 −0
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@
extern "C" {
#endif

#include <stddef.h>
#include <stdint.h>

#include <linux/version.h>
+27 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2022 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#pragma once

#include <jni.h>

/**
 * Reads USB descriptors from `fd`.
 *
 * Returns a byte[] on success,
 * or returns NULL and logs an appropriate error on failure.
 */
jbyteArray usb_jni_read_descriptors(JNIEnv* env, int fd);
+12 −18
Original line number Diff line number Diff line
@@ -18,20 +18,9 @@
#define _GNU_SOURCE
#endif

// #define DEBUG 1
#if DEBUG
#include <usbhost/usbhost.h>

#ifdef USE_LIBLOG
#define LOG_TAG "usbhost"
#include "log/log.h"
#define D ALOGD
#else
#define D printf
#endif

#else
#define D(...)
#endif
#include "usbhost_private.h"

#include <stdio.h>
#include <stdlib.h>
@@ -48,12 +37,19 @@
#include <errno.h>
#include <ctype.h>
#include <poll.h>
#include <pthread.h>

#include <linux/usbdevice_fs.h>
#include <asm/byteorder.h>

#include "usbhost/usbhost.h"
// #define DEBUG 1
#if defined(DEBUG)
#if defined(__BIONIC__)
#define D ALOGD
#else
#define D printf
#endif
#else
#define D(...)
#endif

#define DEV_DIR             "/dev"
#define DEV_BUS_DIR         DEV_DIR "/bus"
@@ -76,8 +72,6 @@ struct usb_host_context {
    int                         wddbus;
};

#define MAX_DESCRIPTORS_LENGTH 4096

struct usb_device {
    char dev_name[64];
    unsigned char desc[MAX_DESCRIPTORS_LENGTH];
+41 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2022 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#include <usbhost/usbhost_jni.h>

#include "usbhost_private.h"

#include <errno.h>
#include <string.h>
#include <unistd.h>

jbyteArray usb_jni_read_descriptors(JNIEnv* env, int fd) {
    if (TEMP_FAILURE_RETRY(lseek(fd, 0, SEEK_SET)) == -1) {
        ALOGE("usb_jni_read_descriptors(%d): lseek() failed: %s", fd, strerror(errno));
        return NULL;
    }

    jbyte buf[MAX_DESCRIPTORS_LENGTH];
    ssize_t n = TEMP_FAILURE_RETRY(read(fd, buf, sizeof(buf)));
    if (n == -1) {
        ALOGE("usb_jni_read_descriptors: read failed: %s", strerror(errno));
        return NULL;
    }

    jbyteArray result = env->NewByteArray(n);
    if (result) env->SetByteArrayRegion(result, 0, n, buf);
    return result;
}
Loading