only accept delivery descriptors when the descriptor type is equal to the
[enigma2.git] / lib / dvb / scan.cpp
index d21ed10b13bae1a2295c82c14c1b7e51c63b0fbc..f49607c284b8c0b52c520ed93670a0059b50253f 100644 (file)
@@ -268,7 +268,7 @@ void eDVBScan::addChannelToScan(const eDVBChannelID &chid, iDVBFrontendParameter
        {
                eDVBFrontendParametersCable parm;
                feparm->getDVBC(parm);
-               eDebug("try to add %d %d %d %d %d",
+               eDebug("try to add %d %d %d %d",
                        parm.frequency, parm.symbol_rate, parm.modulation, parm.fec_inner);
                break;
        }
@@ -356,7 +356,14 @@ void eDVBScan::channelDone()
        
        if (m_ready & validNIT)
        {
+               int system;
+               m_ch_current->getSystem(system);
                SCAN_eDebug("dumping NIT");
+               if (m_flags & clearToScanOnFirstNIT)
+               {
+                       m_ch_toScan.clear();
+                       m_flags &= ~clearToScanOnFirstNIT;
+               }
                std::vector<NetworkInformationSection*>::const_iterator i;
                for (i = m_NIT->getSections().begin(); i != m_NIT->getSections().end(); ++i)
                {
@@ -378,6 +385,8 @@ void eDVBScan::channelDone()
                                        {
                                        case CABLE_DELIVERY_SYSTEM_DESCRIPTOR:
                                        {
+                                               if (system != iDVBFrontend::feCable)
+                                                       break; // when current locked transponder is no cable transponder ignore this descriptor
                                                CableDeliverySystemDescriptor &d = (CableDeliverySystemDescriptor&)**desc;
                                                ePtr<eDVBFrontendParameters> feparm = new eDVBFrontendParameters;
                                                eDVBFrontendParametersCable cable;
@@ -395,6 +404,8 @@ void eDVBScan::channelDone()
                                        }
                                        case TERRESTRIAL_DELIVERY_SYSTEM_DESCRIPTOR:
                                        {
+                                               if (system != iDVBFrontend::feTerrestrial)
+                                                       break; // when current locked transponder is no terrestrial transponder ignore this descriptor
                                                TerrestrialDeliverySystemDescriptor &d = (TerrestrialDeliverySystemDescriptor&)**desc;
                                                ePtr<eDVBFrontendParameters> feparm = new eDVBFrontendParameters;
                                                eDVBFrontendParametersTerrestrial terr;
@@ -412,6 +423,9 @@ void eDVBScan::channelDone()
                                        }
                                        case SATELLITE_DELIVERY_SYSTEM_DESCRIPTOR:
                                        {
+                                               if (system != iDVBFrontend::feSatellite)
+                                                       break; // when current locked transponder is no satellite transponder ignore this descriptor
+
                                                SatelliteDeliverySystemDescriptor &d = (SatelliteDeliverySystemDescriptor&)**desc;
                                                if (d.getFrequency() < 10000)
                                                        break;