use CCECTypeUtils::ToString(const cec_command& command) in CCECProcessor
[deb_libcec.git] / src / lib / CECProcessor.cpp
index d9ef22c349285c58aa93247f605227625416dc2e..d9fadb0eddb0b1a25b5651cd1cdbb564c9426ec1 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * This file is part of the libCEC(R) library.
  *
- * libCEC(R) is Copyright (C) 2011-2012 Pulse-Eight Limited.  All rights reserved.
+ * libCEC(R) is Copyright (C) 2011-2013 Pulse-Eight Limited.  All rights reserved.
  * libCEC(R) is an original work, containing original code.
  *
  * libCEC(R) is a trademark of Pulse-Eight Limited.
@@ -53,6 +53,7 @@ using namespace PLATFORM;
 
 #define CEC_PROCESSOR_SIGNAL_WAIT_TIME 1000
 #define ACTIVE_SOURCE_CHECK_INTERVAL   500
+#define TV_PRESENT_CHECK_INTERVAL      30000
 
 #define ToString(x) CCECTypeUtils::ToString(x)
 
@@ -216,6 +217,7 @@ void *CCECProcessor::Process(void)
 
   cec_command command; command.Clear();
   CTimeout activeSourceCheck(ACTIVE_SOURCE_CHECK_INTERVAL);
+  CTimeout tvPresentCheck(TV_PRESENT_CHECK_INTERVAL);
 
   // as long as we're not being stopped and the connection is open
   while (!IsStopped() && m_communication->IsOpen())
@@ -239,6 +241,19 @@ void *CCECProcessor::Process(void)
           TransmitPendingActiveSourceCommands();
         activeSourceCheck.Init(ACTIVE_SOURCE_CHECK_INTERVAL);
       }
+
+      // check whether the TV is present and responding
+      if (tvPresentCheck.TimeLeft() == 0)
+      {
+        if (!m_busDevices->At(CECDEVICE_TV)->IsPresent())
+        {
+          libcec_parameter param;
+          param.paramType = CEC_PARAMETER_TYPE_STRING;
+          param.paramData = (void*)"TV does not respond to CEC polls";
+          GetPrimaryClient()->Alert(CEC_ALERT_TV_POLL_FAILED, param);
+        }
+        tvPresentCheck.Init(TV_PRESENT_CHECK_INTERVAL);
+      }
     }
   }
 
@@ -465,13 +480,7 @@ void CCECProcessor::TransmitAbort(cec_logical_address source, cec_logical_addres
 void CCECProcessor::ProcessCommand(const cec_command &command)
 {
   // log the command
-  CStdString dataStr;
-  dataStr.Format(">> %1x%1x", command.initiator, command.destination);
-  if (command.opcode_set == 1)
-    dataStr.AppendFormat(":%02x", command.opcode);
-  for (uint8_t iPtr = 0; iPtr < command.parameters.size; iPtr++)
-    dataStr.AppendFormat(":%02x", (unsigned int)command.parameters[iPtr]);
-  m_libcec->AddLog(CEC_LOG_TRAFFIC, dataStr.c_str());
+  m_libcec->AddLog(CEC_LOG_TRAFFIC, CCECTypeUtils::ToString(command).c_str());
 
   // find the initiator
   CCECBusDevice *device = m_busDevices->At(command.initiator);