X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Flib%2FCECClient.cpp;h=ae0b9f6e0c7408c5a73758c43db5d37cfc5cc08a;hb=0a61dc2416f3eacb839ff67ac5abf0024c1d2f40;hp=4ac7243798e00fa35be75a8be6dae25ddff6da55;hpb=0b8c7eab61e750b7dd6370e7d75e2c6a0cf0da12;p=deb_libcec.git diff --git a/src/lib/CECClient.cpp b/src/lib/CECClient.cpp index 4ac7243..ae0b9f6 100644 --- a/src/lib/CECClient.cpp +++ b/src/lib/CECClient.cpp @@ -33,6 +33,7 @@ #include "CECClient.h" #include "CECProcessor.h" #include "LibCEC.h" +#include "CECTypeUtils.h" #include "devices/CECPlaybackDevice.h" #include "devices/CECAudioSystem.h" #include "devices/CECTV.h" @@ -41,7 +42,7 @@ using namespace CEC; using namespace PLATFORM; #define LIB_CEC m_processor->GetLib() -#define ToString(x) LIB_CEC->ToString(x) +#define ToString(x) CCECTypeUtils::ToString(x) CCECClient::CCECClient(CCECProcessor *processor, const libcec_configuration &configuration) : m_processor(processor), @@ -194,15 +195,19 @@ void CCECClient::ResetPhysicalAddress(void) void CCECClient::SetPhysicalAddress(const libcec_configuration &configuration) { - // try to autodetect the address bool bPASet(false); - if (m_processor->CECInitialised() && configuration.bAutodetectAddress == 1) - bPASet = AutodetectPhysicalAddress(); - // try to use physical address setting + // override the physical address from configuration.iPhysicalAddress if it's set if (!bPASet && CLibCEC::IsValidPhysicalAddress(configuration.iPhysicalAddress)) bPASet = SetPhysicalAddress(configuration.iPhysicalAddress); + // try to autodetect the address + if (!bPASet && m_processor->CECInitialised()) + { + bPASet = AutodetectPhysicalAddress(); + m_configuration.bAutodetectAddress = bPASet ? 1 : 0; + } + // use the base device + hdmi port settings if (!bPASet) bPASet = SetHDMIPort(configuration.baseDevice, configuration.iHDMIPort); @@ -234,8 +239,7 @@ bool CCECClient::SetPhysicalAddress(const uint16_t iPhysicalAddress) } // persist the new configuration - if (m_processor->CECInitialised()) - m_processor->PersistConfiguration(m_configuration); + m_processor->PersistConfiguration(m_configuration); // set the physical address for each device SetDevicePhysicalAddress(iPhysicalAddress); @@ -679,21 +683,19 @@ uint8_t CCECClient::SendMuteAudio(void) bool CCECClient::SendKeypress(const cec_logical_address iDestination, const cec_user_control_code key, bool bWait /* = true */) { - CCECBusDevice *device = GetPrimaryDevice(); CCECBusDevice *dest = m_processor->GetDevice(iDestination); - return device && dest ? - device->TransmitKeypress(GetPrimaryLogicalAdddress(), key, bWait) : + return dest ? + dest->TransmitKeypress(GetPrimaryLogicalAdddress(), key, bWait) : false; } bool CCECClient::SendKeyRelease(const cec_logical_address iDestination, bool bWait /* = true */) { - CCECBusDevice *device = GetPrimaryDevice(); CCECBusDevice *dest = m_processor->GetDevice(iDestination); - return device && dest ? - device->TransmitKeyRelease(GetPrimaryLogicalAdddress(), bWait) : + return dest ? + dest->TransmitKeyRelease(GetPrimaryLogicalAdddress(), bWait) : false; } @@ -742,6 +744,13 @@ 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; } @@ -793,6 +802,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 +833,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(); @@ -1177,7 +1191,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;