Merge branch 'master' of github.com:Pulse-Eight/libcec
[deb_libcec.git] / src / lib / adapter / USBCECAdapterCommunication.cpp
index 18e12bc345e09349b7f6271ecfe45b57fa16ad18..8f3bb7f0bef62dde35165454f35b4c13061ee122 100644 (file)
@@ -216,6 +216,7 @@ bool CUSBCECAdapterCommunication::Open(IAdapterCommunicationCallback *cb, uint32
       delete m_port;
       m_port = NULL;
       CLibCEC::AddLog(CEC_LOG_ERROR, "could not create a communication thread");
+      return false;
     }
   }
   else
@@ -289,6 +290,7 @@ void *CUSBCECAdapterCommunication::Process(void)
     m_port = NULL;
   }
 
+  m_rcvCondition.Broadcast();
   return NULL;
 }
 
@@ -310,6 +312,7 @@ cec_adapter_message_state CUSBCECAdapterCommunication::Write(const cec_command &
   output->retryTimeout = iRetryLineTimeout;
   output->tries = 0;
 
+  if (data.destination < 15)
   {
     CLockObject lock(m_mutex);
     m_bWaitingForAck[data.destination] = true;
@@ -439,10 +442,13 @@ bool CUSBCECAdapterCommunication::ParseMessage(const CCECAdapterMessage &msg)
       if (m_currentframe.ack == 0x1)
       {
         m_lastDestination    = m_currentframe.destination;
-        if (!m_bWaitingForAck[m_currentframe.destination])
-          m_processor->HandlePoll(m_currentframe.initiator, m_currentframe.destination);
-        else
-          m_bWaitingForAck[m_currentframe.destination] = false;
+        if (m_currentframe.destination < 15)
+        {
+          if (!m_bWaitingForAck[m_currentframe.destination])
+            m_processor->HandlePoll(m_currentframe.initiator, m_currentframe.destination);
+          else
+            m_bWaitingForAck[m_currentframe.destination] = false;
+        }
       }
     }
     break;
@@ -822,9 +828,9 @@ bool CUSBCECAdapterCommunication::WaitForAck(CCECAdapterMessage &message)
 
     if (msg.Message() == MSGCODE_FRAME_START && msg.IsACK())
     {
-      if (m_bWaitingForAck[msg.Initiator()])
+      if (msg.Initiator() < 15 && m_bWaitingForAck[msg.Initiator()])
         m_bWaitingForAck[msg.Initiator()] = false;
-      else
+      else if (msg.Initiator() < 15)
       {
         m_processor->HandlePoll(msg.Initiator(), msg.Destination());
         m_lastDestination = msg.Initiator();