X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Flib%2FCECProcessor.cpp;h=2f7fcaceaa102dcedc39902e468b63cd7979adb2;hb=ed80116ed77c2a7247465b39d39bc50a6bc1b190;hp=efe038f1498eb17f433fa0c7f8191673411dc031;hpb=98ba37d35c5938d8504b5dbe43051bfab3b6c6bc;p=deb_libcec.git diff --git a/src/lib/CECProcessor.cpp b/src/lib/CECProcessor.cpp index efe038f..2f7fcac 100644 --- a/src/lib/CECProcessor.cpp +++ b/src/lib/CECProcessor.cpp @@ -542,6 +542,10 @@ bool CCECProcessor::SetActiveSource(uint16_t iStreamPath) device->SetActiveSource(); bReturn = true; } + else + { + CLibCEC::AddLog(CEC_LOG_DEBUG, "device with PA '%04x' not found", iStreamPath); + } return bReturn; } @@ -812,20 +816,17 @@ uint8_t CCECProcessor::MuteAudio(bool bSendRelease /* = true */) CCECBusDevice *CCECProcessor::GetDeviceByPhysicalAddress(uint16_t iPhysicalAddress, bool bSuppressUpdate /* = true */) { - if (m_configuration.logicalAddresses.primary != CECDEVICE_UNKNOWN) - { - if (m_busDevices[m_configuration.logicalAddresses.primary]->GetPhysicalAddress() == iPhysicalAddress) - return m_busDevices[m_configuration.logicalAddresses.primary]; - } + CCECBusDevice *device(NULL); - CCECBusDevice *device = NULL; - for (unsigned int iPtr = 0; iPtr < 16; iPtr++) + // invalid PA + if (iPhysicalAddress == 0xFFFF) + return device; + + // check each device until we found a match + for (unsigned int iPtr = 0; !device && iPtr < 16; iPtr++) { if (m_busDevices[iPtr]->GetPhysicalAddress(bSuppressUpdate) == iPhysicalAddress) - { device = m_busDevices[iPtr]; - break; - } } return device; @@ -899,7 +900,7 @@ uint64_t CCECProcessor::GetDeviceVendorId(cec_logical_address iAddress) uint16_t CCECProcessor::GetDevicePhysicalAddress(cec_logical_address iAddress) { if (m_busDevices[iAddress]) - return m_busDevices[iAddress]->GetPhysicalAddress(); + return m_busDevices[iAddress]->GetPhysicalAddress(false); return false; } @@ -910,7 +911,7 @@ cec_power_status CCECProcessor::GetDevicePowerStatus(cec_logical_address iAddres return CEC_POWER_STATUS_UNKNOWN; } -cec_logical_address CCECProcessor::GetActiveSource(void) +cec_logical_address CCECProcessor::GetActiveSource(bool bRequestActiveSource /* = true */) { for (uint8_t iPtr = 0; iPtr <= 11; iPtr++) { @@ -918,12 +919,21 @@ cec_logical_address CCECProcessor::GetActiveSource(void) return (cec_logical_address)iPtr; } + if (bRequestActiveSource && m_configuration.logicalAddresses.primary != CECDEVICE_UNKNOWN) + { + CCECBusDevice *primary = m_busDevices[m_configuration.logicalAddresses.primary]; + if (primary) + primary->RequestActiveSource(); + + return GetActiveSource(false); + } + return CECDEVICE_UNKNOWN; } bool CCECProcessor::IsActiveSource(cec_logical_address iAddress) { - return iAddress > CECDEVICE_TV && iAddress < CECDEVICE_BROADCAST ? + return iAddress >= CECDEVICE_TV && iAddress < CECDEVICE_BROADCAST ? m_busDevices[iAddress]->IsActiveSource() : false; }