From: Lars Op den Kamp Date: Fri, 14 Oct 2011 10:52:30 +0000 (+0200) Subject: cec: fixed - 'routing change' is a broadcast message. log routing changes, but don... X-Git-Tag: upstream/2.2.0~1^2~228 X-Git-Url: https://git.piment-noir.org/?a=commitdiff_plain;h=56b36fa651f960f501b588b1d5fe069298d980a1;p=deb_libcec.git cec: fixed - 'routing change' is a broadcast message. log routing changes, but don't send a 'set active view' message, so the active input won't be changed --- diff --git a/src/lib/CECProcessor.cpp b/src/lib/CECProcessor.cpp index b579671..0c55845 100644 --- a/src/lib/CECProcessor.cpp +++ b/src/lib/CECProcessor.cpp @@ -572,9 +572,6 @@ void CCECProcessor::ParseCommand(cec_command &command) case CEC_OPCODE_USER_CONTROL_RELEASE: m_controller->AddKey(); break; - case CEC_OPCODE_ROUTING_CHANGE: - m_controller->SetActiveView(); - break; default: m_controller->AddCommand(command); break; @@ -583,26 +580,37 @@ void CCECProcessor::ParseCommand(cec_command &command) else if (command.destination == CECDEVICE_BROADCAST) { CStdString strLog; - if (command.opcode == CEC_OPCODE_REQUEST_ACTIVE_SOURCE) + switch (command.opcode) { + case CEC_OPCODE_REQUEST_ACTIVE_SOURCE: strLog.Format(">> %i requests active source", (uint8_t) command.initiator); m_controller->AddLog(CEC_LOG_DEBUG, strLog.c_str()); BroadcastActiveSource(); - } - else if (command.opcode == CEC_OPCODE_SET_STREAM_PATH) - { + break; + case CEC_OPCODE_SET_STREAM_PATH: if (command.parameters.size >= 2) { - int streamaddr = ((int)command.parameters[0] << 8) | ((int)command.parameters[1]); + int streamaddr = ((uint16_t)command.parameters[0] << 8) | ((uint16_t)command.parameters[1]); strLog.Format(">> %i requests stream path from physical address %04x", command.initiator, streamaddr); m_controller->AddLog(CEC_LOG_DEBUG, strLog.c_str()); if (streamaddr == m_iPhysicalAddress) BroadcastActiveSource(); } - } - else - { + break; + case CEC_OPCODE_ROUTING_CHANGE: + if (command.parameters.size == 4) + { + uint16_t iOldAddress = ((uint16_t)command.parameters[0] << 8) | ((uint16_t)command.parameters[1]); + uint16_t iNewAddress = ((uint16_t)command.parameters[2] << 8) | ((uint16_t)command.parameters[3]); + strLog.Format(">> %i changed physical address from %04x to %04x", command.initiator, iOldAddress, iNewAddress); + m_controller->AddLog(CEC_LOG_DEBUG, strLog.c_str()); + + m_controller->AddCommand(command); + } + break; + default: m_controller->AddCommand(command); + break; } } else