00001
00002 #ifndef _CARDUTIL_H_
00003 #define _CARDUTIL_H_
00004
00005 #include "libmyth/settings.h"
00006
00007
00008 #include <stdint.h>
00009 #include <vector>
00010 using namespace std;
00011
00012
00013 #include <qstringlist.h>
00014 #include <qmap.h>
00015
00016 class InputInfo;
00017 class CardInput;
00018 typedef QMap<int,QString> InputNames;
00019 typedef vector<QString> QStringVec;
00020
00021 QString get_on_cardid(const QString&, uint);
00022
00023 bool set_on_source(const QString&, uint, uint, const QString);
00024
00025 typedef enum
00026 {
00027 DVB_DEV_FRONTEND = 1,
00028 DVB_DEV_DVR,
00029 DVB_DEV_DEMUX,
00030 DVB_DEV_CA,
00031 DVB_DEV_AUDIO,
00032 DVB_DEV_VIDEO,
00033 } dvb_dev_type_t;
00034
00038 class MPUBLIC CardUtil
00039 {
00040 public:
00042 enum CARD_TYPES
00043 {
00044 ERROR_OPEN = 0,
00045 ERROR_UNKNOWN,
00046 ERROR_PROBE,
00047 QPSK,
00048 QAM,
00049 OFDM,
00050 ATSC,
00051 V4L,
00052 MPEG,
00053 FIREWIRE,
00054 HDHOMERUN,
00055 FREEBOX,
00056 };
00057
00058 static enum CARD_TYPES toCardType(const QString &name)
00059 {
00060 if ("ERROR_OPEN" == name)
00061 return ERROR_OPEN;
00062 if ("ERROR_UNKNOWN" == name)
00063 return ERROR_UNKNOWN;
00064 if ("ERROR_PROBE" == name)
00065 return ERROR_PROBE;
00066 if ("QPSK" == name)
00067 return QPSK;
00068 if ("QAM" == name)
00069 return QAM;
00070 if ("OFDM" == name)
00071 return OFDM;
00072 if ("ATSC" == name)
00073 return ATSC;
00074 if ("V4L" == name)
00075 return V4L;
00076 if ("MPEG" == name)
00077 return MPEG;
00078 if ("FIREWIRE" == name)
00079 return FIREWIRE;
00080 if ("HDHOMERUN" == name)
00081 return HDHOMERUN;
00082 if ("FREEBOX" == name)
00083 return FREEBOX;
00084 return ERROR_UNKNOWN;
00085 }
00086
00087 static bool IsEncoder(const QString &rawtype)
00088 {
00089 return
00090 (rawtype != "DVB") &&
00091 (rawtype != "FIREWIRE") && (rawtype != "DBOX2") &&
00092 (rawtype != "HDHOMERUN") && (rawtype != "FREEBOX");
00093 }
00094
00095 static bool IsUnscanable(const QString &rawtype)
00096 {
00097 return
00098 (rawtype == "FIREWIRE") || (rawtype == "DBOX2");
00099 }
00100
00101 static bool IsEITCapable(const QString &rawtype)
00102 {
00103 return
00104 (rawtype == "DVB") || (rawtype == "HDHOMERUN");
00105 }
00106
00107 static bool IsTunerSharingCapable(const QString &rawtype)
00108 {
00109 return (rawtype == "DVB");
00110 }
00111
00112 static bool IsTunerShared(uint cardidA, uint cardidB);
00113
00114 static bool IsTuningDigital(const QString &rawtype)
00115 {
00116 return
00117 (rawtype == "DVB") || (rawtype == "HDHOMERUN");
00118 }
00119
00120 static bool IsTuningAnalog(const QString &rawtype)
00121 {
00122 return (rawtype == "V4L");
00123 }
00124
00126 static uint GetFirstCardID(const QString &videodevice)
00127 {
00128 vector<uint> list = GetCardIDs(videodevice);
00129 if (list.empty())
00130 return 0;
00131 return list[0];
00132 }
00133
00134 static vector<uint> GetCardIDs(const QString &videodevice,
00135 QString rawtype = QString::null,
00136 QString hostname = QString::null);
00137
00138 static bool IsCardTypePresent(const QString &rawtype,
00139 QString hostname = QString::null);
00140 static QStringVec GetVideoDevices(const QString &rawtype,
00141 QString hostname = QString::null);
00142
00143 static QString GetRawCardType(uint cardid)
00144 { return get_on_cardid("cardtype", cardid).upper(); }
00145 static QString GetVideoDevice(uint cardid)
00146 { return get_on_cardid("videodevice", cardid); }
00147 static QString GetVBIDevice(uint cardid)
00148 { return get_on_cardid("vbidevice", cardid); }
00149 static uint GetHDHRTuner(uint cardid)
00150 { return get_on_cardid("dbox2_port", cardid).toUInt(); }
00151
00152 static int GetValueInt(const QString &col, uint cid)
00153 { return get_on_cardid(col, cid).toInt(); }
00154 static bool SetValue(const QString &col, uint cid,
00155 uint sid, int val)
00156 { return set_on_source(col, cid, sid, QString::number(val)); }
00157 static bool SetValue(const QString &col, uint cid,
00158 uint sid, const QString &val)
00159 { return set_on_source(col, cid, sid, val); }
00160
00161
00162 static vector<uint> GetCardIDs(uint sourceid);
00163 static QString GetDefaultInput(uint cardid);
00164 static QStringList GetInputNames(uint cardid, uint sourceid);
00165 static bool GetInputInfo(InputInfo &info,
00166 vector<uint> *groupids = NULL);
00167 static uint GetCardID(uint inputid);
00168 static QString GetInputName(uint inputid);
00169 static QString GetDisplayName(uint inputid);
00170 static QString GetDisplayName(uint cardid, const QString &inputname);
00171 static vector<uint> GetInputIDs(uint cardid);
00172 static bool DeleteInput(uint inputid);
00173 static bool DeleteOrphanInputs(void);
00174
00175
00176 static uint CreateInputGroup(const QString &name);
00177 static bool CreateInputGroupIfNeeded(uint cardid);
00178 static bool LinkInputGroup(uint inputid, uint inputgroupid);
00179 static bool UnlinkInputGroup(uint inputid, uint inputgroupid);
00180 static vector<uint> GetInputGroups(uint inputid);
00181 static vector<uint> GetSharedInputGroups(uint cardid);
00182 static vector<uint> GetGroupCardIDs(uint inputgroupid);
00183 static vector<uint> GetConflictingCards(uint inputid, uint exclude_cardid);
00184
00185 static QString GetDeviceLabel(uint cardid,
00186 QString cardtype,
00187 QString videodevice);
00188
00189 static QString ProbeSubTypeName(uint cardid);
00190
00191 static QStringList probeInputs(QString device,
00192 QString cardtype = QString::null);
00193 static void GetCardInputs(uint cardid,
00194 const QString &device,
00195 const QString &cardtype,
00196 QStringList &inputLabels,
00197 vector<CardInput*> &cardInputs);
00198
00199 static bool DeleteCard(uint cardid);
00200 static bool DeleteAllCards(void);
00201 static vector<uint> GetCardList(void);
00202
00203
00204 static QStringVec ProbeVideoDevices(const QString &rawtype);
00205
00206
00207 static bool CloneCard(uint src_cardid, uint dst_cardid);
00208 static vector<uint> GetCloneCardIDs(uint cardid);
00209
00210
00211 static bool GetTimeouts(uint cardid,
00212 uint &signal_timeout,
00213 uint &channel_timeout);
00214 static bool IgnoreEncrypted(uint cardid, const QString &inputname);
00215 static bool TVOnly(uint cardid, const QString &inputname);
00216 static bool IsInNeedOfExternalInputConf(uint cardid);
00217 static uint GetQuickTuning(uint cardid, const QString &inputname);
00218
00219
00221 static bool IsDVB(uint cardid)
00222 { return "DVB" == GetRawCardType(cardid); }
00223 static bool IsDVBCardType(const QString card_type);
00224 static QString ProbeDVBFrontendName(uint device);
00225 static QString ProbeDVBType(uint device);
00226 static bool HasDVBCRCBug(uint device);
00227 static uint GetMinSignalMonitoringDelay(uint device);
00228 static QString GetDeviceName(dvb_dev_type_t, uint cardnum);
00229 static InputNames GetConfiguredDVBInputs(uint cardid);
00230
00231
00232 static bool hasV4L2(int videofd);
00233 static bool GetV4LInfo(int videofd, QString &card, QString &driver,
00234 uint32_t &version);
00235 static bool GetV4LInfo(int videofd, QString &card, QString &driver)
00236 { uint32_t dummy; return GetV4LInfo(videofd, card, driver, dummy); }
00237 static InputNames probeV4LInputs(int videofd, bool &ok);
00238
00239 private:
00240 static QStringList probeV4LInputs(QString device);
00241 static QStringList probeDVBInputs(QString device);
00242 };
00243
00244 #endif //_CARDUTIL_H_