X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Flib%2Fimplementations%2FCECCommandHandler.cpp;h=8ec93eee09d22a9902bbc24f55dc776441d61d3d;hb=de49d80bb32eef6589d7d3a2413aa684a39b7e34;hp=9f9c882336e6ebcd16046600255fe880169a8058;hpb=1344fd1a7e86aa1bbc8b1e78eed6be8cd59c4b3b;p=deb_libcec.git diff --git a/src/lib/implementations/CECCommandHandler.cpp b/src/lib/implementations/CECCommandHandler.cpp index 9f9c882..8ec93ee 100644 --- a/src/lib/implementations/CECCommandHandler.cpp +++ b/src/lib/implementations/CECCommandHandler.cpp @@ -57,8 +57,6 @@ CCECCommandHandler::CCECCommandHandler(CCECBusDevice *busDevice) : CCECCommandHandler::~CCECCommandHandler(void) { - CLockObject lock(m_processor->m_transmitMutex); - CLockObject receiveLock(m_receiveMutex); m_condition.Broadcast(); } @@ -341,6 +339,7 @@ bool CCECCommandHandler::HandleGivePhysicalAddress(const cec_command &command) { device->SetActiveSource(); return device->TransmitPhysicalAddress() && + device->TransmitImageViewOn() && device->TransmitActiveSource(); } } @@ -508,6 +507,7 @@ bool CCECCommandHandler::HandleSetStreamPath(const cec_command &command) if (device && m_busDevice->MyLogicalAddressContains(device->GetLogicalAddress())) { device->SetActiveSource(); + device->TransmitImageViewOn(); device->TransmitActiveSource(); device->SetMenuState(CEC_MENU_STATE_ACTIVATED); @@ -607,6 +607,7 @@ bool CCECCommandHandler::HandleUserControlPressed(const cec_command &command) if (device->MyLogicalAddressContains(device->GetLogicalAddress())) { device->SetActiveSource(); + device->TransmitImageViewOn(); device->TransmitActiveSource(); if (device->GetType() == CEC_DEVICE_TYPE_PLAYBACK_DEVICE || @@ -715,6 +716,15 @@ void CCECCommandHandler::SetPhysicalAddress(cec_logical_address iAddress, uint16 } } +bool CCECCommandHandler::PowerOn(const cec_logical_address iInitiator, const cec_logical_address iDestination) +{ + if (iDestination == CECDEVICE_TV) + return TransmitImageViewOn(iInitiator, iDestination); + + return TransmitKeypress(iInitiator, iDestination, CEC_USER_CONTROL_CODE_POWER) && + TransmitKeyRelease(iInitiator, iDestination); +} + bool CCECCommandHandler::TransmitImageViewOn(const cec_logical_address iInitiator, const cec_logical_address iDestination) { cec_command command; @@ -962,8 +972,8 @@ bool CCECCommandHandler::Transmit(cec_command &command, bool bExpectResponse /* CLibCEC::AddLog(CEC_LOG_DEBUG, "command transmitted"); if (bExpectResponse) bReturn = m_condition.Wait(m_receiveMutex, m_bRcvSignal, m_iTransmitWait); - if (bReturn) - m_bRcvSignal = false; + m_bRcvSignal = false; + CLibCEC::AddLog(CEC_LOG_DEBUG, bReturn ? "expected response received" : "expected response not received"); } } } @@ -979,10 +989,14 @@ bool CCECCommandHandler::ActivateSource(void) primary->SetPowerStatus(CEC_POWER_STATUS_ON); primary->SetMenuState(CEC_MENU_STATE_ACTIVATED); - if (m_processor->GetPrimaryDevice()->GetPhysicalAddress(false) != 0xffff) + if (m_busDevice->GetStatus(false) == CEC_DEVICE_STATUS_HANDLED_BY_LIBCEC) { - m_processor->SetActiveSource(); - primary->TransmitMenuState(m_busDevice->GetLogicalAddress()); + m_busDevice->TransmitMenuState(CECDEVICE_TV); + + if ((m_busDevice->GetType() == CEC_DEVICE_TYPE_PLAYBACK_DEVICE || + m_busDevice->GetType() == CEC_DEVICE_TYPE_RECORDING_DEVICE) && + SendDeckStatusUpdateOnActiveSource()) + ((CCECPlaybackDevice *)m_busDevice)->TransmitDeckStatus(CECDEVICE_TV); m_bHandlerInited = true; } }