From: Lars Op den Kamp Date: Mon, 19 Mar 2012 14:07:21 +0000 (+0100) Subject: cec: don't log polls and don't cut off messages that start with the ack bit set,... X-Git-Tag: upstream/2.2.0~1^2~31^2~65 X-Git-Url: https://git.piment-noir.org/?a=commitdiff_plain;h=eb96547367a4df24be53fa73514c8e9052918cc1;p=deb_libcec.git cec: don't log polls and don't cut off messages that start with the ack bit set, but that are not a response (LG). bugzid: 591 --- diff --git a/src/lib/CECProcessor.cpp b/src/lib/CECProcessor.cpp index 23afdb6..83e9ee8 100644 --- a/src/lib/CECProcessor.cpp +++ b/src/lib/CECProcessor.cpp @@ -1481,7 +1481,7 @@ bool CCECProcessor::PingAdapter(void) void CCECProcessor::HandlePoll(cec_logical_address initiator, cec_logical_address destination) { - m_busDevices[initiator]->HandlePoll(destination); + m_busDevices[destination]->HandlePoll(initiator); } bool CCECProcessor::HandleReceiveFailed(cec_logical_address initiator) diff --git a/src/lib/adapter/USBCECAdapterCommunication.cpp b/src/lib/adapter/USBCECAdapterCommunication.cpp index fb91d95..49bd9ea 100644 --- a/src/lib/adapter/USBCECAdapterCommunication.cpp +++ b/src/lib/adapter/USBCECAdapterCommunication.cpp @@ -66,7 +66,7 @@ CUSBCECAdapterCommunication::CUSBCECAdapterCommunication(CCECProcessor *processo m_bHasData(false), m_iLineTimeout(0), m_iFirmwareVersion(CEC_FW_VERSION_UNKNOWN), - m_lastInitiator(CECDEVICE_UNKNOWN), + m_lastDestination(CECDEVICE_UNKNOWN), m_bNextIsEscaped(false), m_bGotStart(false), m_messageProcessor(NULL), @@ -433,24 +433,19 @@ bool CUSBCECAdapterCommunication::ParseMessage(const CCECAdapterMessage &msg) } if (m_currentframe.ack == 0x1) { - m_lastInitiator = m_currentframe.initiator; + m_lastDestination = m_currentframe.destination; if (!m_bWaitingForAck[m_currentframe.destination]) - { - m_currentframe.eom = 1; - bEom = true; - } + m_processor->HandlePoll(m_currentframe.initiator, m_currentframe.destination); else - { m_bWaitingForAck[m_currentframe.destination] = false; - } } } break; case MSGCODE_RECEIVE_FAILED: { m_currentframe.Clear(); - if (m_lastInitiator != CECDEVICE_UNKNOWN) - bIsError = m_processor->HandleReceiveFailed(m_lastInitiator); + if (m_lastDestination != CECDEVICE_UNKNOWN) + bIsError = m_processor->HandleReceiveFailed(m_lastDestination); } break; case MSGCODE_FRAME_DATA: @@ -467,7 +462,7 @@ bool CUSBCECAdapterCommunication::ParseMessage(const CCECAdapterMessage &msg) } CLibCEC::AddLog(bIsError ? CEC_LOG_WARNING : CEC_LOG_DEBUG, msg.ToString()); - return msg.IsEOM() || bEom; + return msg.IsEOM(); } uint16_t CUSBCECAdapterCommunication::GetFirmwareVersion(void) @@ -825,15 +820,15 @@ bool CUSBCECAdapterCommunication::WaitForAck(CCECAdapterMessage &message) else { m_processor->HandlePoll(msg.Initiator(), msg.Destination()); - m_lastInitiator = msg.Initiator(); + m_lastDestination = msg.Initiator(); } iNow = GetTimeMs(); continue; } if (msg.Message() == MSGCODE_RECEIVE_FAILED && - m_lastInitiator != CECDEVICE_UNKNOWN && - m_processor->HandleReceiveFailed(m_lastInitiator)) + m_lastDestination != CECDEVICE_UNKNOWN && + m_processor->HandleReceiveFailed(m_lastDestination)) { iNow = GetTimeMs(); continue; diff --git a/src/lib/adapter/USBCECAdapterCommunication.h b/src/lib/adapter/USBCECAdapterCommunication.h index 03bc7a0..bedd270 100644 --- a/src/lib/adapter/USBCECAdapterCommunication.h +++ b/src/lib/adapter/USBCECAdapterCommunication.h @@ -138,7 +138,7 @@ namespace CEC uint8_t m_iLineTimeout; uint16_t m_iFirmwareVersion; cec_command m_currentframe; - cec_logical_address m_lastInitiator; + cec_logical_address m_lastDestination; CCECAdapterMessage m_currentAdapterMessage; bool m_bNextIsEscaped; bool m_bGotStart;