CEC: Add implementation of WAKEUP option to default HdmiCec
When WAKEUP is set to false, HAL does not wake up the system
upon receiving <Image View On> or <Text View On> messages.
Bug: 185434120
Test: manual
Change-Id: Iaf98020decc887f04b02da480adc70b76189b66d
diff --git a/tv/cec/1.0/default/HdmiCecDefault.cpp b/tv/cec/1.0/default/HdmiCecDefault.cpp
index 8ce4d11..299bcf0 100644
--- a/tv/cec/1.0/default/HdmiCecDefault.cpp
+++ b/tv/cec/1.0/default/HdmiCecDefault.cpp
@@ -38,6 +38,11 @@
// When set to false, all the CEC commands are discarded. True by default after initialization.
bool mCecEnabled;
+/*
+ * When set to false, HAL does not wake up the system upon receiving <Image View On> or
+ * <Text View On>. True by default after initialization.
+ */
+bool mWakeupEnabled;
int mCecFd;
int mExitFd;
@@ -48,6 +53,7 @@
mCecFd = -1;
mExitFd = -1;
mCecEnabled = false;
+ mWakeupEnabled = false;
mCallback = nullptr;
}
@@ -244,6 +250,10 @@
LOG(DEBUG) << "setOption: Enable CEC: " << value;
mCecEnabled = value;
break;
+ case OptionKey::WAKEUP:
+ LOG(DEBUG) << "setOption: WAKEUP: " << value;
+ mWakeupEnabled = value;
+ break;
default:
break;
}
@@ -317,6 +327,7 @@
}
mCecEnabled = true;
+ mWakeupEnabled = true;
return Result::SUCCESS;
}
@@ -333,6 +344,7 @@
close(mCecFd);
}
mCecEnabled = false;
+ mWakeupEnabled = false;
setCallback(nullptr);
return Void();
}
@@ -402,6 +414,11 @@
continue;
}
+ if (!mWakeupEnabled && isWakeupMessage(msg)) {
+ LOG(DEBUG) << "Filter wakeup message";
+ continue;
+ }
+
if (mCallback != nullptr) {
size_t length = std::min(msg.len - 1, (uint32_t)MaxLength::MESSAGE_BODY);
CecMessage cecMessage{
@@ -421,6 +438,21 @@
return NULL;
}
+int HdmiCecDefault::getOpcode(struct cec_msg message) {
+ return (static_cast<uint8_t>(message.msg[1]) & 0xff);
+}
+
+bool HdmiCecDefault::isWakeupMessage(struct cec_msg message) {
+ int opcode = getOpcode(message);
+ switch (opcode) {
+ case CEC_MESSAGE_TEXT_VIEW_ON:
+ case CEC_MESSAGE_IMAGE_VIEW_ON:
+ return true;
+ default:
+ return false;
+ }
+}
+
} // namespace implementation
} // namespace V1_0
} // namespace cec