From 4eaa178ddf09a8ae819558c71406e602b28cfced Mon Sep 17 00:00:00 2001 From: Nathalie Le Clair Date: Tue, 24 Jan 2023 17:26:42 +0100 Subject: [PATCH] Add portId to HPD-related methods Test: lunch cf_x86_tv-userdebug; make; atest VtsHalTvHdmiConnectionAidlTargetTest; Bug: 266178786 Change-Id: I58aff832606156bd529f2640541cad530953bd67 --- .../tv/hdmi/connection/IHdmiConnection.aidl | 4 +-- .../tv/hdmi/connection/IHdmiConnection.aidl | 10 +++++-- .../aidl/default/HdmiConnectionMock.cpp | 10 ++++--- .../aidl/default/HdmiConnectionMock.h | 6 ++-- .../VtsHalTvHdmiConnectionAidlTargetTest.cpp | 29 +++++++++++-------- 5 files changed, 36 insertions(+), 23 deletions(-) diff --git a/tv/hdmi/connection/aidl/aidl_api/android.hardware.tv.hdmi.connection/current/android/hardware/tv/hdmi/connection/IHdmiConnection.aidl b/tv/hdmi/connection/aidl/aidl_api/android.hardware.tv.hdmi.connection/current/android/hardware/tv/hdmi/connection/IHdmiConnection.aidl index 98d1452699..cf7c4bdb5e 100644 --- a/tv/hdmi/connection/aidl/aidl_api/android.hardware.tv.hdmi.connection/current/android/hardware/tv/hdmi/connection/IHdmiConnection.aidl +++ b/tv/hdmi/connection/aidl/aidl_api/android.hardware.tv.hdmi.connection/current/android/hardware/tv/hdmi/connection/IHdmiConnection.aidl @@ -37,6 +37,6 @@ interface IHdmiConnection { android.hardware.tv.hdmi.connection.HdmiPortInfo[] getPortInfo(); boolean isConnected(in int portId); void setCallback(in android.hardware.tv.hdmi.connection.IHdmiConnectionCallback callback); - void setHpdSignal(android.hardware.tv.hdmi.connection.HpdSignal signal); - android.hardware.tv.hdmi.connection.HpdSignal getHpdSignal(); + void setHpdSignal(android.hardware.tv.hdmi.connection.HpdSignal signal, in int portId); + android.hardware.tv.hdmi.connection.HpdSignal getHpdSignal(in int portId); } diff --git a/tv/hdmi/connection/aidl/android/hardware/tv/hdmi/connection/IHdmiConnection.aidl b/tv/hdmi/connection/aidl/android/hardware/tv/hdmi/connection/IHdmiConnection.aidl index c8759f2074..6c7a4381bf 100644 --- a/tv/hdmi/connection/aidl/android/hardware/tv/hdmi/connection/IHdmiConnection.aidl +++ b/tv/hdmi/connection/aidl/android/hardware/tv/hdmi/connection/IHdmiConnection.aidl @@ -55,16 +55,22 @@ interface IHdmiConnection { * signaling EDID updates). By default, the HAL will use {@code HDMI_HPD_PHYSICAL} (the physical * hotplug signal). When set to {@code HDMI_HPD_STATUS_BIT} the HAL should use the HDP status * bit. + * + * @param signal The HPD signal type to use. + * @param portId id of the port on which the HPD signal should be set. + * * @throws ServiceSpecificException with error code set to * {@code Result::FAILURE_NOT_SUPPORTED} if the signal type is not supported. * {@code Result::FAILURE_INVALID_ARGS} if the signal type is invalid. * {@code Result::FAILURE_UNKNOWN} if the signal type could not be set because of an * unknown failure. */ - void setHpdSignal(HpdSignal signal); + void setHpdSignal(HpdSignal signal, in int portId); /** * Get the current signal the HAL is using for HPD + * + * @param portId id of the port of which the current HPD signal is queried. */ - HpdSignal getHpdSignal(); + HpdSignal getHpdSignal(in int portId); } diff --git a/tv/hdmi/connection/aidl/default/HdmiConnectionMock.cpp b/tv/hdmi/connection/aidl/default/HdmiConnectionMock.cpp index db9f4c156c..8e2ac401a1 100644 --- a/tv/hdmi/connection/aidl/default/HdmiConnectionMock.cpp +++ b/tv/hdmi/connection/aidl/default/HdmiConnectionMock.cpp @@ -69,9 +69,9 @@ ScopedAStatus HdmiConnectionMock::setCallback( return ScopedAStatus::ok(); } -ScopedAStatus HdmiConnectionMock::setHpdSignal(HpdSignal signal) { +ScopedAStatus HdmiConnectionMock::setHpdSignal(HpdSignal signal, int32_t portId) { if (mHdmiThreadRun) { - mHpdSignal = signal; + mHpdSignal.at(portId - 1) = signal; return ScopedAStatus::ok(); } else { return ScopedAStatus::fromServiceSpecificError( @@ -79,8 +79,8 @@ ScopedAStatus HdmiConnectionMock::setHpdSignal(HpdSignal signal) { } } -ScopedAStatus HdmiConnectionMock::getHpdSignal(HpdSignal* _aidl_return) { - *_aidl_return = mHpdSignal; +ScopedAStatus HdmiConnectionMock::getHpdSignal(int32_t portId, HpdSignal* _aidl_return) { + *_aidl_return = mHpdSignal.at(portId - 1); return ScopedAStatus::ok(); } @@ -179,6 +179,7 @@ HdmiConnectionMock::HdmiConnectionMock() { mCallback = nullptr; mPortInfos.resize(mTotalPorts); mPortConnectionStatus.resize(mTotalPorts); + mHpdSignal.resize(mTotalPorts); mPortInfos[0] = {.type = HdmiPortType::OUTPUT, .portId = static_cast(1), .cecSupported = true, @@ -186,6 +187,7 @@ HdmiConnectionMock::HdmiConnectionMock() { .eArcSupported = false, .physicalAddress = mPhysicalAddress}; mPortConnectionStatus[0] = false; + mHpdSignal[0] = HpdSignal::HDMI_HPD_PHYSICAL; mDeathRecipient = ndk::ScopedAIBinder_DeathRecipient(AIBinder_DeathRecipient_new(serviceDied)); } diff --git a/tv/hdmi/connection/aidl/default/HdmiConnectionMock.h b/tv/hdmi/connection/aidl/default/HdmiConnectionMock.h index b879e51d59..c013fddd56 100644 --- a/tv/hdmi/connection/aidl/default/HdmiConnectionMock.h +++ b/tv/hdmi/connection/aidl/default/HdmiConnectionMock.h @@ -46,8 +46,8 @@ struct HdmiConnectionMock : public BnHdmiConnection { ::ndk::ScopedAStatus isConnected(int32_t portId, bool* _aidl_return) override; ::ndk::ScopedAStatus setCallback( const std::shared_ptr& callback) override; - ::ndk::ScopedAStatus setHpdSignal(HpdSignal signal) override; - ::ndk::ScopedAStatus getHpdSignal(HpdSignal* _aidl_return) override; + ::ndk::ScopedAStatus setHpdSignal(HpdSignal signal, int32_t portId) override; + ::ndk::ScopedAStatus getHpdSignal(int32_t portId, HpdSignal* _aidl_return) override; void printEventBuf(const char* msg_buf, int len); @@ -70,7 +70,7 @@ struct HdmiConnectionMock : public BnHdmiConnection { int mTotalPorts = 1; // HPD Signal being used - HpdSignal mHpdSignal = HpdSignal::HDMI_HPD_PHYSICAL; + std::vector mHpdSignal; // Testing variables // Input file descriptor diff --git a/tv/hdmi/connection/aidl/vts/functional/VtsHalTvHdmiConnectionAidlTargetTest.cpp b/tv/hdmi/connection/aidl/vts/functional/VtsHalTvHdmiConnectionAidlTargetTest.cpp index 69f7ef5506..a9b288ba1d 100644 --- a/tv/hdmi/connection/aidl/vts/functional/VtsHalTvHdmiConnectionAidlTargetTest.cpp +++ b/tv/hdmi/connection/aidl/vts/functional/VtsHalTvHdmiConnectionAidlTargetTest.cpp @@ -93,8 +93,8 @@ TEST_P(HdmiConnectionTest, GetPortInfo) { for (size_t i = 0; i < ports.size(); ++i) { EXPECT_TRUE((ports[i].type == HdmiPortType::OUTPUT) || (ports[i].type == HdmiPortType::INPUT)); - if (ports[i].portId == 0) { - ALOGW("%s: Port id should start from 1", __func__); + if (ports[i].type == HdmiPortType::OUTPUT && ports[i].portId <= 0) { + ALOGW("%s: Port id for output ports should start from 1", __func__); } cecSupportedOnDevice = cecSupportedOnDevice | ports[i].cecSupported; } @@ -111,16 +111,21 @@ TEST_P(HdmiConnectionTest, IsConnected) { } TEST_P(HdmiConnectionTest, HdpSignal) { + std::vector ports; + ASSERT_TRUE(hdmiConnection->getPortInfo(&ports).isOk()); HpdSignal originalSignal; HpdSignal signal = HpdSignal::HDMI_HPD_STATUS_BIT; - HpdSignal readSignal; - ASSERT_TRUE(hdmiConnection->getHpdSignal(&originalSignal).isOk()); - ASSERT_TRUE(hdmiConnection->setHpdSignal(signal).isOk()); - ASSERT_TRUE(hdmiConnection->getHpdSignal(&readSignal).isOk()); - EXPECT_EQ(readSignal, signal); - signal = HpdSignal::HDMI_HPD_PHYSICAL; - ASSERT_TRUE(hdmiConnection->setHpdSignal(signal).isOk()); - ASSERT_TRUE(hdmiConnection->getHpdSignal(&readSignal).isOk()); - EXPECT_EQ(readSignal, signal); - ASSERT_TRUE(hdmiConnection->setHpdSignal(originalSignal).isOk()); + for (size_t i = 0; i < ports.size(); ++i) { + int32_t portId = ports[i].portId; + HpdSignal readSignal; + ASSERT_TRUE(hdmiConnection->getHpdSignal(portId, &originalSignal).isOk()); + ASSERT_TRUE(hdmiConnection->setHpdSignal(signal, portId).isOk()); + ASSERT_TRUE(hdmiConnection->getHpdSignal(portId, &readSignal).isOk()); + EXPECT_EQ(readSignal, signal); + signal = HpdSignal::HDMI_HPD_PHYSICAL; + ASSERT_TRUE(hdmiConnection->setHpdSignal(signal, portId).isOk()); + ASSERT_TRUE(hdmiConnection->getHpdSignal(portId, &readSignal).isOk()); + EXPECT_EQ(readSignal, signal); + ASSERT_TRUE(hdmiConnection->setHpdSignal(originalSignal, portId).isOk()); + } }