X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/967664233fc4ce992405a0e86e0c6cd594dfba57..18ee5e9c8a01b3ddd899a6aeea40ab0a6ce3da7d:/lib/dvb/frontend.cpp diff --git a/lib/dvb/frontend.cpp b/lib/dvb/frontend.cpp index 5eb61077..411e118f 100644 --- a/lib/dvb/frontend.cpp +++ b/lib/dvb/frontend.cpp @@ -9,6 +9,16 @@ #if HAVE_DVB_API_VERSION < 3 #include #include +#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 #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); @@ -361,14 +371,12 @@ RESULT eDVBFrontend::tune(const iDVBFrontendParameters &where) if (m_type == -1) return -ENODEV; -#if HAVE_DVB_API_VERSION < 3 - FrontendParameters parm; -#else - dvb_frontend_parameters parm; -#endif + FRONTENDPARAMETERS parm; feEvent(-1); + eDebug("eDVBFrontend::tune. type: %d", m_type); + switch (m_type) { case feSatellite: @@ -407,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");