コード例 #1
0
bool CCECBusDevice::NeedsPoll(void)
{
  bool bSendPoll(false);
  cec_logical_address pollAddress(CECDEVICE_UNKNOWN);
  switch (m_iLogicalAddress)
  {
  case CECDEVICE_PLAYBACKDEVICE3:
    pollAddress = CECDEVICE_PLAYBACKDEVICE2;
    break;
  case CECDEVICE_PLAYBACKDEVICE2:
    pollAddress = CECDEVICE_PLAYBACKDEVICE1;
    break;
  case CECDEVICE_RECORDINGDEVICE3:
    pollAddress = CECDEVICE_RECORDINGDEVICE2;
    break;
  case CECDEVICE_RECORDINGDEVICE2:
    pollAddress = CECDEVICE_RECORDINGDEVICE1;
    break;
  case CECDEVICE_TUNER4:
    pollAddress = CECDEVICE_TUNER3;
    break;
  case CECDEVICE_TUNER3:
    pollAddress = CECDEVICE_TUNER2;
    break;
  case CECDEVICE_TUNER2:
    pollAddress = CECDEVICE_TUNER1;
    break;
  case CECDEVICE_AUDIOSYSTEM:
  case CECDEVICE_PLAYBACKDEVICE1:
  case CECDEVICE_RECORDINGDEVICE1:
  case CECDEVICE_TUNER1:
  case CECDEVICE_TV:
    bSendPoll = true;
    break;
  default:
    break;
  }

  if (!bSendPoll && pollAddress != CECDEVICE_UNKNOWN)
  {
    CCECBusDevice *device = m_processor->GetDevice(pollAddress);
    if (device)
    {
      cec_bus_device_status status = device->GetStatus();
      bSendPoll = (status == CEC_DEVICE_STATUS_PRESENT || status == CEC_DEVICE_STATUS_HANDLED_BY_LIBCEC);
    }
    else
    {
      bSendPoll = true;
    }
  }

  return bSendPoll;
}
コード例 #2
0
bool CVLCommandHandler::PowerUpEventReceived(void)
{
  bool bPowerUpEventReceived(true);

  if (m_busDevice->GetLogicalAddress() != CECDEVICE_TV)
  {
    CCECBusDevice* tv = m_processor->GetTV();
    if (tv && tv->GetStatus() != CEC_DEVICE_STATUS_PRESENT)
      return true;

    // get the status from the TV
    if (tv && tv->GetCurrentVendorId() == CEC_VENDOR_PANASONIC)
    {
      CVLCommandHandler *handler = static_cast<CVLCommandHandler *>(tv->GetHandler());
      bPowerUpEventReceived = handler ? handler->PowerUpEventReceived() : false;
      tv->MarkHandlerReady();
    }
  }
  else
  {
    // get the current status
    {
      CLockObject lock(m_mutex);
      bPowerUpEventReceived = m_iPowerUpEventReceived > 0 &&
                              GetTimeMs() - m_iPowerUpEventReceived > SOURCE_SWITCH_DELAY_MS;
    }

    // if we didn't receive the event, check if the TV is already marked as powered on
    if (!bPowerUpEventReceived && m_busDevice->GetCurrentPowerStatus() == CEC_POWER_STATUS_ON)
    {
      CLockObject lock(m_mutex);
      m_iPowerUpEventReceived = GetTimeMs();
      bPowerUpEventReceived = true;
    }
  }

  return bPowerUpEventReceived;
}
コード例 #3
0
ファイル: CECProcessor.cpp プロジェクト: BuzzBumbleBee/libcec
bool CCECProcessor::IsPresentDevice(cec_logical_address address)
{
  CCECBusDevice *device = m_busDevices->At(address);
  return device && device->GetStatus() == CEC_DEVICE_STATUS_PRESENT;
}