X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Flib%2FCECProcessor.cpp;h=97f57a47ac67a2758850e6bdfbab5fcb08eb04ca;hb=fe6911e11baf213182f61b638a27f7cf3a22d64f;hp=824744cc061d9e52bfd11c69099508d050b81575;hpb=9fd25e9ca2215b10678b3b6660a34116744d205f;p=deb_libcec.git diff --git a/src/lib/CECProcessor.cpp b/src/lib/CECProcessor.cpp index 824744c..97f57a4 100644 --- a/src/lib/CECProcessor.cpp +++ b/src/lib/CECProcessor.cpp @@ -730,13 +730,22 @@ bool CCECProcessor::RegisterClient(CCECClient *client) // ensure that controlled mode is enabled m_communication->SetControlledMode(true); + // source logical address for requests + cec_logical_address sourceAddress(CECDEVICE_UNREGISTERED); + if (!m_communication->SupportsSourceLogicalAddress(CECDEVICE_UNREGISTERED)) + { + if (m_communication->SupportsSourceLogicalAddress(CECDEVICE_FREEUSE)) + sourceAddress = CECDEVICE_FREEUSE; + else + { + m_libcec->AddLog(CEC_LOG_ERROR, "failed to register a new CEC client: both unregistered and free use are not supported by the device"); + return false; + } + } + // ensure that we know the vendor id of the TV CCECBusDevice *tv = GetTV(); - cec_vendor_id tvVendor = CEC_VENDOR_UNKNOWN; - if (m_communication->SupportsSourceLogicalAddress(CECDEVICE_UNREGISTERED)) - tvVendor = tv->GetVendorId(CECDEVICE_UNREGISTERED); - else if (m_communication->SupportsSourceLogicalAddress(CECDEVICE_FREEUSE)) - tvVendor = tv->GetVendorId(CECDEVICE_FREEUSE); + cec_vendor_id tvVendor(tv->GetVendorId(sourceAddress)); // wait until the handler is replaced, to avoid double registrations if (tvVendor != CEC_VENDOR_UNKNOWN && @@ -786,6 +795,8 @@ bool CCECProcessor::RegisterClient(CCECClient *client) // mark the client as registered client->SetRegistered(true); + sourceAddress = client->GetPrimaryLogicalAdddress(); + // initialise the client bool bReturn = client->OnRegister(); @@ -813,6 +824,9 @@ bool CCECProcessor::RegisterClient(CCECClient *client) GetTV()->MarkHandlerReady(); } + // request the power status of the TV + tv->RequestPowerStatus(sourceAddress, true); + return bReturn; }