[hbbtv] fixed a wrong red-button url bug.
[vuplus_dvbapp] / lib / dvb / frontend.cpp
old mode 100644 (file)
new mode 100755 (executable)
index eea5d97..21d897e
@@ -397,7 +397,6 @@ RESULT eDVBFrontendParameters::calculateDifference(const iDVBFrontendParameters
                eDVBFrontendParametersTerrestrial oterrestrial;
                if (parm->getDVBT(oterrestrial))
                        return -2;
-
                if (exact && oterrestrial.bandwidth != terrestrial.bandwidth &&
                        oterrestrial.bandwidth != eDVBFrontendParametersTerrestrial::Bandwidth_Auto &&
                        terrestrial.bandwidth != eDVBFrontendParametersTerrestrial::Bandwidth_Auto)
@@ -426,6 +425,11 @@ RESULT eDVBFrontendParameters::calculateDifference(const iDVBFrontendParameters
                        oterrestrial.code_rate_HP != eDVBFrontendParametersTerrestrial::FEC_Auto &&
                        terrestrial.code_rate_HP != eDVBFrontendParametersTerrestrial::FEC_Auto)
                        diff = 1 << 30;
+               else if (oterrestrial.system != terrestrial.system)
+                       diff = 1 << 30;
+               else if (oterrestrial.system == terrestrial.System_DVB_T2 &&
+                       oterrestrial.plpid != terrestrial.plpid)
+                       diff = 1 << 30;
                else
                        diff = abs(terrestrial.frequency - oterrestrial.frequency) / 1000;
                return 0;
@@ -2258,17 +2262,22 @@ void eDVBFrontend::setFrontend(bool recvEvents)
                }
                else if (m_type == iDVBFrontend::feCable)
                {
-                       struct dtv_property p[7];
+                       struct dtv_property p[8];
                        struct dtv_properties cmdseq;
                        cmdseq.props = p;
                        p[0].cmd = DTV_CLEAR;
-                       p[1].cmd = DTV_FREQUENCY,       p[1].u.data = parm_frequency;
-                       p[2].cmd = DTV_MODULATION,      p[2].u.data = parm_u_qam_modulation;
-                       p[3].cmd = DTV_SYMBOL_RATE,     p[3].u.data = parm_u_qam_symbol_rate;
-                       p[4].cmd = DTV_INNER_FEC,       p[4].u.data = parm_u_qam_fec_inner;
-                       p[5].cmd = DTV_INVERSION,       p[5].u.data = parm_inversion;
-                       p[6].cmd = DTV_TUNE;
-                       cmdseq.num = 7;
+#if DVB_API_VERSION > 5 || DVB_API_VERSION == 5 && DVB_API_VERSION_MINOR >= 6
+                       p[1].cmd = DTV_DELIVERY_SYSTEM, p[1].u.data = SYS_DVBC_ANNEX_A;
+#else
+                       p[1].cmd = DTV_DELIVERY_SYSTEM, p[1].u.data = SYS_DVBC_ANNEX_AC;
+#endif
+                       p[2].cmd = DTV_FREQUENCY,       p[2].u.data = parm_frequency;
+                       p[3].cmd = DTV_MODULATION,      p[3].u.data = parm_u_qam_modulation;
+                       p[4].cmd = DTV_SYMBOL_RATE,     p[4].u.data = parm_u_qam_symbol_rate;
+                       p[5].cmd = DTV_INNER_FEC,       p[5].u.data = parm_u_qam_fec_inner;
+                       p[6].cmd = DTV_INVERSION,       p[6].u.data = parm_inversion;
+                       p[7].cmd = DTV_TUNE;
+                       cmdseq.num = 8;
                        if (ioctl(m_fd, FE_SET_PROPERTY, &cmdseq) == -1)
                        {
                                perror("FE_SET_PROPERTY failed");
@@ -2749,7 +2758,7 @@ RESULT eDVBFrontend::prepare_terrestrial(const eDVBFrontendParametersTerrestrial
                parm_inversion = INVERSION_AUTO;
                break;
        }
-       eDebug("tuning to %d khz, bandwidth %d, crl %d, crh %d, modulation %d, tm %d, guard %d, hierarchy %d, inversion %d",
+       eDebug("tuning to %d khz, bandwidth %d, crl %d, crh %d, modulation %d, tm %d, guard %d, hierarchy %d, inversion %d, system %d, plpid %d",
                parm_frequency/1000,
                parm_u_ofdm_bandwidth,
                parm_u_ofdm_code_rate_LP,
@@ -2758,7 +2767,9 @@ RESULT eDVBFrontend::prepare_terrestrial(const eDVBFrontendParametersTerrestrial
                parm_u_ofdm_transmission_mode,
                parm_u_ofdm_guard_interval,
                parm_u_ofdm_hierarchy_information,
-               parm_inversion);
+               parm_inversion,
+               feparm.system,
+               feparm.plpid);
        oparm.ter = feparm;
        return 0;
 }