X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/d63d2c3c6cbbd574dda4f8b00ebe6c661735edd5..52eb0cac0affc9c39a7a15a5e90bb87ad3a60481:/lib/dvb/scan.cpp diff --git a/lib/dvb/scan.cpp b/lib/dvb/scan.cpp index 68121c44..0fc3e0a8 100644 --- a/lib/dvb/scan.cpp +++ b/lib/dvb/scan.cpp @@ -13,10 +13,15 @@ #include #include +#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); } @@ -91,11 +96,17 @@ RESULT eDVBScan::nextChannel() 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)) + { + m_event(evtFail); return -EINVAL; + } m_event(evtUpdate); return 0; @@ -126,7 +137,7 @@ RESULT eDVBScan::startFilter() void eDVBScan::SDTready(int err) { - eDebug("got sdt"); + SCAN_eDebug("got sdt"); m_ready |= readySDT; if (!err) m_ready |= validSDT; @@ -135,7 +146,7 @@ void eDVBScan::SDTready(int err) 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; @@ -144,7 +155,7 @@ void eDVBScan::NITready(int err) void eDVBScan::BATready(int err) { - eDebug("got bat"); + SCAN_eDebug("got bat"); m_ready |= readyBAT; if (!err) m_ready |= validBAT; @@ -204,7 +215,7 @@ void eDVBScan::channelDone() (**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); @@ -213,7 +224,7 @@ void eDVBScan::channelDone() 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) { @@ -222,7 +233,7 @@ void eDVBScan::channelDone() 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(); @@ -237,7 +248,7 @@ void eDVBScan::channelDone() 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, @@ -265,7 +276,7 @@ void eDVBScan::channelDone() break; } default: - eDebug("descr<%x>", (*desc)->getTag()); + SCAN_eDebug("descr<%x>", (*desc)->getTag()); break; } } @@ -277,7 +288,7 @@ void eDVBScan::channelDone() if ((m_ready & readyAll) != readyAll) return; - eDebug("channel done!"); + SCAN_eDebug("channel done!"); m_ch_scanned.push_back(m_ch_current); nextChannel(); } @@ -293,7 +304,7 @@ void eDVBScan::start(const std::list > &known_trans nextChannel(); } -void eDVBScan::insertInto(eDVBDB *db) +void eDVBScan::insertInto(iDVBChannelList *db) { for (std::map >::const_iterator ch(m_new_channels.begin()); ch != m_new_channels.end(); ++ch) @@ -312,12 +323,12 @@ void eDVBScan::insertInto(eDVBDB *db) 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 service = new eDVBService; @@ -338,7 +349,7 @@ RESULT eDVBScan::processSDT(eDVBNamespace dvbnamespace, const ServiceDescription 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; @@ -347,17 +358,17 @@ RESULT eDVBScan::processSDT(eDVBNamespace dvbnamespace, const ServiceDescription { 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; } } @@ -369,6 +380,13 @@ RESULT eDVBScan::processSDT(eDVBNamespace dvbnamespace, const ServiceDescription RESULT eDVBScan::connectEvent(const Slot1 &event, ePtr &connection) { - connection = new eConnection(m_event.connect(event)); + 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(); +}