X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/e03c732afb410b4d6b9f9540c36c33c941ee38f1..07052ad2c1f86a67bbdfb5f15a8611af927d5b4a:/lib/driver/avswitch.cpp?ds=sidebyside 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()