cec: update m_iLastActive if a poll was acked in CCECBusDevice::TransmitPoll()
[deb_libcec.git] / src / lib / devices / CECBusDevice.cpp
index 42aa02c6644b480c2c3e9b9f889423b1f42930fc..c241ed766aca4aafe94db80e6ce7fa4151762ca0 100644 (file)
@@ -83,6 +83,8 @@ bool CCECBusDevice::HandleCommand(const cec_command &command)
   CLockObject lock(&m_transmitMutex);
   m_iLastActive = GetTimeMs();
   m_handler->HandleCommand(command);
+  if (m_deviceStatus != CEC_DEVICE_STATUS_HANDLED_BY_LIBCEC)
+    m_deviceStatus = CEC_DEVICE_STATUS_PRESENT;
   m_condition.Signal();
   return true;
 }
@@ -650,10 +652,20 @@ bool CCECBusDevice::TransmitPoll(cec_logical_address dest)
 
   cec_command command;
   cec_command::Format(command, m_iLogicalAddress, dest, CEC_OPCODE_NONE);
-  CLockObject lock(&m_transmitMutex);
 
-  bReturn = m_processor->Transmit(command);
+  {
+    CLockObject lock(&m_transmitMutex);
+    bReturn = m_processor->Transmit(command);
+  }
+
   AddLog(CEC_LOG_DEBUG, bReturn ? ">> POLL sent" : ">> POLL not sent");
+
+  if (bReturn)
+  {
+    CLockObject lock(&m_mutex);
+    m_iLastActive = GetTimeMs();
+  }
+
   return bReturn;
 }