forked from StyxProject/system_core
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
libusbhost: factor out frameworks descriptors -> byte[] code.
Sony needed to increase the limit for a UVC device with > 4KiB descriptors, but there wasn't one clean place to do that. Tidy up, and also go straight to *16KiB* which was the largest buffer any copy of this code was using to date. Test: treehugger Change-Id: Ide41a217dcf4291a7d38836264f59e06967d9d91
- Loading branch information
1 parent
da0756b
commit b889539
Showing
6 changed files
with
108 additions
and
22 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -21,6 +21,7 @@ | |
extern "C" { | ||
#endif | ||
|
||
#include <stddef.h> | ||
#include <stdint.h> | ||
|
||
#include <linux/version.h> | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
/* | ||
* 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); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,41 @@ | ||
/* | ||
* 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; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
/* | ||
* 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 | ||
|
||
#define LOG_TAG "usbhost" | ||
#include <log/log.h> | ||
|
||
// Somewhat arbitrary: Sony has reported needing more than 4KiB (but less | ||
// than 8KiB), and some frameworks code had 16KiB without any explanation, | ||
// so we went with the largest of those. | ||
#define MAX_DESCRIPTORS_LENGTH (16 * 1024) |