diff options
author | TreeHugger Robot <treehugger-gerrit@google.com> | 2022-01-26 08:13:08 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2022-01-26 08:13:08 +0000 |
commit | 79d54bc5c259ea4a0a4c48277fbd9d0eaf93ea6d (patch) | |
tree | 61c0f7f6f2aea630405a0fe86e7415449bb3d943 | |
parent | ab62fa679b5a4f5ce21b7ceef4e56f3180b2866a (diff) | |
parent | a9040400c723551e918abb275ba13f305bb16c24 (diff) |
Merge changes from topic "resetUsbPort"
* changes:
Implement VTS for resetUsbPort and notifyResetUsbPort
Add resetUsbPort in USB HAL interface
-rw-r--r-- | usb/aidl/aidl_api/android.hardware.usb/current/android/hardware/usb/IUsb.aidl | 1 | ||||
-rw-r--r-- | usb/aidl/aidl_api/android.hardware.usb/current/android/hardware/usb/IUsbCallback.aidl | 1 | ||||
-rw-r--r-- | usb/aidl/android/hardware/usb/IUsb.aidl | 9 | ||||
-rw-r--r-- | usb/aidl/android/hardware/usb/IUsbCallback.aidl | 9 | ||||
-rw-r--r-- | usb/aidl/default/Usb.cpp | 16 | ||||
-rw-r--r-- | usb/aidl/default/Usb.h | 2 | ||||
-rw-r--r-- | usb/aidl/vts/VtsAidlUsbTargetTest.cpp | 51 |
7 files changed, 89 insertions, 0 deletions
diff --git a/usb/aidl/aidl_api/android.hardware.usb/current/android/hardware/usb/IUsb.aidl b/usb/aidl/aidl_api/android.hardware.usb/current/android/hardware/usb/IUsb.aidl index 4ba9ff8dff..f866c1eb5b 100644 --- a/usb/aidl/aidl_api/android.hardware.usb/current/android/hardware/usb/IUsb.aidl +++ b/usb/aidl/aidl_api/android.hardware.usb/current/android/hardware/usb/IUsb.aidl @@ -41,4 +41,5 @@ interface IUsb { oneway void setCallback(in android.hardware.usb.IUsbCallback callback); oneway void switchRole(in String portName, in android.hardware.usb.PortRole role, long transactionId); oneway void limitPowerTransfer(in String portName, boolean limit, long transactionId); + oneway void resetUsbPort(in String portName,long transactionId); } diff --git a/usb/aidl/aidl_api/android.hardware.usb/current/android/hardware/usb/IUsbCallback.aidl b/usb/aidl/aidl_api/android.hardware.usb/current/android/hardware/usb/IUsbCallback.aidl index 57f02c548c..4abfaec53b 100644 --- a/usb/aidl/aidl_api/android.hardware.usb/current/android/hardware/usb/IUsbCallback.aidl +++ b/usb/aidl/aidl_api/android.hardware.usb/current/android/hardware/usb/IUsbCallback.aidl @@ -41,4 +41,5 @@ interface IUsbCallback { oneway void notifyContaminantEnabledStatus(in String portName, boolean enable, in android.hardware.usb.Status retval, long transactionId); oneway void notifyQueryPortStatus(in String portName, in android.hardware.usb.Status retval, long transactionId); oneway void notifyLimitPowerTransferStatus(in String portName, boolean limit, in android.hardware.usb.Status retval, long transactionId); + oneway void notifyResetUsbPortStatus(in String portName, in android.hardware.usb.Status retval, long transactionId); } diff --git a/usb/aidl/android/hardware/usb/IUsb.aidl b/usb/aidl/android/hardware/usb/IUsb.aidl index d296fbb209..90ad115731 100644 --- a/usb/aidl/android/hardware/usb/IUsb.aidl +++ b/usb/aidl/android/hardware/usb/IUsb.aidl @@ -104,4 +104,13 @@ oneway interface IUsb { * @param transactionId ID to be used when invoking the callback. */ void limitPowerTransfer(in String portName, boolean limit, long transactionId); + + /** + * This function is used to reset the port role of a specific port. + * For instance, when data transfer through the port fails. + * + * @param portName name of the port that is being reset + * @param transactionId ID to be used when invoking the callback. + */ + void resetUsbPort(in String portName, long transactionId); } diff --git a/usb/aidl/android/hardware/usb/IUsbCallback.aidl b/usb/aidl/android/hardware/usb/IUsbCallback.aidl index e33672aa2b..2ae10d975f 100644 --- a/usb/aidl/android/hardware/usb/IUsbCallback.aidl +++ b/usb/aidl/android/hardware/usb/IUsbCallback.aidl @@ -105,4 +105,13 @@ oneway interface IUsbCallback { * @param transactionId ID sent during limitPowerTransfer request. */ void notifyLimitPowerTransferStatus(in String portName, boolean limit, in Status retval, long transactionId); + + /** + * Used to notify the result of requesting resetUsbPort. + * + * @param portName name of the port that was being reset. + * @param retval SUCCESS if current request succeeded. FAILURE otherwise. + * @param transactionId current transactionId sent during resetUsbPort request. + */ + void notifyResetUsbPortStatus(in String portName, in Status retval, long transactionId); } diff --git a/usb/aidl/default/Usb.cpp b/usb/aidl/default/Usb.cpp index 92b09a2b44..7e738c477f 100644 --- a/usb/aidl/default/Usb.cpp +++ b/usb/aidl/default/Usb.cpp @@ -90,6 +90,22 @@ ScopedAStatus Usb::enableUsbDataWhileDocked(const string& in_portName, int64_t i return ScopedAStatus::ok(); } +ScopedAStatus Usb::resetUsbPort(const string& in_portName, int64_t in_transactionId) { + + pthread_mutex_lock(&mLock); + if (mCallback != NULL) { + ScopedAStatus ret = mCallback->notifyResetUsbPortStatus( + in_portName, Status::NOT_SUPPORTED, in_transactionId); + if (!ret.isOk()) + ALOGE("notifyResetUsbPortStatus error %s", ret.getDescription().c_str()); + } else { + ALOGE("Not notifying the userspace. Callback is not set"); + } + pthread_mutex_unlock(&mLock); + + return ScopedAStatus::ok(); +} + Status queryMoistureDetectionStatus(std::vector<PortStatus> *currentPortStatus) { string enabled, status, path, DetectedPath; diff --git a/usb/aidl/default/Usb.h b/usb/aidl/default/Usb.h index 7e8422e39b..d507af6f53 100644 --- a/usb/aidl/default/Usb.h +++ b/usb/aidl/default/Usb.h @@ -58,6 +58,8 @@ struct Usb : public BnUsb { int64_t in_transactionId) override; ScopedAStatus limitPowerTransfer(const std::string& in_portName, bool in_limit, int64_t in_transactionId)override; + ScopedAStatus resetUsbPort(const std::string& in_portName, + int64_t in_transactionId)override; shared_ptr<IUsbCallback> mCallback; // Protects mCallback variable diff --git a/usb/aidl/vts/VtsAidlUsbTargetTest.cpp b/usb/aidl/vts/VtsAidlUsbTargetTest.cpp index ed3bd6e7db..ea2f985766 100644 --- a/usb/aidl/vts/VtsAidlUsbTargetTest.cpp +++ b/usb/aidl/vts/VtsAidlUsbTargetTest.cpp @@ -150,6 +150,17 @@ class UsbAidlTest : public testing::TestWithParam<std::string> { parent_.notify(); return ScopedAStatus::ok(); } + + // Callback method for the status of resetUsbPortStatus operation + ScopedAStatus notifyResetUsbPortStatus(const string& /*portName*/, Status /*retval*/, + int64_t transactionId) override { + ALOGI("enter notifyResetUsbPortStatus"); + parent_.last_transactionId = transactionId; + parent_.usb_last_cookie = cookie; + parent_.reset_usb_port_done = true; + parent_.notify(); + return ScopedAStatus::ok(); + } }; virtual void SetUp() override { @@ -223,6 +234,9 @@ class UsbAidlTest : public testing::TestWithParam<std::string> { // Flag to indicate the invocation of notifyLimitPowerTransferStatus callback. bool limit_power_transfer_done; + // Flag to indicate the invocation of notifyResetUsbPort callback. + bool reset_usb_port_done; + // Stores the cookie of the last invoked usb callback object. int usb_last_cookie; @@ -509,6 +523,43 @@ TEST_P(UsbAidlTest, limitPowerTransfer) { ALOGI("UsbAidlTest limitPowerTransfer end"); } +/* + * Test reset Usb data of the port. + * Test case queries the usb ports present in device. + * If there is at least one usb port, reset Usb data for the port. + * The callback parameters are checked to see if transaction id + * matches. + */ +TEST_P(UsbAidlTest, DISABLED_resetUsbPort) { + ALOGI("UsbAidlTest resetUsbPort start"); + int64_t transactionId = rand() % 10000; + const auto& ret = usb->queryPortStatus(transactionId); + ASSERT_TRUE(ret.isOk()); + EXPECT_EQ(std::cv_status::no_timeout, wait()); + EXPECT_EQ(2, usb_last_cookie); + EXPECT_EQ(transactionId, last_transactionId); + + if (!usb_last_port_status.portName.empty()) { + ALOGI("portname:%s", usb_last_port_status.portName.c_str()); + reset_usb_port_done = false; + transactionId = rand() % 10000; + const auto& ret = usb->resetUsbPort(usb_last_port_status.portName, transactionId); + ASSERT_TRUE(ret.isOk()); + ALOGI("UsbAidlTest resetUsbPort ret.isOk"); + + std::cv_status waitStatus = wait(); + while (waitStatus == std::cv_status::no_timeout && + reset_usb_port_done == false) + waitStatus = wait(); + + ALOGI("UsbAidlTest resetUsbPort wait()"); + EXPECT_EQ(std::cv_status::no_timeout, waitStatus); + EXPECT_EQ(2, usb_last_cookie); + EXPECT_EQ(transactionId, last_transactionId); + } + ALOGI("UsbAidlTest resetUsbPort end"); +} + GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(UsbAidlTest); INSTANTIATE_TEST_SUITE_P( PerInstance, UsbAidlTest, |