cec: send the physical address when starting
[deb_libcec.git] / src / lib / CECProcessor.cpp
index 8fc71dc31a2502e88e457c576063fac780414abe..dfdb737da3aeab2f126600bc6bebe11a29d6e514 100644 (file)
@@ -240,22 +240,6 @@ bool CCECProcessor::FindLogicalAddresses(void)
   return bReturn;
 }
 
-bool CCECProcessor::SetLineTimeout(uint8_t iTimeout)
-{
-  bool bReturn(false);
-  CCECAdapterMessage *output = new CCECAdapterMessage;
-
-  output->push_back(MSGSTART);
-  output->push_escaped(MSGCODE_TRANSMIT_IDLETIME);
-  output->push_escaped(iTimeout);
-  output->push_back(MSGEND);
-
-  if ((bReturn = Transmit(output)) == false)
-    m_controller->AddLog(CEC_LOG_ERROR, "could not set the idletime");
-  delete output;
-  return bReturn;
-}
-
 void *CCECProcessor::Process(void)
 {
   bool                  bParseFrame(false);
@@ -271,6 +255,7 @@ void *CCECProcessor::Process(void)
   }
   else
   {
+    m_busDevices[m_logicalAddresses.primary]->TransmitPhysicalAddress();
     CLockObject lock(&m_mutex);
     m_bStarted = true;
     m_controller->AddLog(CEC_LOG_DEBUG, "processor thread started");
@@ -331,8 +316,17 @@ bool CCECProcessor::SetActiveSource(cec_device_type type /* = CEC_DEVICE_TYPE_RE
     }
   }
 
-  return SetStreamPath(m_busDevices[addr]->GetPhysicalAddress(false)) &&
-      m_busDevices[addr]->TransmitActiveSource();
+  bReturn = m_busDevices[CECDEVICE_TV]->PowerOn() &&
+      m_busDevices[addr]->TransmitActiveSource() &&
+      SetStreamPath(m_busDevices[addr]->GetPhysicalAddress(false));
+
+  if (bReturn && (m_busDevices[addr]->GetType() == CEC_DEVICE_TYPE_PLAYBACK_DEVICE ||
+      m_busDevices[addr]->GetType() == CEC_DEVICE_TYPE_RECORDING_DEVICE))
+  {
+    bReturn = ((CCECPlaybackDevice *)m_busDevices[addr])->TransmitDeckStatus(CECDEVICE_TV);
+  }
+
+  return bReturn;
 }
 
 bool CCECProcessor::SetActiveSource(cec_logical_address iAddress)
@@ -674,8 +668,13 @@ bool CCECProcessor::Transmit(CCECAdapterMessage *output)
   bool bReturn(false);
   CLockObject lock(&m_mutex);
   {
+    m_communication->SetLineTimeout(3);
+
     do
     {
+      if (output->tries > 0)
+        m_communication->SetLineTimeout(5);
+
       CLockObject msgLock(&output->mutex);
       if (!m_communication || !m_communication->Write(output))
         return bReturn;
@@ -699,6 +698,8 @@ bool CCECProcessor::Transmit(CCECAdapterMessage *output)
     }while (output->transmit_timeout > 0 && output->needs_retry() && ++output->tries <= output->maxTries);
   }
 
+  m_communication->SetLineTimeout(3);
+
   return bReturn;
 }