From: Lars Op den Kamp Date: Thu, 11 Oct 2012 11:21:09 +0000 (+0200) Subject: request the power status of the TV directly after registering a new client X-Git-Tag: upstream/2.2.0~1^2~15^2^2~10 X-Git-Url: https://git.piment-noir.org/?p=deb_libcec.git;a=commitdiff_plain;h=fe6911e11baf213182f61b638a27f7cf3a22d64f request the power status of the TV directly after registering a new client --- 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; }