cec: don't try to match a device with PA 0xFFFF. don't change the power status of...
authorLars Op den Kamp <lars@opdenkamp.eu>
Thu, 26 Apr 2012 11:55:27 +0000 (13:55 +0200)
committerLars Op den Kamp <lars@opdenkamp.eu>
Thu, 26 Apr 2012 11:55:27 +0000 (13:55 +0200)
src/lib/CECProcessor.cpp
src/lib/devices/CECBusDevice.cpp
src/lib/devices/CECBusDevice.h

index 94d4c7ad4910fedf95a85967bb835ae2c77dcb7c..8217e4edf93c340a4da94d7aa54d9947901cac03 100644 (file)
@@ -816,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;
index d7ee80654c5c56ca36d62b746ee857e31ae23ccf..757204cb3ed31ed3b3fb4aae727e2c8c295ac68c 100644 (file)
@@ -47,7 +47,7 @@ using namespace PLATFORM;
 CCECBusDevice::CCECBusDevice(CCECProcessor *processor, cec_logical_address iLogicalAddress, uint16_t iPhysicalAddress) :
   m_type                  (CEC_DEVICE_TYPE_RESERVED),
   m_iPhysicalAddress      (iPhysicalAddress),
-  m_iStreamPath           (0),
+  m_iStreamPath           (0xFFFF),
   m_iLogicalAddress       (iLogicalAddress),
   m_powerStatus           (CEC_POWER_STATUS_UNKNOWN),
   m_processor             (processor),
@@ -637,7 +637,7 @@ void CCECBusDevice::SetPhysicalAddress(uint16_t iNewAddress)
   }
 }
 
-void CCECBusDevice::SetStreamPath(uint16_t iNewAddress, uint16_t iOldAddress /* = 0 */)
+void CCECBusDevice::SetStreamPath(uint16_t iNewAddress, uint16_t iOldAddress /* = 0xFFFF */)
 {
   CLockObject lock(m_mutex);
   if (iNewAddress != m_iStreamPath)
@@ -645,10 +645,6 @@ void CCECBusDevice::SetStreamPath(uint16_t iNewAddress, uint16_t iOldAddress /*
     CLibCEC::AddLog(CEC_LOG_DEBUG, ">> %s (%X): stream path changed from %04x to %04x", GetLogicalAddressName(), m_iLogicalAddress, iOldAddress == 0 ? m_iStreamPath : iOldAddress, iNewAddress);
     m_iStreamPath = iNewAddress;
   }
-  else
-  {
-    CLibCEC::AddLog(CEC_LOG_DEBUG, "%s (%X): stream path unchanged (%04x)", GetLogicalAddressName(), m_iLogicalAddress, m_iStreamPath);
-  }
 
   CCECBusDevice *device = m_processor->GetDeviceByPhysicalAddress(iNewAddress);
   if (device)
@@ -663,8 +659,6 @@ void CCECBusDevice::SetStreamPath(uint16_t iNewAddress, uint16_t iOldAddress /*
     if (device)
       device->SetInactiveSource();
   }
-
-  SetPowerStatus(CEC_POWER_STATUS_ON);
 }
 
 void CCECBusDevice::SetPowerStatus(const cec_power_status powerStatus)
index 803f6f6ea4a514ab2f142ef8281106e2d2107e73..f6e0d82d5cae176215e6da88d8fc05776e0e105e 100644 (file)
@@ -85,7 +85,7 @@ namespace CEC
 
     virtual void SetDeviceStatus(const cec_bus_device_status newStatus);
     virtual void SetPhysicalAddress(uint16_t iNewAddress);
-    virtual void SetStreamPath(uint16_t iNewAddress, uint16_t iOldAddress = 0);
+    virtual void SetStreamPath(uint16_t iNewAddress, uint16_t iOldAddress = 0xFFFF);
     virtual void SetCecVersion(const cec_version newVersion);
     virtual void SetMenuLanguage(const cec_menu_language &menuLanguage);
     virtual void SetOSDName(CStdString strName);