X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Flib%2FCECClient.cpp;h=24f196f49287008800a01c1b88f76ff4d0463259;hb=5f2f3609d7ee857ac7e5d03600fbd735e99c892f;hp=6df9dbab4288f6898fa1316b3fbf38697a22da2d;hpb=4a01fcd6b9d7c922ea5400d9f01406e7ad9332b9;p=deb_libcec.git diff --git a/src/lib/CECClient.cpp b/src/lib/CECClient.cpp index 6df9dba..24f196f 100644 --- a/src/lib/CECClient.cpp +++ b/src/lib/CECClient.cpp @@ -148,7 +148,7 @@ bool CCECClient::SetHDMIPort(const cec_logical_address iBaseDevice, const uint8_ } // 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 @@ -196,7 +196,7 @@ void CCECClient::SetPhysicalAddress(const libcec_configuration &configuration) { // 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 @@ -234,8 +234,7 @@ bool CCECClient::SetPhysicalAddress(const uint16_t iPhysicalAddress) } // 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); @@ -467,7 +466,7 @@ bool CCECClient::SendSetActiveSource(const cec_device_type type /* = CEC_DEVICE_ CCECBusDevice *device = *devices.begin(); // and activate it - if (!m_processor->IsRunning()) + if (!m_processor->CECInitialised()) device->MarkAsActiveSource(); else if (device->HasValidPhysicalAddress()) return device->ActivateSource(); @@ -742,12 +741,19 @@ bool CCECClient::GetCurrentConfiguration(libcec_configuration &configuration) 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; @@ -793,6 +799,12 @@ bool CCECClient::SetConfiguration(const libcec_configuration &configuration) 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); @@ -818,8 +830,7 @@ bool CCECClient::SetConfiguration(const libcec_configuration &configuration) SetPhysicalAddress(configuration); } - if (bIsRunning) - m_processor->PersistConfiguration(m_configuration); + m_processor->PersistConfiguration(m_configuration); if (!primary) primary = GetPrimaryDevice(); @@ -1044,7 +1055,7 @@ void CCECClient::SetOSDName(const CStdString &strDeviceName) 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); } } @@ -1109,7 +1120,7 @@ bool CCECClient::SetDeviceTypes(const cec_device_type_list &deviceTypes) { CLockObject lock(m_mutex); - bNeedReinit = m_processor && m_processor->IsRunning() && + bNeedReinit = m_processor && m_processor->CECInitialised() && (m_configuration.deviceTypes != deviceTypes); m_configuration.deviceTypes = deviceTypes; } @@ -1157,7 +1168,7 @@ bool CCECClient::SetDevicePhysicalAddress(const uint16_t iPhysicalAddress) // reactivate the previous active source if (reactivateSource != CECDEVICE_UNKNOWN && - m_processor->IsRunning() && + m_processor->CECInitialised() && IsInitialised()) { CCECBusDevice *device = m_processor->GetDevice(reactivateSource); @@ -1177,7 +1188,10 @@ bool CCECClient::SwitchMonitoring(bool bEnable) if (bEnable) return m_processor->UnregisterClient(this); else + { + m_configuration.bMonitorOnly = false; return m_processor->RegisterClient(this); + } } return false;