X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Flib%2Fimplementations%2FVLCommandHandler.cpp;h=12a36e6c7d2988882552646e7f45ca1e5dc7149b;hb=5d7960cb1894c3038fdce35057363e082b2a62d8;hp=5f014f0d6e709bc6cc49a78b77fe156bb7effff4;hpb=d9de2aae6b2f47b8e1faacc69adba7406b9d85f0;p=deb_libcec.git diff --git a/src/lib/implementations/VLCommandHandler.cpp b/src/lib/implementations/VLCommandHandler.cpp index 5f014f0..12a36e6 100644 --- a/src/lib/implementations/VLCommandHandler.cpp +++ b/src/lib/implementations/VLCommandHandler.cpp @@ -78,9 +78,9 @@ bool CVLCommandHandler::InitHandler(void) { libcec_configuration config; m_processor->GetPrimaryClient()->GetCurrentConfiguration(config); - if (config.iDoubleTapTimeoutMs == 0) + if (config.iDoubleTapTimeout50Ms == 0) { - config.iDoubleTapTimeoutMs = CEC_DOUBLE_TAP_TIMEOUT_MS; + config.iDoubleTapTimeout50Ms = config.clientVersion >= CEC_CLIENT_VERSION_2_2_0 ? CEC_DOUBLE_TAP_TIMEOUT_50_MS : CEC_DOUBLE_TAP_TIMEOUT_MS_OLD; m_processor->GetPrimaryClient()->SetConfiguration(config); } @@ -109,19 +109,23 @@ int CVLCommandHandler::HandleDeviceVendorCommandWithId(const cec_command &comman 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 + if (command.parameters.size >= 5 && command.parameters.At(4) == 0x05) { - CLockObject lock(m_mutex); - if (m_iPowerUpEventReceived == 0) - m_iPowerUpEventReceived = GetTimeMs(); + // set the power up event time + { + CLockObject lock(m_mutex); + if (m_iPowerUpEventReceived == 0) + m_iPowerUpEventReceived = GetTimeMs(); + } + // mark the TV as powered on + m_processor->GetTV()->SetPowerStatus(CEC_POWER_STATUS_ON); + + CCECBusDevice* dev = m_processor->GetPrimaryDevice(); + if (dev && dev->IsActiveSource()) + dev->TransmitActiveSource(false); + + return COMMAND_HANDLED; } - // mark the TV as powered on - m_processor->GetTV()->SetPowerStatus(CEC_POWER_STATUS_ON); -#endif - return COMMAND_HANDLED; } else if (command.initiator == CECDEVICE_TV && command.destination == CECDEVICE_BROADCAST && @@ -249,10 +253,15 @@ int CVLCommandHandler::HandleVendorCommand(const cec_command &command) if (command.parameters.size == 3 && command.parameters[0] == 0x10 && command.parameters[1] == 0x01 && - command.parameters[2] == 0x05 && m_processor->IsHandledByLibCEC(command.destination)) { + // XXX i've seen 0x05 and 0x03 as third param. these probably indicate different types of TVs/capabilities + // when we feature abort this, then the TV will try the same thing with a vendor command with id SendVendorCommandCapabilities(m_processor->GetLogicalAddress(), command.initiator); + + CCECBusDevice* dev = m_processor->GetDevice(command.destination); + if (dev && dev->IsActiveSource()) + dev->ActivateSource(500); return COMMAND_HANDLED; }