2 #include <lib/dvb/sec.h>
3 #if HAVE_DVB_API_VERSION < 3
4 #include <ost/frontend.h>
5 #define INVERSION Inversion
6 #define FREQUENCY Frequency
7 #define FEC_INNER FEC_inner
8 #define SYMBOLRATE SymbolRate
10 #include <linux/dvb/frontend.h>
11 #define INVERSION inversion
12 #define FREQUENCY frequency
13 #define FEC_INNER fec_inner
14 #define SYMBOLRATE symbol_rate
16 #include <lib/base/eerror.h>
18 DEFINE_REF(eDVBSatelliteEquipmentControl);
20 eDVBSatelliteEquipmentControl::eDVBSatelliteEquipmentControl()
22 m_lnblist.push_back(eDVBSatelliteLNBParameters());
23 eDVBSatelliteLNBParameters &lnb_ref = m_lnblist.front();
24 eDVBSatelliteParameters &astra1 = lnb_ref.m_satellites[192];
25 eDVBSatelliteDiseqcParameters &diseqc_ref = astra1.m_diseqc_parameters;
26 eDVBSatelliteSwitchParameters &switch_ref = astra1.m_switch_parameters;
28 lnb_ref.m_lof_hi = 10600000;
29 lnb_ref.m_lof_lo = 9750000;
30 lnb_ref.m_lof_threshold = 11700000;
32 diseqc_ref.m_diseqc_mode = eDVBSatelliteDiseqcParameters::V1_0;
33 diseqc_ref.m_commited_cmd = eDVBSatelliteDiseqcParameters::BB;
34 diseqc_ref.m_repeats = 0;
35 diseqc_ref.m_seq_repeat = false;
36 diseqc_ref.m_swap_cmds = false;
37 diseqc_ref.m_toneburst_param = eDVBSatelliteDiseqcParameters::NO;
38 diseqc_ref.m_uncommitted_cmd = 0;
39 diseqc_ref.m_use_fast = 1;
41 switch_ref.m_22khz_signal = eDVBSatelliteSwitchParameters::HILO;
42 switch_ref.m_voltage_mode = eDVBSatelliteSwitchParameters::HV;
45 RESULT eDVBSatelliteEquipmentControl::prepare(iDVBFrontend &frontend, FRONTENDPARAMETERS &parm, eDVBFrontendParametersSatellite &sat)
47 std::list<eDVBSatelliteLNBParameters>::iterator it = m_lnblist.begin();
48 for (;it != m_lnblist.end(); ++it )
50 eDVBSatelliteLNBParameters &lnb_param = *it;
51 std::map<int, eDVBSatelliteParameters>::iterator sit =
52 lnb_param.m_satellites.find(sat.orbital_position);
53 if ( sit != lnb_param.m_satellites.end())
56 int voltage = iDVBFrontend::voltageOff;
57 int tone = iDVBFrontend::toneOff;
59 eDVBSatelliteDiseqcParameters &di_param = sit->second.m_diseqc_parameters;
60 eDVBSatelliteSwitchParameters &sw_param = sit->second.m_switch_parameters;
62 if ( sat.frequency > lnb_param.m_lof_threshold )
66 parm.FREQUENCY = sat.frequency - lnb_param.m_lof_hi;
68 parm.FREQUENCY = sat.frequency - lnb_param.m_lof_lo;
70 parm.INVERSION = (!sat.inversion) ? INVERSION_ON : INVERSION_OFF;
77 parm.u.qpsk.FEC_INNER = FEC_AUTO;
81 parm.u.qpsk.SYMBOLRATE = sat.symbol_rate;
83 if ( sw_param.m_voltage_mode == eDVBSatelliteSwitchParameters::_14V
84 || ( sat.polarisation == eDVBFrontendParametersSatellite::Polarisation::Vertical
85 && sw_param.m_voltage_mode == eDVBSatelliteSwitchParameters::HV ) )
86 voltage = iDVBFrontend::voltage13;
87 else if ( sw_param.m_voltage_mode == eDVBSatelliteSwitchParameters::_18V
88 || ( sat.polarisation == eDVBFrontendParametersSatellite::Polarisation::Horizontal
89 && sw_param.m_voltage_mode == eDVBSatelliteSwitchParameters::HV ) )
90 voltage = iDVBFrontend::voltage18;
92 if ( (sw_param.m_22khz_signal == eDVBSatelliteSwitchParameters::ON)
93 || ( sw_param.m_22khz_signal == eDVBSatelliteSwitchParameters::HILO && hi ) )
94 tone = iDVBFrontend::toneOn;
95 else if ( (sw_param.m_22khz_signal == eDVBSatelliteSwitchParameters::OFF)
96 || ( sw_param.m_22khz_signal == eDVBSatelliteSwitchParameters::HILO && !hi ) )
97 tone = iDVBFrontend::toneOff;
99 eDVBDiseqcCommand diseqc;
101 #if HAVE_DVB_API_VERSION < 3
102 diseqc.voltage = voltage;
105 frontend.setVoltage(voltage);
108 if ( di_param.m_commited_cmd < eDVBSatelliteDiseqcParameters::NO )
111 diseqc.data[0] = 0xe0;
112 diseqc.data[1] = 0x10;
113 diseqc.data[2] = 0x38;
114 diseqc.data[3] = di_param.m_commited_cmd;
119 if (sat.polarisation == eDVBFrontendParametersSatellite::Polarisation::Horizontal)
125 frontend.sendDiseqc(diseqc);
127 #if HAVE_DVB_API_VERSION > 2
128 frontend.setTone(tone);
134 eDebug("not found satellite configuration for orbital position (%d)", sat.orbital_position );