openATV enigma2
openATV is an open source SetTopBox Graphical user interface.
frontend.h
Go to the documentation of this file.
1 #ifndef __dvb_frontend_h
2 #define __dvb_frontend_h
3 
4 #ifndef DTV_SCRAMBLING_SEQUENCE_INDEX
5 #define DTV_SCRAMBLING_SEQUENCE_INDEX 70
6 #endif
7 
8 #include <map>
9 #include <lib/dvb/idvb.h>
10 #include <lib/dvb/frontendparms.h>
11 
13 {
14  DECLARE_REF(eDVBFrontendParameters);
15  union
16  {
21  };
22  int m_type;
23  int m_types;
24  int m_flags;
25 public:
28  {
29  }
30 
31  SWIG_VOID(RESULT) getSystem(int &SWIG_OUTPUT) const;
32  SWIG_VOID(RESULT) getSystems(int &SWIG_OUTPUT) const;
37 
38  RESULT setDVBS(const eDVBFrontendParametersSatellite &p, bool no_rotor_command_on_tune=false);
42  SWIG_VOID(RESULT) getFlags(unsigned int &SWIG_NAMED_OUTPUT(flags)) const { flags = m_flags; return 0; }
43  RESULT setFlags(unsigned int flags) { m_flags = flags; return 0; }
44 #ifndef SWIG
45  RESULT calculateDifference(const iDVBFrontendParameters *parm, int &, bool exact) const;
46 
47  RESULT getHash(unsigned long &) const;
48  RESULT calcLockTimeout(unsigned int &) const;
49 #endif
50 };
51 
52 #ifndef SWIG
53 
54 #include <lib/dvb/sec.h>
55 class eSecCommandList;
56 
57 #endif
58 class eDVBFrontend: public iDVBFrontend, public sigc::trackable
59 {
60 #ifndef SWIG
61 public:
62  enum {
66  CSW, // state of the committed switch
67  UCSW, // state of the uncommitted switch
68  TONEBURST, // current state of toneburst switch
69  NEW_ROTOR_CMD, // prev sent rotor cmd
70  NEW_ROTOR_POS, // new rotor position (not validated)
71  ROTOR_CMD, // completed rotor cmd (finalized)
72  ROTOR_POS, // current rotor position
73  LINKED_PREV_PTR, // prev double linked list (for linked FEs)
74  LINKED_NEXT_PTR, // next double linked list (for linked FEs)
75  SATPOS_DEPENDS_PTR, // pointer to FE with configured rotor (with twin/quattro lnb)
76  CUR_FREQ, // current frequency
77  CUR_SYM, // current symbolrate
78  CUR_LOF, // current local oszillator frequency
79  CUR_BAND, // current band
80  FREQ_OFFSET, // current frequency offset
81  CUR_VOLTAGE, // current voltage
82  CUR_TONE, // current continuous tone
83  SATCR, // current SatCR
84  DICTION, // current diction
85  PIN, // pin
86  DISEQC_WDG, // Watchdog for buggy DiSEqC-implementation (VuZero)
87  SPECTINV_CNT, // spectral inversation counter (need for offset calculation)
88  LFSR, // PRNG collision handling
94  };
95  sigc::signal1<void,iDVBFrontend*> m_stateChanged;
96  enum class enumDebugOptions:uint64_t {
97  DISSABLE_ALL_DEBUG_OUTPUTS, //prevents all debug issues with respect to this object
100 private:
101  DECLARE_REF(eDVBFrontend);
102  bool m_simulate;
103  bool m_enabled;
104  bool m_fbc;
105  bool m_is_usbtuner;
106  eDVBFrontend *m_simulate_fe; // only used to set frontend type in dvb.cpp
107  int m_type;
108 #if HAVE_ALIEN5
109  int m_looptimeout;
110 #endif
111  int m_dvbid;
112  int m_slotid;
113  int m_fd;
114  int m_teakover;
115  int m_waitteakover;
116  int m_break_teakover;
117  int m_break_waitteakover;
118 #define DVB_VERSION(major, minor) ((major << 8) | minor)
119  int m_dvbversion;
120  bool m_rotor_mode;
121  bool m_need_rotor_workaround;
122  bool m_need_delivery_system_workaround;
123  bool m_blindscan;
124  bool m_multitype;
125  std::map<fe_delivery_system_t, int> m_modelist;
126  std::map<fe_delivery_system_t, bool> m_delsys, m_delsys_whitelist;
127  std::map<fe_delivery_system_t, dvb_frontend_info> m_fe_info;
128  std::string m_filename;
129  char m_description[128];
130  dvb_frontend_info fe_info;
131  int satfrequency;
133 
134  int m_state;
137  int m_tuning;
138  ePtr<eTimer> m_timeout, m_tuneTimer;
139 
140  eSecCommandList m_sec_sequence;
141 
142  long m_data[NUM_DATA_ENTRIES];
143 
144  int m_idleInputpower[2]; // 13V .. 18V
145  int m_runningInputpower;
146 
147  int m_timeoutCount; // needed for timeout
148  int m_retryCount; // diseqc retry for rotor
149  int m_configRetuneNoPatEntry;
150  int m_debuglevel;
151 
152  void feEvent(int);
153  void timeout();
154  void tuneLoop(); // called by m_tuneTimer
155  int tuneLoopInt();
156  void setFrontend(bool recvEvents=true);
157  bool setSecSequencePos(int steps);
158  int calculateSignalPercentage(int signalqualitydb);
159  void calculateSignalQuality(int snr, int &signalquality, int &signalqualitydb);
160 
161  static int PriorityOrder;
162  static int PreferredFrontendIndex;
163 
164  uint64_t m_DebugOptions;
165 
166 #endif
167 public:
168 #ifndef SWIG
169  eDVBFrontend(const char* devicenodename, int fe, int& ok, bool simulate = false, eDVBFrontend* simulate_fe = NULL);
170  virtual ~eDVBFrontend();
171 
172  int readInputpower();
173  int getCurrentType(){return m_type;}
174  void overrideType(int type){m_type = type;} //workaraound for dvb api < 5
175  RESULT tune(const iDVBFrontendParameters &where, bool blindscan = false);
176  RESULT prepare_sat(const eDVBFrontendParametersSatellite &, unsigned int timeout);
180  RESULT connectStateChange(const sigc::slot1<void,iDVBFrontend*> &stateChange, ePtr<eConnection> &connection);
181  RESULT getState(int &state);
182  RESULT setTone(int tone);
183  RESULT setVoltage(int voltage);
184  RESULT sendDiseqc(const eDVBDiseqcCommand &diseqc);
185  RESULT sendToneburst(int burst);
189  RESULT getData(int num, long &data);
190  RESULT setData(int num, long val);
191  bool changeType(int type);
192  void checkRetune();
193  void retune();
195 
196  int readFrontendData(int type); // iFrontendInformation_ENUMS
198  void getTransponderData(ePtr<iDVBTransponderData> &dest, bool original);
200 
201  bool isPreferred(int preferredFrontend, int slotid);
203  int getDVBID() { return m_dvbid; }
204  int getSlotID() { return m_slotid; }
205  bool setSlotInfo(int id, const char *descr, bool enabled, bool isDVBS2, int frontendid);
206  static void setTypePriorityOrder(int val) { PriorityOrder = val; }
207  static int getTypePriorityOrder() { return PriorityOrder; }
208  static void setPreferredFrontend(int index) { PreferredFrontendIndex = index; }
209  static int getPreferredFrontend() { return PreferredFrontendIndex; }
210 #endif
211  static const int preferredFrontendScore = 100000;
212  static const int preferredFrontendBinaryMode = 0x40000000;
213  static const int preferredFrontendPrioForced = 0x20000000;
214  static const int preferredFrontendPrioHigh = 0x10000000;
215 #ifndef SWIG
216  bool supportsDeliverySystem(const fe_delivery_system_t &sys, bool obeywhitelist);
217  void setDeliverySystemWhitelist(const std::vector<fe_delivery_system_t> &whitelist, bool append=false);
218  bool setDeliverySystem(fe_delivery_system_t delsys);
219 
220  int initModeList();
221  void reopenFrontend();
222  int openFrontend();
223  int closeFrontend(bool force=false, bool no_delayed=false);
224  const char *getDescription() const { return m_description; }
225  bool is_simulate() const { return m_simulate; }
226  const dvb_frontend_info getFrontendInfo() const { return fe_info; }
227  const dvb_frontend_info getFrontendInfo(fe_delivery_system_t delsys) { return m_fe_info[delsys]; }
228  bool is_FBCTuner() { return m_fbc; }
229  void setFBCTuner(bool enable) { m_fbc = enable; }
230  bool getEnabled() { return m_enabled; }
231  void setEnabled(bool enable) { m_enabled = enable; }
232  void setUSBTuner(bool yesno) { m_is_usbtuner = yesno; }
233  bool is_multistream();
234  std::string getCapabilities();
235  bool has_prev() { return (m_data[LINKED_PREV_PTR] != -1); }
236  bool has_next() { return (m_data[LINKED_NEXT_PTR] != -1); }
237 
240 
242  void getTop(eDVBRegisteredFrontend *fe, eDVBFrontend* &top_fe);
243  void getTop(eDVBFrontend *fe, eDVBRegisteredFrontend* &top_fe);
244  void getTop(eDVBFrontend *fe, eDVBFrontend* &top_fe);
245  void getTop(iDVBFrontend &fe, eDVBRegisteredFrontend * &top_fe);
246  void getTop(iDVBFrontend &fe, eDVBFrontend * &top_fe);
247 
249 #endif // SWIG
250 
251 };
252 
253 
254 #endif
Definition: idvb.h:503
Definition: frontend.h:59
RESULT setSecSequence(eSecCommandList &list)
Definition: frontend.cpp:3638
bool changeType(int type)
Definition: frontend.cpp:3838
static int getTypePriorityOrder()
Definition: frontend.h:207
const char * getDescription() const
Definition: frontend.h:224
void setDeliverySystemWhitelist(const std::vector< fe_delivery_system_t > &whitelist, bool append=false)
Definition: frontend.cpp:3963
RESULT setTone(int tone)
Definition: frontend.cpp:3570
void getTop(eDVBRegisteredFrontend *fe, eDVBRegisteredFrontend *&top_fe)
Definition: frontend.cpp:4055
RESULT setData(int num, long val)
Definition: frontend.cpp:3672
RESULT getState(int &state)
Definition: frontend.cpp:3564
bool supportsDeliverySystem(const fe_delivery_system_t &sys, bool obeywhitelist)
Definition: frontend.cpp:3946
int isCompatibleWith(ePtr< iDVBFrontendParameters > &feparm)
Definition: frontend.cpp:3690
static const int preferredFrontendPrioHigh
Definition: frontend.h:214
void overrideType(int type)
Definition: frontend.h:174
void checkRetune()
Definition: frontend.cpp:1167
eDVBRegisteredFrontend * getNext(eDVBRegisteredFrontend *fe)
Definition: frontend.cpp:4031
void reopenFrontend()
Definition: frontend.cpp:623
RESULT sendToneburst(int burst)
Definition: frontend.cpp:3612
int getDVBID()
Definition: frontend.h:203
RESULT prepare_atsc(const eDVBFrontendParametersATSC &)
Definition: frontend.cpp:3243
RESULT connectStateChange(const sigc::slot1< void, iDVBFrontend * > &stateChange, ePtr< eConnection > &connection)
Definition: frontend.cpp:3516
int initModeList()
Definition: frontend.cpp:630
sigc::signal1< void, iDVBFrontend * > m_stateChanged
Definition: frontend.h:95
RESULT getData(int num, long &data)
Definition: frontend.cpp:3662
bool is_FBCTuner()
Definition: frontend.h:228
RESULT tune(const iDVBFrontendParameters &where, bool blindscan=false)
Definition: frontend.cpp:3262
std::string getCapabilities()
Definition: frontend.cpp:4117
int readFrontendData(int type)
Definition: frontend.cpp:1679
int getSlotID()
Definition: frontend.h:204
bool is_simulate() const
Definition: frontend.h:225
eDVBRegisteredFrontend * getLast(eDVBRegisteredFrontend *fe)
Definition: frontend.cpp:4090
@ CUR_LOF
Definition: frontend.h:78
@ TAKEOVER_SLAVE
Definition: frontend.h:91
@ SATCR
Definition: frontend.h:83
@ LINKED_NEXT_PTR
Definition: frontend.h:74
@ SPECTINV_CNT
Definition: frontend.h:87
@ LFSR
Definition: frontend.h:88
@ UCSW
Definition: frontend.h:67
@ CUR_BAND
Definition: frontend.h:79
@ CUR_FREQ
Definition: frontend.h:76
@ ROTOR_CMD
Definition: frontend.h:71
@ NEW_UCSW
Definition: frontend.h:64
@ CSW
Definition: frontend.h:66
@ NUM_DATA_ENTRIES
Definition: frontend.h:93
@ CUR_VOLTAGE
Definition: frontend.h:81
@ PIN
Definition: frontend.h:85
@ TAKEOVER_COUNTDOWN
Definition: frontend.h:89
@ DISEQC_WDG
Definition: frontend.h:86
@ DICTION
Definition: frontend.h:84
@ NEW_TONEBURST
Definition: frontend.h:65
@ SATPOS_DEPENDS_PTR
Definition: frontend.h:75
@ TAKEOVER_MASTER
Definition: frontend.h:90
@ CUR_SYM
Definition: frontend.h:77
@ ROTOR_POS
Definition: frontend.h:72
@ TAKEOVER_RELEASE
Definition: frontend.h:92
@ NEW_ROTOR_POS
Definition: frontend.h:70
@ FREQ_OFFSET
Definition: frontend.h:80
@ TONEBURST
Definition: frontend.h:68
@ NEW_ROTOR_CMD
Definition: frontend.h:69
@ NEW_CSW
Definition: frontend.h:63
@ CUR_TONE
Definition: frontend.h:82
@ LINKED_PREV_PTR
Definition: frontend.h:73
void retune()
Definition: frontend.cpp:1178
void setFBCTuner(bool enable)
Definition: frontend.h:229
bool is_multistream()
Definition: frontend.cpp:4103
int closeFrontend(bool force=false, bool no_delayed=false)
Definition: frontend.cpp:931
const dvb_frontend_info getFrontendInfo() const
Definition: frontend.h:226
static const int preferredFrontendBinaryMode
Definition: frontend.h:212
static int getPreferredFrontend()
Definition: frontend.h:209
bool has_next()
Definition: frontend.h:236
RESULT prepare_sat(const eDVBFrontendParametersSatellite &, unsigned int timeout)
Definition: frontend.cpp:3157
static const int preferredFrontendScore
Definition: frontend.h:211
int openFrontend()
Definition: frontend.cpp:706
void getFrontendStatus(ePtr< iDVBFrontendStatus > &dest)
Definition: frontend.cpp:1905
static const int preferredFrontendPrioForced
Definition: frontend.h:213
eDVBFrontend(const char *devicenodename, int fe, int &ok, bool simulate=false, eDVBFrontend *simulate_fe=NULL)
Definition: frontend.cpp:593
eDVBRegisteredFrontend * getPrev(eDVBRegisteredFrontend *fe)
Definition: frontend.cpp:4021
int getCurrentType()
Definition: frontend.h:173
int readInputpower()
Definition: frontend.cpp:2012
void setEnabled(bool enable)
Definition: frontend.h:231
bool setSlotInfo(int id, const char *descr, bool enabled, bool isDVBS2, int frontendid)
Definition: frontend.cpp:3996
bool has_prev()
Definition: frontend.h:235
RESULT setVoltage(int voltage)
Definition: frontend.cpp:3522
void getTransponderData(ePtr< iDVBTransponderData > &dest, bool original)
Definition: frontend.cpp:1911
static void setTypePriorityOrder(int val)
Definition: frontend.h:206
RESULT setSEC(iDVBSatelliteEquipmentControl *sec)
Definition: frontend.cpp:3632
static void setPreferredFrontend(int index)
Definition: frontend.h:208
virtual ~eDVBFrontend()
Definition: frontend.cpp:1031
bool setDeliverySystem(fe_delivery_system_t delsys)
Definition: frontend.cpp:3978
RESULT prepare_terrestrial(const eDVBFrontendParametersTerrestrial &)
Definition: frontend.cpp:3217
void setConfigRetuneNoPatEntry(int value)
Definition: frontend.cpp:1161
RESULT prepare_cable(const eDVBFrontendParametersCable &)
Definition: frontend.cpp:3198
RESULT sendDiseqc(const eDVBDiseqcCommand &diseqc)
Definition: frontend.cpp:3595
enumDebugOptions
Definition: frontend.h:96
void setUSBTuner(bool yesno)
Definition: frontend.h:232
bool isPreferred(int preferredFrontend, int slotid)
Definition: frontend.cpp:3682
void getFrontendData(ePtr< iDVBFrontendData > &dest)
Definition: frontend.cpp:2003
bool getEnabled()
Definition: frontend.h:230
const dvb_frontend_info getFrontendInfo(fe_delivery_system_t delsys)
Definition: frontend.h:227
Definition: frontendparms.h:166
Definition: frontendparms.h:78
Definition: frontend.h:13
~eDVBFrontendParameters()
Definition: frontend.h:27
eDVBFrontendParametersTerrestrial terrestrial
Definition: frontend.h:19
RESULT setDVBT(const eDVBFrontendParametersTerrestrial &p)
Definition: frontend.cpp:369
eDVBFrontendParameters()
Definition: frontend.cpp:293
eDVBFrontendParametersCable cable
Definition: frontend.h:18
RESULT setDVBS(const eDVBFrontendParametersSatellite &p, bool no_rotor_command_on_tune=false)
Definition: frontend.cpp:352
SWIG_VOID(RESULT) getDVBS(eDVBFrontendParametersSatellite &SWIG_OUTPUT) const
SWIG_VOID(RESULT) getSystem(int &SWIG_OUTPUT) const
RESULT calcLockTimeout(unsigned int &) const
Definition: frontend.cpp:546
RESULT setATSC(const eDVBFrontendParametersATSC &p)
Definition: frontend.cpp:377
RESULT setDVBC(const eDVBFrontendParametersCable &p)
Definition: frontend.cpp:361
RESULT getHash(unsigned long &) const
Definition: frontend.cpp:511
RESULT setFlags(unsigned int flags)
Definition: frontend.h:43
SWIG_VOID(RESULT) getFlags(unsigned int &SWIG_NAMED_OUTPUT(flags)) const
Definition: frontend.h:42
SWIG_VOID(RESULT) getDVBC(eDVBFrontendParametersCable &SWIG_OUTPUT) const
eDVBFrontendParametersATSC atsc
Definition: frontend.h:20
eDVBFrontendParametersSatellite sat
Definition: frontend.h:17
SWIG_VOID(RESULT) getATSC(eDVBFrontendParametersATSC &SWIG_OUTPUT) const
RESULT calculateDifference(const iDVBFrontendParameters *parm, int &, bool exact) const
Definition: frontend.cpp:385
SWIG_VOID(RESULT) getDVBT(eDVBFrontendParametersTerrestrial &SWIG_OUTPUT) const
SWIG_VOID(RESULT) getSystems(int &SWIG_OUTPUT) const
Definition: frontendparms.h:20
Definition: frontendparms.h:109
Definition: dvb.h:27
Definition: sec.h:96
Definition: idvb.h:583
Definition: idvb.h:475
Definition: idvb.h:621
#define NULL
Definition: eerror.h:101
unsigned char data[256]
Definition: hdmi_cec.h:2
enabled
Definition: Components/HdmiCec.py:16
enable
Definition: Extensions/MiniTV/plugin.py:8
list where
Definition: newplugin.py:126
value
Definition: Profile.py:29
val
Definition: UnitConversions.py:88
dest
Definition: enigma_py_patcher.py:10
list list
Definition: main.py:25
index
Definition: main.py:28
p
Definition: upgrade.py:63
int RESULT
Definition: object.h:12
#define SWIG_OUTPUT
Definition: swig.h:20
#define SWIG_NAMED_OUTPUT(x)
Definition: swig.h:21