respond to vendor command 89:10:01:03 for panasonic and send the same response as...
[deb_libcec.git] / src / lib / implementations / VLCommandHandler.cpp
index 44feabc4f4e5efe0e6cd74739121605646ca74fd..329eab2f930cff5b547417bd75057ecd526bde7c 100644 (file)
@@ -106,11 +106,12 @@ int CVLCommandHandler::HandleDeviceVendorCommandWithId(const cec_command &comman
       command.parameters[2] != 0x45)
     return CEC_ABORT_REASON_INVALID_OPERAND;
 
-  // XXX this is also sent when the TV is powered off
-#if 0
   if (command.initiator == CECDEVICE_TV &&
       command.parameters.At(3) == VL_UNKNOWN1)
   {
+    // XXX this is also sent when the TV is powered off
+    // TODO power up sends 06:05. check whether this is also sent on power off
+#if 0
     // set the power up event time
     {
       CLockObject lock(m_mutex);
@@ -119,10 +120,10 @@ int CVLCommandHandler::HandleDeviceVendorCommandWithId(const cec_command &comman
     }
     // mark the TV as powered on
     m_processor->GetTV()->SetPowerStatus(CEC_POWER_STATUS_ON);
-  }
-  else
 #endif
-    if (command.initiator == CECDEVICE_TV &&
+    return COMMAND_HANDLED;
+  }
+  else if (command.initiator == CECDEVICE_TV &&
       command.destination == CECDEVICE_BROADCAST &&
       command.parameters.At(3) == VL_POWER_CHANGE)
   {
@@ -248,9 +249,10 @@ int CVLCommandHandler::HandleVendorCommand(const cec_command &command)
   if (command.parameters.size == 3 &&
       command.parameters[0] == 0x10 &&
       command.parameters[1] == 0x01 &&
-      command.parameters[2] == 0x05 &&
       m_processor->IsHandledByLibCEC(command.destination))
   {
+    // XXX i've seen 0x05 and 0x03 as third param. these probably indicate different types of TVs/capabilities
+    // when we feature abort this, then the TV will try the same thing with a vendor command with id
     SendVendorCommandCapabilities(m_processor->GetLogicalAddress(), command.initiator);
     return COMMAND_HANDLED;
   }
@@ -261,7 +263,7 @@ int CVLCommandHandler::HandleVendorCommand(const cec_command &command)
 bool CVLCommandHandler::SourceSwitchAllowed(void)
 {
   if (!PowerUpEventReceived())
-    TransmitRequestPowerStatus(m_processor->GetPrimaryDevice()->GetLogicalAddress(), CECDEVICE_TV, false);
+    TransmitRequestPowerStatus(m_processor->GetPrimaryDevice()->GetLogicalAddress(), CECDEVICE_TV, false, false);
 
   return PowerUpEventReceived();
 }