summaryrefslogtreecommitdiffstats
path: root/usbd
diff options
context:
space:
mode:
authorBadhri Jagan Sridharan <Badhri@google.com>2017-12-02 13:15:01 -0800
committerBadhri Jagan Sridharan <Badhri@google.com>2018-01-16 18:03:58 -0800
commit5e1a0ca634382752d5f755ab7e0e301aff187df1 (patch)
tree82ad69ac64994863ae62670ab3ab0178e4593bd4 /usbd
parentda007e0deb1f7149565766ae72499e48fb821bf0 (diff)
downloadsystem_core-5e1a0ca634382752d5f755ab7e0e301aff187df1.tar.gz
system_core-5e1a0ca634382752d5f755ab7e0e301aff187df1.tar.bz2
system_core-5e1a0ca634382752d5f755ab7e0e301aff187df1.zip
Initial commit for usb daemon
usbd checks whether adb is enabled by default, if yes, would start adbd and would call into usb hal to configure usb gadget stack. Bug: 63669128 Test: Verify that adb gets configured when enabled Change-Id: If6d06cdadd6d93f181d56619142cbbb04d39a5cd
Diffstat (limited to 'usbd')
-rw-r--r--usbd/Android.bp16
-rw-r--r--usbd/usbd.cpp56
-rw-r--r--usbd/usbd.rc5
3 files changed, 77 insertions, 0 deletions
diff --git a/usbd/Android.bp b/usbd/Android.bp
new file mode 100644
index 000000000..4f9338fef
--- /dev/null
+++ b/usbd/Android.bp
@@ -0,0 +1,16 @@
+cc_binary {
+ name: "usbd",
+ init_rc: ["usbd.rc"],
+ srcs: ["usbd.cpp"],
+ shared_libs: [
+ "libbase",
+ "libhidlbase",
+ "libhidltransport",
+ "liblog",
+ "libutils",
+ "libhardware",
+ "android.hardware.usb.gadget@1.0",
+ "libcutils",
+ ],
+}
+
diff --git a/usbd/usbd.cpp b/usbd/usbd.cpp
new file mode 100644
index 000000000..41cd8dd9b
--- /dev/null
+++ b/usbd/usbd.cpp
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2018 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.
+ */
+
+#define LOG_TAG "usbd"
+
+#include <string>
+
+#include <android-base/logging.h>
+#include <android-base/properties.h>
+#include <android/hardware/usb/gadget/1.0/IUsbGadget.h>
+
+#define PERSISTENT_USB_CONFIG "persist.sys.usb.config"
+
+using android::base::GetProperty;
+using android::base::SetProperty;
+using android::hardware::usb::gadget::V1_0::GadgetFunction;
+using android::hardware::usb::gadget::V1_0::IUsbGadget;
+using android::hardware::Return;
+
+int main(int /*argc*/, char** /*argv*/) {
+ android::sp<IUsbGadget> gadget = IUsbGadget::getService();
+ Return<void> ret;
+
+ if (gadget != nullptr) {
+ LOG(INFO) << "Usb HAL found.";
+ std::string function = GetProperty(PERSISTENT_USB_CONFIG, "");
+ if (function == "adb") {
+ LOG(INFO) << "peristent prop is adb";
+ SetProperty("ctl.start", "adbd");
+ ret = gadget->setCurrentUsbFunctions(static_cast<uint64_t>(GadgetFunction::ADB),
+ nullptr, 0);
+ } else {
+ LOG(INFO) << "Signal MTP to enable default functions";
+ ret = gadget->setCurrentUsbFunctions(static_cast<uint64_t>(GadgetFunction::MTP),
+ nullptr, 0);
+ }
+
+ if (!ret.isOk()) LOG(ERROR) << "Error while invoking usb hal";
+ } else {
+ LOG(INFO) << "Usb HAL not found";
+ }
+ exit(0);
+}
diff --git a/usbd/usbd.rc b/usbd/usbd.rc
new file mode 100644
index 000000000..c7838e831
--- /dev/null
+++ b/usbd/usbd.rc
@@ -0,0 +1,5 @@
+service usbd /system/bin/usbd
+ class late_start
+ oneshot
+ user root
+ group root usb