{
}
-int eDVBScan::isValidONIDTSID(eOriginalNetworkID onid, eTransportStreamID tsid)
+int eDVBScan::isValidONIDTSID(int orbital_position, eOriginalNetworkID onid, eTransportStreamID tsid)
{
switch (onid.get())
{
case 0:
- case 0xFFFF:
case 0x1111:
return 0;
case 1:
- return tsid>1;
+ return orbital_position == 192;
case 0x00B1:
return tsid != 0x00B0;
case 0x0002:
- return tsid != 0x07E8;
+ return abs(orbital_position-282) < 6;
default:
- return 1;
+ return onid.get() < 0xFF00;
}
}
eDVBNamespace eDVBScan::buildNamespace(eOriginalNetworkID onid, eTransportStreamID tsid, unsigned long hash)
{
// on valid ONIDs, ignore frequency ("sub network") part
- if (isValidONIDTSID(onid, tsid))
+ if (isValidONIDTSID((hash >> 16) & 0xFFFF, onid, tsid))
hash &= ~0xFFFF;
return eDVBNamespace(hash);
}
}
m_ch_current = m_ch_toScan.front();
- m_chid_current = eDVBChannelID();
m_ch_toScan.pop_front();
m_event(evtFail);
return -ENOTSUP;
}
-
+
+ int fetype;
+ fe->getFrontendType(fetype);
+ if ( fetype == iDVBFrontend::feSatellite)
+ {
+ eDVBFrontendParametersSatellite p;
+ m_ch_current->getDVBS(p);
+ m_chid_current = eDVBChannelID(p.orbital_position << 16, -1, -1);
+ }
+ else
+ m_chid_current = eDVBChannelID();
+
m_channel_state = iDVBChannel::state_idle;
if (fe->tune(*m_ch_current))
{
eDVBNamespace ns = buildNamespace(onid, tsid, hash);
- if (m_chid_current && ((ns.get() ^ m_chid_current.dvbnamespace.get()) & 0xFFFF0000))
+ if ( m_chid_current.dvbnamespace.get() != -1 &&
+ ((ns.get() ^ m_chid_current.dvbnamespace.get()) & 0xFFFF0000))
eDebug("dropping this transponder, it's on another satellite.");
else
{