Example #1
0
bool CPeripherals::OnAction(const CAction &action)
{
  if (action.GetID() == ACTION_MUTE)
  {
    return ToggleMute();
  }

  if (SupportsCEC() && action.GetAmount() && (action.GetID() == ACTION_VOLUME_UP || action.GetID() == ACTION_VOLUME_DOWN))
  {
    std::vector<CPeripheral *> peripherals;
    if (GetPeripheralsWithFeature(peripherals, FEATURE_CEC))
    {
      for (auto& peripheral : peripherals)
      {
        CPeripheralCecAdapter *cecDevice = reinterpret_cast<CPeripheralCecAdapter*>(peripheral);
        if (cecDevice && cecDevice->HasAudioControl())
        {
          if (action.GetID() == ACTION_VOLUME_UP)
            cecDevice->VolumeUp();
          else
            cecDevice->VolumeDown();
          return true;
        }
      }
    }
  }

  return false;
}
Example #2
0
bool CPeripherals::OnAction(const CAction &action)
{
  if (action.GetID() == ACTION_MUTE)
  {
    return ToggleMute();
  }

  if (SupportsCEC() && action.GetAmount() && (action.GetID() == ACTION_VOLUME_UP || action.GetID() == ACTION_VOLUME_DOWN))
  {
    vector<CPeripheral *> peripherals;
    if (GetPeripheralsWithFeature(peripherals, FEATURE_CEC))
    {
      for (unsigned int iPeripheralPtr = 0; iPeripheralPtr < peripherals.size(); iPeripheralPtr++)
      {
        CPeripheralCecAdapter *cecDevice = (CPeripheralCecAdapter *) peripherals.at(iPeripheralPtr);
        if (cecDevice && cecDevice->HasConnectedAudioSystem())
        {
          if (action.GetID() == ACTION_VOLUME_UP)
            cecDevice->ScheduleVolumeUp();
          else
            cecDevice->ScheduleVolumeDown();
          return true;
        }
      }
    }
  }

  return false;
}
Example #3
0
int CPeripheralCecAdapter::CecConfiguration(void *cbParam, const libcec_configuration &config)
{
    CPeripheralCecAdapter *adapter = (CPeripheralCecAdapter *)cbParam;
    if (!adapter)
        return 0;

    CSingleLock lock(adapter->m_critSection);
    adapter->SetConfigurationFromLibCEC(config);
    return 1;
}
Example #4
0
bool CPeripherals::IsMuted(void)
{
  vector<CPeripheral *> peripherals;
  if (SupportsCEC() && GetPeripheralsWithFeature(peripherals, FEATURE_CEC))
  {
    for (unsigned int iPeripheralPtr = 0; iPeripheralPtr < peripherals.size(); iPeripheralPtr++)
    {
      CPeripheralCecAdapter *cecDevice = (CPeripheralCecAdapter *) peripherals.at(iPeripheralPtr);
      if (cecDevice && cecDevice->IsMuted())
        return true;
    }
  }

  return false;
}
Example #5
0
bool CPeripherals::IsMuted()
{
  std::vector<CPeripheral *> peripherals;
  if (SupportsCEC() && GetPeripheralsWithFeature(peripherals, FEATURE_CEC))
  {
    for (const auto& peripheral : peripherals)
    {
      CPeripheralCecAdapter *cecDevice = reinterpret_cast<CPeripheralCecAdapter*>(peripheral);
      if (cecDevice && cecDevice->IsMuted())
        return true;
    }
  }

  return false;
}
Example #6
0
bool CPeripherals::ToggleMute(void)
{
  vector<CPeripheral *> peripherals;
  if (SupportsCEC() && GetPeripheralsWithFeature(peripherals, FEATURE_CEC))
  {
    for (unsigned int iPeripheralPtr = 0; iPeripheralPtr < peripherals.size(); iPeripheralPtr++)
    {
      CPeripheralCecAdapter *cecDevice = (CPeripheralCecAdapter *) peripherals.at(iPeripheralPtr);
      if (cecDevice && cecDevice->HasConnectedAudioSystem())
      {
        cecDevice->ScheduleMute();
        return true;
      }
    }
  }

  return false;
}
Example #7
0
bool CPeripherals::ToggleMute()
{
  std::vector<CPeripheral *> peripherals;
  if (SupportsCEC() && GetPeripheralsWithFeature(peripherals, FEATURE_CEC))
  {
    for (auto& peripheral : peripherals)
    {
      CPeripheralCecAdapter *cecDevice = reinterpret_cast<CPeripheralCecAdapter*>(peripheral);
      if (cecDevice && cecDevice->HasAudioControl())
      {
        cecDevice->ToggleMute();
        return true;
      }
    }
  }

  return false;
}
Example #8
0
bool CPeripherals::ToggleDeviceState(CecStateChange mode /*= STATE_SWITCH_TOGGLE */, unsigned int iPeripheral /*= 0 */)
{
  bool ret(false);
  vector<CPeripheral *> peripherals;

  if (SupportsCEC() && GetPeripheralsWithFeature(peripherals, FEATURE_CEC))
  {
    for (unsigned int iPeripheralPtr = iPeripheral; iPeripheralPtr < peripherals.size(); iPeripheralPtr++)
    {
      CPeripheralCecAdapter *cecDevice = (CPeripheralCecAdapter *) peripherals.at(iPeripheralPtr);
      if (cecDevice)
        ret = cecDevice->ToggleDeviceState(mode);
      if (iPeripheral)
        break;
    }
  }

  return ret;
}
Example #9
0
bool CPeripherals::ToggleDeviceState(CecStateChange mode /*= STATE_SWITCH_TOGGLE */, unsigned int iPeripheral /*= 0 */)
{
  bool ret(false);
  std::vector<CPeripheral *> peripherals;

  if (SupportsCEC() && GetPeripheralsWithFeature(peripherals, FEATURE_CEC))
  {
    for (auto& peripheral : peripherals)
    {
      CPeripheralCecAdapter *cecDevice = reinterpret_cast<CPeripheralCecAdapter*>(peripheral);
      if (cecDevice)
        ret = cecDevice->ToggleDeviceState(mode);
      if (iPeripheral)
        break;
    }
  }

  return ret;
}
Example #10
0
bool CPeripherals::GetNextKeypress(float frameTime, CKey &key)
{
  vector<CPeripheral *> peripherals;
  if (SupportsCEC() && GetPeripheralsWithFeature(peripherals, FEATURE_CEC))
  {
    for (unsigned int iPeripheralPtr = 0; iPeripheralPtr < peripherals.size(); iPeripheralPtr++)
    {
      CPeripheralCecAdapter *cecDevice = (CPeripheralCecAdapter *) peripherals.at(iPeripheralPtr);
      if (cecDevice && cecDevice->GetButton())
      {
        CKey newKey(cecDevice->GetButton(), cecDevice->GetHoldTime());
        cecDevice->ResetButton();
        key = newKey;
        return true;
      }
    }
  }

  return false;
}
Example #11
0
bool CPeripherals::GetNextKeypress(float frameTime, CKey &key)
{
  std::vector<CPeripheral *> peripherals;
  if (SupportsCEC() && GetPeripheralsWithFeature(peripherals, FEATURE_CEC))
  {
    for (auto& peripheral : peripherals)
    {
      CPeripheralCecAdapter *cecDevice = reinterpret_cast<CPeripheralCecAdapter*>(peripheral);
      if (cecDevice && cecDevice->GetButton())
      {
        CKey newKey(cecDevice->GetButton(), cecDevice->GetHoldTime());
        cecDevice->ResetButton();
        key = newKey;
        return true;
      }
    }
  }

  return false;
}
Example #12
0
int CPeripheralCecAdapter::CecCommand(void *cbParam, const cec_command &command)
{
    CPeripheralCecAdapter *adapter = (CPeripheralCecAdapter *)cbParam;
    if (!adapter)
        return 0;

    if (adapter->m_bIsReady)
    {
        CLog::Log(LOGDEBUG, "%s - processing command: initiator=%1x destination=%1x opcode=%02x", __FUNCTION__, command.initiator, command.destination, command.opcode);

        switch (command.opcode)
        {
        case CEC_OPCODE_STANDBY:
            /* a device was put in standby mode */
            CLog::Log(LOGDEBUG, "%s - device %1x was put in standby mode", __FUNCTION__, command.initiator);
            if (command.initiator == CECDEVICE_TV && adapter->m_configuration.bPowerOffOnStandby == 1 &&
                    (!adapter->m_screensaverLastActivated.IsValid() || CDateTime::GetCurrentDateTime() - adapter->m_screensaverLastActivated > CDateTimeSpan(0, 0, 0, SCREENSAVER_TIMEOUT)))
            {
                adapter->m_bStarted = false;
                g_application.getApplicationMessenger().Suspend();
            }
            break;
        case CEC_OPCODE_SET_MENU_LANGUAGE:
            if (adapter->m_configuration.bUseTVMenuLanguage == 1 && command.initiator == CECDEVICE_TV && command.parameters.size == 3)
            {
                char strNewLanguage[4];
                for (int iPtr = 0; iPtr < 3; iPtr++)
                    strNewLanguage[iPtr] = command.parameters[iPtr];
                strNewLanguage[3] = 0;
                adapter->SetMenuLanguage(strNewLanguage);
            }
            break;
        case CEC_OPCODE_DECK_CONTROL:
            if (command.initiator == CECDEVICE_TV &&
                    command.parameters.size == 1 &&
                    command.parameters[0] == CEC_DECK_CONTROL_MODE_STOP)
            {
                CSingleLock lock(adapter->m_critSection);
                cec_keypress key;
                key.duration = 500;
                key.keycode = CEC_USER_CONTROL_CODE_STOP;
                adapter->m_buttonQueue.push(key);
            }
            break;
        case CEC_OPCODE_PLAY:
            if (command.initiator == CECDEVICE_TV &&
                    command.parameters.size == 1)
            {
                if (command.parameters[0] == CEC_PLAY_MODE_PLAY_FORWARD)
                {
                    CSingleLock lock(adapter->m_critSection);
                    cec_keypress key;
                    key.duration = 500;
                    key.keycode = CEC_USER_CONTROL_CODE_PLAY;
                    adapter->m_buttonQueue.push(key);
                }
                else if (command.parameters[0] == CEC_PLAY_MODE_PLAY_STILL)
                {
                    CSingleLock lock(adapter->m_critSection);
                    cec_keypress key;
                    key.duration = 500;
                    key.keycode = CEC_USER_CONTROL_CODE_PAUSE;
                    adapter->m_buttonQueue.push(key);
                }
            }
            break;
        case CEC_OPCODE_REPORT_POWER_STATUS:
            if (command.initiator == CECDEVICE_TV &&
                    command.parameters.size == 1 &&
                    command.parameters[0] == CEC_POWER_STATUS_ON &&
                    adapter->m_queryThread)
            {
                adapter->m_queryThread->Signal();
            }
            break;
        default:
            break;
        }
    }
    return 1;
}