00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032 #include "scanwizardconfig.h"
00033 #include "channelscanner_gui.h"
00034 #include "scanwizard.h"
00035 #include "sourceutil.h"
00036 #include "cardutil.h"
00037 #include "videosource.h"
00038 #include "scaninfo.h"
00039 #include "channelimporter.h"
00040 #include "mythlogging.h"
00041
00042 #define LOC QString("SWiz: ")
00043
00044 ScanWizard::ScanWizard(uint default_sourceid,
00045 uint default_cardid,
00046 QString default_inputname) :
00047 lastHWCardID(0),
00048 lastHWCardType(CardUtil::ERROR_PROBE),
00049 configPane(new ScanWizardConfig(
00050 this, default_sourceid, default_cardid, default_inputname)),
00051 scannerPane(new ChannelScannerGUI())
00052 {
00053 addChild(configPane);
00054 addChild(scannerPane);
00055 }
00056
00057 MythDialog *ScanWizard::dialogWidget(MythMainWindow *parent, const char*)
00058 {
00059 MythWizard *wizard = (MythWizard*)
00060 ConfigurationWizard::dialogWidget(parent, "ScanWizard");
00061
00062 connect(wizard, SIGNAL(selected(const QString&)),
00063 this, SLOT( SetPage( const QString&)));
00064
00065 return wizard;
00066 }
00067
00068 void ScanWizard::SetPage(const QString &pageTitle)
00069 {
00070 LOG(VB_CHANSCAN, LOG_INFO, QString("SetPage(%1)").arg(pageTitle));
00071 if (pageTitle != ChannelScannerGUI::kTitle)
00072 {
00073 scannerPane->quitScanning();
00074 return;
00075 }
00076
00077 QMap<QString,QString> start_chan;
00078 DTVTunerType parse_type = DTVTunerType::kTunerTypeUnknown;
00079
00080 uint cardid = configPane->GetCardID();
00081 QString inputname = configPane->GetInputName();
00082 uint sourceid = configPane->GetSourceID();
00083 int scantype = configPane->GetScanType();
00084 bool do_scan = true;
00085
00086 LOG(VB_CHANSCAN, LOG_INFO, LOC + "SetPage(): " +
00087 QString("type(%1) cardid(%2) inputname(%3)")
00088 .arg(scantype).arg(cardid).arg(inputname));
00089
00090 if (scantype == ScanTypeSetting::DVBUtilsImport)
00091 {
00092 scannerPane->ImportDVBUtils(sourceid, lastHWCardType,
00093 configPane->GetFilename());
00094 }
00095 else if (scantype == ScanTypeSetting::NITAddScan_DVBT)
00096 {
00097 start_chan = configPane->GetStartChan();
00098 parse_type = DTVTunerType::kTunerTypeDVBT;
00099 }
00100 else if (scantype == ScanTypeSetting::NITAddScan_DVBS)
00101 {
00102 start_chan = configPane->GetStartChan();
00103 parse_type = DTVTunerType::kTunerTypeDVBS1;
00104 }
00105 else if (scantype == ScanTypeSetting::NITAddScan_DVBS2)
00106 {
00107 start_chan = configPane->GetStartChan();
00108 parse_type = DTVTunerType::kTunerTypeDVBS2;
00109 }
00110 else if (scantype == ScanTypeSetting::NITAddScan_DVBC)
00111 {
00112 start_chan = configPane->GetStartChan();
00113 parse_type = DTVTunerType::kTunerTypeDVBC;
00114 }
00115 else if (scantype == ScanTypeSetting::IPTVImport)
00116 {
00117 do_scan = false;
00118 scannerPane->ImportM3U(cardid, inputname, sourceid);
00119 }
00120 else if ((scantype == ScanTypeSetting::FullScan_ATSC) ||
00121 (scantype == ScanTypeSetting::FullTransportScan) ||
00122 (scantype == ScanTypeSetting::TransportScan) ||
00123 (scantype == ScanTypeSetting::CurrentTransportScan) ||
00124 (scantype == ScanTypeSetting::FullScan_DVBC) ||
00125 (scantype == ScanTypeSetting::FullScan_DVBT) ||
00126 (scantype == ScanTypeSetting::FullScan_Analog))
00127 {
00128 ;
00129 }
00130 else if (scantype == ScanTypeSetting::ExistingScanImport)
00131 {
00132 do_scan = false;
00133 uint scanid = configPane->GetScanID();
00134 ScanDTVTransportList transports = LoadScan(scanid);
00135 ChannelImporter ci(true, true, true, true, false,
00136 configPane->DoFreeToAirOnly(),
00137 configPane->GetServiceRequirements());
00138 ci.Process(transports);
00139 }
00140 else
00141 {
00142 do_scan = false;
00143 LOG(VB_CHANSCAN, LOG_ERR, LOC + "SetPage(): " +
00144 QString("type(%1) src(%2) cardid(%3) not handled")
00145 .arg(scantype).arg(sourceid).arg(cardid));
00146
00147 MythPopupBox::showOkPopup(
00148 GetMythMainWindow(), tr("ScanWizard"),
00149 tr("Programmer Error, see console"));
00150 }
00151
00152
00153 DTVMultiplex tuning;
00154 if ((parse_type != DTVTunerType::kTunerTypeUnknown) &&
00155 !tuning.ParseTuningParams(
00156 parse_type,
00157 start_chan["frequency"], start_chan["inversion"],
00158 start_chan["symbolrate"], start_chan["fec"],
00159 start_chan["polarity"],
00160 start_chan["coderate_hp"], start_chan["coderate_lp"],
00161 start_chan["constellation"], start_chan["trans_mode"],
00162 start_chan["guard_interval"], start_chan["hierarchy"],
00163 start_chan["modulation"], start_chan["bandwidth"],
00164 start_chan["mod_sys"], start_chan["rolloff"]))
00165 {
00166 MythPopupBox::showOkPopup(
00167 GetMythMainWindow(), tr("ScanWizard"),
00168 tr("Error parsing parameters"));
00169
00170 do_scan = false;
00171 }
00172
00173 if (do_scan)
00174 {
00175 QString table_start, table_end;
00176 configPane->GetFrequencyTableRange(table_start, table_end);
00177
00178 scannerPane->Scan(
00179 configPane->GetScanType(), configPane->GetCardID(),
00180 configPane->GetInputName(), configPane->GetSourceID(),
00181 configPane->DoIgnoreSignalTimeout(), configPane->DoFollowNIT(),
00182 configPane->DoTestDecryption(), configPane->DoFreeToAirOnly(),
00183 configPane->GetServiceRequirements(),
00184
00185 configPane->GetMultiplex(), start_chan,
00186 configPane->GetFrequencyStandard(), configPane->GetModulation(),
00187 configPane->GetFrequencyTable(),
00188 table_start, table_end);
00189 }
00190 }
00191
00192 void ScanWizard::SetInput(const QString &cardids_inputname)
00193 {
00194 uint cardid;
00195 QString inputname;
00196 if (!InputSelector::Parse(cardids_inputname, cardid, inputname))
00197 return;
00198
00199
00200
00201
00202 if ((lastHWCardID != cardid) ||
00203 (lastHWCardType == CardUtil::ERROR_OPEN))
00204 {
00205 lastHWCardID = cardid;
00206 QString subtype = CardUtil::ProbeSubTypeName(cardid);
00207 lastHWCardType = CardUtil::toCardType(subtype);
00208 }
00209 }