#define VL_POWERED_DOWN 0x01
#define VL_UNKNOWN1 0x06
+#define VL_REQUEST_POWER_STATUS_TIMEOUT 5000
+
using namespace CEC;
using namespace PLATFORM;
CCECCommandHandler(busDevice, iTransmitTimeout, iTransmitWait, iTransmitRetries, iActiveSourcePending),
m_iPowerUpEventReceived(0),
m_bCapabilitiesSent(false),
- m_bPowerStatusRequested(false)
+ m_iPowerStatusRequested(0)
{
m_vendorId = CEC_VENDOR_PANASONIC;
}
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
- CCECBusDevice *tv = m_processor->GetTV();
if (tv && tv->GetCurrentVendorId() == CEC_VENDOR_PANASONIC)
{
CVLCommandHandler *handler = static_cast<CVLCommandHandler *>(tv->GetHandler());
bool bTransmit(false);
{
CLockObject lock(m_mutex);
- bTransmit = m_bCapabilitiesSent;
+ bTransmit = !m_bCapabilitiesSent;
}
if (bTransmit)
SendVendorCommandCapabilities(m_processor->GetLogicalAddress(), CECDEVICE_TV);
bool CVLCommandHandler::TransmitRequestPowerStatus(const cec_logical_address iInitiator, const cec_logical_address iDestination, bool bWaitForResponse /* = true */)
{
- m_bPowerStatusRequested = true;
+ m_iPowerStatusRequested = GetTimeMs();
return CCECCommandHandler::TransmitRequestPowerStatus(iInitiator, iDestination, bWaitForResponse);
}
bool CVLCommandHandler::SourceSwitchAllowed(void)
{
- if (!PowerUpEventReceived() && !m_bPowerStatusRequested)
+ int64_t now(GetTimeMs());
+ if (!PowerUpEventReceived() && now - m_iPowerStatusRequested > VL_REQUEST_POWER_STATUS_TIMEOUT)
TransmitRequestPowerStatus(m_processor->GetPrimaryDevice()->GetLogicalAddress(), CECDEVICE_TV, false);
return PowerUpEventReceived();