m_bActiveSourceSent(false)
{
m_vendorId = CEC_VENDOR_LG;
- CCECBusDevice *primary = m_processor->GetPrimaryDevice();
-
- /* imitate LG devices */
- if (primary && m_busDevice->GetLogicalAddress() != primary->GetLogicalAddress())
- {
- primary->SetVendorId(CEC_VENDOR_LG);
- primary->ReplaceHandler(false);
- }
/* LG devices don't always reply to CEC version requests, so just set it to 1.3a */
m_busDevice->SetCecVersion(CEC_VERSION_1_3A);
return true;
m_bHandlerInited = true;
- if (m_busDevice->GetLogicalAddress() == CECDEVICE_TV)
+ CCECBusDevice *primary = m_processor->GetPrimaryDevice();
+ if (primary && primary->GetLogicalAddress() != CECDEVICE_UNREGISTERED)
{
- CCECBusDevice *primary = m_processor->GetPrimaryDevice();
+ /* imitate LG devices */
+ if (m_busDevice->GetLogicalAddress() != primary->GetLogicalAddress())
+ {
+ primary->SetVendorId(CEC_VENDOR_LG);
+ primary->ReplaceHandler(false);
+ }
- /* start as 'in transition standby->on' */
- primary->SetPowerStatus(CEC_POWER_STATUS_IN_TRANSITION_STANDBY_TO_ON);
- primary->TransmitPowerState(CECDEVICE_TV);
+ 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);
- /* send the vendor id */
- primary->TransmitVendorID(CECDEVICE_BROADCAST);
+ /* send the vendor id */
+ primary->TransmitVendorID(CECDEVICE_BROADCAST);
+ }
}
return true;
if (!SLInitialised() && command.initiator == CECDEVICE_TV)
{
- cec_command response;
- cec_command::Format(response, command.destination, command.initiator, CEC_OPCODE_FEATURE_ABORT);
- return Transmit(response);
+ CCECBusDevice *destination = m_processor->GetDevice(command.destination);
+ if (destination && (destination->GetLogicalAddress() == CECDEVICE_BROADCAST || destination->IsHandledByLibCEC()))
+ {
+ cec_logical_address initiator = destination->GetLogicalAddress();
+ if (initiator == CECDEVICE_BROADCAST)
+ initiator = m_processor->GetPrimaryDevice()->GetLogicalAddress();
+
+ cec_command response;
+ cec_command::Format(response, initiator, command.initiator, CEC_OPCODE_FEATURE_ABORT);
+ return Transmit(response);
+ }
}
return true;
}
bool CSLCommandHandler::HandleGiveDeckStatus(const cec_command &command)
{
- if (m_processor->IsRunning() && m_processor->IsHandledByLibCEC(command.destination))
+ if (m_processor->CECInitialised() && m_processor->IsHandledByLibCEC(command.destination))
{
CCECBusDevice *device = GetDevice(command.destination);
if (device && (device->GetType() == CEC_DEVICE_TYPE_PLAYBACK_DEVICE || device->GetType() == CEC_DEVICE_TYPE_RECORDING_DEVICE))
bool CSLCommandHandler::HandleGiveDevicePowerStatus(const cec_command &command)
{
bool bReturn(false);
- if (m_processor->IsRunning() && m_processor->IsHandledByLibCEC(command.destination) && command.initiator == CECDEVICE_TV)
+ 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)
bool CSLCommandHandler::HandleRequestActiveSource(const cec_command &command)
{
- if (m_processor->IsRunning())
+ if (m_processor->CECInitialised())
{
if (ActiveSourceSent())
LIB_CEC->AddLog(CEC_LOG_DEBUG, ">> %i requests active source, ignored", (uint8_t) command.initiator);