X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Flib%2FLibCEC.cpp;h=4812e39007726489ef19cbf94c46c929536603e9;hb=94f4d861d60b502596b67541692033da75654284;hp=8c0aca8164d20cc18c987a080cd365611a2b1271;hpb=c3ce6b477f21ac72bebd036074bfad3b966f6154;p=deb_libcec.git diff --git a/src/lib/LibCEC.cpp b/src/lib/LibCEC.cpp index 8c0aca8..4812e39 100644 --- a/src/lib/LibCEC.cpp +++ b/src/lib/LibCEC.cpp @@ -60,7 +60,6 @@ CLibCEC::CLibCEC(libcec_configuration *configuration) : m_callbacks(configuration->callbacks), m_cbParam(configuration->callbackParam) { - configuration->serverVersion = CEC_SERVER_VERSION_1_6_1; m_cec = new CCECProcessor(this, configuration); } @@ -354,14 +353,14 @@ void CLibCEC::AddLog(const cec_log_level level, const char *strFormat, ...) CLibCEC *instance = CLibCEC::GetInstance(); if (!instance) return; - CLockObject lock(instance->m_mutex); + CLockObject lock(instance->m_logMutex); cec_log_message message; message.level = level; message.time = GetTimeMs() - instance->m_iStartTime; snprintf(message.message, sizeof(message.message), "%s", strLog.c_str()); - if (instance->m_callbacks) + if (instance->m_callbacks && instance->m_callbacks->CBCecLogMessage) instance->m_callbacks->CBCecLogMessage(instance->m_cbParam, message); else instance->m_logBuffer.Push(message); @@ -376,7 +375,7 @@ void CLibCEC::AddKey(const cec_keypress &key) AddLog(CEC_LOG_DEBUG, "key pressed: %1x", key.keycode); - if (instance->m_callbacks) + if (instance->m_callbacks && instance->m_callbacks->CBCecKeyPress) instance->m_callbacks->CBCecKeyPress(instance->m_cbParam, key); else instance->m_keyBuffer.Push(key); @@ -392,7 +391,7 @@ void CLibCEC::ConfigurationChanged(const libcec_configuration &config) if (instance->m_callbacks && config.clientVersion >= CEC_CLIENT_VERSION_1_5_0 && - instance->m_callbacks->CBCecConfigurationChanged != NULL && + instance->m_callbacks->CBCecConfigurationChanged && instance->m_cec->IsInitialised()) instance->m_callbacks->CBCecConfigurationChanged(instance->m_cbParam, config); } @@ -423,7 +422,7 @@ void CLibCEC::AddKey(void) key.keycode = instance->m_iCurrentButton; AddLog(CEC_LOG_DEBUG, "key released: %1x", key.keycode); - if (instance->m_callbacks) + if (instance->m_callbacks && instance->m_callbacks->CBCecKeyPress) instance->m_callbacks->CBCecKeyPress(instance->m_cbParam, key); else instance->m_keyBuffer.Push(key); @@ -441,12 +440,32 @@ void CLibCEC::AddCommand(const cec_command &command) 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) + if (instance->m_callbacks && instance->m_callbacks->CBCecCommand) 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::Alert(const libcec_alert type, const libcec_parameter ¶m) +{ + CLibCEC *instance = CLibCEC::GetInstance(); + if (!instance) + return; + CLockObject lock(instance->m_mutex); + + libcec_configuration config; + instance->GetCurrentConfiguration(&config); + + if (instance->m_callbacks && + config.clientVersion >= CEC_CLIENT_VERSION_1_6_0 && + instance->m_cec->IsInitialised() && + instance->m_callbacks->CBCecAlert) + instance->m_callbacks->CBCecAlert(instance->m_cbParam, type, param); + + if (type == CEC_ALERT_CONNECTION_LOST) + instance->Close(); +} + void CLibCEC::CheckKeypressTimeout(void) { if (m_iCurrentButton != CEC_USER_CONTROL_CODE_UNKNOWN && GetTimeMs() - m_buttontime > CEC_BUTTON_TIMEOUT) @@ -616,7 +635,7 @@ const char *CLibCEC::ToString(const cec_device_type type) bool CLibCEC::GetCurrentConfiguration(libcec_configuration *configuration) { - return m_cec->IsInitialised() && m_cec->GetCurrentConfiguration(configuration); + return m_cec->GetCurrentConfiguration(configuration); } bool CLibCEC::SetConfiguration(const libcec_configuration *configuration)