cec: don't replace handlers when not initialised, or the primary device's logical...
[deb_libcec.git] / src / lib / CECProcessor.cpp
index f1686d64251e0a8074a34d22f1f98bd7b2e0136b..c63bc57666f846a381571eb84d11042fb06ae818 100644 (file)
@@ -146,51 +146,28 @@ bool CCECProcessor::OpenConnection(const char *strPort, uint16_t iBaudRate, uint
 
   uint64_t iNow = GetTimeMs();
   uint64_t iTarget = iTimeoutMs > 0 ? iNow + iTimeoutMs : iNow + CEC_DEFAULT_TRANSMIT_WAIT;
-  unsigned iConnectTry(0), iPingTry(0), iFwVersionTry(0), iControlledTry(0);
-  bool bConnected(false), bPinged(false), bControlled(false);
 
   /* open a new connection */
-  while (iNow < iTarget && (bConnected = m_communication->Open(this, iTimeoutMs)) == false)
+  unsigned iConnectTry(0);
+  while (iNow < iTarget && (bReturn = m_communication->Open(this, iTimeoutMs)) == false)
   {
     CLibCEC::AddLog(CEC_LOG_ERROR, "could not open a connection (try %d)", ++iConnectTry);
     Sleep(500);
     iNow = GetTimeMs();
   }
 
-  /* try to ping the adapter */
-  while (bConnected && iNow < iTarget && (bPinged = m_communication->PingAdapter()) == false)
-  {
-    CLibCEC::AddLog(CEC_LOG_ERROR, "the adapter did not respond correctly to a ping (try %d)", ++iPingTry);
-    Sleep(500);
-    iNow = GetTimeMs();
-  }
-
-  /* try to read the firmware version */
-  uint16_t iFirmwareVersion(CEC_FW_VERSION_UNKNOWN);
-  while (bPinged && iNow < iTarget && (iFirmwareVersion = m_communication->GetFirmwareVersion()) == CEC_FW_VERSION_UNKNOWN)
-  {
-    CLibCEC::AddLog(CEC_LOG_ERROR, "the adapter did not respond with a correct firmware version (try %d)", ++iFwVersionTry);
-    Sleep(500);
-    iNow = GetTimeMs();
-  }
-
-  if (iFirmwareVersion >= 2)
-  {
-    /* try to set controlled mode */
-    while (bConnected && iNow < iTarget && (bControlled = m_communication->SetControlledMode(true)) == false)
-    {
-      CLibCEC::AddLog(CEC_LOG_ERROR, "the adapter did not respond correctly to setting controlled mode (try %d)", ++iControlledTry);
-      Sleep(500);
-      iNow = GetTimeMs();
-    }
-  }
-
-  if ((bReturn = iFirmwareVersion != CEC_FW_VERSION_UNKNOWN) == true)
-    CLibCEC::AddLog(CEC_LOG_NOTICE, "connected to the CEC adapter. firmware version = %d", iFirmwareVersion);
+  if (bReturn)
+    CLibCEC::AddLog(CEC_LOG_NOTICE, "connected to the CEC adapter. firmware version = %d", m_communication->GetFirmwareVersion());
 
   return bReturn;
 }
 
+bool CCECProcessor::IsInitialised(void)
+{
+  CLockObject lock(m_mutex);
+  return m_bInitialised;
+}
+
 void CCECProcessor::SetInitialised(bool bSetTo /* = true */)
 {
   CLockObject lock(m_mutex);
@@ -406,6 +383,8 @@ bool CCECProcessor::FindLogicalAddresses(void)
 
 void CCECProcessor::ReplaceHandlers(void)
 {
+  if (!IsInitialised())
+    return;
   for (uint8_t iPtr = 0; iPtr <= CECDEVICE_PLAYBACKDEVICE3; iPtr++)
     m_busDevices[iPtr]->ReplaceHandler(m_bInitialised);
 }
@@ -1344,10 +1323,10 @@ bool CCECProcessor::PingAdapter(void)
 
 void CCECProcessor::HandlePoll(cec_logical_address initiator, cec_logical_address destination)
 {
-  m_busDevices[initiator]->GetHandler()->HandlePoll(initiator, destination);
+  m_busDevices[initiator]->HandlePoll(destination);
 }
 
 bool CCECProcessor::HandleReceiveFailed(cec_logical_address initiator)
 {
-  return !m_busDevices[initiator]->GetHandler()->HandleReceiveFailed();
+  return !m_busDevices[initiator]->HandleReceiveFailed();
 }