Loading usbd/Android.bp +2 −0 Original line number Diff line number Diff line Loading @@ -8,10 +8,12 @@ cc_binary { srcs: ["usbd.cpp"], shared_libs: [ "libbase", "libbinder_ndk", "libhidlbase", "liblog", "libutils", "libhardware", "android.hardware.usb.gadget@1.0", "android.hardware.usb.gadget-V1-ndk", ], } usbd/usbd.cpp +58 −23 Original line number Diff line number Diff line Loading @@ -18,32 +18,66 @@ #include <string> #include <aidl/android/hardware/usb/gadget/GadgetFunction.h> #include <aidl/android/hardware/usb/gadget/IUsbGadget.h> #include <android-base/logging.h> #include <android-base/properties.h> #include <android/binder_manager.h> #include <android/binder_process.h> #include <android/hardware/usb/gadget/1.0/IUsbGadget.h> #include <hidl/HidlTransportSupport.h> using aidl::android::hardware::usb::gadget::GadgetFunction; using android::base::GetProperty; using android::base::SetProperty; using android::hardware::configureRpcThreadpool; using android::hardware::usb::gadget::V1_0::GadgetFunction; using android::hardware::usb::gadget::V1_0::IUsbGadget; using android::hardware::Return; using ndk::ScopedAStatus; using std::shared_ptr; std::atomic<int> sUsbOperationCount{}; int main(int /*argc*/, char** /*argv*/) { if (GetProperty("ro.bootmode", "") == "charger") exit(0); int operationId = sUsbOperationCount++; configureRpcThreadpool(1, true /*callerWillJoin*/); android::sp<IUsbGadget> gadget = IUsbGadget::getService(); Return<void> ret; ABinderProcess_setThreadPoolMaxThreadCount(1); ABinderProcess_startThreadPool(); const std::string service_name = std::string(aidl::android::hardware::usb::gadget::IUsbGadget::descriptor) .append("/default"); if (gadget != nullptr) { LOG(INFO) << "Usb HAL found."; std::string function = GetProperty("persist.sys.usb.config", ""); if (function == "adb") { LOG(INFO) << "peristent prop is adb"; LOG(INFO) << "persistent prop is adb"; SetProperty("ctl.start", "adbd"); } if (AServiceManager_isDeclared(service_name.c_str())) { shared_ptr<aidl::android::hardware::usb::gadget::IUsbGadget> gadget_aidl = aidl::android::hardware::usb::gadget::IUsbGadget::fromBinder( ndk::SpAIBinder(AServiceManager_waitForService(service_name.c_str()))); ScopedAStatus ret; if (gadget_aidl != nullptr) { LOG(INFO) << "Usb AIDL HAL found."; if (function == "adb") { ret = gadget_aidl->setCurrentUsbFunctions( static_cast<uint64_t>(GadgetFunction::ADB), nullptr, 0, operationId); } else { LOG(INFO) << "Signal MTP to enable default functions"; ret = gadget_aidl->setCurrentUsbFunctions( static_cast<uint64_t>(GadgetFunction::MTP), nullptr, 0, operationId); } if (!ret.isOk()) LOG(ERROR) << "Error while invoking usb hal"; } else { LOG(INFO) << "Usb AIDL HAL not found"; } } else { android::sp<android::hardware::usb::gadget::V1_0::IUsbGadget> gadget = android::hardware::usb::gadget::V1_0::IUsbGadget::getService(); Return<void> ret; if (gadget != nullptr) { LOG(INFO) << "Usb HAL found."; if (function == "adb") { ret = gadget->setCurrentUsbFunctions(static_cast<uint64_t>(GadgetFunction::ADB), nullptr, 0); } else { Loading @@ -56,5 +90,6 @@ int main(int /*argc*/, char** /*argv*/) { } else { LOG(INFO) << "Usb HAL not found"; } } exit(0); } Loading
usbd/Android.bp +2 −0 Original line number Diff line number Diff line Loading @@ -8,10 +8,12 @@ cc_binary { srcs: ["usbd.cpp"], shared_libs: [ "libbase", "libbinder_ndk", "libhidlbase", "liblog", "libutils", "libhardware", "android.hardware.usb.gadget@1.0", "android.hardware.usb.gadget-V1-ndk", ], }
usbd/usbd.cpp +58 −23 Original line number Diff line number Diff line Loading @@ -18,32 +18,66 @@ #include <string> #include <aidl/android/hardware/usb/gadget/GadgetFunction.h> #include <aidl/android/hardware/usb/gadget/IUsbGadget.h> #include <android-base/logging.h> #include <android-base/properties.h> #include <android/binder_manager.h> #include <android/binder_process.h> #include <android/hardware/usb/gadget/1.0/IUsbGadget.h> #include <hidl/HidlTransportSupport.h> using aidl::android::hardware::usb::gadget::GadgetFunction; using android::base::GetProperty; using android::base::SetProperty; using android::hardware::configureRpcThreadpool; using android::hardware::usb::gadget::V1_0::GadgetFunction; using android::hardware::usb::gadget::V1_0::IUsbGadget; using android::hardware::Return; using ndk::ScopedAStatus; using std::shared_ptr; std::atomic<int> sUsbOperationCount{}; int main(int /*argc*/, char** /*argv*/) { if (GetProperty("ro.bootmode", "") == "charger") exit(0); int operationId = sUsbOperationCount++; configureRpcThreadpool(1, true /*callerWillJoin*/); android::sp<IUsbGadget> gadget = IUsbGadget::getService(); Return<void> ret; ABinderProcess_setThreadPoolMaxThreadCount(1); ABinderProcess_startThreadPool(); const std::string service_name = std::string(aidl::android::hardware::usb::gadget::IUsbGadget::descriptor) .append("/default"); if (gadget != nullptr) { LOG(INFO) << "Usb HAL found."; std::string function = GetProperty("persist.sys.usb.config", ""); if (function == "adb") { LOG(INFO) << "peristent prop is adb"; LOG(INFO) << "persistent prop is adb"; SetProperty("ctl.start", "adbd"); } if (AServiceManager_isDeclared(service_name.c_str())) { shared_ptr<aidl::android::hardware::usb::gadget::IUsbGadget> gadget_aidl = aidl::android::hardware::usb::gadget::IUsbGadget::fromBinder( ndk::SpAIBinder(AServiceManager_waitForService(service_name.c_str()))); ScopedAStatus ret; if (gadget_aidl != nullptr) { LOG(INFO) << "Usb AIDL HAL found."; if (function == "adb") { ret = gadget_aidl->setCurrentUsbFunctions( static_cast<uint64_t>(GadgetFunction::ADB), nullptr, 0, operationId); } else { LOG(INFO) << "Signal MTP to enable default functions"; ret = gadget_aidl->setCurrentUsbFunctions( static_cast<uint64_t>(GadgetFunction::MTP), nullptr, 0, operationId); } if (!ret.isOk()) LOG(ERROR) << "Error while invoking usb hal"; } else { LOG(INFO) << "Usb AIDL HAL not found"; } } else { android::sp<android::hardware::usb::gadget::V1_0::IUsbGadget> gadget = android::hardware::usb::gadget::V1_0::IUsbGadget::getService(); Return<void> ret; if (gadget != nullptr) { LOG(INFO) << "Usb HAL found."; if (function == "adb") { ret = gadget->setCurrentUsbFunctions(static_cast<uint64_t>(GadgetFunction::ADB), nullptr, 0); } else { Loading @@ -56,5 +90,6 @@ int main(int /*argc*/, char** /*argv*/) { } else { LOG(INFO) << "Usb HAL not found"; } } exit(0); }