cec: only send a power on command when a device isn't on already and set the power...
authorLars Op den Kamp <lars@opdenkamp.eu>
Thu, 10 Nov 2011 17:30:00 +0000 (18:30 +0100)
committerLars Op den Kamp <lars@opdenkamp.eu>
Thu, 10 Nov 2011 18:00:31 +0000 (19:00 +0100)
src/lib/devices/CECBusDevice.cpp

index b5f5b580a6b099cd16ab2ad7f6f667897b6c6faa..e061619e36a15b9ebe77b65eb3596778b7bdc35c 100644 (file)
@@ -107,14 +107,23 @@ void CCECBusDevice::PollVendorId(void)
 
 bool CCECBusDevice::PowerOn(void)
 {
-  CStdString strLog;
-  strLog.Format("<< powering on '%s' (%X)", GetLogicalAddressName(), m_iLogicalAddress);
-  AddLog(CEC_LOG_DEBUG, strLog.c_str());
+  cec_power_status current = GetPowerStatus();
+  if (current != CEC_POWER_STATUS_ON &&
+      current != CEC_POWER_STATUS_IN_TRANSITION_STANDBY_TO_ON)
+  {
+    CStdString strLog;
+    strLog.Format("<< powering on '%s' (%X)", GetLogicalAddressName(), m_iLogicalAddress);
+    AddLog(CEC_LOG_DEBUG, strLog.c_str());
 
-  cec_command command;
-  cec_command::format(command, GetMyLogicalAddress(), m_iLogicalAddress, CEC_OPCODE_IMAGE_VIEW_ON);
+    SetPowerStatus(CEC_POWER_STATUS_IN_TRANSITION_STANDBY_TO_ON);
 
-  return m_processor->Transmit(command);
+    cec_command command;
+    cec_command::format(command, GetMyLogicalAddress(), m_iLogicalAddress, CEC_OPCODE_IMAGE_VIEW_ON);
+
+    return m_processor->Transmit(command);
+  }
+
+  return true;
 }
 
 bool CCECBusDevice::Standby(void)