+RESULT eDVBFrontend::prepare_sat(const eDVBFrontendParametersSatellite &feparm, unsigned int tunetimeout)
+{
+ int res;
+ if (!m_sec)
+ {
+ eWarning("no SEC module active!");
+ return -ENOENT;
+ }
+ res = m_sec->prepare(*this, parm, feparm, 1 << m_slotid, tunetimeout);
+ if (!res)
+ {
+#if HAVE_DVB_API_VERSION >= 3
+ eDebugNoSimulate("prepare_sat System %d Freq %d Pol %d SR %d INV %d FEC %d orbpos %d system %d modulation %d pilot %d, rolloff %d",
+ feparm.system,
+ feparm.frequency,
+ feparm.polarisation,
+ feparm.symbol_rate,
+ feparm.inversion,
+ feparm.fec,
+ feparm.orbital_position,
+ feparm.system,
+ feparm.modulation,
+ feparm.pilot,
+ feparm.rolloff);
+#else
+ eDebugNoSimulate("prepare_sat System %d Freq %d Pol %d SR %d INV %d FEC %d orbpos %d",
+ feparm.system,
+ feparm.frequency,
+ feparm.polarisation,
+ feparm.symbol_rate,
+ feparm.inversion,
+ feparm.fec,
+ feparm.orbital_position);
+#endif
+ m_cur_pol = feparm.polarisation;
+ m_cur_orbpos = feparm.orbital_position;
+ parm_u_qpsk_symbol_rate = feparm.symbol_rate;
+ switch (feparm.inversion)
+ {
+ case eDVBFrontendParametersSatellite::Inversion_On:
+ parm_inversion = INVERSION_ON;
+ break;
+ case eDVBFrontendParametersSatellite::Inversion_Off:
+ parm_inversion = INVERSION_OFF;
+ break;
+ default:
+ case eDVBFrontendParametersSatellite::Inversion_Unknown:
+ parm_inversion = INVERSION_AUTO;
+ break;
+ }
+ if (feparm.system == eDVBFrontendParametersSatellite::System_DVB_S)
+ switch (feparm.fec)
+ {
+ case eDVBFrontendParametersSatellite::FEC_None:
+ parm_u_qpsk_fec_inner = FEC_NONE;
+ break;
+ case eDVBFrontendParametersSatellite::FEC_1_2:
+ parm_u_qpsk_fec_inner = FEC_1_2;
+ break;
+ case eDVBFrontendParametersSatellite::FEC_2_3:
+ parm_u_qpsk_fec_inner = FEC_2_3;
+ break;
+ case eDVBFrontendParametersSatellite::FEC_3_4:
+ parm_u_qpsk_fec_inner = FEC_3_4;
+ break;
+ case eDVBFrontendParametersSatellite::FEC_5_6:
+ parm_u_qpsk_fec_inner = FEC_5_6;
+ break;
+ case eDVBFrontendParametersSatellite::FEC_7_8:
+ parm_u_qpsk_fec_inner = FEC_7_8;
+ break;
+ default:
+ eDebugNoSimulate("no valid fec for DVB-S set.. assume auto");
+ case eDVBFrontendParametersSatellite::FEC_Auto:
+ parm_u_qpsk_fec_inner = FEC_AUTO;
+ break;
+ }
+#if HAVE_DVB_API_VERSION >= 3
+ else // DVB_S2
+ {
+ switch (feparm.fec)
+ {
+ case eDVBFrontendParametersSatellite::FEC_1_2:
+ parm_u_qpsk_fec_inner = FEC_S2_QPSK_1_2;
+ break;
+ case eDVBFrontendParametersSatellite::FEC_2_3:
+ parm_u_qpsk_fec_inner = FEC_S2_QPSK_2_3;
+ break;
+ case eDVBFrontendParametersSatellite::FEC_3_4:
+ parm_u_qpsk_fec_inner = FEC_S2_QPSK_3_4;
+ break;
+ case eDVBFrontendParametersSatellite::FEC_3_5:
+ parm_u_qpsk_fec_inner = FEC_S2_QPSK_3_5;
+ break;
+ case eDVBFrontendParametersSatellite::FEC_4_5:
+ parm_u_qpsk_fec_inner = FEC_S2_QPSK_4_5;
+ break;
+ case eDVBFrontendParametersSatellite::FEC_5_6:
+ parm_u_qpsk_fec_inner = FEC_S2_QPSK_5_6;
+ break;
+ case eDVBFrontendParametersSatellite::FEC_7_8:
+ parm_u_qpsk_fec_inner = FEC_S2_QPSK_7_8;
+ break;
+ case eDVBFrontendParametersSatellite::FEC_8_9:
+ parm_u_qpsk_fec_inner = FEC_S2_QPSK_8_9;
+ break;
+ case eDVBFrontendParametersSatellite::FEC_9_10:
+ parm_u_qpsk_fec_inner = FEC_S2_QPSK_9_10;
+ break;
+ default:
+ eDebugNoSimulate("no valid fec for DVB-S2 set.. abort !!");
+ return -EINVAL;
+ }
+ parm_inversion |= (feparm.rolloff << 2); // Hack.. we use bit 2..3 of inversion param for rolloff
+ parm_inversion |= (feparm.pilot << 4); // Hack.. we use bit 4..5 of inversion param for pilot
+ if (feparm.modulation == eDVBFrontendParametersSatellite::Modulation_8PSK) {
+ parm_u_qpsk_fec_inner = (fe_code_rate_t)((int)parm_u_qpsk_fec_inner+9);
+ // 8PSK fec driver values are decimal 9 bigger
+ }
+ }
+#endif
+ // FIXME !!! get frequency range from tuner
+ if ( parm_frequency < 900000 || parm_frequency > 2200000 )
+ {
+ eDebugNoSimulate("%d mhz out of tuner range.. dont tune", parm_frequency/1000);
+ return -EINVAL;
+ }
+ eDebugNoSimulate("tuning to %d mhz", parm_frequency/1000);
+ }
+ return res;
+}
+
+RESULT eDVBFrontend::prepare_cable(const eDVBFrontendParametersCable &feparm)
+{
+#if HAVE_DVB_API_VERSION < 3
+ parm_frequency = feparm.frequency;
+#else
+ parm_frequency = feparm.frequency * 1000;
+#endif
+ parm_u_qam_symbol_rate = feparm.symbol_rate;
+ switch (feparm.modulation)
+ {
+ case eDVBFrontendParametersCable::Modulation_QAM16:
+ parm_u_qam_modulation = QAM_16;
+ break;
+ case eDVBFrontendParametersCable::Modulation_QAM32:
+ parm_u_qam_modulation = QAM_32;
+ break;
+ case eDVBFrontendParametersCable::Modulation_QAM64:
+ parm_u_qam_modulation = QAM_64;
+ break;
+ case eDVBFrontendParametersCable::Modulation_QAM128:
+ parm_u_qam_modulation = QAM_128;
+ break;
+ case eDVBFrontendParametersCable::Modulation_QAM256:
+ parm_u_qam_modulation = QAM_256;
+ break;
+ default:
+ case eDVBFrontendParametersCable::Modulation_Auto:
+ parm_u_qam_modulation = QAM_AUTO;
+ break;
+ }
+ switch (feparm.inversion)
+ {
+ case eDVBFrontendParametersCable::Inversion_On:
+ parm_inversion = INVERSION_ON;
+ break;
+ case eDVBFrontendParametersCable::Inversion_Off:
+ parm_inversion = INVERSION_OFF;
+ break;
+ default:
+ case eDVBFrontendParametersCable::Inversion_Unknown:
+ parm_inversion = INVERSION_AUTO;
+ break;
+ }
+ switch (feparm.fec_inner)
+ {
+ case eDVBFrontendParametersCable::FEC_None:
+ parm_u_qam_fec_inner = FEC_NONE;
+ break;
+ case eDVBFrontendParametersCable::FEC_1_2:
+ parm_u_qam_fec_inner = FEC_1_2;
+ break;
+ case eDVBFrontendParametersCable::FEC_2_3:
+ parm_u_qam_fec_inner = FEC_2_3;
+ break;
+ case eDVBFrontendParametersCable::FEC_3_4:
+ parm_u_qam_fec_inner = FEC_3_4;
+ break;
+ case eDVBFrontendParametersCable::FEC_5_6:
+ parm_u_qam_fec_inner = FEC_5_6;
+ break;
+ case eDVBFrontendParametersCable::FEC_7_8:
+ parm_u_qam_fec_inner = FEC_7_8;
+ break;
+#if HAVE_DVB_API_VERSION >= 3
+ case eDVBFrontendParametersCable::FEC_8_9:
+ parm_u_qam_fec_inner = FEC_8_9;
+ break;
+#endif
+ default:
+ case eDVBFrontendParametersCable::FEC_Auto:
+ parm_u_qam_fec_inner = FEC_AUTO;
+ break;
+ }
+ eDebugNoSimulate("tuning to %d khz, sr %d, fec %d, modulation %d, inversion %d",
+ parm_frequency/1000,
+ parm_u_qam_symbol_rate,
+ parm_u_qam_fec_inner,
+ parm_u_qam_modulation,
+ parm_inversion);
+ return 0;
+}
+
+RESULT eDVBFrontend::prepare_terrestrial(const eDVBFrontendParametersTerrestrial &feparm)
+{
+ parm_frequency = feparm.frequency;
+
+ switch (feparm.bandwidth)
+ {
+ case eDVBFrontendParametersTerrestrial::Bandwidth_8MHz:
+ parm_u_ofdm_bandwidth = BANDWIDTH_8_MHZ;
+ break;
+ case eDVBFrontendParametersTerrestrial::Bandwidth_7MHz:
+ parm_u_ofdm_bandwidth = BANDWIDTH_7_MHZ;
+ break;
+ case eDVBFrontendParametersTerrestrial::Bandwidth_6MHz:
+ parm_u_ofdm_bandwidth = BANDWIDTH_6_MHZ;
+ break;
+ default:
+ case eDVBFrontendParametersTerrestrial::Bandwidth_Auto:
+ parm_u_ofdm_bandwidth = BANDWIDTH_AUTO;
+ break;
+ }
+ switch (feparm.code_rate_LP)
+ {
+ case eDVBFrontendParametersTerrestrial::FEC_1_2:
+ parm_u_ofdm_code_rate_LP = FEC_1_2;
+ break;
+ case eDVBFrontendParametersTerrestrial::FEC_2_3:
+ parm_u_ofdm_code_rate_LP = FEC_2_3;
+ break;
+ case eDVBFrontendParametersTerrestrial::FEC_3_4:
+ parm_u_ofdm_code_rate_LP = FEC_3_4;
+ break;
+ case eDVBFrontendParametersTerrestrial::FEC_5_6:
+ parm_u_ofdm_code_rate_LP = FEC_5_6;
+ break;
+ case eDVBFrontendParametersTerrestrial::FEC_7_8:
+ parm_u_ofdm_code_rate_LP = FEC_7_8;
+ break;
+ default:
+ case eDVBFrontendParametersTerrestrial::FEC_Auto:
+ parm_u_ofdm_code_rate_LP = FEC_AUTO;
+ break;
+ }
+ switch (feparm.code_rate_HP)
+ {
+ case eDVBFrontendParametersTerrestrial::FEC_1_2:
+ parm_u_ofdm_code_rate_HP = FEC_1_2;
+ break;
+ case eDVBFrontendParametersTerrestrial::FEC_2_3:
+ parm_u_ofdm_code_rate_HP = FEC_2_3;
+ break;
+ case eDVBFrontendParametersTerrestrial::FEC_3_4:
+ parm_u_ofdm_code_rate_HP = FEC_3_4;
+ break;
+ case eDVBFrontendParametersTerrestrial::FEC_5_6:
+ parm_u_ofdm_code_rate_HP = FEC_5_6;
+ break;
+ case eDVBFrontendParametersTerrestrial::FEC_7_8:
+ parm_u_ofdm_code_rate_HP = FEC_7_8;
+ break;
+ default:
+ case eDVBFrontendParametersTerrestrial::FEC_Auto:
+ parm_u_ofdm_code_rate_HP = FEC_AUTO;
+ break;
+ }
+ 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_QAM64:
+ parm_u_ofdm_constellation = QAM_64;
+ break;
+ default:
+ case eDVBFrontendParametersTerrestrial::Modulation_Auto:
+ parm_u_ofdm_constellation = QAM_AUTO;
+ break;
+ }
+ switch (feparm.transmission_mode)
+ {
+ case eDVBFrontendParametersTerrestrial::TransmissionMode_2k:
+ parm_u_ofdm_transmission_mode = TRANSMISSION_MODE_2K;
+ break;
+ case eDVBFrontendParametersTerrestrial::TransmissionMode_8k:
+ parm_u_ofdm_transmission_mode = TRANSMISSION_MODE_8K;
+ break;
+ default:
+ case eDVBFrontendParametersTerrestrial::TransmissionMode_Auto:
+ parm_u_ofdm_transmission_mode = TRANSMISSION_MODE_AUTO;
+ break;
+ }
+ switch (feparm.guard_interval)
+ {
+ case eDVBFrontendParametersTerrestrial::GuardInterval_1_32:
+ parm_u_ofdm_guard_interval = GUARD_INTERVAL_1_32;
+ break;
+ case eDVBFrontendParametersTerrestrial::GuardInterval_1_16:
+ parm_u_ofdm_guard_interval = GUARD_INTERVAL_1_16;
+ break;
+ case eDVBFrontendParametersTerrestrial::GuardInterval_1_8:
+ parm_u_ofdm_guard_interval = GUARD_INTERVAL_1_8;
+ break;
+ case eDVBFrontendParametersTerrestrial::GuardInterval_1_4:
+ parm_u_ofdm_guard_interval = GUARD_INTERVAL_1_4;
+ break;
+ default:
+ case eDVBFrontendParametersTerrestrial::GuardInterval_Auto:
+ parm_u_ofdm_guard_interval = GUARD_INTERVAL_AUTO;
+ break;
+ }
+ switch (feparm.hierarchy)
+ {
+ case eDVBFrontendParametersTerrestrial::Hierarchy_None:
+ parm_u_ofdm_hierarchy_information = HIERARCHY_NONE;
+ break;
+ case eDVBFrontendParametersTerrestrial::Hierarchy_1:
+ parm_u_ofdm_hierarchy_information = HIERARCHY_1;
+ break;
+ case eDVBFrontendParametersTerrestrial::Hierarchy_2:
+ parm_u_ofdm_hierarchy_information = HIERARCHY_2;
+ break;
+ case eDVBFrontendParametersTerrestrial::Hierarchy_4:
+ parm_u_ofdm_hierarchy_information = HIERARCHY_4;
+ break;
+ default:
+ case eDVBFrontendParametersTerrestrial::Hierarchy_Auto:
+ parm_u_ofdm_hierarchy_information = HIERARCHY_AUTO;
+ break;
+ }
+ switch (feparm.inversion)
+ {
+ case eDVBFrontendParametersTerrestrial::Inversion_On:
+ parm_inversion = INVERSION_ON;
+ break;
+ case eDVBFrontendParametersTerrestrial::Inversion_Off:
+ parm_inversion = INVERSION_OFF;
+ break;
+ default:
+ case eDVBFrontendParametersTerrestrial::Inversion_Unknown:
+ parm_inversion = INVERSION_AUTO;
+ break;
+ }
+ return 0;
+}
+