- improve record support
[enigma2.git] / lib / dvb / frontend.cpp
index 1322ea23da5f0ab81cd71cb19ce0a362a54bda0f..6e8bcaa7fd1b5afc58ce1a1a59b741efe1042c16 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
@@ -409,21 +419,45 @@ RESULT eDVBFrontend::tune(const iDVBFrontendParameters &where)
                        eDebug("no -T data");
                        return -EINVAL;
                }
+#if HAVE_DVB_API_VERSION < 3
+               parm.Frequency = feparm.frequency;
+#else
                parm.frequency = feparm.frequency;
-               
+#endif
+
                switch (feparm.bandwidth)
                {
                case eDVBFrontendParametersTerrestrial::Bandwidth::Bw8MHz:
-                       parm.u.ofdm.bandwidth = BANDWIDTH_8_MHZ;
+#if HAVE_DVB_API_VERSION < 3
+                       parm.u.ofdm.bandWidth =
+#else
+                       parm.u.ofdm.bandwidth =
+#endif
+                               BANDWIDTH_8_MHZ;
                        break;
                case eDVBFrontendParametersTerrestrial::Bandwidth::Bw7MHz:
-                       parm.u.ofdm.bandwidth = BANDWIDTH_7_MHZ;
+#if HAVE_DVB_API_VERSION < 3
+                       parm.u.ofdm.bandWidth =
+#else
+                       parm.u.ofdm.bandwidth =
+#endif
+                               BANDWIDTH_7_MHZ;
                        break;
                case eDVBFrontendParametersTerrestrial::Bandwidth::Bw6MHz:
-                       parm.u.ofdm.bandwidth = BANDWIDTH_6_MHZ;
+#if HAVE_DVB_API_VERSION < 3
+                       parm.u.ofdm.bandWidth =
+#else
+                       parm.u.ofdm.bandwidth =
+#endif
+                               BANDWIDTH_6_MHZ;
                        break;
                case eDVBFrontendParametersTerrestrial::Bandwidth::BwAuto:
-                       parm.u.ofdm.bandwidth = BANDWIDTH_AUTO;
+#if HAVE_DVB_API_VERSION < 3
+                       parm.u.ofdm.bandWidth =
+#else
+                       parm.u.ofdm.bandwidth =
+#endif
+                               BANDWIDTH_AUTO;
                        break;
                default:
                        eWarning("invalid OFDM bandwith");
@@ -449,19 +483,39 @@ RESULT eDVBFrontend::tune(const iDVBFrontendParameters &where)
                switch (feparm.transmission_mode)
                {
                case eDVBFrontendParametersTerrestrial::TransmissionMode::TM2k:
-                       parm.u.ofdm.transmission_mode = TRANSMISSION_MODE_2K;
+#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:
-                       parm.u.ofdm.transmission_mode = TRANSMISSION_MODE_8K;
+#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:
-                       parm.u.ofdm.transmission_mode = TRANSMISSION_MODE_AUTO;
+#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;
-               parm.inversion = INVERSION_AUTO;
+#if HAVE_DVB_API_VERSION < 3
+               parm.Inversion =
+#else
+               parm.inversion =
+#endif
+                       INVERSION_AUTO;
                break;
        }
        }
@@ -559,27 +613,42 @@ RESULT eDVBFrontend::sendDiseqc(const eDVBDiseqcCommand &diseqc)
        secCmdSequence seq;
        secCommand cmd;
 
-       cmd.type = SEC_CMDTYPE_DISEQC_RAW;
-       cmd.u.diseqc.cmdtype = diseqc.data[0];
-       eDebug("cmdtype is %02x", diseqc.data[0]);
-       cmd.u.diseqc.addr = diseqc.data[1];
-       eDebug("cmdaddr is %02x", diseqc.data[1]);
-       cmd.u.diseqc.cmd = diseqc.data[2];
-       eDebug("cmd is %02x", diseqc.data[2]);
-       cmd.u.diseqc.numParams = diseqc.len-3;
-       eDebug("numparams %d", diseqc.len-3);
-
-       memcpy(cmd.u.diseqc.params, diseqc.data+3, diseqc.len-3);
-       for (int i=0; i < diseqc.len-3; ++i )
-               eDebugNoNewLine("%02x ", diseqc.data[3+i]);
-       eDebug("");
-
-       seq.continuousTone = SEC_TONE_OFF;
-       seq.voltage = SEC_VOLTAGE_13;
+       if ( len > 3 )
+       {
+               seq.numCommands=1;
+               cmd.type = SEC_CMDTYPE_DISEQC_RAW;
+               cmd.u.diseqc.cmdtype = diseqc.data[0];
+               eDebug("cmdtype is %02x", diseqc.data[0]);
+               cmd.u.diseqc.addr = diseqc.data[1];
+               eDebug("cmdaddr is %02x", diseqc.data[1]);
+               cmd.u.diseqc.cmd = diseqc.data[2];
+               eDebug("cmd is %02x", diseqc.data[2]);
+               cmd.u.diseqc.numParams = diseqc.len-3;
+               eDebug("numparams %d", diseqc.len-3);
+
+               memcpy(cmd.u.diseqc.params, diseqc.data+3, diseqc.len-3);
+               for (int i=0; i < diseqc.len-3; ++i )
+                       eDebugNoNewLine("%02x ", diseqc.data[3+i]);
+               eDebug("");
+       }
+       else
+               seq.numCommands=0;
+
+       seq.continuousTone = diseqc.tone == toneOn ? SEC_TONE_ON : SEC_TONE_OFF;
+       switch ( diseqc.voltage )
+       {
+               case voltageOff:
+                       seq.voltage = SEC_VOLTAGE_OFF;
+                       break;
+               case voltage13:
+                       seq.voltage = SEC_VOLTAGE_13;
+                       break;
+               case voltage18:
+                       seq.voltage = SEC_VOLTAGE_18;
+                       break;
+       }
        seq.miniCommand = SEC_MINI_NONE;
        seq.commands=&cmd;
-       seq.numCommands=1;
-
 
        if ( ioctl(m_secfd, SEC_SEND_SEQUENCE, &seq) < 0 )
        {
@@ -588,6 +657,8 @@ RESULT eDVBFrontend::sendDiseqc(const eDVBDiseqcCommand &diseqc)
        }
        return 0;
 #else
+       if ( !diseqc.len )
+               return 0;
        struct dvb_diseqc_master_cmd cmd;
        if (::ioctl(m_fd, FE_SET_TONE, SEC_TONE_OFF))
                return -EINVAL;