cec: don't keep trying the same command/request after receiving a feature abort message
[deb_libcec.git] / src / lib / implementations / CECCommandHandler.cpp
index be2a9bd661bc322b1645e0417fcee7180900fb10..8d16a02fded9c611518c66207693ea95e29385d0 100644 (file)
@@ -158,6 +158,9 @@ bool CCECCommandHandler::HandleCommand(const cec_command &command)
   case CEC_OPCODE_TEXT_VIEW_ON:
     HandleTextViewOn(command);
     break;
+  case CEC_OPCODE_FEATURE_ABORT:
+    HandleFeatureAbort(command);
+    break;
   default:
     UnhandledCommand(command);
     bHandled = false;
@@ -221,6 +224,14 @@ bool CCECCommandHandler::HandleDeviceVendorId(const cec_command &command)
   return SetVendorId(command);
 }
 
+bool CCECCommandHandler::HandleFeatureAbort(const cec_command &command)
+{
+  if (command.parameters.size == 2)
+  {
+    m_processor->m_busDevices[command.initiator]->SetUnsupportedFeature((cec_opcode)command.parameters[0]);
+  }
+}
+
 bool CCECCommandHandler::HandleGetCecVersion(const cec_command &command)
 {
   if (m_processor->IsStarted() && m_busDevice->MyLogicalAddressContains(command.destination))
@@ -931,11 +942,12 @@ bool CCECCommandHandler::InitHandler(void)
 {
   if (m_busDevice->GetLogicalAddress() == CECDEVICE_TV)
   {
-    CCECBusDevice *primary = m_processor->m_busDevices[m_processor->GetLogicalAddresses().primary];
+    CCECBusDevice *primary = m_processor->GetPrimaryDevice();
     primary->SetPowerStatus(CEC_POWER_STATUS_ON);
     primary->SetMenuState(CEC_MENU_STATE_ACTIVATED);
 
     m_processor->SetActiveSource();
     primary->TransmitMenuState(m_busDevice->GetLogicalAddress());
   }
+  return true;
 }