primary->ReplaceHandler(false);
}
- /* LG TVs don't always reply to CEC version requests, so just set it to 1.3a */
- if (m_busDevice->GetLogicalAddress() == CECDEVICE_TV)
- m_busDevice->SetCecVersion(CEC_VERSION_1_3A);
+ /* LG devices don't always reply to CEC version requests, so just set it to 1.3a */
+ m_busDevice->SetCecVersion(CEC_VERSION_1_3A);
/* LG devices always return "korean" as language */
cec_menu_language lang;
{
cec_command response;
cec_command::Format(response, m_processor->GetLogicalAddress(), command.initiator, CEC_OPCODE_FEATURE_ABORT);
- return Transmit(response);
+ return Transmit(response, false);
}
return true;
}
{
SetSLInitialised();
device->SetActiveSource();
- ActivateSource();
+ device->SetPowerStatus(CEC_POWER_STATUS_IN_TRANSITION_STANDBY_TO_ON);
+ device->TransmitPowerState(command.initiator);
+
+ CEvent::Sleep(2000);
+ device->SetPowerStatus(CEC_POWER_STATUS_ON);
+ device->TransmitPowerState(command.initiator);
+ device->TransmitPhysicalAddress();
+ {
+ CLockObject lock(m_SLMutex);
+ m_bActiveSourceSent = false;
+ }
}
}
void CSLCommandHandler::HandleVendorCommandPowerOnStatus(const cec_command &command)
if (command.parameters[0] == CEC_STATUS_REQUEST_ON)
{
bool bReturn = ((CCECPlaybackDevice *) device)->TransmitDeckStatus(command.initiator);
- ActivateSource();
+ if (!ActiveSourceSent())
+ ActivateSource();
return bReturn;
}
else if (command.parameters[0] == CEC_STATUS_REQUEST_ONCE)
{
/* LG devices only allow themselves to be woken up by the TV with a vendor command */
cec_command command;
+
+ if (!m_bSLEnabled)
+ TransmitVendorID(CECDEVICE_TV, CEC_VENDOR_LG);
+
cec_command::Format(command, CECDEVICE_TV, iDestination, CEC_OPCODE_VENDOR_COMMAND);
command.PushBack(SL_COMMAND_POWER_ON);
command.PushBack(0);
- return Transmit(command);
+ return Transmit(command, false);
}
return CCECCommandHandler::PowerOn(iInitiator, iDestination);