#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
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)
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)
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);
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<cec_opcode> m_unsupportedFeatures;