fixed - only respond to vendor commands for panasonic if we are the destination
[deb_libcec.git] / src / lib / implementations / VLCommandHandler.cpp
index e74daac4d463f23fe8cc5143fef93d2420e2a5a2..a60f897f105ff61c4832d72a94950341a2846d6b 100644 (file)
@@ -90,6 +90,9 @@ bool CVLCommandHandler::InitHandler(void)
 
 int CVLCommandHandler::HandleDeviceVendorCommandWithId(const cec_command &command)
 {
+  if (!m_processor->IsHandledByLibCEC(command.destination))
+    return CEC_ABORT_REASON_INVALID_OPERAND;
+
   if (command.parameters[0] != 0x00 ||
       command.parameters[1] != 0x80 ||
       command.parameters[2] != 0x45)
@@ -128,6 +131,10 @@ int CVLCommandHandler::HandleDeviceVendorCommandWithId(const cec_command &comman
 
       // send capabilties
       SendVendorCommandCapabilities(m_processor->GetLogicalAddress(), command.initiator);
+
+      // reactivate the source, so the tv switches channels
+      if (m_processor->IsActiveSource(m_processor->GetLogicalAddress()))
+        m_processor->GetDevice(m_processor->GetLogicalAddress())->TransmitActiveSource(false);
     }
     else if (command.parameters.At(4) == VL_POWERED_DOWN)
     {
@@ -229,7 +236,8 @@ int CVLCommandHandler::HandleVendorCommand(const cec_command &command)
   if (command.parameters.size == 3 &&
       command.parameters[0] == 0x10 &&
       command.parameters[1] == 0x01 &&
-      command.parameters[2] == 0x05)
+      command.parameters[2] == 0x05 &&
+      m_processor->IsHandledByLibCEC(command.destination))
   {
     SendVendorCommandCapabilities(m_processor->GetLogicalAddress(), command.initiator);
     return COMMAND_HANDLED;