diff options
| author | Felix Domke <tmbinc@elitedvb.net> | 2005-02-09 22:59:04 +0000 |
|---|---|---|
| committer | Felix Domke <tmbinc@elitedvb.net> | 2005-02-09 22:59:04 +0000 |
| commit | 54bd4123728628a6f77bad2584b70d1353a91666 (patch) | |
| tree | 51fe5fa7108c770670ce4304b6d704eff292722b /lib | |
| parent | d9ee52e4f0fbe9a1ae00d0e66f9e6f0a07fa319f (diff) | |
| download | enigma2-54bd4123728628a6f77bad2584b70d1353a91666.tar.gz enigma2-54bd4123728628a6f77bad2584b70d1353a91666.zip | |
- fixed console input mode restore
- added "scan" component
- scan possible from main menu
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/components/Makefile.am | 7 | ||||
| -rw-r--r-- | lib/components/scan.cpp | 109 | ||||
| -rw-r--r-- | lib/components/scan.h | 35 | ||||
| -rw-r--r-- | lib/driver/rcconsole.cpp | 4 | ||||
| -rw-r--r-- | lib/dvb/idvb.h | 6 | ||||
| -rw-r--r-- | lib/dvb/scan.cpp | 9 | ||||
| -rw-r--r-- | lib/dvb/scan.h | 6 | ||||
| -rw-r--r-- | lib/gui/elistbox.cpp | 1 | ||||
| -rw-r--r-- | lib/python/enigma_python.i | 8 |
9 files changed, 180 insertions, 5 deletions
diff --git a/lib/components/Makefile.am b/lib/components/Makefile.am new file mode 100644 index 00000000..d40a1667 --- /dev/null +++ b/lib/components/Makefile.am @@ -0,0 +1,7 @@ +INCLUDES = \ + -I$(top_srcdir)/include + +noinst_LIBRARIES = libenigma_components.a + +libenigma_components_a_SOURCES = scan.cpp +
\ No newline at end of file diff --git a/lib/components/scan.cpp b/lib/components/scan.cpp new file mode 100644 index 00000000..4d8d8b78 --- /dev/null +++ b/lib/components/scan.cpp @@ -0,0 +1,109 @@ +#include <lib/dvb/dvb.h> +#include <lib/dvb/db.h> +#include <lib/components/scan.h> +#include <lib/base/eerror.h> +#include <lib/dvb/scan.h> + +DEFINE_REF(eComponentScan); + +void eComponentScan::scanEvent(int evt) +{ + eDebug("scan event %d!", evt); + + if (evt == eDVBScan::evtFinish) + { + m_done = 1; + ePtr<iDVBChannelList> db; + ePtr<eDVBResourceManager> res; + + int err; + if ((err = eDVBResourceManager::getInstance(res)) != 0) + { + eDebug("no resource manager"); + return; + } + if ((err = res->getChannelList(db)) != 0) + { + eDebug("no channel list"); + return; + } + + m_scan->insertInto(db); + + eDebug("scan done!"); + } + + statusChanged(); +} + +eComponentScan::eComponentScan(): m_done(-1) +{ +} + +eComponentScan::~eComponentScan() +{ +} + +int eComponentScan::start() +{ + if (m_done != -1) + return -1; + + m_done = 0; + ePtr<eDVBResourceManager> mgr; + + eDVBResourceManager::getInstance(mgr); + + eDVBFrontendParametersSatellite fesat; + + fesat.frequency = 11817000; // 12070000; + fesat.symbol_rate = 27500000; + fesat.polarisation = eDVBFrontendParametersSatellite::Polarisation::Vertical; + fesat.fec = eDVBFrontendParametersSatellite::FEC::f3_4; + fesat.inversion = eDVBFrontendParametersSatellite::Inversion::Off; + fesat.orbital_position = 192; + + eDVBFrontendParameters *fe = new eDVBFrontendParameters(); + + fe->setDVBS(fesat); + + ePtr<iDVBChannel> channel; + + if (mgr->allocateRawChannel(channel)) + eDebug("scan: allocating raw channel failed!"); + + std::list<ePtr<iDVBFrontendParameters> > list; + + list.push_back(fe); + + m_scan = new eDVBScan(channel); + m_scan->start(list); + m_scan->connectEvent(slot(*this, &eComponentScan::scanEvent), m_scan_event_connection); + + return 0; +} + +int eComponentScan::getProgress() +{ + if (!m_scan) + return 0; + int done, total, services; + m_scan->getStats(done, total, services); + if (!total) + return 0; + return done * 100 / total; +} + +int eComponentScan::getNumServices() +{ + if (!m_scan) + return 0; + int done, total, services; + m_scan->getStats(done, total, services); + return services; +} + +int eComponentScan::isDone() +{ + return m_done; +} diff --git a/lib/components/scan.h b/lib/components/scan.h new file mode 100644 index 00000000..afa68689 --- /dev/null +++ b/lib/components/scan.h @@ -0,0 +1,35 @@ +#ifndef __lib_components_scan_h +#define __lib_components_scan_h + +#include <lib/base/object.h> + +class eDVBScan; + +class eComponentScan: public Object, public iObject +{ +DECLARE_REF; +private: + void scanEvent(int event); + ePtr<eConnection> m_scan_event_connection; + ePtr<eDVBScan> m_scan; + + int m_done; +public: + eComponentScan(); + ~eComponentScan(); + + PSignal0<void> statusChanged; + + /* progress between 0 and 100 */ + int getProgress(); + + /* get number of services */ + int getNumServices(); + + /* true when done. */ + int isDone(); + + int start(); +}; + +#endif diff --git a/lib/driver/rcconsole.cpp b/lib/driver/rcconsole.cpp index ec759164..f662b2b1 100644 --- a/lib/driver/rcconsole.cpp +++ b/lib/driver/rcconsole.cpp @@ -20,10 +20,10 @@ eRCConsoleDriver::eRCConsoleDriver(const char *filename): eRCDriver(eRCInput::ge } /* set console mode */ - struct termios t,ot; + struct termios t; tcgetattr(handle, &t); - t.c_lflag &= ~(ECHO | ICANON | ECHOK | ECHOE | ECHONL); ot = t; + t.c_lflag &= ~(ECHO | ICANON | ECHOK | ECHOE | ECHONL); tcsetattr(handle, TCSANOW,&t); } diff --git a/lib/dvb/idvb.h b/lib/dvb/idvb.h index 15796166..4d728b4c 100644 --- a/lib/dvb/idvb.h +++ b/lib/dvb/idvb.h @@ -223,8 +223,14 @@ public: class iDVBChannelList: public iObject { public: + virtual RESULT addChannelToList(const eDVBChannelID &id, iDVBFrontendParameters *feparm)=0; + virtual RESULT removeChannel(const eDVBChannelID &id)=0; + virtual RESULT getChannelFrontendData(const eDVBChannelID &id, ePtr<iDVBFrontendParameters> &parm)=0; + + virtual RESULT addService(const eServiceReferenceDVB &service, eDVBService *service)=0; virtual RESULT getService(const eServiceReferenceDVB &reference, ePtr<eDVBService> &service)=0; + virtual RESULT startQuery(ePtr<iDVBChannelListQuery> &query, eDVBChannelQuery *query)=0; }; diff --git a/lib/dvb/scan.cpp b/lib/dvb/scan.cpp index 322f35c3..65eb053c 100644 --- a/lib/dvb/scan.cpp +++ b/lib/dvb/scan.cpp @@ -298,7 +298,7 @@ void eDVBScan::start(const std::list<ePtr<iDVBFrontendParameters> > &known_trans nextChannel(); } -void eDVBScan::insertInto(eDVBDB *db) +void eDVBScan::insertInto(iDVBChannelList *db) { for (std::map<eDVBChannelID, ePtr<iDVBFrontendParameters> >::const_iterator ch(m_new_channels.begin()); ch != m_new_channels.end(); ++ch) @@ -377,3 +377,10 @@ RESULT eDVBScan::connectEvent(const Slot1<void,int> &event, ePtr<eConnection> &c connection = new eConnection(this, m_event.connect(event)); return 0; } + +void eDVBScan::getStats(int &transponders_done, int &transponders_total, int &services) +{ + transponders_done = m_ch_scanned.size() + m_ch_unavailable.size(); + transponders_total = m_ch_toScan.size() + transponders_done; + services = m_new_services.size(); +} diff --git a/lib/dvb/scan.h b/lib/dvb/scan.h index f7cb5d26..3556eb20 100644 --- a/lib/dvb/scan.h +++ b/lib/dvb/scan.h @@ -4,6 +4,8 @@ #include <lib/dvb_si/nit.h> #include <lib/dvb_si/sdt.h> #include <lib/dvb_si/bat.h> +#include <lib/dvb/isection.h> +#include <lib/dvb/esection.h> #include <lib/dvb/db.h> class eDVBScan: public Object, public iObject @@ -65,7 +67,9 @@ public: enum { evtUpdate, evtFinish }; RESULT connectEvent(const Slot1<void,int> &event, ePtr<eConnection> &connection); - void insertInto(eDVBDB *db); + void insertInto(iDVBChannelList *db); + + void getStats(int &transponders_done, int &transponders_total, int &services); }; #endif diff --git a/lib/gui/elistbox.cpp b/lib/gui/elistbox.cpp index f530019d..361d7b99 100644 --- a/lib/gui/elistbox.cpp +++ b/lib/gui/elistbox.cpp @@ -1,4 +1,3 @@ - /* written by: Felix Domke <tmbinc@elitedvb.net> */ #include <lib/gui/elistbox.h> #include <lib/gui/elistboxcontent.h> diff --git a/lib/python/enigma_python.i b/lib/python/enigma_python.i index 4bd0cdcb..270dd7f4 100644 --- a/lib/python/enigma_python.i +++ b/lib/python/enigma_python.i @@ -59,14 +59,17 @@ is usually caused by not marking PSignals as immutable. #include <lib/gui/elistbox.h> #include <lib/gui/elistboxcontent.h> #include <lib/service/listboxservice.h> +#include <lib/components/scan.h> extern void runMainloop(); +extern void quitMainloop(); extern PSignal1<void,int> &keyPressedSignal(); %} RefCount(eListboxPythonStringContent) RefCount(eListboxServiceContent) +RefCount(eComponentScan) #define DEBUG %include "stl.i" @@ -78,7 +81,10 @@ RefCount(eListboxServiceContent) %include <lib/service/service.h> %template(eServiceCenterPtr) ePtr<eServiceCenter>; + +// TODO: embed these... %immutable eButton::selected; +%immutable eComponentScan::statusChanged; %include <lib/gdi/epoint.h> %include <lib/gdi/erect.h> @@ -93,6 +99,7 @@ RefCount(eListboxServiceContent) %include <lib/gui/elistbox.h> %include <lib/gui/elistboxcontent.h> %include <lib/service/listboxservice.h> +%include <lib/components/scan.h> template<class R> class PSignal0 { @@ -143,5 +150,6 @@ public: /************** debug **************/ void runMainloop(); +void quitMainloop(); %immutable keyPressed; PSignal1<void,int> &keyPressedSignal(); |
