correct calculation of differences for cable params
[enigma2.git] / lib / dvb / frontend.cpp
index 1067a017d4f87eb609adc98391d1c99c10b8e8cd..a7f0c70e7e49b149e18af03c2e2d469c4a10c25f 100644 (file)
@@ -195,7 +195,29 @@ RESULT eDVBFrontendParameters::calculateDifference(const iDVBFrontendParameters
                return 0;
        }
        case iDVBFrontend::feCable:
+               eDVBFrontendParametersCable ocable;
+               if (parm->getDVBC(ocable))
+                       return -2;
+               
+               if (cable.modulation != ocable.modulation && cable.modulation != eDVBFrontendParametersCable::Modulation::Auto && ocable.modulation != eDVBFrontendParametersCable::Modulation::Auto)
+                       diff = 1 << 29;
+               else if (cable.inversion != ocable.inversion && cable.inversion != eDVBFrontendParametersCable::Inversion::Unknown && ocable.inversion != eDVBFrontendParametersCable::Inversion::Unknown)
+                       diff = 1 << 28;
+               else
+               {
+                       diff = abs(cable.frequency - ocable.frequency);
+                       diff += abs(cable.symbol_rate - ocable.symbol_rate);
+               }
+               
+               return 0;
        case iDVBFrontend::feTerrestrial:
+               eDVBFrontendParametersTerrestrial oterrestrial;
+               if (parm->getDVBT(oterrestrial))
+                       return -2;
+               
+               diff = abs(terrestrial.frequency - oterrestrial.frequency);
+
+               return 0;
        default:
                return -1;
        }