blob: 1ec1d5a22aa961070fe551ca3e6a6d23a8e469d2 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
|
#include <config.h>
#include <lib/dvb/sec.h>
#if HAVE_DVB_API_VERSION < 3
#include <ost/frontend.h>
#else
#include <linux/dvb/frontend.h>
#endif
#include <lib/base/eerror.h>
DEFINE_REF(eDVBSatelliteEquipmentControl);
eDVBSatelliteEquipmentControl::eDVBSatelliteEquipmentControl()
{
}
#if HAVE_DVB_API_VERSION < 3
RESULT eDVBSatelliteEquipmentControl::prepare(iDVBFrontend &frontend, FrontendParameters &parm, eDVBFrontendParametersSatellite &sat)
#else
RESULT eDVBSatelliteEquipmentControl::prepare(iDVBFrontend &frontend, struct dvb_frontend_parameters &parm, eDVBFrontendParametersSatellite &sat)
#endif
{
int hi;
eDebug("(very) ugly and hardcoded eDVBSatelliteEquipmentControl");
if (sat.frequency > 11700000)
hi = 1;
else
hi = 0;
if (hi)
#if HAVE_DVB_API_VERSION < 3
parm.Frequency = sat.frequency - 10600000;
#else
parm.frequency = sat.frequency - 10600000;
#endif
else
#if HAVE_DVB_API_VERSION < 3
parm.Frequency = sat.frequency - 9750000;
#else
parm.frequency = sat.frequency - 9750000;
#endif
// frontend.sentDiseqc(...);
#if HAVE_DVB_API_VERSION < 3
parm.Inversion = (!sat.inversion) ? INVERSION_ON : INVERSION_OFF;
#else
parm.inversion = (!sat.inversion) ? INVERSION_ON : INVERSION_OFF;
#endif
switch (sat.fec)
{
// case 1:
// case ...:
default:
#if HAVE_DVB_API_VERSION < 3
parm.u.qpsk.FEC_inner = FEC_AUTO;
#else
parm.u.qpsk.fec_inner = FEC_AUTO;
#endif
break;
}
#if HAVE_DVB_API_VERSION < 3
parm.u.qpsk.SymbolRate = sat.symbol_rate;
#else
parm.u.qpsk.symbol_rate = sat.symbol_rate;
#endif
frontend.setVoltage((sat.polarisation == eDVBFrontendParametersSatellite::Polarisation::Vertical) ? iDVBFrontend::voltage13 : iDVBFrontend::voltage18);
eDVBDiseqcCommand diseqc;
diseqc.len = 4;
diseqc.data[0] = 0xe0;
diseqc.data[1] = 0x10;
diseqc.data[2] = 0x38;
diseqc.data[3] = 0xF0;
if (hi)
diseqc.data[3] |= 1;
if (sat.polarisation == eDVBFrontendParametersSatellite::Polarisation::Horizontal)
diseqc.data[3] |= 2;
frontend.sendDiseqc(diseqc);
frontend.setTone(hi ? iDVBFrontend::toneOn : iDVBFrontend::toneOff);
return 0;
}
|