X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/5772d967325d73c19f0674dadeebafe3d35c80cf..fea429e03ad502d4667041a245d3b492c49d55d7:/lib/dvb/scan.cpp diff --git a/lib/dvb/scan.cpp b/lib/dvb/scan.cpp index d5328163..8d412ce7 100644 --- a/lib/dvb/scan.cpp +++ b/lib/dvb/scan.cpp @@ -84,7 +84,7 @@ RESULT eDVBScan::nextChannel() { ePtr fe; - m_SDT = 0; m_BAT = 0; m_NIT = 0; + m_SDT = 0; m_PAT = 0; m_BAT = 0; m_NIT = 0; m_ready = 0; @@ -123,13 +123,10 @@ RESULT eDVBScan::nextChannel() m_chid_current = eDVBChannelID(); m_channel_state = iDVBChannel::state_idle; + if (fe->tune(*m_ch_current)) - { return nextChannel(); - m_event(evtFail); - return -EINVAL; - } - + m_event(evtUpdate); return 0; } @@ -148,16 +145,34 @@ RESULT eDVBScan::startFilter() if (startSDT && (m_ready_all & readySDT)) { m_SDT = new eTable(); + int tsid=-1; if (m_ready & readyPAT && m_ready & validPAT) { std::vector::const_iterator i = m_PAT->getSections().begin(); assert(i != m_PAT->getSections().end()); - int tsid = (*i)->getTableIdExtension(); // in PAT this is the transport stream id - if (m_SDT->start(m_demux, eDVBSDTSpec(tsid, true))) + tsid = (*i)->getTableIdExtension(); // in PAT this is the transport stream id + + // KabelBW HACK ... on 618Mhz and 626Mhz the transport stream id in PAT and SDT is different + { + int type; + m_ch_current->getSystem(type); + if (type == iDVBFrontend::feCable) + { + eDVBFrontendParametersCable parm; + m_ch_current->getDVBC(parm); + if ((tsid == 0x00d7 && abs(parm.frequency-618000) < 2000) || + (tsid == 0x00d8 && abs(parm.frequency-626000) < 2000)) + tsid = -1; + } + } + } + if (tsid == -1) + { + if (m_SDT->start(m_demux, eDVBSDTSpec())) return -1; } - else if (m_SDT->start(m_demux, eDVBSDTSpec())) + else if (m_SDT->start(m_demux, eDVBSDTSpec(tsid, true))) return -1; CONNECT(m_SDT->tableReady, eDVBScan::SDTready); } @@ -680,7 +695,8 @@ void eDVBScan::insertInto(iDVBChannelList *db, bool dontRemoveOldFlags) else { db->addService(service->first, service->second); - service->second->m_flags |= eDVBService::dxNewFound; + if (!(m_flags & scanRemoveServices)) + service->second->m_flags |= eDVBService::dxNewFound; } } } @@ -774,3 +790,22 @@ void eDVBScan::getLastServiceName(std::string &last_service_name) else last_service_name = m_last_service->second->m_service_name; } + +RESULT eDVBScan::getFrontend(ePtr &fe) +{ + if (m_channel) + return m_channel->getFrontend(fe); + fe = 0; + return -1; +} + +RESULT eDVBScan::getCurrentTransponder(ePtr &tp) +{ + if (m_ch_current) + { + tp = m_ch_current; + return 0; + } + tp = 0; + return -1; +}