X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Flib%2FCECClient.cpp;h=0bc9705ee5882887d84261a1a82dcb319676e34c;hb=5d7960cb1894c3038fdce35057363e082b2a62d8;hp=d0699130cd303a6bc247351edd318653ce7cdd5a;hpb=a58b5c20428ec97cdcdaa1b3f7a8ede3aba09811;p=deb_libcec.git diff --git a/src/lib/CECClient.cpp b/src/lib/CECClient.cpp index d069913..0bc9705 100644 --- a/src/lib/CECClient.cpp +++ b/src/lib/CECClient.cpp @@ -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. @@ -822,6 +822,7 @@ bool CCECClient::GetCurrentConfiguration(libcec_configuration &configuration) configuration.wakeDevices = m_configuration.wakeDevices; configuration.powerOffDevices = m_configuration.powerOffDevices; configuration.bPowerOffScreensaver = m_configuration.bPowerOffScreensaver; + configuration.bPowerOnScreensaver = m_configuration.bPowerOnScreensaver; configuration.bPowerOffOnStandby = m_configuration.bPowerOffOnStandby; configuration.bSendInactiveSource = m_configuration.bSendInactiveSource; configuration.logicalAddresses = m_configuration.logicalAddresses; @@ -875,7 +876,7 @@ bool CCECClient::SetConfiguration(const libcec_configuration &configuration) m_configuration.bMonitorOnly = configuration.bMonitorOnly; m_configuration.cecVersion = configuration.cecVersion; m_configuration.adapterType = configuration.adapterType; - m_configuration.iDoubleTapTimeoutMs = configuration.iDoubleTapTimeoutMs; + m_configuration.iDoubleTapTimeout50Ms = configuration.iDoubleTapTimeout50Ms; m_configuration.deviceTypes.Add(configuration.deviceTypes[0]); if (m_configuration.clientVersion >= CEC_CLIENT_VERSION_2_0_5) @@ -888,6 +889,11 @@ bool CCECClient::SetConfiguration(const libcec_configuration &configuration) m_configuration.comboKey = defaultSettings.comboKey; m_configuration.iComboKeyTimeoutMs = defaultSettings.iComboKeyTimeoutMs; } + + if (m_configuration.clientVersion >= CEC_CLIENT_VERSION_2_1_0) + m_configuration.bPowerOnScreensaver = configuration.bPowerOnScreensaver; + else + m_configuration.bPowerOnScreensaver = defaultSettings.bPowerOnScreensaver; } bool bNeedReinit(false); @@ -967,10 +973,10 @@ void CCECClient::AddKey(bool bSendComboKey /* = false */) { key.duration = (unsigned int) (GetTimeMs() - m_buttontime); - cec_user_control_code comboKey(m_configuration.comboKey); - uint32_t iTimeoutMs(m_configuration.iComboKeyTimeoutMs); - - if (key.duration > iTimeoutMs || m_iCurrentButton != comboKey || bSendComboKey) + if (key.duration > m_configuration.iComboKeyTimeoutMs || + m_configuration.iComboKeyTimeoutMs == 0 || + m_iCurrentButton != m_configuration.comboKey || + bSendComboKey) { key.keycode = m_iCurrentButton; @@ -989,7 +995,7 @@ void CCECClient::AddKey(bool bSendComboKey /* = false */) void CCECClient::AddKey(const cec_keypress &key) { - if (key.keycode > CEC_USER_CONTROL_CODE_MAX && + if (key.keycode > CEC_USER_CONTROL_CODE_MAX || key.keycode < CEC_USER_CONTROL_CODE_SELECT) { // send back the previous key if there is one @@ -1003,7 +1009,7 @@ void CCECClient::AddKey(const cec_keypress &key) { CLockObject lock(m_mutex); - if (m_iCurrentButton == comboKey && key.duration == 0) + if (m_configuration.iComboKeyTimeoutMs > 0 && m_iCurrentButton == comboKey && key.duration == 0) { // stop + ok -> exit if (key.keycode == CEC_USER_CONTROL_CODE_SELECT) @@ -1064,7 +1070,7 @@ void CCECClient::CheckKeypressTimeout(void) m_configuration.iComboKeyTimeoutMs : CEC_DEFAULT_COMBO_TIMEOUT_MS); if (m_iCurrentButton != CEC_USER_CONTROL_CODE_UNKNOWN && - ((m_iCurrentButton == comboKey && iNow - m_buttontime > iTimeoutMs) || + ((m_iCurrentButton == comboKey && iTimeoutMs > 0 && iNow - m_buttontime > iTimeoutMs) || (m_iCurrentButton != comboKey && iNow - m_buttontime > CEC_BUTTON_TIMEOUT))) { key.duration = (unsigned int) (iNow - m_buttontime); @@ -1451,6 +1457,14 @@ void CCECClient::CallbackAddCommand(const cec_command &command) m_configuration.callbacks->CBCecCommand(m_configuration.callbackParam, command); } +uint32_t CCECClient::DoubleTapTimeoutMS(void) +{ + CLockObject lock(m_cbMutex); + return m_configuration.clientVersion >= CEC_CLIENT_VERSION_2_2_0 ? + m_configuration.iDoubleTapTimeout50Ms * DOUBLE_TAP_TIMEOUT_UNIT_SIZE : + m_configuration.iDoubleTapTimeout50Ms; +} + void CCECClient::CallbackAddKey(const cec_keypress &key) { CLockObject lock(m_cbMutex); @@ -1460,7 +1474,7 @@ void CCECClient::CallbackAddKey(const cec_keypress &key) int64_t now = GetTimeMs(); if (m_lastKeypress.keycode != key.keycode || key.duration > 0 || - now - m_iLastKeypressTime >= m_configuration.iDoubleTapTimeoutMs) + now - m_iLastKeypressTime >= DoubleTapTimeoutMS()) { // no double tap if (key.duration == 0)