fix build with old api
[enigma2.git] / lib / dvb / frontend.cpp
index 690824db27a39f89da858a218d334c749c9b8fec..411e118fc91078a5bbbd42b98ebf071f8be83f8f 100644 (file)
@@ -9,6 +9,16 @@
 #if HAVE_DVB_API_VERSION < 3
 #include <ost/frontend.h>
 #include <ost/sec.h>
+#define QAM_AUTO                               (Modulation)6
+#define TRANSMISSION_MODE_AUTO (TransmitMode)2
+#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
 #else
 #include <linux/dvb/frontend.h>
 #endif
@@ -261,7 +271,7 @@ eDVBFrontend::eDVBFrontend(int adap, int fe, int &ok): m_type(-1)
                ok = 0;
                return;
        }
-       eDebug("detected %s frontend", "satellite\0cable\0    terrestrial"+feSatellite*9);
+       eDebug("detected %s frontend", "satellite\0cable\0    terrestrial"+fe_info.type*9);
        ok = 1;
 
        m_sn = new eSocketNotifier(eApp, m_fd, eSocketNotifier::Read);
@@ -365,6 +375,8 @@ RESULT eDVBFrontend::tune(const iDVBFrontendParameters &where)
 
        feEvent(-1);
        
+       eDebug("eDVBFrontend::tune. type: %d", m_type);
+       
        switch (m_type)
        {
        case feSatellite:
@@ -403,11 +415,113 @@ RESULT eDVBFrontend::tune(const iDVBFrontendParameters &where)
        {
                eDVBFrontendParametersTerrestrial feparm;
                if (where.getDVBT(feparm))
+               {
+                       eDebug("no -T data");
                        return -EINVAL;
-               eFatal("terrestrial tuning nyi");
+               }
+#if HAVE_DVB_API_VERSION < 3
+               parm.Frequency = feparm.frequency;
+#else
+               parm.frequency = feparm.frequency;
+#endif
+
+               switch (feparm.bandwidth)
+               {
+               case eDVBFrontendParametersTerrestrial::Bandwidth::Bw8MHz:
+#if HAVE_DVB_API_VERSION < 3
+                       parm.u.ofdm.bandWidth =
+#else
+                       parm.u.ofdm.bandwidth =
+#endif
+                               BANDWIDTH_8_MHZ;
+                       break;
+               case eDVBFrontendParametersTerrestrial::Bandwidth::Bw7MHz:
+#if HAVE_DVB_API_VERSION < 3
+                       parm.u.ofdm.bandWidth =
+#else
+                       parm.u.ofdm.bandwidth =
+#endif
+                               BANDWIDTH_7_MHZ;
+                       break;
+               case eDVBFrontendParametersTerrestrial::Bandwidth::Bw6MHz:
+#if HAVE_DVB_API_VERSION < 3
+                       parm.u.ofdm.bandWidth =
+#else
+                       parm.u.ofdm.bandwidth =
+#endif
+                               BANDWIDTH_6_MHZ;
+                       break;
+               case eDVBFrontendParametersTerrestrial::Bandwidth::BwAuto:
+#if HAVE_DVB_API_VERSION < 3
+                       parm.u.ofdm.bandWidth =
+#else
+                       parm.u.ofdm.bandwidth =
+#endif
+                               BANDWIDTH_AUTO;
+                       break;
+               default:
+                       eWarning("invalid OFDM bandwith");
+                       return -EINVAL;
+               }
+               
+               parm.u.ofdm.code_rate_HP = FEC_AUTO;
+               parm.u.ofdm.code_rate_LP = FEC_AUTO;
+               
+               switch (feparm.modulation)
+               {
+               case eDVBFrontendParametersTerrestrial::Modulation::QPSK:
+                       parm.u.ofdm.constellation = QPSK;
+                       break;
+               case eDVBFrontendParametersTerrestrial::Modulation::QAM16:
+                       parm.u.ofdm.constellation = QAM_16;
+                       break;
+               case eDVBFrontendParametersTerrestrial::Modulation::Auto:
+                       parm.u.ofdm.constellation = QAM_AUTO;
+                       break;
+               }
+               
+               switch (feparm.transmission_mode)
+               {
+               case eDVBFrontendParametersTerrestrial::TransmissionMode::TM2k:
+#if HAVE_DVB_API_VERSION < 3
+                       parm.u.ofdm.TransmissionMode =
+#else
+                       parm.u.ofdm.transmission_mode =
+#endif
+                               TRANSMISSION_MODE_2K;
+                       break;
+               case eDVBFrontendParametersTerrestrial::TransmissionMode::TM8k:
+#if HAVE_DVB_API_VERSION < 3
+                       parm.u.ofdm.TransmissionMode =
+#else
+                       parm.u.ofdm.transmission_mode =
+#endif
+                               TRANSMISSION_MODE_8K;
+                       break;
+               case eDVBFrontendParametersTerrestrial::TransmissionMode::TMAuto:
+#if HAVE_DVB_API_VERSION < 3
+                       parm.u.ofdm.TransmissionMode =
+#else
+                       parm.u.ofdm.transmission_mode =
+#endif
+                               TRANSMISSION_MODE_AUTO;
+                       break;
+               }
+               
+               parm.u.ofdm.guard_interval = GUARD_INTERVAL_AUTO;
+               parm.u.ofdm.hierarchy_information = HIERARCHY_AUTO;
+#if HAVE_DVB_API_VERSION < 3
+               parm.Inversion =
+#else
+               parm.inversion =
+#endif
+                       INVERSION_AUTO;
+               break;
        }
        }
        
+       eDebug("setting frontend..\n");
+       
        if (ioctl(m_fd, FE_SET_FRONTEND, &parm) == -1)
        {
                perror("FE_SET_FRONTEND failed");