make enigma2 ready for dvb-s2
authorAndreas Monzner <andreas.monzner@multimedia-labs.de>
Sat, 13 May 2006 16:17:19 +0000 (16:17 +0000)
committerAndreas Monzner <andreas.monzner@multimedia-labs.de>
Sat, 13 May 2006 16:17:19 +0000 (16:17 +0000)
lib/dvb/db.cpp
lib/dvb/frontend.cpp
lib/dvb/frontendparms.h

index 65b378627dae0b9a914fa0fe933cc685877e58d9..22b6267b9b0c7ca428a8ff2aa97f868d8f7751e4 100644 (file)
@@ -300,8 +300,11 @@ void eDVBDB::reloadServicelist()
                        if (line[1]=='s')
                        {
                                eDVBFrontendParametersSatellite sat;
                        if (line[1]=='s')
                        {
                                eDVBFrontendParametersSatellite sat;
-                               int frequency, symbol_rate, polarisation, fec, orbital_position, inversion;
-                               sscanf(line+2, "%d:%d:%d:%d:%d:%d", &frequency, &symbol_rate, &polarisation, &fec, &orbital_position, &inversion);
+                               int frequency, symbol_rate, polarisation, fec, orbital_position, inversion,
+                                       system=eDVBFrontendParametersSatellite::System::DVB_S,
+                                       modulation=eDVBFrontendParametersSatellite::Modulation::QPSK,
+                                       rolloff=eDVBFrontendParametersSatellite::RollOff::alpha_auto;
+                               sscanf(line+2, "%d:%d:%d:%d:%d:%d:%d:%d:%d", &frequency, &symbol_rate, &polarisation, &fec, &orbital_position, &inversion, &system, &modulation, &rolloff);
                                sat.frequency = frequency;
                                sat.symbol_rate = symbol_rate;
                                sat.polarisation = polarisation;
                                sat.frequency = frequency;
                                sat.symbol_rate = symbol_rate;
                                sat.polarisation = polarisation;
@@ -309,6 +312,9 @@ void eDVBDB::reloadServicelist()
                                sat.orbital_position =
                                        orbital_position < 0 ? orbital_position + 3600 : orbital_position;
                                sat.inversion = inversion;
                                sat.orbital_position =
                                        orbital_position < 0 ? orbital_position + 3600 : orbital_position;
                                sat.inversion = inversion;
+                               sat.system = system;
+                               sat.modulation = modulation;
+                               sat.roll_off = rolloff;
                                feparm->setDVBS(sat);
                        } else if (line[1]=='t')
                        {
                                feparm->setDVBS(sat);
                        } else if (line[1]=='t')
                        {
@@ -452,11 +458,25 @@ void eDVBDB::saveServicelist()
                eDVBFrontendParametersCable cab;
                if (!ch.m_frontendParameters->getDVBS(sat))
                {
                eDVBFrontendParametersCable cab;
                if (!ch.m_frontendParameters->getDVBS(sat))
                {
-                       fprintf(f, "\ts %d:%d:%d:%d:%d:%d\n",
-                               sat.frequency, sat.symbol_rate,
-                               sat.polarisation, sat.fec,
-                               sat.orbital_position > 1800 ? sat.orbital_position - 3600 : sat.orbital_position,
-                               sat.inversion);
+                       if (sat.system == eDVBFrontendParametersSatellite::System::DVB_S2)
+                       {
+                               fprintf(f, "\ts %d:%d:%d:%d:%d:%d:%d:%d:%d\n",
+                                       sat.frequency, sat.symbol_rate,
+                                       sat.polarisation, sat.fec,
+                                       sat.orbital_position > 1800 ? sat.orbital_position - 3600 : sat.orbital_position,
+                                       sat.inversion,
+                                       sat.system,
+                                       sat.modulation,
+                                       sat.roll_off);
+                       }
+                       else
+                       {
+                               fprintf(f, "\ts %d:%d:%d:%d:%d:%d\n",
+                                       sat.frequency, sat.symbol_rate,
+                                       sat.polarisation, sat.fec,
+                                       sat.orbital_position > 1800 ? sat.orbital_position - 3600 : sat.orbital_position,
+                                       sat.inversion);
+                       }
                }
                if (!ch.m_frontendParameters->getDVBT(ter))
                {
                }
                if (!ch.m_frontendParameters->getDVBT(ter))
                {
index 063cbe078b9d110ed202d74d6a20a6b899f5cf5c..c615eb5026ea8884693fbb34849ae6b94620e7e0 100644 (file)
 #define parm_u_ofdm_transmission_mode parm.u.ofdm.transmission_mode
 #define parm_u_ofdm_guard_interval parm.u.ofdm.guard_interval
 #define parm_u_ofdm_hierarchy_information parm.u.ofdm.hierarchy_information
 #define parm_u_ofdm_transmission_mode parm.u.ofdm.transmission_mode
 #define parm_u_ofdm_guard_interval parm.u.ofdm.guard_interval
 #define parm_u_ofdm_hierarchy_information parm.u.ofdm.hierarchy_information
+#ifdef FEC_9_10
+       #warning "FEC_9_10 already exist in dvb api ... it seems it is now ready for DVB-S2"
+#else
+       #define FEC_9_10 FEC_AUTO+1
+#endif
 #endif
 
 #include <dvbsi++/satellite_delivery_system_descriptor.h>
 #endif
 
 #include <dvbsi++/satellite_delivery_system_descriptor.h>
@@ -99,8 +104,8 @@ void eDVBFrontendParametersSatellite::set(const SatelliteDeliverySystemDescripto
        symbol_rate  = descriptor.getSymbolRate() * 100;
        polarisation = descriptor.getPolarization();
        fec = descriptor.getFecInner();
        symbol_rate  = descriptor.getSymbolRate() * 100;
        polarisation = descriptor.getPolarization();
        fec = descriptor.getFecInner();
-       if ( fec == 0xF )
-               fec = FEC::fNone;
+       if ( fec != FEC::fNone && fec > FEC::f9_10 )
+               fec = FEC::fAuto;
        inversion = Inversion::Unknown;
        orbital_position  = ((descriptor.getOrbitalPosition() >> 12) & 0xF) * 1000;
        orbital_position += ((descriptor.getOrbitalPosition() >> 8) & 0xF) * 100;
        inversion = Inversion::Unknown;
        orbital_position  = ((descriptor.getOrbitalPosition() >> 12) & 0xF) * 1000;
        orbital_position += ((descriptor.getOrbitalPosition() >> 8) & 0xF) * 100;
@@ -108,11 +113,32 @@ void eDVBFrontendParametersSatellite::set(const SatelliteDeliverySystemDescripto
        orbital_position += ((descriptor.getOrbitalPosition()) & 0xF);
        if (orbital_position && (!descriptor.getWestEastFlag()))
                orbital_position = 3600 - orbital_position;
        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);
+       system = descriptor.getModulationSystem();
+       modulation = descriptor.getModulation();
+       if (system == System::DVB_S && modulation == Modulation::M8PSK)
+       {
+               eDebug("satellite_delivery_descriptor non valid modulation type.. force QPSK");
+               modulation=QPSK;
+       }
+       roll_off = descriptor.getRollOff();
+       if (system == System::DVB_S2)
+       {
+               eDebug("SAT DVB-S2 freq %d, %s, pos %d, sr %d, fec %d, modulation %d, roll_off %d",
+                       frequency,
+                       polarisation ? "hor" : "vert",
+                       orbital_position,
+                       symbol_rate, fec,
+                       modulation,
+                       roll_off);
+       }
+       else
+       {
+               eDebug("SAT DVB-S freq %d, %s, pos %d, sr %d, fec %d",
+                       frequency,
+                       polarisation ? "hor" : "vert",
+                       orbital_position,
+                       symbol_rate, fec);
+       }
 }
 
 void eDVBFrontendParametersCable::set(const CableDeliverySystemDescriptor &descriptor)
 }
 
 void eDVBFrontendParametersCable::set(const CableDeliverySystemDescriptor &descriptor)
@@ -1276,11 +1302,12 @@ RESULT eDVBFrontend::prepare_sat(const eDVBFrontendParametersSatellite &feparm)
                switch (feparm.fec)
                {
                        default:
                switch (feparm.fec)
                {
                        default:
-                       case eDVBFrontendParametersSatellite::FEC::fNone:
-                               eDebug("no fec set.. assume auto");
+                               eDebug("no valid fec set.. assume auto");
                        case eDVBFrontendParametersSatellite::FEC::fAuto:
                                parm_u_qpsk_fec_inner = FEC_AUTO;
                                break;
                        case eDVBFrontendParametersSatellite::FEC::fAuto:
                                parm_u_qpsk_fec_inner = FEC_AUTO;
                                break;
+                       case eDVBFrontendParametersSatellite::FEC::fNone:
+                               parm_u_qpsk_fec_inner = FEC_NONE;
                        case eDVBFrontendParametersSatellite::FEC::f1_2:
                                parm_u_qpsk_fec_inner = FEC_1_2;
                                break;
                        case eDVBFrontendParametersSatellite::FEC::f1_2:
                                parm_u_qpsk_fec_inner = FEC_1_2;
                                break;
@@ -1296,6 +1323,11 @@ RESULT eDVBFrontend::prepare_sat(const eDVBFrontendParametersSatellite &feparm)
                        case eDVBFrontendParametersSatellite::FEC::f7_8:
                                parm_u_qpsk_fec_inner = FEC_7_8;
                                break;
                        case eDVBFrontendParametersSatellite::FEC::f7_8:
                                parm_u_qpsk_fec_inner = FEC_7_8;
                                break;
+#if HAVE_DVB_API_VERSION >= 3
+                       case eDVBFrontendParametersSatellite::FEC::f9_10:
+                               parm_u_qpsk_fec_inner = FEC_9_10;
+                               break;
+#endif
                }
                // FIXME !!! get frequency range from tuner
                if ( parm_frequency < 900000 || parm_frequency > 2200000 )
                }
                // FIXME !!! get frequency range from tuner
                if ( parm_frequency < 900000 || parm_frequency > 2200000 )
index d38e25189f61db0a4f45061bd29fce358f00877c..86aea7cf5828d6313de7338a112deef66dca00ea 100644 (file)
@@ -25,12 +25,30 @@ struct eDVBFrontendParametersSatellite
        struct FEC
        {
                enum {
        struct FEC
        {
                enum {
-                       fAuto, f1_2, f2_3, f3_4, f5_6, f7_8, f8_9, fNone=15
+                       fAuto, f1_2, f2_3, f3_4, f5_6, f7_8, f8_9, f3_5, f4_5, f9_10, fNone=15
+               };
+       };
+       struct System
+       {
+               enum {
+                       DVB_S, DVB_S2
+               };
+       };
+       struct Modulation
+       {
+               enum {
+                       Auto, QPSK, M8PSK, QAM_16
+               };
+       };
+       struct RollOff  // dvb-s2
+       {
+               enum {
+                       alpha_0_35, alpha_0_25, alpha_0_20, alpha_auto
                };
        };
        bool no_rotor_command_on_tune;
        unsigned int frequency, symbol_rate;
                };
        };
        bool no_rotor_command_on_tune;
        unsigned int frequency, symbol_rate;
-       int polarisation, fec, inversion, orbital_position;
+       int polarisation, fec, inversion, orbital_position, system, modulation, roll_off;
 };
 
 struct eDVBFrontendParametersCable
 };
 
 struct eDVBFrontendParametersCable