X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;ds=inline;f=src%2Flib%2Fimplementations%2FCECCommandHandler.cpp;h=8ec93eee09d22a9902bbc24f55dc776441d61d3d;hb=de49d80bb32eef6589d7d3a2413aa684a39b7e34;hp=8c1895894253e0d5e2210da3d9b1e78bf5797205;hpb=94e9a2afff9e6bfc18fa401fc9824432475a5927;p=deb_libcec.git diff --git a/src/lib/implementations/CECCommandHandler.cpp b/src/lib/implementations/CECCommandHandler.cpp index 8c18958..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; @@ -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; } }