X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Flib%2FCECProcessor.cpp;h=f781b6fb58b94f99f970a8eb2248937f958aa1cc;hb=82b65f18fa44f1f9a673f10d917b2efdf087e565;hp=cab483fee4bcb14b6319765785e6e1df3bbf65e3;hpb=e0407d3d1acb140e344b95c248259474a44ad89b;p=deb_libcec.git diff --git a/src/lib/CECProcessor.cpp b/src/lib/CECProcessor.cpp index cab483f..f781b6f 100644 --- a/src/lib/CECProcessor.cpp +++ b/src/lib/CECProcessor.cpp @@ -231,13 +231,17 @@ cec_power_status CCECProcessor::GetDevicePowerStatus(cec_logical_address iAddres bool CCECProcessor::Transmit(const cec_command &data) { + bool bReturn(false); LogOutput(data); - CCECAdapterMessagePtr output(new CCECAdapterMessage(data)); - return Transmit(output); + CCECAdapterMessage *output = new CCECAdapterMessage(data); + bReturn = Transmit(output); + delete output; + + return bReturn; } -bool CCECProcessor::Transmit(CCECAdapterMessagePtr output) +bool CCECProcessor::Transmit(CCECAdapterMessage *output) { bool bReturn(false); CLockObject lock(&m_mutex); @@ -247,7 +251,7 @@ bool CCECProcessor::Transmit(CCECAdapterMessagePtr output) return bReturn; else { - output->condition.Wait(&output->mutex, 1000); + output->condition.Wait(&output->mutex); if (output->state != ADAPTER_MESSAGE_STATE_SENT) { m_controller->AddLog(CEC_LOG_ERROR, "command was not sent"); @@ -298,29 +302,26 @@ bool CCECProcessor::WaitForTransmitSucceeded(uint8_t iLength, uint32_t iTimeout continue; } - bError = msg.is_error(); - m_controller->AddLog(msg.is_error() ? CEC_LOG_WARNING : CEC_LOG_DEBUG, msg.ToString()); - - switch(msg.message()) + if ((bError = msg.is_error()) == false) { - case MSGCODE_COMMAND_ACCEPTED: - if (iPacketsLeft > 0) - iPacketsLeft--; - break; - case MSGCODE_TRANSMIT_SUCCEEDED: - bTransmitSucceeded = (iPacketsLeft == 0); - bError = !bTransmitSucceeded; - break; - default: - CStdString strLog; - strLog.Format("received unexpected reply '%s' instead of ack", msg.MessageCodeAsString().c_str()); - m_controller->AddLog(CEC_LOG_WARNING, strLog); - ParseMessage(msg); - bError = true; - break; - } + m_controller->AddLog(bError ? CEC_LOG_WARNING : CEC_LOG_DEBUG, msg.ToString()); - iNow = GetTimeMs(); + switch(msg.message()) + { + case MSGCODE_COMMAND_ACCEPTED: + if (iPacketsLeft > 0) + iPacketsLeft--; + break; + case MSGCODE_TRANSMIT_SUCCEEDED: + bTransmitSucceeded = (iPacketsLeft == 0); + bError = !bTransmitSucceeded; + break; + default: + ParseMessage(msg); + } + + iNow = GetTimeMs(); + } } return bTransmitSucceeded && !bError; @@ -390,7 +391,12 @@ void CCECProcessor::SetCurrentButton(cec_user_control_code iButtonCode) void CCECProcessor::AddCommand(const cec_command &command) { -// m_controller->AddCommand(command); + m_controller->AddCommand(command); +} + +void CCECProcessor::AddKey(cec_keypress &key) +{ + m_controller->AddKey(key); } void CCECProcessor::AddKey(void) @@ -405,11 +411,12 @@ void CCECProcessor::AddLog(cec_log_level level, const CStdString &strMessage) bool CCECProcessor::SetAckMask(uint16_t iMask) { + bool bReturn(false); CStdString strLog; strLog.Format("setting ackmask to %2x", iMask); m_controller->AddLog(CEC_LOG_DEBUG, strLog.c_str()); - CCECAdapterMessagePtr output(new CCECAdapterMessage); + CCECAdapterMessage *output = new CCECAdapterMessage; output->push_back(MSGSTART); output->push_escaped(MSGCODE_SET_ACK_MASK); @@ -417,11 +424,10 @@ bool CCECProcessor::SetAckMask(uint16_t iMask) output->push_escaped((uint8_t)iMask); output->push_back(MSGEND); - if (!Transmit(output)) - { + if ((bReturn = Transmit(output)) == false) m_controller->AddLog(CEC_LOG_ERROR, "could not set the ackmask"); - return false; - } - return true; + delete output; + + return bReturn; }