X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Flib%2Fimplementations%2FCECCommandHandler.cpp;h=5398513ab52fa8a5d20ed949d041bcb882091422;hb=784a6a797b71aafabbcbcb666b2e42ee02e13010;hp=da578b1173fa394d9c389dbe9cef427f5746945b;hpb=b509ba1aecf87e94e3408429014937443ade5314;p=deb_libcec.git diff --git a/src/lib/implementations/CECCommandHandler.cpp b/src/lib/implementations/CECCommandHandler.cpp index da578b1..5398513 100644 --- a/src/lib/implementations/CECCommandHandler.cpp +++ b/src/lib/implementations/CECCommandHandler.cpp @@ -48,6 +48,7 @@ using namespace PLATFORM; #define LIB_CEC m_busDevice->GetProcessor()->GetLib() #define ToString(p) CCECTypeUtils::ToString(p) +#define REQUEST_POWER_STATUS_TIMEOUT 5000 CCECCommandHandler::CCECCommandHandler(CCECBusDevice *busDevice, int32_t iTransmitTimeout /* = CEC_DEFAULT_TRANSMIT_TIMEOUT */, @@ -62,7 +63,8 @@ CCECCommandHandler::CCECCommandHandler(CCECBusDevice *busDevice, m_bHandlerInited(false), m_bOPTSendDeckStatusUpdateOnActiveSource(false), m_vendorId(CEC_VENDOR_UNKNOWN), - m_iActiveSourcePending(iActiveSourcePending) + m_iActiveSourcePending(iActiveSourcePending), + m_iPowerStatusRequested(0) { } @@ -815,7 +817,14 @@ bool CCECCommandHandler::TransmitImageViewOn(const cec_logical_address iInitiato cec_command command; cec_command::Format(command, iInitiator, iDestination, CEC_OPCODE_IMAGE_VIEW_ON); - return Transmit(command, false, false); + if (Transmit(command, false, false)) + { + CCECBusDevice* dest = m_processor->GetDevice(iDestination); + if (dest && dest->GetCurrentPowerStatus() != CEC_POWER_STATUS_ON) + dest->SetPowerStatus(CEC_POWER_STATUS_IN_TRANSITION_STANDBY_TO_ON); + return true; + } + return false; } bool CCECCommandHandler::TransmitStandby(const cec_logical_address iInitiator, const cec_logical_address iDestination) @@ -868,6 +877,16 @@ bool CCECCommandHandler::TransmitRequestPhysicalAddress(const cec_logical_addres bool CCECCommandHandler::TransmitRequestPowerStatus(const cec_logical_address iInitiator, const cec_logical_address iDestination, bool bWaitForResponse /* = true */) { + if (iDestination == CECDEVICE_TV) + { + int64_t now(GetTimeMs()); + if (now - m_iPowerStatusRequested < REQUEST_POWER_STATUS_TIMEOUT) + return true; + m_iPowerStatusRequested = now; + } + + LIB_CEC->AddLog(CEC_LOG_DEBUG, "<< requesting power status of '%s' (%X)", m_busDevice->GetLogicalAddressName(), iDestination); + cec_command command; cec_command::Format(command, iInitiator, iDestination, CEC_OPCODE_GIVE_DEVICE_POWER_STATUS); @@ -1128,7 +1147,9 @@ bool CCECCommandHandler::ActivateSource(bool bTransmitDelayedCommandsOnly /* = f if (m_iActiveSourcePending == 0 || GetTimeMs() < m_iActiveSourcePending) return false; +#ifdef CEC_DEBUGGING LIB_CEC->AddLog(CEC_LOG_DEBUG, "transmitting delayed activate source command"); +#endif } }