Merge branch 'master' of /git/enigma2
authorMladen Horvat <acidburn@opendreambox.org>
Fri, 25 Sep 2009 15:01:42 +0000 (15:01 +0000)
committerMladen Horvat <acidburn@opendreambox.org>
Fri, 25 Sep 2009 15:01:42 +0000 (15:01 +0000)
lib/dvb/scan.cpp
lib/dvb/scan.h
lib/python/Screens/Standby.py
lib/python/python.h
mytest.py

index 19c1086..fd29617 100644 (file)
@@ -706,9 +706,12 @@ void eDVBScan::channelDone()
                   here, and not before.
                */
 
+       int type;
+       if (m_ch_current->getSystem(type))
+               type = -1;
+
        for (m_pmt_in_progress = m_pmts_to_read.begin(); m_pmt_in_progress != m_pmts_to_read.end();)
        {
-               int type;
                eServiceReferenceDVB ref;
                ePtr<eDVBService> service = new eDVBService;
 
@@ -734,7 +737,7 @@ void eDVBScan::channelDone()
                ref.setServiceID(m_pmt_in_progress->first);
                ref.setServiceType(m_pmt_in_progress->second.serviceType);
 
-               if (!m_ch_current->getSystem(type))
+               if (type != -1)
                {
                        char sname[255];
                        char pname[255];
@@ -762,20 +765,11 @@ void eDVBScan::channelDone()
                                }
                                case iDVBFrontend::feTerrestrial:
                                {
-                                       ePtr<iDVBFrontend> fe;
                                        eDVBFrontendParametersTerrestrial parm;
                                        m_ch_current->getDVBT(parm);
                                        snprintf(sname, 255, "%d SID 0x%02x",
                                                parm.frequency/1000,
                                                m_pmt_in_progress->first);
-                                       if (!m_channel->getFrontend(fe))
-                                       {
-                                               ePyObject tp_dict = PyDict_New();
-                                               fe->getTransponderData(tp_dict, false);
-                                               m_corrected_frequencys[m_chid_current] =
-                                                       PyInt_AsLong(PyDict_GetItemString(tp_dict, "frequency"));
-                                               Py_DECREF(tp_dict);
-                                       }
                                        break;
                                }
                                case iDVBFrontend::feCable:
@@ -812,10 +806,36 @@ void eDVBScan::channelDone()
        if (!m_chid_current)
                eWarning("SCAN: the current channel's ID was not corrected - not adding channel.");
        else
+       {
                addKnownGoodChannel(m_chid_current, m_ch_current);
-       
+               if (m_chid_current)
+               {
+                       switch(type)
+                       {
+                               case iDVBFrontend::feSatellite:
+                               case iDVBFrontend::feTerrestrial:
+                               case iDVBFrontend::feCable:
+                               {
+                                       ePtr<iDVBFrontend> fe;
+                                       if (!m_channel->getFrontend(fe))
+                                       {
+                                               ePyObject tp_dict = PyDict_New();
+                                               fe->getTransponderData(tp_dict, false);
+//                                             eDebug("add tuner data for tsid %04x, onid %04x, ns %08x",
+//                                                     m_chid_current.transport_stream_id.get(), m_chid_current.original_network_id.get(),
+//                                                     m_chid_current.dvbnamespace.get());
+                                               m_tuner_data.insert(std::pair<eDVBChannelID, ePyObjectWrapper>(m_chid_current, tp_dict));
+                                               Py_DECREF(tp_dict);
+                                       }
+                               }
+                               default:
+                                       break;
+                       }
+               }
+       }
+
        m_ch_scanned.push_back(m_ch_current);
-       
+
        for (std::list<ePtr<iDVBFrontendParameters> >::iterator i(m_ch_toScan.begin()); i != m_ch_toScan.end();)
        {
                if (sameChannel(*i, m_ch_current))
@@ -837,6 +857,7 @@ void eDVBScan::start(const eSmartPtrList<iDVBFrontendParameters> &known_transpon
        m_ch_scanned.clear();
        m_ch_unavailable.clear();
        m_new_channels.clear();
+       m_tuner_data.clear();
        m_new_services.clear();
        m_last_service = m_new_services.end();
 
@@ -956,27 +977,34 @@ void eDVBScan::insertInto(iDVBChannelList *db, bool dontRemoveOldFlags)
        {
                int system;
                ch->second->getSystem(system);
-               if (system == iDVBFrontend::feTerrestrial)
+               std::map<eDVBChannelID, ePyObjectWrapper>::iterator it = m_tuner_data.find(ch->first);
+
+               switch(system)
                {
-                       std::map<eDVBChannelID, unsigned int>::iterator it = m_corrected_frequencys.find(ch->first);
-                       if (it != m_corrected_frequencys.end())
+                       case iDVBFrontend::feTerrestrial:
                        {
                                eDVBFrontendParameters *p = (eDVBFrontendParameters*)&(*ch->second);
                                eDVBFrontendParametersTerrestrial parm;
+                               int freq = PyInt_AsLong(PyDict_GetItemString(it->second, "frequency"));
                                p->getDVBT(parm);
-                               eDebug("corrected freq for tsid %04x, onid %04x, ns %08x is %d, old was %d",
-                                       ch->first.transport_stream_id.get(), ch->first.original_network_id.get(),
-                                       ch->first.dvbnamespace.get(), it->second, parm.frequency);
-                               parm.frequency = it->second;
+//                             eDebug("corrected freq for tsid %04x, onid %04x, ns %08x is %d, old was %d",
+//                                     ch->first.transport_stream_id.get(), ch->first.original_network_id.get(),
+//                                     ch->first.dvbnamespace.get(), freq, parm.frequency);
+                               parm.frequency = freq;
                                p->setDVBT(parm);
-                               m_corrected_frequencys.erase(it);
+                               break;
                        }
+                       case iDVBFrontend::feSatellite: // no update of any transponder parameter yet
+                       case iDVBFrontend::feCable:
+                               break;
                }
+
                if (m_flags & scanOnlyFree)
                {
                        eDVBFrontendParameters *ptr = (eDVBFrontendParameters*)&(*ch->second);
                        ptr->setFlags(iDVBFrontendParameters::flagOnlyFree);
                }
+
                db->addChannelToList(ch->first, ch->second);
        }
 
index 9f0dd6e..2f3ac34 100644 (file)
@@ -51,9 +51,9 @@ class eDVBScan: public Object, public iObject
        int m_channel_state;
        int m_ready, m_ready_all;
 
-       std::map<eDVBChannelID, unsigned int> m_corrected_frequencys;  // yet just used for DVB-T
-
        std::map<eDVBChannelID, ePtr<iDVBFrontendParameters> > m_new_channels;
+       std::map<eDVBChannelID, ePyObjectWrapper> m_tuner_data; // data read from tuner for every new channel
+
        std::map<eServiceReferenceDVB, ePtr<eDVBService> > m_new_services;
        std::map<eServiceReferenceDVB, ePtr<eDVBService> >::iterator m_last_service;
 
index b8ccb6c..c598b54 100644 (file)
@@ -65,28 +65,26 @@ class Standby(Screen):
                        self.avswitch.setInput("AUX")
                #set lcd brightness to standby value
                config.lcd.standby.apply()
-               self.onShow.append(self.__onShow)
-               self.onHide.append(self.__onHide)
+               self.onFirstExecBegin.append(self.__onFirstExecBegin)
                self.onClose.append(self.__onClose)
 
        def __onClose(self):
+               global inStandby
+               inStandby = None
                if self.prev_running_service:
                        self.session.nav.playService(self.prev_running_service)
                elif self.paused_service:
                        self.paused_service.unPauseService()
+               self.session.screen["Standby"].boolean = False
 
-       def createSummary(self):
-               return StandbySummary
-
-       def __onShow(self):
+       def __onFirstExecBegin(self):
                global inStandby
                inStandby = self
                self.session.screen["Standby"].boolean = True
+               config.misc.standbyCounter.value += 1
 
-       def __onHide(self):
-               global inStandby
-               inStandby = None
-               self.session.screen["Standby"].boolean = False
+       def createSummary(self):
+               return StandbySummary
 
 class StandbySummary(Screen):
        skin = """
index 52ec6c1..18fdac7 100644 (file)
@@ -155,6 +155,41 @@ inline void ePyObject::decref()
        Py_DECREF(m_ob);
 }
 
+class ePyObjectWrapper
+{
+       ePyObject m_obj;
+public:
+       ePyObjectWrapper(const ePyObjectWrapper &wrapper)
+               :m_obj(wrapper.m_obj)
+       {
+               Py_INCREF(m_obj);
+       }
+       ePyObjectWrapper(const ePyObject &obj)
+               :m_obj(obj)
+       {
+               Py_INCREF(m_obj);
+       }
+       ~ePyObjectWrapper()
+       {
+               Py_DECREF(m_obj);
+       }
+       ePyObjectWrapper &operator=(const ePyObjectWrapper &wrapper)
+       {
+               Py_DECREF(m_obj);
+               m_obj = wrapper.m_obj;
+               Py_INCREF(m_obj);
+               return *this;
+       }
+       operator PyObject*()
+       {
+               return m_obj;
+       }
+       operator ePyObject()
+       {
+               return m_obj;
+       }
+};
+
 #endif // ! PYTHON_REFCOUNT_DEBUG
 
 #endif  // !SWIG && !SKIP_PART1
@@ -390,5 +425,4 @@ private:
 
 #endif // SWIG
 #endif // SKIP_PART2
-
 #endif // __lib_python_python_class_h
index 7f5d598..e42c100 100755 (executable)
--- a/mytest.py
+++ b/mytest.py
@@ -42,7 +42,7 @@ from skin import readSkin
 
 profile("LOAD:Tools")
 from Tools.Directories import InitFallbackFiles, resolveFilename, SCOPE_PLUGINS, SCOPE_SKIN_IMAGE
-from Components.config import config, configfile, ConfigText, ConfigYesNo
+from Components.config import config, configfile, ConfigText, ConfigYesNo, ConfigInteger, NoSave
 InitFallbackFiles()
 
 profile("ReloadProfiles")
@@ -51,6 +51,20 @@ eDVBDB.getInstance().reloadBouquets()
 config.misc.radiopic = ConfigText(default = resolveFilename(SCOPE_SKIN_IMAGE)+"radio.mvi")
 config.misc.isNextRecordTimerAfterEventActionAuto = ConfigYesNo(default=False)
 config.misc.useTransponderTime = ConfigYesNo(default=True)
+config.misc.startCounter = ConfigInteger(default=0) # number of e2 starts...
+config.misc.standbyCounter = NoSave(ConfigInteger(default=0)) # number of standby
+
+#demo code for use of standby enter leave callbacks
+#def leaveStandby():
+#      print "!!!!!!!!!!!!!!!!!leave standby"
+
+#def standbyCountChanged(configElement):
+#      print "!!!!!!!!!!!!!!!!!enter standby num", configElement.value
+#      from Screens.Standby import inStandby
+#      inStandby.onClose.append(leaveStandby)
+
+#config.misc.standbyCounter.addNotifier(standbyCountChanged, initial_call = False)
+####################################################
 
 def useTransponderTimeChanged(configElement):
        enigma.eDVBLocalTimeHandler.getInstance().setUseDVBTime(configElement.value)
@@ -413,6 +427,8 @@ profile("Load:VolumeControl")
 from Components.VolumeControl import VolumeControl
 
 def runScreenTest():
+       config.misc.startCounter.value += 1
+
        profile("readPluginList")
        plugins.readPluginList(resolveFilename(SCOPE_PLUGINS))
 
@@ -466,6 +482,8 @@ def runScreenTest():
        profile_final()
        runReactor()
 
+       config.misc.startCounter.save()
+
        profile("wakeup")
        from time import time, strftime, localtime
        from Tools.DreamboxHardware import setFPWakeuptime, getFPWakeuptime, setRTCtime