m_bRegistered(false),
m_iCurrentButton(CEC_USER_CONTROL_CODE_UNKNOWN),
m_buttontime(0),
- m_iPreventForwardingPowerOffCommand(0)
+ m_iPreventForwardingPowerOffCommand(0),
+ m_iLastKeypressTime(0)
{
+ m_lastKeypress.keycode = CEC_USER_CONTROL_CODE_UNKNOWN;
+ m_lastKeypress.duration = 0;
m_configuration.Clear();
// set the initial configuration
SetConfiguration(configuration);
{
time_t buildTime = (time_t)m_configuration.iFirmwareBuildDate;
strLog.AppendFormat(", firmware build date: %s", asctime(gmtime(&buildTime)));
- strLog = strLog.Left((int)strLog.length() - 1); // strip \n added by asctime
+ strLog = strLog.substr(0, strLog.length() > 0 ? (size_t)(strLog.length() - 1) : 0); // strip \n added by asctime
strLog.append(" +0000");
}
{
CLockObject lock(m_cbMutex);
if (m_configuration.callbacks && m_configuration.callbacks->CBCecKeyPress)
- m_configuration.callbacks->CBCecKeyPress(m_configuration.callbackParam, key);
+ {
+ // prevent double taps
+ int64_t now = GetTimeMs();
+ if (m_lastKeypress.keycode != key.keycode ||
+ key.duration > 0 ||
+ now - m_iLastKeypressTime >= CEC_DOUBLE_TAP_TIMEOUT_MS)
+ {
+ // no double tap
+ if (key.duration == 0)
+ m_iLastKeypressTime = now;
+ m_lastKeypress = key;
+ m_configuration.callbacks->CBCecKeyPress(m_configuration.callbackParam, key);
+ }
+ }
}
void CCECClient::CallbackAddLog(const cec_log_message &message)