X-Git-Url: https://git.piment-noir.org/?p=deb_libcec.git;a=blobdiff_plain;f=src%2Flib%2Fimplementations%2FVLCommandHandler.cpp;h=907de02dda786e69892d4419613bb619cbc00e6e;hp=d14bec66cd1fe0c71cd569ab3bec21c53ab0a390;hb=9382b58c7f7bb023eec1122bd149e772257dfb96;hpb=d404793f234fb1605f919399a71b27b18e252639 diff --git a/src/lib/implementations/VLCommandHandler.cpp b/src/lib/implementations/VLCommandHandler.cpp index d14bec6..907de02 100644 --- a/src/lib/implementations/VLCommandHandler.cpp +++ b/src/lib/implementations/VLCommandHandler.cpp @@ -1,7 +1,7 @@ /* * This file is part of the libCEC(R) library. * - * libCEC(R) is Copyright (C) 2011-2012 Pulse-Eight Limited. All rights reserved. + * libCEC(R) is Copyright (C) 2011-2013 Pulse-Eight Limited. All rights reserved. * libCEC(R) is an original work, containing original code. * * libCEC(R) is a trademark of Pulse-Eight Limited. @@ -45,8 +45,6 @@ #define VL_POWERED_DOWN 0x01 #define VL_UNKNOWN1 0x06 -#define VL_REQUEST_POWER_STATUS_TIMEOUT 5000 - using namespace CEC; using namespace PLATFORM; @@ -63,8 +61,7 @@ CVLCommandHandler::CVLCommandHandler(CCECBusDevice *busDevice, int64_t iActiveSourcePending /* = 0 */) : CCECCommandHandler(busDevice, iTransmitTimeout, iTransmitWait, iTransmitRetries, iActiveSourcePending), m_iPowerUpEventReceived(0), - m_bCapabilitiesSent(false), - m_iPowerStatusRequested(0) + m_bCapabilitiesSent(false) { m_vendorId = CEC_VENDOR_PANASONIC; } @@ -79,13 +76,21 @@ bool CVLCommandHandler::InitHandler(void) { if (primary && m_busDevice->GetLogicalAddress() != primary->GetLogicalAddress()) { + libcec_configuration config; + m_processor->GetPrimaryClient()->GetCurrentConfiguration(config); + if (config.iDoubleTapTimeoutMs == 0) + { + config.iDoubleTapTimeoutMs = CEC_DOUBLE_TAP_TIMEOUT_MS; + m_processor->GetPrimaryClient()->SetConfiguration(config); + } + primary->SetVendorId(CEC_VENDOR_PANASONIC); primary->ReplaceHandler(false); } - } - if (primary->GetType() == CEC_DEVICE_TYPE_RECORDING_DEVICE) - return m_processor->GetPrimaryClient()->ChangeDeviceType(CEC_DEVICE_TYPE_RECORDING_DEVICE, CEC_DEVICE_TYPE_PLAYBACK_DEVICE); + if (primary->GetType() == CEC_DEVICE_TYPE_RECORDING_DEVICE) + return m_processor->GetPrimaryClient()->ChangeDeviceType(CEC_DEVICE_TYPE_RECORDING_DEVICE, CEC_DEVICE_TYPE_PLAYBACK_DEVICE); + } } return CCECCommandHandler::InitHandler(); @@ -101,11 +106,12 @@ int CVLCommandHandler::HandleDeviceVendorCommandWithId(const cec_command &comman command.parameters[2] != 0x45) return CEC_ABORT_REASON_INVALID_OPERAND; - // XXX this is also sent when the TV is powered off -#if 0 if (command.initiator == CECDEVICE_TV && command.parameters.At(3) == VL_UNKNOWN1) { + // XXX this is also sent when the TV is powered off + // TODO power up sends 06:05. check whether this is also sent on power off +#if 0 // set the power up event time { CLockObject lock(m_mutex); @@ -114,10 +120,10 @@ int CVLCommandHandler::HandleDeviceVendorCommandWithId(const cec_command &comman } // mark the TV as powered on m_processor->GetTV()->SetPowerStatus(CEC_POWER_STATUS_ON); - } - else #endif - if (command.initiator == CECDEVICE_TV && + return COMMAND_HANDLED; + } + else if (command.initiator == CECDEVICE_TV && command.destination == CECDEVICE_BROADCAST && command.parameters.At(3) == VL_POWER_CHANGE) { @@ -253,16 +259,9 @@ int CVLCommandHandler::HandleVendorCommand(const cec_command &command) return CEC_ABORT_REASON_INVALID_OPERAND; } -bool CVLCommandHandler::TransmitRequestPowerStatus(const cec_logical_address iInitiator, const cec_logical_address iDestination, bool bWaitForResponse /* = true */) -{ - m_iPowerStatusRequested = GetTimeMs(); - return CCECCommandHandler::TransmitRequestPowerStatus(iInitiator, iDestination, bWaitForResponse); -} - bool CVLCommandHandler::SourceSwitchAllowed(void) { - int64_t now(GetTimeMs()); - if (!PowerUpEventReceived() && now - m_iPowerStatusRequested > VL_REQUEST_POWER_STATUS_TIMEOUT) + if (!PowerUpEventReceived()) TransmitRequestPowerStatus(m_processor->GetPrimaryDevice()->GetLogicalAddress(), CECDEVICE_TV, false); return PowerUpEventReceived();