X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Flib%2Fimplementations%2FVLCommandHandler.cpp;h=329eab2f930cff5b547417bd75057ecd526bde7c;hb=218f72df99cc28f0bb446a078823d6fe356a8c2c;hp=44feabc4f4e5efe0e6cd74739121605646ca74fd;hpb=16f47961800432dbdd5b3ead717908f383d26d6b;p=deb_libcec.git diff --git a/src/lib/implementations/VLCommandHandler.cpp b/src/lib/implementations/VLCommandHandler.cpp index 44feabc..329eab2 100644 --- a/src/lib/implementations/VLCommandHandler.cpp +++ b/src/lib/implementations/VLCommandHandler.cpp @@ -106,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); @@ -119,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) { @@ -248,9 +249,10 @@ 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); return COMMAND_HANDLED; } @@ -261,7 +263,7 @@ int CVLCommandHandler::HandleVendorCommand(const cec_command &command) bool CVLCommandHandler::SourceSwitchAllowed(void) { if (!PowerUpEventReceived()) - TransmitRequestPowerStatus(m_processor->GetPrimaryDevice()->GetLogicalAddress(), CECDEVICE_TV, false); + TransmitRequestPowerStatus(m_processor->GetPrimaryDevice()->GetLogicalAddress(), CECDEVICE_TV, false, false); return PowerUpEventReceived(); }