void CLibCEC::AddKey(cec_keypress &key)
{
- CLockObject lock(m_mutex);
- if (m_callbacks)
- m_callbacks->CBCecKeyPress(m_cbParam, key);
+ CLibCEC *instance = CLibCEC::GetInstance();
+ CLockObject lock(instance->m_mutex);
+
+ AddLog(CEC_LOG_DEBUG, "key pressed: %1x", key.keycode);
+
+ if (instance->m_callbacks)
+ instance->m_callbacks->CBCecKeyPress(instance->m_cbParam, key);
else
- m_keyBuffer.Push(key);
- m_iCurrentButton = CEC_USER_CONTROL_CODE_UNKNOWN;
- m_buttontime = 0;
+ instance->m_keyBuffer.Push(key);
+
+ instance->m_iCurrentButton = key.duration > 0 ? CEC_USER_CONTROL_CODE_UNKNOWN : key.keycode;
+ instance->m_buttontime = key.duration > 0 ? 0 : GetTimeMs();
+}
+
+void CLibCEC::SetCurrentButton(cec_user_control_code iButtonCode)
+{
+ /* push keypress to the keybuffer with 0 duration.
+ push another press to the keybuffer with the duration set when the button is released */
+ cec_keypress key;
+ key.duration = 0;
+ key.keycode = iButtonCode;
+
+ AddKey(key);
}
void CLibCEC::AddKey(void)
{
- CLockObject lock(m_mutex);
- if (m_iCurrentButton != CEC_USER_CONTROL_CODE_UNKNOWN)
+ CLibCEC *instance = CLibCEC::GetInstance();
+ CLockObject lock(instance->m_mutex);
+
+ if (instance->m_iCurrentButton != CEC_USER_CONTROL_CODE_UNKNOWN)
{
cec_keypress key;
- key.duration = (unsigned int) (GetTimeMs() - m_buttontime);
- key.keycode = m_iCurrentButton;
+ key.duration = (unsigned int) (GetTimeMs() - instance->m_buttontime);
+ key.keycode = instance->m_iCurrentButton;
+ AddLog(CEC_LOG_DEBUG, "key released: %1x", key.keycode);
- if (m_callbacks)
- m_callbacks->CBCecKeyPress(m_cbParam, key);
+ if (instance->m_callbacks)
+ instance->m_callbacks->CBCecKeyPress(instance->m_cbParam, key);
else
- m_keyBuffer.Push(key);
- m_iCurrentButton = CEC_USER_CONTROL_CODE_UNKNOWN;
+ instance->m_keyBuffer.Push(key);
+ instance->m_iCurrentButton = CEC_USER_CONTROL_CODE_UNKNOWN;
}
- m_buttontime = 0;
+ instance->m_buttontime = 0;
}
void CLibCEC::AddCommand(const cec_command &command)
{
- CLockObject lock(m_mutex);
- if (m_callbacks)
- {
- m_callbacks->CBCecCommand(m_cbParam, command);
- }
- else if (m_commandBuffer.Push(command))
- {
- CStdString strDebug;
- strDebug.Format("stored command '%2x' in the command buffer. buffer size = %d", command.opcode, m_commandBuffer.Size());
- AddLog(CEC_LOG_DEBUG, strDebug);
- }
- else
- {
+ CLibCEC *instance = CLibCEC::GetInstance();
+ CLockObject lock(instance->m_mutex);
+
+ AddLog(CEC_LOG_NOTICE, ">> %s (%X) -> %s (%X): %s (%2X)", instance->m_cec->ToString(command.initiator), command.initiator, instance->m_cec->ToString(command.destination), command.destination, instance->m_cec->ToString(command.opcode), command.opcode);
+
+ if (instance->m_callbacks)
+ instance->m_callbacks->CBCecCommand(instance->m_cbParam, command);
+ else if (!instance->m_commandBuffer.Push(command))
AddLog(CEC_LOG_WARNING, "command buffer is full");
- }
}
void CLibCEC::CheckKeypressTimeout(void)
}
}
-void CLibCEC::SetCurrentButton(cec_user_control_code iButtonCode)
-{
- m_iCurrentButton = iButtonCode;
- m_buttontime = GetTimeMs();
-
- /* push keypress to the keybuffer with 0 duration.
- push another press to the keybuffer with the duration set when the button is released */
- cec_keypress key;
- key.duration = 0;
- key.keycode = m_iCurrentButton;
- m_keyBuffer.Push(key);
-}
-
static CLibCEC *g_libCEC_instance(NULL);
CLibCEC *CLibCEC::GetInstance(void)
{
//@}
static void AddLog(cec_log_level level, const char *strFormat, ...);
- virtual void AddKey(void);
- virtual void AddKey(cec_keypress &key);
- virtual void AddCommand(const cec_command &command);
+ static void AddKey(void);
+ static void AddKey(cec_keypress &key);
+ static void AddCommand(const cec_command &command);
+ static void SetCurrentButton(cec_user_control_code iButtonCode);
virtual void CheckKeypressTimeout(void);
- virtual void SetCurrentButton(cec_user_control_code iButtonCode);
static CLibCEC *GetInstance(void);
static void SetInstance(CLibCEC *instance);
bool bHandled(true);
MarkBusy();
- CLibCEC::AddLog(CEC_LOG_NOTICE, ">> %s (%X) -> %s (%X): %s (%2X)", m_processor->ToString(command.initiator), command.initiator, m_processor->ToString(command.destination), command.destination, m_processor->ToString(command.opcode), command.opcode);
-
- m_processor->AddCommand(command);
+ CLibCEC::AddCommand(command);
switch(command.opcode)
{
{
if (m_processor->IsStarted() && m_busDevice->MyLogicalAddressContains(command.destination) && command.parameters.size > 0)
{
- m_processor->AddKey();
+ CLibCEC::AddKey();
if (command.parameters[0] <= CEC_USER_CONTROL_CODE_MAX)
{
- CLibCEC::AddLog(CEC_LOG_DEBUG, "key pressed: %x", command.parameters[0]);
-
if (command.parameters[0] == CEC_USER_CONTROL_CODE_POWER ||
command.parameters[0] == CEC_USER_CONTROL_CODE_POWER_ON_FUNCTION)
{
}
else
{
- m_processor->SetCurrentButton((cec_user_control_code) command.parameters[0]);
+ CLibCEC::SetCurrentButton((cec_user_control_code) command.parameters[0]);
}
return true;
}
bool CCECCommandHandler::HandleUserControlRelease(const cec_command &command)
{
if (m_processor->IsStarted() && m_busDevice->MyLogicalAddressContains(command.destination))
- m_processor->AddKey();
+ CLibCEC::AddKey();
return true;
}