fix calculation in calculateDifference for cable and terrestrial which should complet...
[enigma2.git] / lib / dvb / frontend.cpp
index 21de11c..c8434c0 100644 (file)
 #define BANDWIDTH_AUTO                 (BandWidth)3
 #define GUARD_INTERVAL_AUTO            (GuardInterval)4
 #define HIERARCHY_AUTO                 (Hierarchy)4
-#define constellation Constellation
-#define guard_interval guardInterval
-#define hierarchy_information HierarchyInformation
-#define code_rate_HP HP_CodeRate
-#define code_rate_LP LP_CodeRate
 #define parm.frequency parm.Frequency
 #define parm.u.qam.symbol_rate parm.u.qam.SymbolRate
 #define parm.u.qam.fec_inner parm.u.qam.FEC_inner
-#define parm.u.qam.modulation parm.u.qam.MOD
+#define parm.u.qam.modulation parm.u.qam.QAM
 #define parm.u.ofdm.bandwidth parm.u.ofdm.bandWidth
 #define parm.u.ofdm.code_rate_LP parm.u.ofdm.LP_CodeRate
 #define parm.u.ofdm.code_rate_HP parm.u.ofdm.HP_CodeRate
@@ -57,11 +52,16 @@ void eDVBFrontendParametersSatellite::set(const SatelliteDeliverySystemDescripto
        orbital_position += ((descriptor.getOrbitalPosition()) & 0xF);
        if (orbital_position && (!descriptor.getWestEastFlag()))
                orbital_position = 3600 - orbital_position;
+       eDebug("SAT freq %d, %s, pos %d, sr %d, fec %d",
+               frequency,
+               polarisation ? "hor" : "vert",
+               orbital_position,
+               symbol_rate, fec);
 }
 
 void eDVBFrontendParametersCable::set(const CableDeliverySystemDescriptor &descriptor)
 {
-       frequency = descriptor.getFrequency() * 10;
+       frequency = descriptor.getFrequency() / 10;
        symbol_rate = descriptor.getSymbolRate() * 100;
        fec_inner = descriptor.getFecInner();
        if ( fec_inner == 0xF )
@@ -70,6 +70,9 @@ void eDVBFrontendParametersCable::set(const CableDeliverySystemDescriptor &descr
        if ( modulation > 0x5 )
                modulation = Modulation::Auto;
        inversion = Inversion::Unknown;
+       eDebug("Cable freq %d, mod %d, sr %d, fec %d",
+               frequency,
+               modulation, symbol_rate, fec_inner);
 }
 
 void eDVBFrontendParametersTerrestrial::set(const TerrestrialDeliverySystemDescriptor &descriptor)
@@ -95,6 +98,9 @@ void eDVBFrontendParametersTerrestrial::set(const TerrestrialDeliverySystemDescr
        if (modulation > 2)
                modulation = Modulation::Auto;
        inversion = Inversion::Unknown;
+       eDebug("Terr freq %d, bw %d, cr_hp %d, cr_lp %d, tm_mode %d, guard %d, hierarchy %d, const %d",
+               frequency, bandwidth, code_rate_HP, code_rate_LP, transmission_mode,
+               guard_interval, hierarchy, modulation);
 }
 
 eDVBFrontendParameters::eDVBFrontendParameters(): m_type(-1)
@@ -189,7 +195,22 @@ RESULT eDVBFrontendParameters::calculateDifference(const iDVBFrontendParameters
                return 0;
        }
        case iDVBFrontend::feCable:
+               eDVBFrontendParametersCable ocable;
+               if (parm->getDVBC(ocable))
+                       return -2;
+               
+               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;
        }