aboutsummaryrefslogtreecommitdiff
path: root/lib/driver/avswitch.cpp
diff options
context:
space:
mode:
authorAndreas Monzner <andreas.monzner@multimedia-labs.de>2006-10-30 12:17:56 +0000
committerAndreas Monzner <andreas.monzner@multimedia-labs.de>2006-10-30 12:17:56 +0000
commit923e3c65222946ad216cbf646b661e435a724209 (patch)
tree6c7d53875ed3c864f943bbadf08095ca51381e3a /lib/driver/avswitch.cpp
parent80058dea34aae48ed729986a65112f0096f5b2d5 (diff)
downloadenigma2-923e3c65222946ad216cbf646b661e435a724209.tar.gz
enigma2-923e3c65222946ad216cbf646b661e435a724209.zip
disable polling the fp when driver is not ready for that
Diffstat (limited to 'lib/driver/avswitch.cpp')
-rw-r--r--lib/driver/avswitch.cpp24
1 files changed, 18 insertions, 6 deletions
diff --git a/lib/driver/avswitch.cpp b/lib/driver/avswitch.cpp
index 8233d97e..e9f2ece5 100644
--- a/lib/driver/avswitch.cpp
+++ b/lib/driver/avswitch.cpp
@@ -23,7 +23,7 @@ eAVSwitch::eAVSwitch()
}
else
{
- m_fp_notifier = new eSocketNotifier(eApp, m_fp_fd, eSocketNotifier::Read);
+ m_fp_notifier = new eSocketNotifier(eApp, m_fp_fd, eSocketNotifier::Read|POLLERR);
CONNECT(m_fp_notifier->activated, eAVSwitch::fp_event);
}
}
@@ -53,15 +53,27 @@ int eAVSwitch::getVCRSlowBlanking()
void eAVSwitch::fp_event(int what)
{
- int val = FP_EVENT_VCR_SB_CHANGED; // ask only for this event
- if (ioctl(m_fp_fd, FP_IOCTL_GET_EVENT, &val) < 0)
- eDebug("FP_IOCTL_GET_EVENT failed (%m)");
- else if (val & FP_EVENT_VCR_SB_CHANGED)
- /* emit */ vcr_sb_notifier(getVCRSlowBlanking());
+ if (what & POLLERR) // driver not ready for fp polling
+ {
+ eDebug("fp driver not read for polling.. so disable polling");
+ m_fp_notifier->stop();
+ }
+ else
+ {
+ int val = FP_EVENT_VCR_SB_CHANGED; // ask only for this event
+ if (ioctl(m_fp_fd, FP_IOCTL_GET_EVENT, &val) < 0)
+ eDebug("FP_IOCTL_GET_EVENT failed (%m)");
+ else if (val & FP_EVENT_VCR_SB_CHANGED)
+ /* emit */ vcr_sb_notifier(getVCRSlowBlanking());
+ }
}
eAVSwitch::~eAVSwitch()
{
+ if ( m_fp_fd >= 0 )
+ close(m_fp_fd);
+ if (m_fp_notifier)
+ delete m_fp_notifier;
}
eAVSwitch *eAVSwitch::getInstance()