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; }
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; }
bool CCECProcessor::IsPresentDevice(cec_logical_address address) { CCECBusDevice *device = m_busDevices->At(address); return device && device->GetStatus() == CEC_DEVICE_STATUS_PRESENT; }