From 1e7afacd7132da69e5ab985a726ad10aaf3e2ca4 Mon Sep 17 00:00:00 2001 From: Lars Op den Kamp Date: Wed, 7 Dec 2011 23:52:15 +0100 Subject: [PATCH] cec: don't request the physical address from the tv (it's always 0x0000). just set the physical address when the physical address of the base device wasn't found --- src/lib/CECProcessor.cpp | 60 +++++++++++++++++++++++----------------- 1 file changed, 35 insertions(+), 25 deletions(-) diff --git a/src/lib/CECProcessor.cpp b/src/lib/CECProcessor.cpp index 94651fc..463e044 100644 --- a/src/lib/CECProcessor.cpp +++ b/src/lib/CECProcessor.cpp @@ -406,34 +406,44 @@ bool CCECProcessor::SetHDMIPort(cec_logical_address iBaseDevice, uint8_t iPort, AddLog(CEC_LOG_DEBUG, strLog); uint16_t iPhysicalAddress(0); - iPhysicalAddress = m_busDevices[iBaseDevice]->GetPhysicalAddress(); - uint16_t iPos = 0; - if (iPhysicalAddress == 0) - iPos = 0x1000; - else if (iPhysicalAddress % 0x1000 == 0) - iPos = 0x100; - else if (iPhysicalAddress % 0x100 == 0) - iPos = 0x10; - else if (iPhysicalAddress % 0x10 == 0) - iPos = 0x1; - - while(!bReturn && iPos > 0) + if (iBaseDevice > CECDEVICE_TV) + iPhysicalAddress = m_busDevices[iBaseDevice]->GetPhysicalAddress(); + + if (iPhysicalAddress == 0xffff) { - iPhysicalAddress += (uint16_t)(iPort * iPos); - strLog.Format("checking physical address %4x", iPhysicalAddress); - AddLog(CEC_LOG_DEBUG, strLog); - if (PhysicalAddressInUse(iPhysicalAddress)) - { - strLog.Format("physical address %4x is in use", iPhysicalAddress); - AddLog(CEC_LOG_DEBUG, strLog); - iPos = (iPos == 1) ? 0 : iPos / 0x10; - } - else + SetPhysicalAddress((uint16_t)iPort * 0x1000); + bReturn = false; + } + else + { + uint16_t iPos = 0; + if (iPhysicalAddress == 0) + iPos = 0x1000; + else if (iPhysicalAddress % 0x1000 == 0) + iPos = 0x100; + else if (iPhysicalAddress % 0x100 == 0) + iPos = 0x10; + else if (iPhysicalAddress % 0x10 == 0) + iPos = 0x1; + + while(!bReturn && iPos > 0) { - strLog.Format("physical address %4x is free", iPhysicalAddress); + iPhysicalAddress += (uint16_t)(iPort * iPos); + strLog.Format("checking physical address %4x", iPhysicalAddress); AddLog(CEC_LOG_DEBUG, strLog); - SetPhysicalAddress(iPhysicalAddress); - bReturn = true; + if (PhysicalAddressInUse(iPhysicalAddress)) + { + strLog.Format("physical address %4x is in use", iPhysicalAddress); + AddLog(CEC_LOG_DEBUG, strLog); + iPos = (iPos == 1) ? 0 : iPos / 0x10; + } + else + { + strLog.Format("physical address %4x is free", iPhysicalAddress); + AddLog(CEC_LOG_DEBUG, strLog); + SetPhysicalAddress(iPhysicalAddress); + bReturn = true; + } } } -- 2.34.1