Loading adb/Android.mk +18 −1 Original line number Diff line number Diff line Loading @@ -97,6 +97,20 @@ LIBADB_TEST_windows_SRCS := \ sysdeps/win32/errno_test.cpp \ sysdeps_win32_test.cpp \ include $(CLEAR_VARS) LOCAL_CLANG := true LOCAL_MODULE := libadbd_usb LOCAL_CFLAGS := $(LIBADB_CFLAGS) -DADB_HOST=0 LOCAL_SRC_FILES := daemon/usb.cpp LOCAL_SANITIZE := $(adb_target_sanitize) # Even though we're building a static library (and thus there's no link step for # this to take effect), this adds the includes to our path. LOCAL_STATIC_LIBRARIES := libcrypto_utils libcrypto libbase include $(BUILD_STATIC_LIBRARY) include $(CLEAR_VARS) LOCAL_CLANG := true LOCAL_MODULE := libadbd Loading @@ -105,7 +119,6 @@ LOCAL_SRC_FILES := \ $(LIBADB_SRC_FILES) \ adbd_auth.cpp \ jdwp_service.cpp \ usb_linux_client.cpp \ LOCAL_SANITIZE := $(adb_target_sanitize) Loading @@ -113,6 +126,8 @@ LOCAL_SANITIZE := $(adb_target_sanitize) # this to take effect), this adds the includes to our path. LOCAL_STATIC_LIBRARIES := libcrypto_utils libcrypto libbase LOCAL_WHOLE_STATIC_LIBRARIES := libadbd_usb include $(BUILD_STATIC_LIBRARY) include $(CLEAR_VARS) Loading Loading @@ -346,3 +361,5 @@ LOCAL_STATIC_LIBRARIES := \ libdebuggerd_handler \ include $(BUILD_EXECUTABLE) include $(call first-makefiles-under,$(LOCAL_PATH)) adb/usb_linux_client.cpp→adb/daemon/usb.cpp +7 −27 Original line number Diff line number Diff line Loading @@ -40,6 +40,7 @@ #include <android-base/properties.h> #include "adb.h" #include "daemon/usb.h" #include "transport.h" using namespace std::chrono_literals; Loading @@ -60,26 +61,6 @@ using namespace std::chrono_literals; static int dummy_fd = -1; struct usb_handle { usb_handle() : kicked(false) { } std::condition_variable notify; std::mutex lock; std::atomic<bool> kicked; bool open_new_connection = true; int (*write)(usb_handle *h, const void *data, int len); int (*read)(usb_handle *h, void *data, int len); void (*kick)(usb_handle *h); void (*close)(usb_handle *h); // FunctionFS int control = -1; int bulk_out = -1; /* "out" from the host's perspective => source for adbd */ int bulk_in = -1; /* "in" from the host's perspective => sink for adbd */ }; struct func_desc { struct usb_interface_descriptor intf; struct usb_endpoint_descriptor_no_audio source; Loading Loading @@ -223,7 +204,6 @@ static struct usb_os_desc_header os_desc_header = { .Reserved = cpu_to_le32(0), }; #define STR_INTERFACE_ "ADB Interface" static const struct { Loading @@ -245,7 +225,7 @@ static const struct { }, }; static bool init_functionfs(struct usb_handle* h) { bool init_functionfs(struct usb_handle* h) { ssize_t ret; struct desc_v1 v1_descriptor; struct desc_v2 v2_descriptor; Loading adb/daemon/usb.h 0 → 100644 +50 −0 Original line number Diff line number Diff line #pragma once /* * Copyright (C) 2017 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 <atomic> #include <condition_variable> #include <mutex> // Writes larger than 16k fail on some devices (seed with 3.10.49-g209ea2f in particular). #define USB_FFS_MAX_WRITE 16384 // The kernel allocates a contiguous buffer for reads, which can fail for large ones due to // fragmentation. 16k chosen arbitrarily to match the write limit. #define USB_FFS_MAX_READ 16384 struct usb_handle { usb_handle() : kicked(false) { } std::condition_variable notify; std::mutex lock; std::atomic<bool> kicked; bool open_new_connection = true; int (*write)(usb_handle* h, const void* data, int len); int (*read)(usb_handle* h, void* data, int len); void (*kick)(usb_handle* h); void (*close)(usb_handle* h); // FunctionFS int control = -1; int bulk_out = -1; /* "out" from the host's perspective => source for adbd */ int bulk_in = -1; /* "in" from the host's perspective => sink for adbd */ }; bool init_functionfs(struct usb_handle* h); Loading
adb/Android.mk +18 −1 Original line number Diff line number Diff line Loading @@ -97,6 +97,20 @@ LIBADB_TEST_windows_SRCS := \ sysdeps/win32/errno_test.cpp \ sysdeps_win32_test.cpp \ include $(CLEAR_VARS) LOCAL_CLANG := true LOCAL_MODULE := libadbd_usb LOCAL_CFLAGS := $(LIBADB_CFLAGS) -DADB_HOST=0 LOCAL_SRC_FILES := daemon/usb.cpp LOCAL_SANITIZE := $(adb_target_sanitize) # Even though we're building a static library (and thus there's no link step for # this to take effect), this adds the includes to our path. LOCAL_STATIC_LIBRARIES := libcrypto_utils libcrypto libbase include $(BUILD_STATIC_LIBRARY) include $(CLEAR_VARS) LOCAL_CLANG := true LOCAL_MODULE := libadbd Loading @@ -105,7 +119,6 @@ LOCAL_SRC_FILES := \ $(LIBADB_SRC_FILES) \ adbd_auth.cpp \ jdwp_service.cpp \ usb_linux_client.cpp \ LOCAL_SANITIZE := $(adb_target_sanitize) Loading @@ -113,6 +126,8 @@ LOCAL_SANITIZE := $(adb_target_sanitize) # this to take effect), this adds the includes to our path. LOCAL_STATIC_LIBRARIES := libcrypto_utils libcrypto libbase LOCAL_WHOLE_STATIC_LIBRARIES := libadbd_usb include $(BUILD_STATIC_LIBRARY) include $(CLEAR_VARS) Loading Loading @@ -346,3 +361,5 @@ LOCAL_STATIC_LIBRARIES := \ libdebuggerd_handler \ include $(BUILD_EXECUTABLE) include $(call first-makefiles-under,$(LOCAL_PATH))
adb/usb_linux_client.cpp→adb/daemon/usb.cpp +7 −27 Original line number Diff line number Diff line Loading @@ -40,6 +40,7 @@ #include <android-base/properties.h> #include "adb.h" #include "daemon/usb.h" #include "transport.h" using namespace std::chrono_literals; Loading @@ -60,26 +61,6 @@ using namespace std::chrono_literals; static int dummy_fd = -1; struct usb_handle { usb_handle() : kicked(false) { } std::condition_variable notify; std::mutex lock; std::atomic<bool> kicked; bool open_new_connection = true; int (*write)(usb_handle *h, const void *data, int len); int (*read)(usb_handle *h, void *data, int len); void (*kick)(usb_handle *h); void (*close)(usb_handle *h); // FunctionFS int control = -1; int bulk_out = -1; /* "out" from the host's perspective => source for adbd */ int bulk_in = -1; /* "in" from the host's perspective => sink for adbd */ }; struct func_desc { struct usb_interface_descriptor intf; struct usb_endpoint_descriptor_no_audio source; Loading Loading @@ -223,7 +204,6 @@ static struct usb_os_desc_header os_desc_header = { .Reserved = cpu_to_le32(0), }; #define STR_INTERFACE_ "ADB Interface" static const struct { Loading @@ -245,7 +225,7 @@ static const struct { }, }; static bool init_functionfs(struct usb_handle* h) { bool init_functionfs(struct usb_handle* h) { ssize_t ret; struct desc_v1 v1_descriptor; struct desc_v2 v2_descriptor; Loading
adb/daemon/usb.h 0 → 100644 +50 −0 Original line number Diff line number Diff line #pragma once /* * Copyright (C) 2017 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 <atomic> #include <condition_variable> #include <mutex> // Writes larger than 16k fail on some devices (seed with 3.10.49-g209ea2f in particular). #define USB_FFS_MAX_WRITE 16384 // The kernel allocates a contiguous buffer for reads, which can fail for large ones due to // fragmentation. 16k chosen arbitrarily to match the write limit. #define USB_FFS_MAX_READ 16384 struct usb_handle { usb_handle() : kicked(false) { } std::condition_variable notify; std::mutex lock; std::atomic<bool> kicked; bool open_new_connection = true; int (*write)(usb_handle* h, const void* data, int len); int (*read)(usb_handle* h, void* data, int len); void (*kick)(usb_handle* h); void (*close)(usb_handle* h); // FunctionFS int control = -1; int bulk_out = -1; /* "out" from the host's perspective => source for adbd */ int bulk_in = -1; /* "in" from the host's perspective => sink for adbd */ }; bool init_functionfs(struct usb_handle* h);