bool CSLCommandHandler::InitHandler(void) { if (m_bHandlerInited) return true; m_bHandlerInited = true; if (m_busDevice->GetLogicalAddress() != CECDEVICE_TV) return true; CCECBusDevice *primary = m_processor->GetPrimaryDevice(); if (primary && primary->GetLogicalAddress() != CECDEVICE_UNREGISTERED) { /* imitate LG devices */ if (m_busDevice->GetLogicalAddress() != primary->GetLogicalAddress()) { primary->SetVendorId(CEC_VENDOR_LG); primary->ReplaceHandler(false); } if (m_busDevice->GetLogicalAddress() == CECDEVICE_TV) { /* start as 'in transition standby->on' */ primary->SetPowerStatus(CEC_POWER_STATUS_IN_TRANSITION_STANDBY_TO_ON); primary->TransmitPowerState(CECDEVICE_TV, false); /* send the vendor id */ primary->TransmitVendorID(CECDEVICE_BROADCAST, false, false); } } return true; }
int CSLCommandHandler::HandleGiveDevicePowerStatus(const cec_command &command) { if (m_processor->CECInitialised() && m_processor->IsHandledByLibCEC(command.destination) && command.initiator == CECDEVICE_TV) { CCECBusDevice *device = GetDevice(command.destination); if (device && device->GetCurrentPowerStatus() != CEC_POWER_STATUS_ON) { device->TransmitPowerState(command.initiator, true); device->SetPowerStatus(CEC_POWER_STATUS_ON); } else { if (!ActiveSourceSent()) { device->SetPowerStatus(CEC_POWER_STATUS_IN_TRANSITION_STANDBY_TO_ON); device->TransmitPowerState(command.initiator, true); ActivateSource(); } else if (m_resetPowerState.IsSet() && m_resetPowerState.TimeLeft() > 0) { /* TODO assume that we've bugged out. the return button no longer works after this */ LIB_CEC->AddLog(CEC_LOG_WARNING, "FIXME: LG seems to have bugged out. resetting to 'in transition standby to on'. the return button will not work"); { CLockObject lock(m_SLMutex); m_bActiveSourceSent = false; } device->SetPowerStatus(CEC_POWER_STATUS_IN_TRANSITION_STANDBY_TO_ON); device->TransmitPowerState(command.initiator, true); device->SetPowerStatus(CEC_POWER_STATUS_ON); m_resetPowerState.Init(5000); } else { device->TransmitPowerState(command.initiator, true); m_resetPowerState.Init(5000); } } return COMMAND_HANDLED; } return CEC_ABORT_REASON_NOT_IN_CORRECT_MODE_TO_RESPOND; }
void CSLCommandHandler::HandleVendorCommandPowerOnStatus(const cec_command &command) { if (command.destination != CECDEVICE_BROADCAST) { CCECBusDevice *device = m_processor->m_busDevices[m_processor->GetLogicalAddresses().primary]; device->SetPowerStatus(CEC_POWER_STATUS_IN_TRANSITION_STANDBY_TO_ON); device->TransmitPowerState(command.initiator); device->SetPowerStatus(CEC_POWER_STATUS_ON); } }
void CSLCommandHandler::HandleVendorCommandPowerOnStatus(const cec_command &command) { if (command.destination != CECDEVICE_BROADCAST) { CCECBusDevice *device = m_processor->GetPrimaryDevice(); if (device) { device->SetPowerStatus(CEC_POWER_STATUS_IN_TRANSITION_STANDBY_TO_ON); device->TransmitPowerState(command.initiator, true); device->SetPowerStatus(CEC_POWER_STATUS_ON); } } }
void CSLCommandHandler::HandleVendorCommandPowerOn(const cec_command &command) { if (command.initiator != CECDEVICE_TV) return; CCECBusDevice *device = m_processor->GetPrimaryDevice(); if (device) { SetSLInitialised(); device->MarkAsActiveSource(); device->SetPowerStatus(CEC_POWER_STATUS_IN_TRANSITION_STANDBY_TO_ON); device->TransmitPowerState(command.initiator, true); CEvent::Sleep(2000); device->SetPowerStatus(CEC_POWER_STATUS_ON); device->TransmitPowerState(command.initiator, false); device->TransmitPhysicalAddress(false); { CLockObject lock(m_SLMutex); m_bActiveSourceSent = false; } } }
void CSLCommandHandler::HandleVendorCommandPowerOn(const cec_command &command) { CCECBusDevice *device = m_processor->GetPrimaryDevice(); if (device) { m_bSLEnabled = true; device->SetPowerStatus(CEC_POWER_STATUS_IN_TRANSITION_STANDBY_TO_ON); //XXX device->TransmitPowerState(command.initiator); device->SetPowerStatus(CEC_POWER_STATUS_ON); SetLGDeckStatus(); device->SetActiveSource(); TransmitImageViewOn(device->GetLogicalAddress(), command.initiator); } }