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;
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),
}
}
-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)
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)
if (device)
device->SetInactiveSource();
}
-
- SetPowerStatus(CEC_POWER_STATUS_ON);
}
void CCECBusDevice::SetPowerStatus(const cec_power_status powerStatus)
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);