00001
00002
00003
00004
00005
00006
00007
00008 #ifndef DVBCHANNEL_H
00009 #define DVBCHANNEL_H
00010
00011 #include <QObject>
00012 #include <QString>
00013 #include <QMap>
00014
00015 #include "mythcontext.h"
00016 #include "mythdbcon.h"
00017 #include "dtvchannel.h"
00018 #include "dtvconfparserhelpers.h"
00019 #include "streamlisteners.h"
00020 #include "diseqc.h"
00021
00022 class TVRec;
00023 class DVBCam;
00024 class DVBRecorder;
00025 class DVBChannel;
00026
00027 typedef QMap<const DVBChannel*,bool> IsOpenMap;
00028
00029 class DVBChannel : public DTVChannel
00030 {
00031 public:
00032 DVBChannel(const QString &device, TVRec *parent = NULL);
00033 ~DVBChannel();
00034
00035 bool Open(void) { return Open(this); }
00036 void Close(void) { Close(this); }
00037
00038 bool Init(QString &inputname, QString &startchannel, bool setchan);
00039
00040
00041 void SetPMT(const ProgramMapTable*);
00042 void SetTimeOffset(double offset);
00043 void SetSlowTuning(uint how_slow_in_ms)
00044 { tuning_delay = how_slow_in_ms; }
00045
00046
00047 bool IsOpen(void) const;
00048 int GetFd(void) const { return fd_frontend; }
00049 bool IsTuningParamsProbeSupported(void) const;
00050
00051 QString GetDevice(void) const { return device; }
00053 QString GetCardNum(void) const { return device; };
00055 QString GetFrontendName(void) const;
00056 bool IsMaster(void) const;
00058 bool HasCRCBug(void) const { return has_crc_bug; }
00059 uint GetMinSignalMonitorDelay(void) const { return sigmon_delay; }
00061 const DiSEqCDevRotor *GetRotor(void) const;
00062
00064 bool HasLock(bool *ok = NULL) const;
00066 double GetSignalStrength(bool *ok = NULL) const;
00074 double GetSNR(bool *ok = NULL) const;
00076 double GetBitErrorRate(bool *ok = NULL) const;
00078 double GetUncorrectedBlockCount(bool *ok = NULL) const;
00079
00080
00081 bool SwitchToInput(const QString &inputname, const QString &chan);
00082 bool SwitchToInput(int newcapchannel, bool setstarting);
00083 bool Tune(const DTVMultiplex &tuning, QString inputname);
00084 bool Tune(const DTVMultiplex &tuning, uint inputid,
00085 bool force_reset = false, bool same_input = false);
00086 bool Retune(void);
00087
00088 bool ProbeTuningParams(DTVMultiplex &tuning) const;
00089
00090 private:
00091 bool Open(DVBChannel*);
00092 void Close(DVBChannel*);
00093
00094 int GetChanID(void) const;
00095
00096 void CheckOptions(DTVMultiplex &t) const;
00097 void CheckFrequency(uint64_t frequency) const;
00098 bool CheckModulation(DTVModulation modulation) const;
00099 bool CheckCodeRate(DTVCodeRate rate) const;
00100
00101 typedef DVBChannel* DVBChannelP;
00102 DVBChannel *GetMasterLock(void);
00103 static void ReturnMasterLock(DVBChannelP &dvbm);
00104
00105 typedef const DVBChannel* DVBChannelCP;
00106 const DVBChannel *GetMasterLock(void) const;
00107 static void ReturnMasterLock(DVBChannelCP &dvbm);
00108
00109 private:
00110 IsOpenMap is_open;
00111
00112
00113 DiSEqCDev diseqc_dev;
00114 DiSEqCDevSettings diseqc_settings;
00115 DiSEqCDevTree *diseqc_tree;
00116 DVBCam *dvbcam;
00117
00118
00119 QString frontend_name;
00120 uint64_t capabilities;
00121 uint64_t ext_modulations;
00122 uint64_t frequency_minimum;
00123 uint64_t frequency_maximum;
00124 uint symbol_rate_minimum;
00125 uint symbol_rate_maximum;
00126
00127
00128 mutable QMutex tune_lock;
00129 mutable QMutex hw_lock;
00131 DTVMultiplex desired_tuning;
00133 DTVMultiplex prev_tuning;
00134
00135 uint last_lnb_dev_id;
00136
00137 uint tuning_delay;
00138 uint sigmon_delay;
00139 bool first_tune;
00140
00141
00142 int fd_frontend;
00143 QString device;
00144 bool has_crc_bug;
00145 };
00146
00147 #endif