cec: fix some logging. only transmit packets once
authorLars Op den Kamp <lars@opdenkamp.eu>
Sat, 3 Dec 2011 23:09:53 +0000 (00:09 +0100)
committerLars Op den Kamp <lars@opdenkamp.eu>
Sun, 4 Dec 2011 02:28:22 +0000 (03:28 +0100)
src/lib/AdapterCommunication.cpp
src/lib/CECProcessor.cpp

index 314bfe50b1d1b6049fc974cc124d6dba7edc5c2a..c13000b17533c01a64e33f13dab8353941c2da96 100644 (file)
@@ -183,30 +183,37 @@ CStdString CCECAdapterMessage::MessageCodeAsString(void) const
 CStdString CCECAdapterMessage::ToString(void) const
 {
   CStdString strMsg;
-  strMsg = MessageCodeAsString();
-
-  switch (message())
+  if (size() == 0)
   {
-  case MSGCODE_TIMEOUT_ERROR:
-  case MSGCODE_HIGH_ERROR:
-  case MSGCODE_LOW_ERROR:
+    strMsg = "empty message";
+  }
+  else
+  {
+    strMsg = MessageCodeAsString();
+
+    switch (message())
     {
-      int iLine      = (size() >= 3) ? (at(1) << 8) | at(2) : 0;
-      uint32_t iTime = (size() >= 7) ? (at(3) << 24) | (at(4) << 16) | (at(5) << 8) | at(6) : 0;
-      strMsg.AppendFormat(" line:%i", iLine);
-      strMsg.AppendFormat(" time:%u", iTime);
+    case MSGCODE_TIMEOUT_ERROR:
+    case MSGCODE_HIGH_ERROR:
+    case MSGCODE_LOW_ERROR:
+      {
+        int iLine      = (size() >= 3) ? (at(1) << 8) | at(2) : 0;
+        uint32_t iTime = (size() >= 7) ? (at(3) << 24) | (at(4) << 16) | (at(5) << 8) | at(6) : 0;
+        strMsg.AppendFormat(" line:%i", iLine);
+        strMsg.AppendFormat(" time:%u", iTime);
+      }
+      break;
+    case MSGCODE_FRAME_START:
+      if (size() >= 2)
+        strMsg.AppendFormat(" initiator:%1x destination:%1x ack:%s %s", initiator(), destination(), ack() ? "high" : "low", eom() ? "eom" : "");
+      break;
+    case MSGCODE_FRAME_DATA:
+      if (size() >= 2)
+        strMsg.AppendFormat(" %02x %s", at(1), eom() ? "eom" : "");
+      break;
+    default:
+      break;
     }
-    break;
-  case MSGCODE_FRAME_START:
-    if (size() >= 2)
-      strMsg.AppendFormat(" initiator:%1x destination:%1x ack:%s %s", initiator(), destination(), ack() ? "high" : "low", eom() ? "eom" : "");
-    break;
-  case MSGCODE_FRAME_DATA:
-    if (size() >= 2)
-      strMsg.AppendFormat(" %02x %s", at(1), eom() ? "eom" : "");
-    break;
-  default:
-    break;
   }
 
   return strMsg;
index 571d02d0a184356b894d9c272d7c88de2872b9d7..23bf4c7459c9ed40964730b632304d0190ddcc2f 100644 (file)
@@ -674,7 +674,7 @@ bool CCECProcessor::Transmit(CCECAdapterMessage *output)
   bool bReturn(false);
   CLockObject lock(&m_mutex);
   {
-    while (output->needs_retry() && ++output->tries <= output->maxTries)
+    do
     {
       CLockObject msgLock(&output->mutex);
       if (!m_communication || !m_communication->Write(output))
@@ -696,7 +696,7 @@ bool CCECProcessor::Transmit(CCECAdapterMessage *output)
       }
       else
         bReturn = true;
-    }
+    }while (output->transmit_timeout > 0 && output->needs_retry() && ++output->tries <= output->maxTries);
   }
 
   return bReturn;
@@ -752,18 +752,21 @@ bool CCECProcessor::WaitForTransmitSucceeded(CCECAdapterMessage *message)
     }
 
     if (bError)
+    {
       message->reply = msg.message();
+      m_controller->AddLog(CEC_LOG_DEBUG, msg.ToString());
+    }
     else
     {
-      m_controller->AddLog(CEC_LOG_DEBUG, msg.ToString());
-
       switch(msg.message())
       {
       case MSGCODE_COMMAND_ACCEPTED:
+        m_controller->AddLog(CEC_LOG_DEBUG, msg.ToString());
         if (iPacketsLeft > 0)
           iPacketsLeft--;
         break;
       case MSGCODE_TRANSMIT_SUCCEEDED:
+        m_controller->AddLog(CEC_LOG_DEBUG, msg.ToString());
         bTransmitSucceeded = (iPacketsLeft == 0);
         bError = !bTransmitSucceeded;
         message->reply = MSGCODE_TRANSMIT_SUCCEEDED;