From 72f38fa3d54ce2ded1826e18e9a3ae94b7bc20f3 Mon Sep 17 00:00:00 2001 From: ghost Date: Fri, 25 Sep 2009 12:42:58 +0200 Subject: add a standby counter and a enigma2 startcounter config.misc.standbyCount (not saved to /etc/enigma2/settings) config.misc.startCounter (saved to /etc/enigma2/settings on clean e2 shutdown) --- lib/python/Screens/Standby.py | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) (limited to 'lib') diff --git a/lib/python/Screens/Standby.py b/lib/python/Screens/Standby.py index b8ccb6c2..c598b545 100644 --- a/lib/python/Screens/Standby.py +++ b/lib/python/Screens/Standby.py @@ -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 = """ -- cgit v1.2.3 From 5136ec8c8b20d83f744ce76d7fbcc5b885059e80 Mon Sep 17 00:00:00 2001 From: ghost Date: Fri, 25 Sep 2009 16:54:43 +0200 Subject: add wrapper class for auto Py_INCREF/Py_DECREF ... i.e. usable for STL containers --- lib/python/python.h | 36 +++++++++++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) (limited to 'lib') diff --git a/lib/python/python.h b/lib/python/python.h index 52ec6c1e..18fdac78 100644 --- a/lib/python/python.h +++ b/lib/python/python.h @@ -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 -- cgit v1.2.3 From 71fbd4b3c1e7937f2fdc3d903cfd570bcb4cbd5a Mon Sep 17 00:00:00 2001 From: ghost Date: Fri, 25 Sep 2009 16:56:04 +0200 Subject: fix read back of real frontend parameters... more flexible now --- lib/dvb/scan.cpp | 70 +++++++++++++++++++++++++++++++++++++++----------------- lib/dvb/scan.h | 4 ++-- 2 files changed, 51 insertions(+), 23 deletions(-) (limited to 'lib') diff --git a/lib/dvb/scan.cpp b/lib/dvb/scan.cpp index 19c10868..fd29617a 100644 --- a/lib/dvb/scan.cpp +++ b/lib/dvb/scan.cpp @@ -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 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 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 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(m_chid_current, tp_dict)); + Py_DECREF(tp_dict); + } + } + default: + break; + } + } + } + m_ch_scanned.push_back(m_ch_current); - + for (std::list >::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 &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::iterator it = m_tuner_data.find(ch->first); + + switch(system) { - std::map::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); } diff --git a/lib/dvb/scan.h b/lib/dvb/scan.h index 9f0dd6ef..2f3ac34a 100644 --- a/lib/dvb/scan.h +++ b/lib/dvb/scan.h @@ -51,9 +51,9 @@ class eDVBScan: public Object, public iObject int m_channel_state; int m_ready, m_ready_all; - std::map m_corrected_frequencys; // yet just used for DVB-T - std::map > m_new_channels; + std::map m_tuner_data; // data read from tuner for every new channel + std::map > m_new_services; std::map >::iterator m_last_service; -- cgit v1.2.3