Loading tv/cec/1.0/default/HdmiCecDefault.cpp +53 −1 Original line number Diff line number Diff line Loading @@ -42,6 +42,7 @@ HdmiCecDefault::HdmiCecDefault() { mExitFd = -1; mCecEnabled = false; mWakeupEnabled = false; mCecControlEnabled = false; mCallback = nullptr; } Loading Loading @@ -242,7 +243,9 @@ Return<void> HdmiCecDefault::setOption(OptionKey key, bool value) { LOG(DEBUG) << "setOption: WAKEUP: " << value; mWakeupEnabled = value; break; default: case OptionKey::SYSTEM_CEC_CONTROL: LOG(DEBUG) << "setOption: SYSTEM_CEC_CONTROL: " << value; mCecControlEnabled = value; break; } return Void(); Loading Loading @@ -311,6 +314,7 @@ Return<Result> HdmiCecDefault::init() { mCecEnabled = true; mWakeupEnabled = true; mCecControlEnabled = true; return Result::SUCCESS; } Loading @@ -330,6 +334,7 @@ Return<void> HdmiCecDefault::release() { } mCecEnabled = false; mWakeupEnabled = false; mCecControlEnabled = false; setCallback(nullptr); return Void(); } Loading Loading @@ -404,6 +409,11 @@ void HdmiCecDefault::event_thread() { continue; } if (!mCecControlEnabled && !isTransferableInSleep(msg)) { LOG(DEBUG) << "Filter message in standby mode"; continue; } if (mCallback != nullptr) { size_t length = std::min(msg.len - 1, (uint32_t)MaxLength::MESSAGE_BODY); CecMessage cecMessage{ Loading Loading @@ -437,6 +447,48 @@ bool HdmiCecDefault::isWakeupMessage(cec_msg message) { } } bool HdmiCecDefault::isTransferableInSleep(cec_msg message) { int opcode = getOpcode(message); switch (opcode) { case CEC_MESSAGE_ABORT: case CEC_MESSAGE_DEVICE_VENDOR_ID: case CEC_MESSAGE_GET_CEC_VERSION: case CEC_MESSAGE_GET_MENU_LANGUAGE: case CEC_MESSAGE_GIVE_DEVICE_POWER_STATUS: case CEC_MESSAGE_GIVE_DEVICE_VENDOR_ID: case CEC_MESSAGE_GIVE_OSD_NAME: case CEC_MESSAGE_GIVE_PHYSICAL_ADDRESS: case CEC_MESSAGE_REPORT_PHYSICAL_ADDRESS: case CEC_MESSAGE_REPORT_POWER_STATUS: case CEC_MESSAGE_SET_OSD_NAME: case CEC_MESSAGE_DECK_CONTROL: case CEC_MESSAGE_PLAY: case CEC_MESSAGE_IMAGE_VIEW_ON: case CEC_MESSAGE_TEXT_VIEW_ON: case CEC_MESSAGE_SYSTEM_AUDIO_MODE_REQUEST: return true; case CEC_MESSAGE_USER_CONTROL_PRESSED: return isPowerUICommand(message); default: return false; } } int HdmiCecDefault::getFirstParam(cec_msg message) { return static_cast<uint8_t>(message.msg[2]); } bool HdmiCecDefault::isPowerUICommand(cec_msg message) { int uiCommand = getFirstParam(message); switch (uiCommand) { case CEC_OP_UI_CMD_POWER: case CEC_OP_UI_CMD_DEVICE_ROOT_MENU: case CEC_OP_UI_CMD_POWER_ON_FUNCTION: return true; default: return false; } } } // namespace implementation } // namespace V1_0 } // namespace cec Loading tv/cec/1.0/default/HdmiCecDefault.h +10 −0 Original line number Diff line number Diff line Loading @@ -56,7 +56,10 @@ class HdmiCecDefault : public IHdmiCec, public hidl_death_recipient { private: void event_thread(); static int getOpcode(cec_msg message); static int getFirstParam(cec_msg message); static bool isWakeupMessage(cec_msg message); static bool isTransferableInSleep(cec_msg message); static bool isPowerUICommand(cec_msg message); thread mEventThread; Loading @@ -67,6 +70,13 @@ class HdmiCecDefault : public IHdmiCec, public hidl_death_recipient { * <Text View On>. True by default after initialization. */ bool mWakeupEnabled; /* * Updated when system goes into or comes out of standby mode. * When set to true, Android system is handling CEC commands. * When set to false, microprocessor is handling CEC commands. * True by default after initialization. */ bool mCecControlEnabled; sp<IHdmiCecCallback> mCallback; int mCecFd; Loading Loading
tv/cec/1.0/default/HdmiCecDefault.cpp +53 −1 Original line number Diff line number Diff line Loading @@ -42,6 +42,7 @@ HdmiCecDefault::HdmiCecDefault() { mExitFd = -1; mCecEnabled = false; mWakeupEnabled = false; mCecControlEnabled = false; mCallback = nullptr; } Loading Loading @@ -242,7 +243,9 @@ Return<void> HdmiCecDefault::setOption(OptionKey key, bool value) { LOG(DEBUG) << "setOption: WAKEUP: " << value; mWakeupEnabled = value; break; default: case OptionKey::SYSTEM_CEC_CONTROL: LOG(DEBUG) << "setOption: SYSTEM_CEC_CONTROL: " << value; mCecControlEnabled = value; break; } return Void(); Loading Loading @@ -311,6 +314,7 @@ Return<Result> HdmiCecDefault::init() { mCecEnabled = true; mWakeupEnabled = true; mCecControlEnabled = true; return Result::SUCCESS; } Loading @@ -330,6 +334,7 @@ Return<void> HdmiCecDefault::release() { } mCecEnabled = false; mWakeupEnabled = false; mCecControlEnabled = false; setCallback(nullptr); return Void(); } Loading Loading @@ -404,6 +409,11 @@ void HdmiCecDefault::event_thread() { continue; } if (!mCecControlEnabled && !isTransferableInSleep(msg)) { LOG(DEBUG) << "Filter message in standby mode"; continue; } if (mCallback != nullptr) { size_t length = std::min(msg.len - 1, (uint32_t)MaxLength::MESSAGE_BODY); CecMessage cecMessage{ Loading Loading @@ -437,6 +447,48 @@ bool HdmiCecDefault::isWakeupMessage(cec_msg message) { } } bool HdmiCecDefault::isTransferableInSleep(cec_msg message) { int opcode = getOpcode(message); switch (opcode) { case CEC_MESSAGE_ABORT: case CEC_MESSAGE_DEVICE_VENDOR_ID: case CEC_MESSAGE_GET_CEC_VERSION: case CEC_MESSAGE_GET_MENU_LANGUAGE: case CEC_MESSAGE_GIVE_DEVICE_POWER_STATUS: case CEC_MESSAGE_GIVE_DEVICE_VENDOR_ID: case CEC_MESSAGE_GIVE_OSD_NAME: case CEC_MESSAGE_GIVE_PHYSICAL_ADDRESS: case CEC_MESSAGE_REPORT_PHYSICAL_ADDRESS: case CEC_MESSAGE_REPORT_POWER_STATUS: case CEC_MESSAGE_SET_OSD_NAME: case CEC_MESSAGE_DECK_CONTROL: case CEC_MESSAGE_PLAY: case CEC_MESSAGE_IMAGE_VIEW_ON: case CEC_MESSAGE_TEXT_VIEW_ON: case CEC_MESSAGE_SYSTEM_AUDIO_MODE_REQUEST: return true; case CEC_MESSAGE_USER_CONTROL_PRESSED: return isPowerUICommand(message); default: return false; } } int HdmiCecDefault::getFirstParam(cec_msg message) { return static_cast<uint8_t>(message.msg[2]); } bool HdmiCecDefault::isPowerUICommand(cec_msg message) { int uiCommand = getFirstParam(message); switch (uiCommand) { case CEC_OP_UI_CMD_POWER: case CEC_OP_UI_CMD_DEVICE_ROOT_MENU: case CEC_OP_UI_CMD_POWER_ON_FUNCTION: return true; default: return false; } } } // namespace implementation } // namespace V1_0 } // namespace cec Loading
tv/cec/1.0/default/HdmiCecDefault.h +10 −0 Original line number Diff line number Diff line Loading @@ -56,7 +56,10 @@ class HdmiCecDefault : public IHdmiCec, public hidl_death_recipient { private: void event_thread(); static int getOpcode(cec_msg message); static int getFirstParam(cec_msg message); static bool isWakeupMessage(cec_msg message); static bool isTransferableInSleep(cec_msg message); static bool isPowerUICommand(cec_msg message); thread mEventThread; Loading @@ -67,6 +70,13 @@ class HdmiCecDefault : public IHdmiCec, public hidl_death_recipient { * <Text View On>. True by default after initialization. */ bool mWakeupEnabled; /* * Updated when system goes into or comes out of standby mode. * When set to true, Android system is handling CEC commands. * When set to false, microprocessor is handling CEC commands. * True by default after initialization. */ bool mCecControlEnabled; sp<IHdmiCecCallback> mCallback; int mCecFd; Loading