4d8d8b782c570ffd68483b6501ab982c9d9fc09f
[vuplus_dvbapp] / lib / components / scan.cpp
1 #include <lib/dvb/dvb.h>
2 #include <lib/dvb/db.h>
3 #include <lib/components/scan.h>
4 #include <lib/base/eerror.h>
5 #include <lib/dvb/scan.h>
6
7 DEFINE_REF(eComponentScan);
8
9 void eComponentScan::scanEvent(int evt)
10 {
11         eDebug("scan event %d!", evt);
12         
13         if (evt == eDVBScan::evtFinish)
14         {
15                 m_done = 1;
16                 ePtr<iDVBChannelList> db;
17                 ePtr<eDVBResourceManager> res;
18                 
19                 int err;
20                 if ((err = eDVBResourceManager::getInstance(res)) != 0)
21                 {
22                         eDebug("no resource manager");
23                         return;
24                 }
25                 if ((err = res->getChannelList(db)) != 0)
26                 {
27                         eDebug("no channel list");
28                         return;
29                 }
30                 
31                 m_scan->insertInto(db);
32                 
33                 eDebug("scan done!");
34         }
35         
36         statusChanged();
37 }
38
39 eComponentScan::eComponentScan(): m_done(-1)
40 {
41 }
42
43 eComponentScan::~eComponentScan()
44 {
45 }
46
47 int eComponentScan::start()
48 {
49         if (m_done != -1)
50                 return -1;
51         
52         m_done = 0;
53         ePtr<eDVBResourceManager> mgr;
54         
55         eDVBResourceManager::getInstance(mgr);
56         
57         eDVBFrontendParametersSatellite fesat;
58                 
59         fesat.frequency = 11817000; // 12070000;
60         fesat.symbol_rate = 27500000;
61         fesat.polarisation = eDVBFrontendParametersSatellite::Polarisation::Vertical;
62         fesat.fec = eDVBFrontendParametersSatellite::FEC::f3_4;
63         fesat.inversion = eDVBFrontendParametersSatellite::Inversion::Off;
64         fesat.orbital_position = 192;
65
66         eDVBFrontendParameters *fe = new eDVBFrontendParameters();
67         
68         fe->setDVBS(fesat);
69         
70         ePtr<iDVBChannel> channel;
71
72         if (mgr->allocateRawChannel(channel))
73                 eDebug("scan: allocating raw channel failed!");
74
75         std::list<ePtr<iDVBFrontendParameters> > list;
76                 
77         list.push_back(fe);
78         
79         m_scan = new eDVBScan(channel);
80         m_scan->start(list);
81         m_scan->connectEvent(slot(*this, &eComponentScan::scanEvent), m_scan_event_connection);
82
83         return 0;
84 }
85
86 int eComponentScan::getProgress()
87 {
88         if (!m_scan)
89                 return 0;
90         int done, total, services;
91         m_scan->getStats(done, total, services);
92         if (!total)
93                 return 0;
94         return done * 100 / total;
95 }
96
97 int eComponentScan::getNumServices()
98 {
99         if (!m_scan)
100                 return 0;
101         int done, total, services;
102         m_scan->getStats(done, total, services);
103         return services;
104 }
105
106 int eComponentScan::isDone()
107 {
108         return m_done;
109 }