MCPcopy Create free account
hub / github.com/Pulse-Eight/libcec / CheckKeypressTimeout

Method CheckKeypressTimeout

src/libcec/CECClient.cpp:1171–1243  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1169}
1170
1171uint16_t CCECClient::CheckKeypressTimeout(void)
1172{
1173 // time when we'd like to be called again
1174 uint64_t timeout = CEC_PROCESSOR_SIGNAL_WAIT_TIME;
1175 cec_keypress key;
1176 key.keycode = CEC_USER_CONTROL_CODE_UNKNOWN;
1177 key.duration = 0;
1178
1179 if (m_iCurrentButton == CEC_USER_CONTROL_CODE_UNKNOWN)
1180 return (uint16_t)timeout;
1181 {
1182 CLockObject lock(m_mutex);
1183 uint64_t iNow = GetTimeMs();
1184 LIB_CEC->AddLog(CEC_LOG_DEBUG, "%s T:%.3f", __FUNCTION__, iNow*1e-3);
1185 cec_user_control_code comboKey(m_configuration.comboKey);
1186 uint32_t iTimeoutMs(m_configuration.iComboKeyTimeoutMs);
1187
1188 if (m_iCurrentButton == comboKey && iTimeoutMs > 0 && iNow - m_updateButtontime >= iTimeoutMs)
1189 {
1190 key.duration = (unsigned int) (iNow - m_initialButtontime);
1191 key.keycode = m_iCurrentButton;
1192
1193 m_iCurrentButton = CEC_USER_CONTROL_CODE_UNKNOWN;
1194 m_initialButtontime = 0;
1195 m_updateButtontime = 0;
1196 m_repeatButtontime = 0;
1197 m_releaseButtontime = 0;
1198 m_pressedButtoncount = 0;
1199 m_releasedButtoncount = 0;
1200 }
1201 else if (m_iCurrentButton != comboKey && m_releaseButtontime && iNow >= (uint64_t)m_releaseButtontime)
1202 {
1203 key.duration = (unsigned int) (iNow - m_initialButtontime);
1204 key.keycode = CEC_USER_CONTROL_CODE_UNKNOWN;
1205
1206 m_iCurrentButton = CEC_USER_CONTROL_CODE_UNKNOWN;
1207 m_initialButtontime = 0;
1208 m_updateButtontime = 0;
1209 m_repeatButtontime = 0;
1210 m_releaseButtontime = 0;
1211 m_pressedButtoncount = 0;
1212 m_releasedButtoncount = 0;
1213 }
1214 else if (m_iCurrentButton != comboKey && m_repeatButtontime && iNow >= (uint64_t)m_repeatButtontime)
1215 {
1216 key.duration = (unsigned int) (iNow - m_initialButtontime);
1217 key.keycode = m_iCurrentButton;
1218 m_repeatButtontime = iNow + m_configuration.iButtonRepeatRateMs;
1219 timeout = std::min((uint64_t)timeout, m_repeatButtontime - iNow);
1220 }
1221 else
1222 {
1223 if (m_iCurrentButton == comboKey && iTimeoutMs > 0)
1224 timeout = std::min((uint64_t)timeout, m_updateButtontime - iNow + iTimeoutMs);
1225 if (m_iCurrentButton != comboKey && m_releaseButtontime)
1226 timeout = std::min((uint64_t)timeout, m_releaseButtontime - iNow);
1227 if (m_iCurrentButton != comboKey && m_repeatButtontime)
1228 timeout = std::min((uint64_t)timeout, m_repeatButtontime - iNow);

Callers

nothing calls this directly

Calls 2

ToStringFunction · 0.85
AddLogMethod · 0.45

Tested by

no test coverage detected