{
ePtr<iDVBFrontend> 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;
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;
}
if (startSDT && (m_ready_all & readySDT))
{
m_SDT = new eTable<ServiceDescriptionSection>();
+ int tsid=-1;
if (m_ready & readyPAT && m_ready & validPAT)
{
std::vector<ProgramAssociationSection*>::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)))
- return -1;
+ tsid = (*i)->getTableIdExtension(); // in PAT this is the transport stream id
+
+ // KabelBW HACK ... on 618 Mhz 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 = -1;
+ }
+ }
}
- else if (m_SDT->start(m_demux, eDVBSDTSpec()))
+ if (tsid == -1 && m_SDT->start(m_demux, eDVBSDTSpec()))
+ return -1;
+ else if (m_SDT->start(m_demux, eDVBSDTSpec(tsid, true)))
return -1;
CONNECT(m_SDT->tableReady, eDVBScan::SDTready);
}
else
{
db->addService(service->first, service->second);
- service->second->m_flags |= eDVBService::dxNewFound;
+ if (!(m_flags & scanRemoveServices))
+ service->second->m_flags |= eDVBService::dxNewFound;
}
}
}
else
last_service_name = m_last_service->second->m_service_name;
}
+
+RESULT eDVBScan::getFrontend(ePtr<iDVBFrontend> &fe)
+{
+ if (m_channel)
+ return m_channel->getFrontend(fe);
+ fe = 0;
+ return -1;
+}
+
+RESULT eDVBScan::getCurrentTransponder(ePtr<iDVBFrontendParameters> &tp)
+{
+ if (m_ch_current)
+ {
+ tp = m_ch_current;
+ return 0;
+ }
+ tp = 0;
+ return -1;
+}