CEC_ALERT_CONNECTION_LOST,
CEC_ALERT_PERMISSION_ERROR,
CEC_ALERT_PORT_BUSY,
- CEC_ALERT_PHYSICAL_ADDRESS_ERROR
+ CEC_ALERT_PHYSICAL_ADDRESS_ERROR,
+ CEC_ALERT_TV_POLL_FAILED
} libcec_alert;
typedef enum libcec_parameter_type
#define CEC_PROCESSOR_SIGNAL_WAIT_TIME 1000
#define ACTIVE_SOURCE_CHECK_INTERVAL 500
+#define TV_PRESENT_CHECK_INTERVAL 30000
#define ToString(x) CCECTypeUtils::ToString(x)
cec_command command; command.Clear();
CTimeout activeSourceCheck(ACTIVE_SOURCE_CHECK_INTERVAL);
+ CTimeout tvPresentCheck(TV_PRESENT_CHECK_INTERVAL);
// as long as we're not being stopped and the connection is open
while (!IsStopped() && m_communication->IsOpen())
TransmitPendingActiveSourceCommands();
activeSourceCheck.Init(ACTIVE_SOURCE_CHECK_INTERVAL);
}
+
+ // check whether the TV is present and responding
+ if (tvPresentCheck.TimeLeft() == 0)
+ {
+ if (!m_busDevices->At(CECDEVICE_TV)->IsPresent())
+ {
+ libcec_parameter param;
+ param.paramType = CEC_PARAMETER_TYPE_STRING;
+ param.paramData = "TV does not respond to CEC polls";
+ GetPrimaryClient()->Alert(CEC_ALERT_TV_POLL_FAILED, param);
+ }
+ tvPresentCheck.Init(TV_PRESENT_CHECK_INTERVAL);
+ }
}
}