From 237d091c2c7449b8522a6fda6295820eb4545ae1 Mon Sep 17 00:00:00 2001 From: Lars Op den Kamp Date: Fri, 8 Mar 2013 11:55:06 +0100 Subject: [PATCH] send an alert when the TV does not respond to polls --- include/cectypes.h | 3 ++- src/lib/CECProcessor.cpp | 15 +++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/include/cectypes.h b/include/cectypes.h index 0b62529..1e2c7db 100644 --- a/include/cectypes.h +++ b/include/cectypes.h @@ -1281,7 +1281,8 @@ typedef enum libcec_alert 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 diff --git a/src/lib/CECProcessor.cpp b/src/lib/CECProcessor.cpp index 84a46d6..38d5992 100644 --- a/src/lib/CECProcessor.cpp +++ b/src/lib/CECProcessor.cpp @@ -53,6 +53,7 @@ using namespace PLATFORM; #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) @@ -216,6 +217,7 @@ void *CCECProcessor::Process(void) 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()) @@ -239,6 +241,19 @@ void *CCECProcessor::Process(void) 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); + } } } -- 2.34.1