#include <lib/base/eerror.h>
#include <errno.h>
+#define SCAN_eDebug(x...) eDebug(x)
+#define SCAN_eDebugNoNewLine(x...) eDebugNoNewLine(x)
+
+DEFINE_REF(eDVBScan);
+
eDVBScan::eDVBScan(iDVBChannel *channel): m_channel(channel)
{
if (m_channel->getDemux(m_demux))
- eDebug("scan: failed to allocate demux!");
+ SCAN_eDebug("scan: failed to allocate demux!");
m_channel->connectStateChange(slot(*this, &eDVBScan::stateChange), m_stateChanged_connection);
}
m_ch_toScan.pop_front();
if (m_channel->getFrontend(fe))
+ {
+ m_event(evtFail);
return -ENOTSUP;
+ }
m_channel_state = iDVBChannel::state_idle;
if (fe->tune(*m_ch_current))
+ {
+ return nextChannel();
+ m_event(evtFail);
return -EINVAL;
+ }
m_event(evtUpdate);
return 0;
void eDVBScan::SDTready(int err)
{
- eDebug("got sdt");
+ SCAN_eDebug("got sdt");
m_ready |= readySDT;
if (!err)
m_ready |= validSDT;
void eDVBScan::NITready(int err)
{
- eDebug("got nit, err %d", err);
+ SCAN_eDebug("got nit, err %d", err);
m_ready |= readyNIT;
if (!err)
m_ready |= validNIT;
void eDVBScan::BATready(int err)
{
- eDebug("got bat");
+ SCAN_eDebug("got bat");
m_ready |= readyBAT;
if (!err)
m_ready |= validBAT;
(**m_SDT->getSections().begin()).getTransportStreamId(),
hash);
- eDebug("SDT: ");
+ SCAN_eDebug("SDT: ");
ServiceDescriptionTableConstIterator i;
for (i = m_SDT->getSections().begin(); i != m_SDT->getSections().end(); ++i)
processSDT(dvbnamespace, **i);
if (m_ready & validNIT)
{
- eDebug("dumping NIT");
+ SCAN_eDebug("dumping NIT");
NetworkInformationTableConstIterator i;
for (i = m_NIT->getSections().begin(); i != m_NIT->getSections().end(); ++i)
{
for (TransportStreamInfoConstIterator tsinfo(tsinfovec.begin());
tsinfo != tsinfovec.end(); ++tsinfo)
{
- eDebug("TSID: %04x ONID: %04x", (*tsinfo)->getTransportStreamId(),
+ SCAN_eDebug("TSID: %04x ONID: %04x", (*tsinfo)->getTransportStreamId(),
(*tsinfo)->getOriginalNetworkId());
eOriginalNetworkID onid = (*tsinfo)->getOriginalNetworkId();
case SATELLITE_DELIVERY_SYSTEM_DESCRIPTOR:
{
SatelliteDeliverySystemDescriptor &d = (SatelliteDeliverySystemDescriptor&)**desc;
- eDebug("%d kHz, %d%d%d.%d%c %s MOD:%d %d symb/s, fec %d",
+ SCAN_eDebug("%d kHz, %d%d%d.%d%c %s MOD:%d %d symb/s, fec %d",
d.getFrequency(),
(d.getOrbitalPosition()>>12)&0xF,
(d.getOrbitalPosition()>>8)&0xF,
break;
}
default:
- eDebug("descr<%x>", (*desc)->getTag());
+ SCAN_eDebug("descr<%x>", (*desc)->getTag());
break;
}
}
if ((m_ready & readyAll) != readyAll)
return;
- eDebug("channel done!");
+ SCAN_eDebug("channel done!");
m_ch_scanned.push_back(m_ch_current);
nextChannel();
}
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)
RESULT eDVBScan::processSDT(eDVBNamespace dvbnamespace, const ServiceDescriptionTable &sdt)
{
const ServiceDescriptionVector &services = *sdt.getDescriptions();
- eDebug("ONID: %04x", sdt.getOriginalNetworkId());
+ SCAN_eDebug("ONID: %04x", sdt.getOriginalNetworkId());
eDVBChannelID chid(dvbnamespace, sdt.getTransportStreamId(), sdt.getOriginalNetworkId());
for (ServiceDescriptionConstIterator s(services.begin()); s != services.end(); ++s)
{
- eDebugNoNewLine("SID %04x: ", (*s)->getServiceId());
+ SCAN_eDebugNoNewLine("SID %04x: ", (*s)->getServiceId());
eServiceReferenceDVB ref;
ePtr<eDVBService> service = new eDVBService;
case SERVICE_DESCRIPTOR:
{
ServiceDescriptor &d = (ServiceDescriptor&)**desc;
- eDebug("name '%s', provider_name '%s'", d.getServiceName().c_str(), d.getServiceProviderName().c_str());
+ SCAN_eDebug("name '%s', provider_name '%s'", d.getServiceName().c_str(), d.getServiceProviderName().c_str());
service->m_service_name = d.getServiceName();
service->m_provider_name = d.getServiceProviderName();
break;
{
CaIdentifierDescriptor &d = (CaIdentifierDescriptor&)**desc;
const CaSystemIdVector &caids = *d.getCaSystemIds();
- eDebugNoNewLine("CA ");
+ SCAN_eDebugNoNewLine("CA ");
for (CaSystemIdVector::const_iterator i(caids.begin()); i != caids.end(); ++i)
{
- eDebugNoNewLine("%04x ", *i);
+ SCAN_eDebugNoNewLine("%04x ", *i);
service->m_ca.insert(*i);
}
- eDebug("");
+ SCAN_eDebug("");
break;
}
default:
- eDebug("descr<%x>", (*desc)->getTag());
+ SCAN_eDebug("descr<%x>", (*desc)->getTag());
break;
}
}
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();
+}