From 2efa39b7105c98a2219a12e5ab3432b77e042112 Mon Sep 17 00:00:00 2001 From: Lars Op den Kamp Date: Wed, 11 Jan 2012 01:42:55 +0100 Subject: [PATCH] cec: always refresh the power state of a device when it hasn't been updated for 30 seconds --- include/cectypes.h | 1 + src/lib/devices/CECBusDevice.cpp | 6 +++++- src/lib/devices/CECBusDevice.h | 1 + 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/include/cectypes.h b/include/cectypes.h index ab4dcd8..1ad7d40 100644 --- a/include/cectypes.h +++ b/include/cectypes.h @@ -64,6 +64,7 @@ namespace CEC { #define MSGESC 0xFD #define ESCOFFSET 3 #define CEC_BUTTON_TIMEOUT 500 +#define CEC_POWER_STATE_REFRESH_TIME 30000 #define CEC_DEFAULT_TRANSMIT_TIMEOUT 1000 #define CEC_DEFAULT_TRANSMIT_WAIT 2000 diff --git a/src/lib/devices/CECBusDevice.cpp b/src/lib/devices/CECBusDevice.cpp index 9e9145c..d6e447f 100644 --- a/src/lib/devices/CECBusDevice.cpp +++ b/src/lib/devices/CECBusDevice.cpp @@ -54,6 +54,7 @@ CCECBusDevice::CCECBusDevice(CCECProcessor *processor, cec_logical_address iLogi m_menuState(CEC_MENU_STATE_ACTIVATED), m_bActiveSource(false), m_iLastActive(0), + m_iLastPowerStateUpdate(0), m_cecVersion(CEC_VERSION_UNKNOWN), m_deviceStatus(CEC_DEVICE_STATUS_UNKNOWN), m_handlerMutex(false) @@ -314,7 +315,9 @@ cec_power_status CCECBusDevice::GetPowerStatus(bool bUpdate /* = false */) CLockObject lock(&m_mutex); bRequestUpdate = (GetStatus() == CEC_DEVICE_STATUS_PRESENT && (bUpdate || m_powerStatus == CEC_POWER_STATUS_UNKNOWN || - m_powerStatus == CEC_POWER_STATUS_IN_TRANSITION_STANDBY_TO_ON)); + m_powerStatus == CEC_POWER_STATUS_IN_TRANSITION_STANDBY_TO_ON || + m_powerStatus == CEC_POWER_STATUS_IN_TRANSITION_ON_TO_STANDBY || + GetTimeMs() - m_iLastPowerStateUpdate >= CEC_POWER_STATE_REFRESH_TIME)); } if (bRequestUpdate) @@ -619,6 +622,7 @@ void CCECBusDevice::SetPowerStatus(const cec_power_status powerStatus) CLockObject lock(&m_mutex); if (m_powerStatus != powerStatus) { + m_iLastPowerStateUpdate = GetTimeMs(); CStdString strLog; strLog.Format(">> %s (%X): power status changed from '%s' to '%s'", GetLogicalAddressName(), m_iLogicalAddress, ToString(m_powerStatus), ToString(powerStatus)); m_processor->AddLog(CEC_LOG_DEBUG, strLog); diff --git a/src/lib/devices/CECBusDevice.h b/src/lib/devices/CECBusDevice.h index 6157e0a..2bef3a7 100644 --- a/src/lib/devices/CECBusDevice.h +++ b/src/lib/devices/CECBusDevice.h @@ -132,6 +132,7 @@ namespace CEC cec_menu_state m_menuState; bool m_bActiveSource; uint64_t m_iLastActive; + uint64_t m_iLastPowerStateUpdate; cec_version m_cecVersion; cec_bus_device_status m_deviceStatus; std::set m_unsupportedFeatures; -- 2.34.1