request the power status of the TV directly after registering a new client
authorLars Op den Kamp <lars@opdenkamp.eu>
Thu, 11 Oct 2012 11:21:09 +0000 (13:21 +0200)
committerLars Op den Kamp <lars@opdenkamp.eu>
Thu, 11 Oct 2012 11:31:36 +0000 (13:31 +0200)
src/lib/CECProcessor.cpp

index 824744cc061d9e52bfd11c69099508d050b81575..97f57a47ac67a2758850e6bdfbab5fcb08eb04ca 100644 (file)
@@ -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;
 }