cec: don't log polls and don't cut off messages that start with the ack bit set,...
authorLars Op den Kamp <lars@opdenkamp.eu>
Mon, 19 Mar 2012 14:07:21 +0000 (15:07 +0100)
committerLars Op den Kamp <lars@opdenkamp.eu>
Mon, 19 Mar 2012 14:07:32 +0000 (15:07 +0100)
src/lib/CECProcessor.cpp
src/lib/adapter/USBCECAdapterCommunication.cpp
src/lib/adapter/USBCECAdapterCommunication.h

index 23afdb623bdfb7c0217fbcd289af5bc1fd129ed7..83e9ee8c40451211dc0a79f75cdfb403142a6284 100644 (file)
@@ -1481,7 +1481,7 @@ bool CCECProcessor::PingAdapter(void)
 
 void CCECProcessor::HandlePoll(cec_logical_address initiator, cec_logical_address destination)
 {
-  m_busDevices[initiator]->HandlePoll(destination);
+  m_busDevices[destination]->HandlePoll(initiator);
 }
 
 bool CCECProcessor::HandleReceiveFailed(cec_logical_address initiator)
index fb91d957c2244afb425fb56d3fe30c4aeaf9a3ca..49bd9ea5fa40521affe14746eedccff79d7d9fed 100644 (file)
@@ -66,7 +66,7 @@ CUSBCECAdapterCommunication::CUSBCECAdapterCommunication(CCECProcessor *processo
     m_bHasData(false),
     m_iLineTimeout(0),
     m_iFirmwareVersion(CEC_FW_VERSION_UNKNOWN),
-    m_lastInitiator(CECDEVICE_UNKNOWN),
+    m_lastDestination(CECDEVICE_UNKNOWN),
     m_bNextIsEscaped(false),
     m_bGotStart(false),
     m_messageProcessor(NULL),
@@ -433,24 +433,19 @@ bool CUSBCECAdapterCommunication::ParseMessage(const CCECAdapterMessage &msg)
       }
       if (m_currentframe.ack == 0x1)
       {
-        m_lastInitiator    = m_currentframe.initiator;
+        m_lastDestination    = m_currentframe.destination;
         if (!m_bWaitingForAck[m_currentframe.destination])
-        {
-          m_currentframe.eom = 1;
-          bEom = true;
-        }
+          m_processor->HandlePoll(m_currentframe.initiator, m_currentframe.destination);
         else
-        {
           m_bWaitingForAck[m_currentframe.destination] = false;
-        }
       }
     }
     break;
   case MSGCODE_RECEIVE_FAILED:
     {
       m_currentframe.Clear();
-      if (m_lastInitiator != CECDEVICE_UNKNOWN)
-        bIsError = m_processor->HandleReceiveFailed(m_lastInitiator);
+      if (m_lastDestination != CECDEVICE_UNKNOWN)
+        bIsError = m_processor->HandleReceiveFailed(m_lastDestination);
     }
     break;
   case MSGCODE_FRAME_DATA:
@@ -467,7 +462,7 @@ bool CUSBCECAdapterCommunication::ParseMessage(const CCECAdapterMessage &msg)
   }
 
   CLibCEC::AddLog(bIsError ? CEC_LOG_WARNING : CEC_LOG_DEBUG, msg.ToString());
-  return msg.IsEOM() || bEom;
+  return msg.IsEOM();
 }
 
 uint16_t CUSBCECAdapterCommunication::GetFirmwareVersion(void)
@@ -825,15 +820,15 @@ bool CUSBCECAdapterCommunication::WaitForAck(CCECAdapterMessage &message)
       else
       {
         m_processor->HandlePoll(msg.Initiator(), msg.Destination());
-        m_lastInitiator = msg.Initiator();
+        m_lastDestination = msg.Initiator();
       }
       iNow = GetTimeMs();
       continue;
     }
 
     if (msg.Message() == MSGCODE_RECEIVE_FAILED &&
-        m_lastInitiator != CECDEVICE_UNKNOWN &&
-        m_processor->HandleReceiveFailed(m_lastInitiator))
+        m_lastDestination != CECDEVICE_UNKNOWN &&
+        m_processor->HandleReceiveFailed(m_lastDestination))
     {
       iNow = GetTimeMs();
       continue;
index 03bc7a054cfb11751f8ae71267d90fde5a6d8b88..bedd270cf0b7161ebd4db6ae6fb7ac8c3437271b 100644 (file)
@@ -138,7 +138,7 @@ namespace CEC
     uint8_t                                      m_iLineTimeout;
     uint16_t                                     m_iFirmwareVersion;
     cec_command                                  m_currentframe;
-    cec_logical_address                          m_lastInitiator;
+    cec_logical_address                          m_lastDestination;
     CCECAdapterMessage                           m_currentAdapterMessage;
     bool                                         m_bNextIsEscaped;
     bool                                         m_bGotStart;