fix assertion on XBMC exit
[deb_libcec.git] / src / lib / adapter / RPi / RPiCECAdapterCommunication.cpp
index 145e42ba34b96f57229a1bc38b40791a6e562b44..243223d3f67d0a149d5e37a85bc8daa4e065a0aa 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.
@@ -118,17 +118,13 @@ void CRPiCECAdapterCommunication::OnTVServiceCallback(uint32_t reason, uint32_t
 {
   switch(reason)
   {
-  case VC_HDMI_UNPLUGGED:
-  {
-    m_callback->HandlePhysicalAddressChanged(0x1000);
-    break;
-  }
   case VC_HDMI_ATTACHED:
   {
     uint16_t iNewAddress = GetPhysicalAddress();
     m_callback->HandlePhysicalAddressChanged(iNewAddress);
     break;
   }
+  case VC_HDMI_UNPLUGGED:
   case VC_HDMI_DVI:
   case VC_HDMI_HDMI:
   case VC_HDMI_HDCP_UNAUTH:
@@ -357,7 +353,8 @@ void CRPiCECAdapterCommunication::Close(void)
     else
       return;
   }
-  vc_tv_unregister_callback(rpi_tv_callback);
+  if (m_bInitialised)
+    vc_tv_unregister_callback(rpi_tv_callback);
 
   UnregisterLogicalAddress();
 
@@ -386,13 +383,18 @@ cec_adapter_message_state CRPiCECAdapterCommunication::Write(const cec_command &
     return (data.initiator == data.destination) ? ADAPTER_MESSAGE_STATE_SENT_NOT_ACKED : ADAPTER_MESSAGE_STATE_ERROR;
   }
 
-  if (!data.opcode_set && data.initiator == data.destination)
+  if (!m_queue->Write(data, bIsReply))
   {
-    // registration of the logical address would have failed
-    return ADAPTER_MESSAGE_STATE_SENT_NOT_ACKED;
+    if (!data.opcode_set)
+    {
+      return ADAPTER_MESSAGE_STATE_SENT_NOT_ACKED;
+    }
+    
+    return ADAPTER_MESSAGE_STATE_SENT;
   }
 
-  return m_queue->Write(data, bIsReply) ? ADAPTER_MESSAGE_STATE_SENT_ACKED : ADAPTER_MESSAGE_STATE_SENT_NOT_ACKED;
+  return ADAPTER_MESSAGE_STATE_SENT_ACKED;
+
 }
 
 uint16_t CRPiCECAdapterCommunication::GetFirmwareVersion(void)