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 "scanwizardhelpers.h"
00033 #include "scanwizardscanner.h"
00034 #include "scanwizard.h"
00035 #include "sourceutil.h"
00036 #include "cardutil.h"
00037 #include "videosource.h"
00038
00039 #define LOC QString("SWiz: ")
00040 #define LOC_ERR QString("SWiz, Error: ")
00041
00042 ScanWizard::ScanWizard(uint default_sourceid,
00043 uint default_cardid,
00044 QString default_inputname) :
00045 lastHWCardID(0),
00046 lastHWCardType(CardUtil::ERROR_PROBE),
00047 configPane(new ScanWizardConfig(
00048 this, default_sourceid, default_cardid, default_inputname)),
00049 scannerPane(new ScanWizardScanner())
00050 {
00051 addChild(configPane);
00052 addChild(scannerPane);
00053 }
00054
00055 MythDialog *ScanWizard::dialogWidget(MythMainWindow *parent, const char*)
00056 {
00057 MythWizard *wizard = (MythWizard*)
00058 ConfigurationWizard::dialogWidget(parent, "ScanWizard");
00059
00060 connect(wizard, SIGNAL(selected(const QString&)),
00061 this, SLOT( SetPage( const QString&)));
00062
00063 return wizard;
00064 }
00065
00066 void ScanWizard::SetPage(const QString &pageTitle)
00067 {
00068 VERBOSE(VB_SIPARSER, QString("SetPage(%1)").arg(pageTitle));
00069 if (pageTitle != ScanWizardScanner::kTitle)
00070 return;
00071
00072 QMap<QString,QString> start_chan;
00073 DTVTunerType parse_type = DTVTunerType::kTunerTypeUnknown;
00074
00075 uint cardid = configPane->GetCardID();
00076 QString inputname = configPane->GetInputName();
00077 uint sourceid = configPane->GetSourceID();
00078 int scantype = configPane->GetScanType();
00079 bool do_scan = true;
00080
00081 VERBOSE(VB_SIPARSER, LOC + "SetPage(): " +
00082 QString("type(%1) cardid(%2) inputname(%3)")
00083 .arg(scantype).arg(cardid).arg(inputname));
00084
00085 if (scantype == ScanTypeSetting::DVBUtilsImport)
00086 {
00087 scannerPane->ImportDVBUtils(sourceid, lastHWCardType,
00088 configPane->GetFilename());
00089 }
00090 else if (scantype == ScanTypeSetting::NITAddScan_OFDM)
00091 {
00092 start_chan = configPane->GetStartChan();
00093 parse_type = DTVTunerType::kTunerTypeOFDM;
00094 }
00095 else if (scantype == ScanTypeSetting::NITAddScan_QPSK)
00096 {
00097 start_chan = configPane->GetStartChan();
00098 parse_type = DTVTunerType::kTunerTypeQPSK;
00099 }
00100 else if (scantype == ScanTypeSetting::NITAddScan_QAM)
00101 {
00102 start_chan = configPane->GetStartChan();
00103 parse_type = DTVTunerType::kTunerTypeQAM;
00104 }
00105 else if (scantype == ScanTypeSetting::IPTVImport)
00106 {
00107 do_scan = false;
00108 scannerPane->ImportM3U(cardid, inputname, sourceid);
00109 }
00110 else if ((scantype == ScanTypeSetting::FullScan_ATSC) ||
00111 (scantype == ScanTypeSetting::FullTransportScan) ||
00112 (scantype == ScanTypeSetting::TransportScan) ||
00113 (scantype == ScanTypeSetting::FullScan_OFDM) ||
00114 (scantype == ScanTypeSetting::FullScan_Analog))
00115 {
00116 ;
00117 }
00118 else
00119 {
00120 do_scan = false;
00121 VERBOSE(VB_SIPARSER, LOC_ERR + "SetPage(): " +
00122 QString("type(%1) src(%2) cardid(%3) not handled")
00123 .arg(scantype).arg(sourceid).arg(cardid));
00124
00125 MythPopupBox::showOkPopup(
00126 gContext->GetMainWindow(), tr("ScanWizard"),
00127 "Programmer Error, see console");
00128 }
00129
00130
00131 DTVMultiplex tuning;
00132 if ((DTVTunerType::kTunerTypeUnknown != parse_type) &&
00133 !tuning.ParseTuningParams(
00134 parse_type,
00135 start_chan["frequency"], start_chan["inversion"],
00136 start_chan["symbolrate"], start_chan["fec"],
00137 start_chan["polarity"],
00138 start_chan["coderate_hp"], start_chan["coderate_lp"],
00139 start_chan["constellation"], start_chan["trans_mode"],
00140 start_chan["guard_interval"], start_chan["hierarchy"],
00141 start_chan["modulation"], start_chan["bandwidth"]))
00142 {
00143 MythPopupBox::showOkPopup(
00144 gContext->GetMainWindow(), tr("ScanWizard"),
00145 tr("Error parsing parameters"));
00146
00147 do_scan = false;
00148 }
00149
00150 if (do_scan)
00151 {
00152 scannerPane->Scan(
00153 configPane->GetScanType(), configPane->GetCardID(),
00154 configPane->GetInputName(), configPane->GetSourceID(),
00155 configPane->DoDeleteChannels(), configPane->DoRenameChannels(),
00156 configPane->DoIgnoreSignalTimeout(), configPane->GetMultiplex(),
00157 start_chan,
00158 configPane->GetFrequencyStandard(), configPane->GetModulation(),
00159 configPane->GetFrequencyTable(), configPane->GetATSCFormat());
00160 }
00161 }
00162
00163 void ScanWizard::SetInput(const QString &cardids_inputname)
00164 {
00165 uint cardid;
00166 QString inputname;
00167 if (!InputSelector::Parse(cardids_inputname, cardid, inputname))
00168 return;
00169
00170
00171
00172
00173 if ((lastHWCardID != cardid) ||
00174 (lastHWCardType == CardUtil::ERROR_OPEN))
00175 {
00176 lastHWCardID = cardid;
00177 QString subtype = CardUtil::ProbeSubTypeName(cardid);
00178 lastHWCardType = CardUtil::toCardType(subtype);
00179 configPane->SetDefaultATSCFormat(
00180 SourceUtil::GetChannelFormat(configPane->GetSourceID()));
00181 }
00182 }