From d297cbd4fc30bc93836532a9a31027b7e64150b3 Mon Sep 17 00:00:00 2001 From: Lars Op den Kamp Date: Mon, 19 Mar 2012 12:46:32 +0100 Subject: [PATCH] cec: poll doesn't have an opcode. bugzid: 591 --- src/lib/CECProcessor.cpp | 4 +++- src/lib/adapter/USBCECAdapterCommunication.cpp | 7 ++++--- src/lib/devices/CECBusDevice.cpp | 2 +- src/lib/implementations/CECCommandHandler.cpp | 9 +++++++++ src/lib/implementations/CECCommandHandler.h | 1 + 5 files changed, 18 insertions(+), 5 deletions(-) diff --git a/src/lib/CECProcessor.cpp b/src/lib/CECProcessor.cpp index a421840..23afdb6 100644 --- a/src/lib/CECProcessor.cpp +++ b/src/lib/CECProcessor.cpp @@ -912,7 +912,9 @@ void CCECProcessor::TransmitAbort(cec_logical_address address, cec_opcode opcode void CCECProcessor::ParseCommand(const cec_command &command) { CStdString dataStr; - dataStr.Format(">> %1x%1x:%02x", command.initiator, command.destination, command.opcode); + dataStr.Format(">> %1x%1x", command.initiator, command.destination); + if (command.opcode_set == 1) + dataStr.AppendFormat(":%02x", command.opcode); for (uint8_t iPtr = 0; iPtr < command.parameters.size; iPtr++) dataStr.AppendFormat(":%02x", (unsigned int)command.parameters[iPtr]); CLibCEC::AddLog(CEC_LOG_TRAFFIC, dataStr.c_str()); diff --git a/src/lib/adapter/USBCECAdapterCommunication.cpp b/src/lib/adapter/USBCECAdapterCommunication.cpp index 2f12474..64212cb 100644 --- a/src/lib/adapter/USBCECAdapterCommunication.cpp +++ b/src/lib/adapter/USBCECAdapterCommunication.cpp @@ -415,8 +415,9 @@ bool CUSBCECAdapterCommunication::ParseMessage(const CCECAdapterMessage &msg) } if (m_currentframe.ack == 0x1) { - m_lastInitiator = m_currentframe.initiator; - m_processor->HandlePoll(m_currentframe.initiator, m_currentframe.destination); + m_lastInitiator = m_currentframe.initiator; + m_currentframe.eom = 1; + bEom = true; } } break; @@ -441,7 +442,7 @@ bool CUSBCECAdapterCommunication::ParseMessage(const CCECAdapterMessage &msg) } CLibCEC::AddLog(bIsError ? CEC_LOG_WARNING : CEC_LOG_DEBUG, msg.ToString()); - return msg.IsEOM(); + return msg.IsEOM() || bEom; } uint16_t CUSBCECAdapterCommunication::GetFirmwareVersion(void) diff --git a/src/lib/devices/CECBusDevice.cpp b/src/lib/devices/CECBusDevice.cpp index 845cb07..429d73f 100644 --- a/src/lib/devices/CECBusDevice.cpp +++ b/src/lib/devices/CECBusDevice.cpp @@ -88,7 +88,7 @@ bool CCECBusDevice::HandleCommand(const cec_command &command) m_iLastActive = GetTimeMs(); /* don't call GetStatus() here, just read the value with the mutex locked */ - if (m_deviceStatus != CEC_DEVICE_STATUS_HANDLED_BY_LIBCEC) + if (m_deviceStatus != CEC_DEVICE_STATUS_HANDLED_BY_LIBCEC && command.opcode_set == 1) m_deviceStatus = CEC_DEVICE_STATUS_PRESENT; MarkBusy(); diff --git a/src/lib/implementations/CECCommandHandler.cpp b/src/lib/implementations/CECCommandHandler.cpp index a9b4c40..d0aa2b3 100644 --- a/src/lib/implementations/CECCommandHandler.cpp +++ b/src/lib/implementations/CECCommandHandler.cpp @@ -61,6 +61,9 @@ CCECCommandHandler::~CCECCommandHandler(void) bool CCECCommandHandler::HandleCommand(const cec_command &command) { + if (command.opcode_set == 0) + return HandlePoll(command); + bool bHandled(true); CLibCEC::AddCommand(command); @@ -371,6 +374,12 @@ bool CCECCommandHandler::HandleMenuRequest(const cec_command &command) return false; } +bool CCECCommandHandler::HandlePoll(const cec_command &command) +{ + m_busDevice->HandlePoll(command.initiator); + return true; +} + bool CCECCommandHandler::HandleReportAudioStatus(const cec_command &command) { if (command.parameters.size == 1) diff --git a/src/lib/implementations/CECCommandHandler.h b/src/lib/implementations/CECCommandHandler.h index 4cfb81f..6cf16a4 100644 --- a/src/lib/implementations/CECCommandHandler.h +++ b/src/lib/implementations/CECCommandHandler.h @@ -174,6 +174,7 @@ namespace CEC virtual bool HandleGiveSystemAudioModeStatus(const cec_command &command); virtual bool HandleImageViewOn(const cec_command &command); virtual bool HandleMenuRequest(const cec_command &command); + virtual bool HandlePoll(const cec_command &command); virtual bool HandleReportAudioStatus(const cec_command &command); virtual bool HandleReportPhysicalAddress(const cec_command &command); virtual bool HandleReportPowerStatus(const cec_command &command); -- 2.34.1