From df693e00a86370efd17f6dd2912e61e692a9239e Mon Sep 17 00:00:00 2001 From: Ricky Niu Date: Tue, 7 Dec 2021 20:24:25 +0800 Subject: [PATCH] Implement resetUsbPort in USB HAL Bug: 197300598 Test: Check it works Signed-off-by: Ricky Niu Change-Id: Ibd6fd14faf47e1ad5d7817b006f9ba64e2ab5fb9 --- usb/usb/Usb.cpp | 25 +++++++++++++++++++++++++ usb/usb/Usb.h | 1 + 2 files changed, 26 insertions(+) diff --git a/usb/usb/Usb.cpp b/usb/usb/Usb.cpp index 32cc9c97..ba2d5b1c 100644 --- a/usb/usb/Usb.cpp +++ b/usb/usb/Usb.cpp @@ -172,6 +172,31 @@ ScopedAStatus Usb::enableUsbDataWhileDocked(const string& in_portName, return ScopedAStatus::ok(); } +ScopedAStatus Usb::resetUsbPort(const std::string& in_portName, int64_t in_transactionId) { + bool result = true; + std::vector currentPortStatus; + + ALOGI("Userspace reset USB Port. opID:%ld", in_transactionId); + + if (!WriteStringToFile("none", PULLUP_PATH)) { + ALOGI("Gadget cannot be pulled down"); + result = false; + } + + pthread_mutex_lock(&mLock); + if (mCallback != NULL) { + ::ndk::ScopedAStatus ret = mCallback->notifyResetUsbPortStatus( + in_portName, result ? Status::SUCCESS : Status::ERROR, in_transactionId); + if (!ret.isOk()) + ALOGE("notifyTransactionStatus error %s", ret.getDescription().c_str()); + } else { + ALOGE("Not notifying the userspace. Callback is not set"); + } + pthread_mutex_unlock(&mLock); + + return ::ndk::ScopedAStatus::ok(); +} + Status getI2cBusHelper(string *name) { DIR *dp; diff --git a/usb/usb/Usb.h b/usb/usb/Usb.h index 35b6cb58..1a93e191 100644 --- a/usb/usb/Usb.h +++ b/usb/usb/Usb.h @@ -69,6 +69,7 @@ struct Usb : public BnUsb { int64_t in_transactionId) override; ScopedAStatus limitPowerTransfer(const string& in_portName, bool in_limit, int64_t in_transactionId) override; + ScopedAStatus resetUsbPort(const string& in_portName, int64_t in_transactionId) override; std::shared_ptr<::aidl::android::hardware::usb::IUsbCallback> mCallback; // Protects mCallback variable