}
// don't continue if the connection isn't opened
- if (!m_processor->IsRunning() && !bForce)
+ if (!m_processor->CECInitialised() && !bForce)
return true;
// get the PA of the base device
{
// try to autodetect the address
bool bPASet(false);
- if (m_processor->IsRunning() && configuration.bAutodetectAddress == 1)
+ if (m_processor->CECInitialised() && configuration.bAutodetectAddress == 1)
bPASet = AutodetectPhysicalAddress();
// try to use physical address setting
}
// persist the new configuration
- if (m_processor->IsRunning())
- m_processor->PersistConfiguration(m_configuration);
+ m_processor->PersistConfiguration(m_configuration);
// set the physical address for each device
SetDevicePhysicalAddress(iPhysicalAddress);
CCECBusDevice *device = *devices.begin();
// and activate it
- if (!m_processor->IsRunning())
+ if (!m_processor->CECInitialised())
device->MarkAsActiveSource();
else if (device->HasValidPhysicalAddress())
return device->ActivateSource();
memcpy(configuration.strDeviceLanguage, m_configuration.strDeviceLanguage, 3);
configuration.iFirmwareBuildDate = m_configuration.iFirmwareBuildDate;
}
+
+ // client version 1.6.3
+ if (configuration.clientVersion >= CEC_CLIENT_VERSION_1_6_3)
+ {
+ configuration.bMonitorOnly = m_configuration.bMonitorOnly;
+ }
+
return true;
}
bool CCECClient::SetConfiguration(const libcec_configuration &configuration)
{
- bool bIsRunning(m_processor && m_processor->IsRunning());
+ bool bIsRunning(m_processor && m_processor->CECInitialised());
CCECBusDevice *primary = bIsRunning ? GetPrimaryDevice() : NULL;
uint16_t iPA = primary ? primary->GetCurrentPhysicalAddress() : CEC_INVALID_PHYSICAL_ADDRESS;
memcpy(m_configuration.strDeviceLanguage, configuration.strDeviceLanguage, 3);
}
+ // client version 1.6.3
+ if (configuration.clientVersion >= CEC_CLIENT_VERSION_1_6_3)
+ {
+ m_configuration.bMonitorOnly = configuration.bMonitorOnly;
+ }
+
// ensure that there is at least 1 device type set
if (m_configuration.deviceTypes.IsEmpty())
m_configuration.deviceTypes.Add(CEC_DEVICE_TYPE_RECORDING_DEVICE);
SetPhysicalAddress(configuration);
}
- if (bIsRunning)
- m_processor->PersistConfiguration(m_configuration);
+ m_processor->PersistConfiguration(m_configuration);
if (!primary)
primary = GetPrimaryDevice();
if (primary && !primary->GetCurrentOSDName().Equals(strDeviceName))
{
primary->SetOSDName(strDeviceName);
- if (m_processor && m_processor->IsRunning())
+ if (m_processor && m_processor->CECInitialised())
primary->TransmitOSDName(CECDEVICE_TV);
}
}
{
CLockObject lock(m_mutex);
- bNeedReinit = m_processor && m_processor->IsRunning() &&
+ bNeedReinit = m_processor && m_processor->CECInitialised() &&
(m_configuration.deviceTypes != deviceTypes);
m_configuration.deviceTypes = deviceTypes;
}
// reactivate the previous active source
if (reactivateSource != CECDEVICE_UNKNOWN &&
- m_processor->IsRunning() &&
+ m_processor->CECInitialised() &&
IsInitialised())
{
CCECBusDevice *device = m_processor->GetDevice(reactivateSource);
bool CCECClient::SwitchMonitoring(bool bEnable)
{
- return m_processor ? m_processor->SwitchMonitoring(bEnable) : false;
+ LIB_CEC->AddLog(CEC_LOG_NOTICE, "== %s monitoring mode ==", bEnable ? "enabling" : "disabling");
+
+ if (m_processor)
+ {
+ if (bEnable)
+ return m_processor->UnregisterClient(this);
+ else
+ {
+ m_configuration.bMonitorOnly = false;
+ return m_processor->RegisterClient(this);
+ }
+ }
+
+ return false;
}
bool CCECClient::PollDevice(const cec_logical_address iAddress)