Merge changes I0083953e,Icc8df58d,I84e828ed,I58aff832
* changes:
Handle out-of-bound indices
Clarify which HAL (methods) apply to which devices
Update HAL interface
Add portId to HPD-related methods
diff --git a/tv/README.md b/tv/README.md
new file mode 100644
index 0000000..9a1c381
--- /dev/null
+++ b/tv/README.md
@@ -0,0 +1,8 @@
+# TV-related HIDL and AIDL HALs
+
+This directory bundles TV-related HALs in HIDL (legacy) and AIDL.
+
+- The 'tuner' directory contains the Tuner HIDL and AIDL HALs.
+- The 'input' directory contains the TV Input HIDL and AIDL HALs.
+- The 'cec' directory contains the CEC HIDL HAL.
+- The 'hdmi' directory contains the HDMI-related AIDL HALs, which includes the CEC AIDL HAL.
diff --git a/tv/hdmi/README.md b/tv/hdmi/README.md
new file mode 100644
index 0000000..183a3d0
--- /dev/null
+++ b/tv/hdmi/README.md
@@ -0,0 +1,11 @@
+# HDMI-related AIDL HALs for Android devices
+
+This directory bundles 3 HDMI-related AIDL HALs: HDMI Connection HAL, CEC HAL and eARC HAL.
+
+The HDMI Connection HAL contains general APIs for the HDMI Connection. These methods are required by
+the CEC and the eARC implementation. Therefore, devices that implement CEC need to support the HDMI
+Connection HAL and the CEC HAL. Devices that implement eARC need to support the HDMI Connection HAL
+and the eARC HAL.
+
+Other Android HALs are related to HDMI as well, but not included in this directory for historical
+reasons, e.g. Display HAL and TV Input HAL.
diff --git a/tv/hdmi/cec/aidl/aidl_api/android.hardware.tv.hdmi.cec/current/android/hardware/tv/hdmi/cec/CecDeviceType.aidl b/tv/hdmi/cec/aidl/aidl_api/android.hardware.tv.hdmi.cec/current/android/hardware/tv/hdmi/cec/CecDeviceType.aidl
index 08dc1ee..4f7e247 100644
--- a/tv/hdmi/cec/aidl/aidl_api/android.hardware.tv.hdmi.cec/current/android/hardware/tv/hdmi/cec/CecDeviceType.aidl
+++ b/tv/hdmi/cec/aidl/aidl_api/android.hardware.tv.hdmi.cec/current/android/hardware/tv/hdmi/cec/CecDeviceType.aidl
@@ -34,7 +34,7 @@
package android.hardware.tv.hdmi.cec;
@Backing(type="byte") @VintfStability
enum CecDeviceType {
- INACTIVE = -1,
+ INACTIVE = (-1) /* -1 */,
TV = 0,
RECORDER = 1,
TUNER = 3,
diff --git a/tv/hdmi/cec/aidl/aidl_api/android.hardware.tv.hdmi.cec/current/android/hardware/tv/hdmi/cec/CecMessageType.aidl b/tv/hdmi/cec/aidl/aidl_api/android.hardware.tv.hdmi.cec/current/android/hardware/tv/hdmi/cec/CecMessageType.aidl
index 31ca895..20472f0 100644
--- a/tv/hdmi/cec/aidl/aidl_api/android.hardware.tv.hdmi.cec/current/android/hardware/tv/hdmi/cec/CecMessageType.aidl
+++ b/tv/hdmi/cec/aidl/aidl_api/android.hardware.tv.hdmi.cec/current/android/hardware/tv/hdmi/cec/CecMessageType.aidl
@@ -34,78 +34,78 @@
package android.hardware.tv.hdmi.cec;
@Backing(type="int") @VintfStability
enum CecMessageType {
- FEATURE_ABORT = 0,
- IMAGE_VIEW_ON = 4,
- TUNER_STEP_INCREMENT = 5,
- TUNER_STEP_DECREMENT = 6,
- TUNER_DEVICE_STATUS = 7,
- GIVE_TUNER_DEVICE_STATUS = 8,
- RECORD_ON = 9,
- RECORD_STATUS = 10,
- RECORD_OFF = 11,
- TEXT_VIEW_ON = 13,
- RECORD_TV_SCREEN = 15,
- GIVE_DECK_STATUS = 26,
- DECK_STATUS = 27,
- SET_MENU_LANGUAGE = 50,
- CLEAR_ANALOG_TIMER = 51,
- SET_ANALOG_TIMER = 52,
- TIMER_STATUS = 53,
- STANDBY = 54,
- PLAY = 65,
- DECK_CONTROL = 66,
- TIMER_CLEARED_STATUS = 67,
- USER_CONTROL_PRESSED = 68,
- USER_CONTROL_RELEASED = 69,
- GIVE_OSD_NAME = 70,
- SET_OSD_NAME = 71,
- SET_OSD_STRING = 100,
- SET_TIMER_PROGRAM_TITLE = 103,
- SYSTEM_AUDIO_MODE_REQUEST = 112,
- GIVE_AUDIO_STATUS = 113,
- SET_SYSTEM_AUDIO_MODE = 114,
- REPORT_AUDIO_STATUS = 122,
- GIVE_SYSTEM_AUDIO_MODE_STATUS = 125,
- SYSTEM_AUDIO_MODE_STATUS = 126,
- ROUTING_CHANGE = 128,
- ROUTING_INFORMATION = 129,
- ACTIVE_SOURCE = 130,
- GIVE_PHYSICAL_ADDRESS = 131,
- REPORT_PHYSICAL_ADDRESS = 132,
- REQUEST_ACTIVE_SOURCE = 133,
- SET_STREAM_PATH = 134,
- DEVICE_VENDOR_ID = 135,
- VENDOR_COMMAND = 137,
- VENDOR_REMOTE_BUTTON_DOWN = 138,
- VENDOR_REMOTE_BUTTON_UP = 139,
- GIVE_DEVICE_VENDOR_ID = 140,
- MENU_REQUEST = 141,
- MENU_STATUS = 142,
- GIVE_DEVICE_POWER_STATUS = 143,
- REPORT_POWER_STATUS = 144,
- GET_MENU_LANGUAGE = 145,
- SELECT_ANALOG_SERVICE = 146,
- SELECT_DIGITAL_SERVICE = 147,
- SET_DIGITAL_TIMER = 151,
- CLEAR_DIGITAL_TIMER = 153,
- SET_AUDIO_RATE = 154,
- INACTIVE_SOURCE = 157,
- CEC_VERSION = 158,
- GET_CEC_VERSION = 159,
- VENDOR_COMMAND_WITH_ID = 160,
- CLEAR_EXTERNAL_TIMER = 161,
- SET_EXTERNAL_TIMER = 162,
- REPORT_SHORT_AUDIO_DESCRIPTOR = 163,
- REQUEST_SHORT_AUDIO_DESCRIPTOR = 164,
- INITIATE_ARC = 192,
- REPORT_ARC_INITIATED = 193,
- REPORT_ARC_TERMINATED = 194,
- REQUEST_ARC_INITIATION = 195,
- REQUEST_ARC_TERMINATION = 196,
- TERMINATE_ARC = 197,
- ABORT = 255,
- GIVE_FEATURES = 165,
- REPORT_FEATURES = 166,
- REQUEST_CURRENT_LATENCY = 167,
- REPORT_CURRENT_LATENCY = 168,
+ FEATURE_ABORT = 0x00,
+ IMAGE_VIEW_ON = 0x04,
+ TUNER_STEP_INCREMENT = 0x05,
+ TUNER_STEP_DECREMENT = 0x06,
+ TUNER_DEVICE_STATUS = 0x07,
+ GIVE_TUNER_DEVICE_STATUS = 0x08,
+ RECORD_ON = 0x09,
+ RECORD_STATUS = 0x0A,
+ RECORD_OFF = 0x0B,
+ TEXT_VIEW_ON = 0x0D,
+ RECORD_TV_SCREEN = 0x0F,
+ GIVE_DECK_STATUS = 0x1A,
+ DECK_STATUS = 0x1B,
+ SET_MENU_LANGUAGE = 0x32,
+ CLEAR_ANALOG_TIMER = 0x33,
+ SET_ANALOG_TIMER = 0x34,
+ TIMER_STATUS = 0x35,
+ STANDBY = 0x36,
+ PLAY = 0x41,
+ DECK_CONTROL = 0x42,
+ TIMER_CLEARED_STATUS = 0x43,
+ USER_CONTROL_PRESSED = 0x44,
+ USER_CONTROL_RELEASED = 0x45,
+ GIVE_OSD_NAME = 0x46,
+ SET_OSD_NAME = 0x47,
+ SET_OSD_STRING = 0x64,
+ SET_TIMER_PROGRAM_TITLE = 0x67,
+ SYSTEM_AUDIO_MODE_REQUEST = 0x70,
+ GIVE_AUDIO_STATUS = 0x71,
+ SET_SYSTEM_AUDIO_MODE = 0x72,
+ REPORT_AUDIO_STATUS = 0x7A,
+ GIVE_SYSTEM_AUDIO_MODE_STATUS = 0x7D,
+ SYSTEM_AUDIO_MODE_STATUS = 0x7E,
+ ROUTING_CHANGE = 0x80,
+ ROUTING_INFORMATION = 0x81,
+ ACTIVE_SOURCE = 0x82,
+ GIVE_PHYSICAL_ADDRESS = 0x83,
+ REPORT_PHYSICAL_ADDRESS = 0x84,
+ REQUEST_ACTIVE_SOURCE = 0x85,
+ SET_STREAM_PATH = 0x86,
+ DEVICE_VENDOR_ID = 0x87,
+ VENDOR_COMMAND = 0x89,
+ VENDOR_REMOTE_BUTTON_DOWN = 0x8A,
+ VENDOR_REMOTE_BUTTON_UP = 0x8B,
+ GIVE_DEVICE_VENDOR_ID = 0x8C,
+ MENU_REQUEST = 0x8D,
+ MENU_STATUS = 0x8E,
+ GIVE_DEVICE_POWER_STATUS = 0x8F,
+ REPORT_POWER_STATUS = 0x90,
+ GET_MENU_LANGUAGE = 0x91,
+ SELECT_ANALOG_SERVICE = 0x92,
+ SELECT_DIGITAL_SERVICE = 0x93,
+ SET_DIGITAL_TIMER = 0x97,
+ CLEAR_DIGITAL_TIMER = 0x99,
+ SET_AUDIO_RATE = 0x9A,
+ INACTIVE_SOURCE = 0x9D,
+ CEC_VERSION = 0x9E,
+ GET_CEC_VERSION = 0x9F,
+ VENDOR_COMMAND_WITH_ID = 0xA0,
+ CLEAR_EXTERNAL_TIMER = 0xA1,
+ SET_EXTERNAL_TIMER = 0xA2,
+ REPORT_SHORT_AUDIO_DESCRIPTOR = 0xA3,
+ REQUEST_SHORT_AUDIO_DESCRIPTOR = 0xA4,
+ INITIATE_ARC = 0xC0,
+ REPORT_ARC_INITIATED = 0xC1,
+ REPORT_ARC_TERMINATED = 0xC2,
+ REQUEST_ARC_INITIATION = 0xC3,
+ REQUEST_ARC_TERMINATION = 0xC4,
+ TERMINATE_ARC = 0xC5,
+ ABORT = 0xFF,
+ GIVE_FEATURES = 0xA5,
+ REPORT_FEATURES = 0xA6,
+ REQUEST_CURRENT_LATENCY = 0xA7,
+ REPORT_CURRENT_LATENCY = 0xA8,
}
diff --git a/tv/hdmi/cec/aidl/aidl_api/android.hardware.tv.hdmi.cec/current/android/hardware/tv/hdmi/cec/IHdmiCec.aidl b/tv/hdmi/cec/aidl/aidl_api/android.hardware.tv.hdmi.cec/current/android/hardware/tv/hdmi/cec/IHdmiCec.aidl
index 0881489..c6060d1 100644
--- a/tv/hdmi/cec/aidl/aidl_api/android.hardware.tv.hdmi.cec/current/android/hardware/tv/hdmi/cec/IHdmiCec.aidl
+++ b/tv/hdmi/cec/aidl/aidl_api/android.hardware.tv.hdmi.cec/current/android/hardware/tv/hdmi/cec/IHdmiCec.aidl
@@ -41,7 +41,7 @@
int getPhysicalAddress();
int getVendorId();
android.hardware.tv.hdmi.cec.SendMessageResult sendMessage(in android.hardware.tv.hdmi.cec.CecMessage message);
- void setCallback(in android.hardware.tv.hdmi.cec.IHdmiCecCallback callback);
+ void setCallback(in @nullable android.hardware.tv.hdmi.cec.IHdmiCecCallback callback);
void setLanguage(in String language);
void enableWakeupByOtp(in boolean value);
void enableCec(in boolean value);
diff --git a/tv/hdmi/cec/aidl/android/hardware/tv/hdmi/cec/IHdmiCec.aidl b/tv/hdmi/cec/aidl/android/hardware/tv/hdmi/cec/IHdmiCec.aidl
index 577c377..578d924 100644
--- a/tv/hdmi/cec/aidl/android/hardware/tv/hdmi/cec/IHdmiCec.aidl
+++ b/tv/hdmi/cec/aidl/android/hardware/tv/hdmi/cec/IHdmiCec.aidl
@@ -77,7 +77,7 @@
* plugged off and on again. It is advised to call getPhysicalAddress to get
* the updated address when hot plug event takes place.
*
- * @param out addr Physical address of this device.
+ * @return Physical address of this device.
*/
int getPhysicalAddress();
@@ -116,7 +116,7 @@
* previously registered callback must be replaced with this one.
* setCallback(null) should deregister the callback.
*/
- void setCallback(in IHdmiCecCallback callback);
+ void setCallback(in @nullable IHdmiCecCallback callback);
/**
* Passes the updated language information of Android system. Contains
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 98d1452..cf7c4bd 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 @@
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/HdmiPortInfo.aidl b/tv/hdmi/connection/aidl/android/hardware/tv/hdmi/connection/HdmiPortInfo.aidl
index 1d2ef4a..6bec7e5 100644
--- a/tv/hdmi/connection/aidl/android/hardware/tv/hdmi/connection/HdmiPortInfo.aidl
+++ b/tv/hdmi/connection/aidl/android/hardware/tv/hdmi/connection/HdmiPortInfo.aidl
@@ -24,10 +24,16 @@
@VintfStability
parcelable HdmiPortInfo {
HdmiPortType type;
- int portId; // Output ports should start from 1 which corresponds to HDMI "port 1".
+ int portId; // For devices with input ports (e.g. TV Panels), input ports should start from 1
+ // which corresponds to HDMI "port 1".
+
+ // In the following, 'supported' refers to having the necessary hardware and firmware on the
+ // device to support CEC/ARC/eARC on this port.
boolean cecSupported;
- boolean arcSupported;
+ boolean arcSupported; // If true, cecSupported has to be true as well. ARC cannot be supported
+ // without CEC support.
boolean eArcSupported;
+
// The physical address of the device connected to this port, valid range is 0x0000 to 0xFFFF
// (ref Sec 8.7.2 of HDMI 1.4b).
int physicalAddress;
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 c8759f2..ee6cc89 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,33 @@
* 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.
+ *
+ * This is only relevant to TV Panel devices that support eARC TX. While eARC TX is connected,
+ * the framework calls this method to set the HPD signal to {@code HDMI_HPD_STATUS_BIT}.
+ *
+ * For all other device types, this method can be stubbed.
+ *
+ * @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
+ *
+ * This is only relevant to TV Panel devices that support eARC TX. While eARC TX is connected,
+ * this method returns {@code HDMI_HPD_STATUS_BIT}.
+ *
+ * For all other device types, this method can be stubbed by always returning
+ * {@code HDMI_HPD_PHYSICAL}.
+ *
+ * @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 db9f4c1..be6247b 100644
--- a/tv/hdmi/connection/aidl/default/HdmiConnectionMock.cpp
+++ b/tv/hdmi/connection/aidl/default/HdmiConnectionMock.cpp
@@ -69,18 +69,23 @@
return ScopedAStatus::ok();
}
-ScopedAStatus HdmiConnectionMock::setHpdSignal(HpdSignal signal) {
- if (mHdmiThreadRun) {
- mHpdSignal = signal;
- return ScopedAStatus::ok();
- } else {
+ScopedAStatus HdmiConnectionMock::setHpdSignal(HpdSignal signal, int32_t portId) {
+ if (portId > mTotalPorts || portId < 1) {
+ return ScopedAStatus::fromExceptionCode(EX_ILLEGAL_ARGUMENT);
+ }
+ if (!mHdmiThreadRun) {
return ScopedAStatus::fromServiceSpecificError(
static_cast<int32_t>(Result::FAILURE_INVALID_STATE));
}
+ mHpdSignal.at(portId - 1) = signal;
+ return ScopedAStatus::ok();
}
-ScopedAStatus HdmiConnectionMock::getHpdSignal(HpdSignal* _aidl_return) {
- *_aidl_return = mHpdSignal;
+ScopedAStatus HdmiConnectionMock::getHpdSignal(int32_t portId, HpdSignal* _aidl_return) {
+ if (portId > mTotalPorts || portId < 1) {
+ return ScopedAStatus::fromExceptionCode(EX_ILLEGAL_ARGUMENT);
+ }
+ *_aidl_return = mHpdSignal.at(portId - 1);
return ScopedAStatus::ok();
}
@@ -123,7 +128,7 @@
bool connected = ((msgBuf[3]) & 0xf) > 0;
int32_t portId = static_cast<uint32_t>(msgBuf[0] & 0xf);
- if (portId > static_cast<int32_t>(mPortInfos.size())) {
+ if (portId > static_cast<int32_t>(mPortInfos.size()) || portId < 1) {
ALOGD("[halimp_aidl] ignore hot plug message, id %x does not exist", portId);
return;
}
@@ -179,6 +184,7 @@
mCallback = nullptr;
mPortInfos.resize(mTotalPorts);
mPortConnectionStatus.resize(mTotalPorts);
+ mHpdSignal.resize(mTotalPorts);
mPortInfos[0] = {.type = HdmiPortType::OUTPUT,
.portId = static_cast<uint32_t>(1),
.cecSupported = true,
@@ -186,6 +192,7 @@
.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 b879e51..c013fdd 100644
--- a/tv/hdmi/connection/aidl/default/HdmiConnectionMock.h
+++ b/tv/hdmi/connection/aidl/default/HdmiConnectionMock.h
@@ -46,8 +46,8 @@
::ndk::ScopedAStatus isConnected(int32_t portId, bool* _aidl_return) override;
::ndk::ScopedAStatus setCallback(
const std::shared_ptr<IHdmiConnectionCallback>& 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 @@
int mTotalPorts = 1;
// HPD Signal being used
- HpdSignal mHpdSignal = HpdSignal::HDMI_HPD_PHYSICAL;
+ std::vector<HpdSignal> 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 69f7ef5..a9b288b 100644
--- a/tv/hdmi/connection/aidl/vts/functional/VtsHalTvHdmiConnectionAidlTargetTest.cpp
+++ b/tv/hdmi/connection/aidl/vts/functional/VtsHalTvHdmiConnectionAidlTargetTest.cpp
@@ -93,8 +93,8 @@
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, HdpSignal) {
+ std::vector<HdmiPortInfo> 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());
+ }
}
diff --git a/tv/hdmi/earc/aidl/aidl_api/android.hardware.tv.hdmi.earc/current/android/hardware/tv/hdmi/earc/IEArcStatus.aidl b/tv/hdmi/earc/aidl/aidl_api/android.hardware.tv.hdmi.earc/current/android/hardware/tv/hdmi/earc/IEArcStatus.aidl
index 29d4ea9..6dcbd8d 100644
--- a/tv/hdmi/earc/aidl/aidl_api/android.hardware.tv.hdmi.earc/current/android/hardware/tv/hdmi/earc/IEArcStatus.aidl
+++ b/tv/hdmi/earc/aidl/aidl_api/android.hardware.tv.hdmi.earc/current/android/hardware/tv/hdmi/earc/IEArcStatus.aidl
@@ -34,8 +34,8 @@
package android.hardware.tv.hdmi.earc;
@Backing(type="byte") @VintfStability
enum IEArcStatus {
- STATUS_IDLE = 0,
- STATUS_EARC_PENDING = 1,
- STATUS_ARC_PENDING = 2,
- STATUS_EARC_CONNECTED = 3,
+ IDLE = 0,
+ EARC_PENDING = 1,
+ ARC_PENDING = 2,
+ EARC_CONNECTED = 3,
}
diff --git a/tv/hdmi/earc/aidl/android/hardware/tv/hdmi/earc/IEArc.aidl b/tv/hdmi/earc/aidl/android/hardware/tv/hdmi/earc/IEArc.aidl
index a2dde6a..d9fb29c 100644
--- a/tv/hdmi/earc/aidl/android/hardware/tv/hdmi/earc/IEArc.aidl
+++ b/tv/hdmi/earc/aidl/android/hardware/tv/hdmi/earc/IEArc.aidl
@@ -20,7 +20,7 @@
import android.hardware.tv.hdmi.earc.IEArcStatus;
/**
- * eARC HAL interface definition
+ * eARC HAL interface definition. This is only relevant to TV Panels that implement eARC TX.
*/
@VintfStability
interface IEArc {
@@ -64,10 +64,11 @@
IEArcStatus getState(in int portId);
/**
- * Getter for the most recent capabilities reported by the device connected to port.
+ * Getter for the most recent audio capabilities reported by the device connected to port.
*
* @param portId The port ID on which the device is connected.
- * @return The raw, unparsed audio capabilities
+ * @return a byte array containing the raw, unparsed audio capabilities (Ref "Section 9.5.3.6 -
+ * eARC RX Capabilities Data Structure" in HDMI 2.1 specification).
*/
byte[] getLastReportedAudioCapabilities(in int portId);
}
diff --git a/tv/hdmi/earc/aidl/android/hardware/tv/hdmi/earc/IEArcCallback.aidl b/tv/hdmi/earc/aidl/android/hardware/tv/hdmi/earc/IEArcCallback.aidl
index a11924b..ea77c54 100644
--- a/tv/hdmi/earc/aidl/android/hardware/tv/hdmi/earc/IEArcCallback.aidl
+++ b/tv/hdmi/earc/aidl/android/hardware/tv/hdmi/earc/IEArcCallback.aidl
@@ -34,9 +34,9 @@
/**
* The callback function that must be called by the eARC driver and HAL implementation to
* notify the Android framework of the audio capabilities reported by the connected device. On
- * every state change to {@code STATUS_EARC_CONNECTED}, the driver shall read the capabilities
- * reported by the eARC RX. The onStateChange callback shall always be invoked first and the
- * onCapabilitiesReported callback shall be invoked second.
+ * every state change to {@code IEArcStatus::EARC_CONNECTED}, the driver shall read the
+ * capabilities reported by the eARC RX. The onStateChange callback shall always be invoked
+ * first and the onCapabilitiesReported callback shall be invoked second.
* @param rawCapabilities The raw unparsed audio capabilities (Ref "Section 9.5.3.6 - eARC RX
* Capabilities Data Structure" in HDMI 2.1 specification).
* @param portId The port ID for which the audio capabilities are being reported
diff --git a/tv/hdmi/earc/aidl/android/hardware/tv/hdmi/earc/IEArcStatus.aidl b/tv/hdmi/earc/aidl/android/hardware/tv/hdmi/earc/IEArcStatus.aidl
index de1aaf1..5407434 100644
--- a/tv/hdmi/earc/aidl/android/hardware/tv/hdmi/earc/IEArcStatus.aidl
+++ b/tv/hdmi/earc/aidl/android/hardware/tv/hdmi/earc/IEArcStatus.aidl
@@ -22,8 +22,8 @@
@VintfStability
@Backing(type="byte")
enum IEArcStatus {
- STATUS_IDLE = 0,
- STATUS_EARC_PENDING = 1,
- STATUS_ARC_PENDING = 2,
- STATUS_EARC_CONNECTED = 3,
+ IDLE = 0,
+ EARC_PENDING = 1,
+ ARC_PENDING = 2,
+ EARC_CONNECTED = 3,
}
diff --git a/tv/hdmi/earc/aidl/default/EArcMock.cpp b/tv/hdmi/earc/aidl/default/EArcMock.cpp
index 99a845e..93395fc 100644
--- a/tv/hdmi/earc/aidl/default/EArcMock.cpp
+++ b/tv/hdmi/earc/aidl/default/EArcMock.cpp
@@ -109,7 +109,7 @@
mCallback = nullptr;
mCapabilities.resize(mTotalPorts);
mPortStatus.resize(mTotalPorts);
- mPortStatus[0] = IEArcStatus::STATUS_IDLE;
+ mPortStatus[0] = IEArcStatus::IDLE;
mDeathRecipient = ndk::ScopedAIBinder_DeathRecipient(AIBinder_DeathRecipient_new(serviceDied));
}