X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Flib%2Fimplementations%2FCECCommandHandler.cpp;h=813b416f0bc6ee79503b565102313f74758a4df4;hb=c0152c0940ee81c79150dbafafd6621f576c3ccb;hp=ad4349efb608141e6df52aac04216daac46e3fff;hpb=205057410e723e23ab0f4ac910c497b3ecd319bd;p=deb_libcec.git diff --git a/src/lib/implementations/CECCommandHandler.cpp b/src/lib/implementations/CECCommandHandler.cpp index ad4349e..813b416 100644 --- a/src/lib/implementations/CECCommandHandler.cpp +++ b/src/lib/implementations/CECCommandHandler.cpp @@ -738,21 +738,24 @@ void CCECCommandHandler::SetPhysicalAddress(cec_logical_address iAddress, uint16 { if (!m_processor->IsHandledByLibCEC(iAddress)) { - CCECBusDevice *device = m_processor->GetDeviceByPhysicalAddress(iNewAddress); - bool bOurAddress(device && device->GetLogicalAddress() != m_busDevice->GetLogicalAddress() && - device->IsHandledByLibCEC()); - - GetDevice(iAddress)->SetPhysicalAddress(iNewAddress); + CCECBusDevice *otherDevice = m_processor->GetDeviceByPhysicalAddress(iNewAddress); + CCECClient *client = otherDevice ? otherDevice->GetClient() : NULL; - if (bOurAddress) + CCECBusDevice *device = m_processor->GetDevice(iAddress); + if (device) + device->SetPhysicalAddress(iNewAddress); + else { - /* another device reported the same physical address as ours - * since we don't have physical address detection yet, we'll just use the - * given address, increased by 0x100 for now */ - CCECClient *client = device->GetClient(); - if (client) - client->SetPhysicalAddress(iNewAddress + 0x100); + LIB_CEC->AddLog(CEC_LOG_DEBUG, "device with logical address %X not found", iAddress); } + + /* another device reported the same physical address as ours */ + if (client) + client->ResetPhysicalAddress(); + } + else + { + LIB_CEC->AddLog(CEC_LOG_DEBUG, "ignore physical address report for device %s (%X) because it's marked as handled by libCEC", ToString(iAddress), iAddress); } }