aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/dvb/scan.cpp70
-rw-r--r--lib/dvb/scan.h4
-rw-r--r--lib/python/Screens/Standby.py18
-rw-r--r--lib/python/python.h36
-rwxr-xr-xmytest.py20
5 files changed, 113 insertions, 35 deletions
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<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);
}
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<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;
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 = """
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
diff --git a/mytest.py b/mytest.py
index 7f5d598a..e42c1003 100755
--- 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