retry frontend close every 60 seconds when frontend is busy
authorAndreas Monzner <andreas.monzner@multimedia-labs.de>
Wed, 7 Dec 2005 02:36:34 +0000 (02:36 +0000)
committerAndreas Monzner <andreas.monzner@multimedia-labs.de>
Wed, 7 Dec 2005 02:36:34 +0000 (02:36 +0000)
lib/dvb/dvb.h
lib/dvb/frontend.cpp
lib/dvb/frontend.h

index 71c6a6c1b5e6e391934ba4ab57a26ff5da81d456..a7be0a71f8de5e0b2f650156995743477469a556 100644 (file)
@@ -21,8 +21,8 @@ class eDVBRegisteredFrontend: public iObject, public Object
        eTimer *disable;
        void closeFrontend()
        {
-               if (!m_inuse)
-                       m_frontend->closeFrontend();
+               if (!m_inuse && m_frontend->closeFrontend()) // frontend busy
+                       disable->start(60000, true);  // retry close in 60secs
        }
 public:
        eDVBRegisteredFrontend(eDVBFrontend *fe, iDVBAdapter *adap)
index 1cafcec40fc2aa6809aa7df1c74c6859f967968e..a3483904b8c78f349bdb316fc876aa293db43ab6 100644 (file)
@@ -313,7 +313,7 @@ int eDVBFrontend::openFrontend()
        return 0;
 }
 
-void eDVBFrontend::closeFrontend()
+int eDVBFrontend::closeFrontend()
 {
        if (!m_fe && m_data[7] != -1)
        {
@@ -323,7 +323,7 @@ void eDVBFrontend::closeFrontend()
                {
                        eDebug("dont close frontend %d until the linked frontend %d is still in use",
                                m_fe, linked_fe->m_frontend->getID());
-                       return;
+                       return -1;
                }
        }
        eDebug("close frontend %d", m_fe);
@@ -344,6 +344,7 @@ void eDVBFrontend::closeFrontend()
 
        setTone(iDVBFrontend::toneOff);
        setVoltage(iDVBFrontend::voltageOff);
+       return 0;
 }
 
 eDVBFrontend::~eDVBFrontend()
index 7862e2eac4c47881b6bca80c5748dc4c7fa721e3..c702970bb706d08b6d420ce5412575f0b3e9f3ab 100644 (file)
@@ -100,7 +100,7 @@ public:
        int getID() { return m_fe; }
 
        int openFrontend();
-       void closeFrontend();
+       int closeFrontend();
 };
 
 #endif