17 const QString &format,
const QString &modulation,
const QString &country);
25 const QString &_si_std,
28 std::chrono::milliseconds _timeoutTune)
29 : m_mplexid(_mplexid), m_friendlyName(std::move(_name)),
31 m_timeoutTune(_timeoutTune)
36 if (_si_std ==
"analog")
46 std::chrono::milliseconds _timeoutTune)
48 m_friendlyName(std::move(_name)),
49 m_sourceID(_sourceid),
50 m_timeoutTune(_timeoutTune),
59 std::chrono::milliseconds _timeoutTune)
61 m_friendlyName(std::move(_name)),
62 m_sourceID(_sourceid),
63 m_timeoutTune(_timeoutTune),
64 m_expectedChannels(_tuning.channels)
86 std::chrono::milliseconds timeoutTune)
87 : m_mplexid(0), m_friendlyName(std::move(strFmt)),
88 m_friendlyNum(freqNum), m_sourceID(sourceid),
89 m_timeoutTune(timeoutTune)
98 if (std.toLower() ==
"atsc")
102 else if (std.toLower() ==
"analog")
121 else if (std ==
"dvbc" || std ==
"dvbs")
135 std::chrono::milliseconds _timeoutTune) :
137 m_friendlyName(std::move(_name)),
138 m_sourceID(_sourceid),
139 m_timeoutTune(_timeoutTune),
140 m_iptvTuning(std::move(_tuning)), m_iptvChannel(std::move(_channel))
156 return mplexid < 0 ? 0 : mplexid;
175 str += QString(
"mplexid(%1) " ).arg(
m_mplexid);
177 str += QString(
"sourceid(%1) " ).arg(
m_sourceID);
178 str += QString(
"useTimer(%1) " ).arg(
static_cast<int>(
m_useTimer));
179 str += QString(
"scanning(%1) " ).arg(
static_cast<int>(
m_scanning));
180 str += QString(
"timeoutTune(%3 msec) " ).arg(
m_timeoutTune.count());
228 const QString &format,
const QString &modulation,
const QString &country)
234 QString lookup = QString(
"%1_%2_%3%4")
235 .arg(format, modulation, country);
237 freq_table_map_t::const_iterator it = fmap.begin();
238 for (
uint i = 0; it != fmap.end(); i++)
240 it = fmap.find(lookup.arg(i));
241 if (it != fmap.end())
249 const QString &format,
const QString &modulation,
const QString &country)
258 for (
auto & ft : list)
265 const QString& format,
const QString& modulation,
const QString& country,
int freqid)
273 for (
auto & ft : list)
275 int min_freqid = ft->m_nameOffset;
276 int max_freqid = min_freqid +
277 ((ft->m_frequencyEnd - ft->m_frequencyStart) /
278 ft->m_frequencyStep);
280 if ((min_freqid <= freqid) && (freqid <= max_freqid))
281 return ft->m_frequencyStart +
282 (ft->m_frequencyStep * (freqid - min_freqid));
288 const QString& format, QString modulation,
const QString& country,
long long centerfreq)
290 modulation = (modulation ==
"8vsb") ?
"vsb8" : modulation;
295 for (
auto & ft : list)
297 int min_freqid = ft->m_nameOffset;
298 int max_freqid = min_freqid +
299 ((ft->m_frequencyEnd - ft->m_frequencyStart) /
300 ft->m_frequencyStep);
302 ((centerfreq - ft->m_frequencyStart) /
303 ft->m_frequencyStep) + min_freqid;
305 if ((min_freqid <= freqid) && (freqid <= max_freqid))
309 LOG(VB_GENERAL, LOG_DEBUG,
310 QString(
"get_closest_freqid(%1, %2, %3, %4) Failed sz(%5)")
311 .arg(format) .arg(modulation) .arg(country) .arg(centerfreq)
319#define FREQ(A,B, C,D, E,F,G, H, I) \
320 fmap[QString("atsc_%1_us%2").arg(A,B)] = \
321 new FrequencyTable((C)+(D), E, F, G, H, I);
329{
return (bandwidth * (8 + channel)) + offset;}
337 474000000, 698000000, 8000000,
"Channel %1", 21,
347 474000000, 850000000, 8000000,
"Channel %1", 21,
357 474000000, 850000000, 8000000,
"Channel %1", 21,
367 177500000, 226500000, 7000000,
"Channel %1", 5,
375 529500000, 816500000, 7000000,
"Channel %1", 28,
385 177500000, 226500000, 7000000,
"Channel %1", 5,
393 474000000, 826000000, 8000000,
"Channel %1", 21,
403 514000000, 514000000+1, 8000000,
"Channel %1", 26,
411 538000000, 538000000+1, 8000000,
"Channel %1", 29,
421 177500000, 226500000, 7000000,
"Channel %1", 5,
429 474000000, 858000000, 8000000,
"Channel %1", 21,
439 474000000, 858000000, 8000000,
"Channel %1", 21,
449 174000000, 230000000, 7000000,
"Channel %1", 5,
457 474000000, 866000000, 8000000,
"Channel %1", 21,
467 474000000, 858000000, 8000000,
"Channel %1", 21,
477 474000000, 690000000, 8000000,
"Channel %1", 21,
487 474000000, 850000000, 8000000,
"Channel %1", 21,
497 474000000, 858000000, 8000000,
"Channel %1", 21,
507 474000000, 690000000, 8000000,
"Channel %1", 21,
517 473000000, 803000000, 6000000,
"Channel %1", 14,
527 73000000, 73000000, 8000000,
"Channel D%1", 73,
531 81000000, 81000000, 8000000,
"Channel D%1", 81,
535 113000000, 121000000, 8000000,
"Channel S0%1", 2,
539 306000000, 466000000, 8000000,
"Channel S%1", 21,
543 474000000, 858000000, 8000000,
"Channel %1", 21,
549 474000000, 474000000, 8000000,
"Channel %1", 21,
555 12324000, 12324000+1, 10,
"Channel %1", 1,
559 459000000, 459000000+1, 10,
"Channel %1", 2,
565 203000000, 795000000, 100000,
"BF Channel %1", 1,
569 194750000, 794750000, 100000,
"BF Channel %1", 1 + ((795000-203000) / 100),
574#ifdef DEBUG_DVB_OFFSETS
577 533000000, 605000000, 6000000,
"xATSC Channel %1", 24,
588 "ATSC Channel %1", 2, 57000000, 69000000, 6000000,
592 "ATSC Channel %1", 5, 79000000, 85000000, 6000000,
596 "ATSC Channel %1", 7, 177000000, 213000000, 6000000,
600 "ATSC Channel %1", 14, 473000000, 605000000, 6000000,
604 const std::array<const QString,4> modStr {
605 "vsb8",
"qam256",
"qam128",
"qam64" };
606 const std::array<const DTVModulation::Types,4> mod {
611 const std::array<const QString,4> desc {
612 "ATSC ",
"QAM-256 ",
"QAM-128 ",
"QAM-64 ", };
614 for (
uint i = 0; i < 4; i++)
617 FREQ(modStr[i],
"cable0", desc[i],
"Channel T-%1",
618 13, 44750000, 50750000, 6000000, mod[i]);
619 FREQ(modStr[i],
"cable1", desc[i],
"Channel %1",
620 2, 57000000, 69000000, 6000000, mod[i]);
621 FREQ(modStr[i],
"cable2", desc[i],
"Channel %1",
622 5, 79000000, 85000000, 6000000, mod[i]);
623 FREQ(modStr[i],
"cable3", desc[i],
"Channel %1",
624 7, 177000000, 213000000, 6000000, mod[i]);
625 FREQ(modStr[i],
"cable4", desc[i],
"Channel %1",
626 14, 123000000, 171000000, 6000000, mod[i]);
627 FREQ(modStr[i],
"cable5", desc[i],
"Channel %1",
628 23, 219000000, 645000000, 6000000, mod[i]);
629 FREQ(modStr[i],
"cable6", desc[i],
"Channel %1",
630 95, 93000000, 117000000, 6000000, mod[i]);
633 FREQ(modStr[i],
"cable7", desc[i],
"Channel %1",
639 FREQ(modStr[i],
"cablehigh0", desc[i],
"Channel %1",
640 78, 549000000, 645000000, 6000000, mod[i]);
641 FREQ(modStr[i],
"cablehigh1", desc[i],
"Channel %1",
647 FREQ(modStr[i],
"hrc0", desc[i],
"HRC %1",
648 1, 73753600, 73753601, 6000300, mod[i]);
649 FREQ(modStr[i],
"hrc1", desc[i],
"HRC %1",
650 2, 55752700, 67753300, 6000300, mod[i]);
651 FREQ(modStr[i],
"hrc2", desc[i],
"HRC %1",
652 5, 79753900, 85754200, 6000300, mod[i]);
653 FREQ(modStr[i],
"hrc3", desc[i],
"HRC %1",
654 7, 175758700, 211760500, 6000300, mod[i]);
655 FREQ(modStr[i],
"hrc4", desc[i],
"HRC %1",
656 14, 121756000, 169758400, 6000300, mod[i]);
657 FREQ(modStr[i],
"hrc5", desc[i],
"HRC %1",
658 23, 217760800, 643782100, 6000300, mod[i]);
659 FREQ(modStr[i],
"hrc6", desc[i],
"HRC %1",
660 95, 91754500, 115755700, 6000300, mod[i]);
663 FREQ(modStr[i],
"hrc7", desc[i],
"HRC %1",
670 FREQ(modStr[i],
"hrchigh0", desc[i],
"HRC %1",
671 76, 535776700, 643782100, 6000300, mod[i]);
672 FREQ(modStr[i],
"hrchigh1", desc[i],
"HRC %1",
678 FREQ(modStr[i],
"irc0", desc[i],
"IRC %1",
679 1, 75012500, 75012501, 6000000, mod[i]);
680 FREQ(modStr[i],
"irc1", desc[i],
"IRC %1",
681 2, 57012500, 69012500, 6000000, mod[i]);
682 FREQ(modStr[i],
"irc2", desc[i],
"IRC %1",
683 5, 81012500, 87012500, 6000000, mod[i]);
684 FREQ(modStr[i],
"irc3", desc[i],
"IRC %1",
685 7, 177012500, 213012500, 6000000, mod[i]);
686 FREQ(modStr[i],
"irc4", desc[i],
"IRC %1",
687 14, 123012500, 171012500, 6000000, mod[i]);
688 FREQ(modStr[i],
"irc5", desc[i],
"IRC %1",
689 23, 219012500, 327012500, 6000000, mod[i]);
690 FREQ(modStr[i],
"irc6", desc[i],
"IRC %1",
691 42, 333025000, 333025001, 6000000, mod[i]);
692 FREQ(modStr[i],
"irc7", desc[i],
"IRC %1",
693 43, 339012500, 645012500, 6000000, mod[i]);
694 FREQ(modStr[i],
"irc8", desc[i],
"IRC %1",
695 95, 93012500, 105012500, 6000000, mod[i]);
696 FREQ(modStr[i],
"irc9", desc[i],
"IRC %1",
697 98, 111025000, 117025000, 6000000, mod[i]);
700 FREQ(modStr[i],
"irc10", desc[i],
"IRC %1",
707 FREQ(modStr[i],
"irchigh0", desc[i],
"IRC %1",
708 76, 537012500, 645012500, 6000000, mod[i]);
709 FREQ(modStr[i],
"irchigh1", desc[i],
"IRC %1",
718 for (
uint i = 0; i < (
uint)list.size(); i++)
720 uint64_t
freq = (list[i].freq * 1000LL) + 1750000;
721 fmap[QString(
"analog_analog_%1%2").arg(name).arg(i)] =
723 QString(
"%1 %2").arg(name, list[i].name), i+2,
static uint GetMplexID(uint sourceid, const QString &channum)
bool ParseTuningParams(DTVTunerType type, const QString &frequency, const QString &inversion, const QString &symbolrate, const QString &fec, const QString &polarity, const QString &hp_code_rate, const QString &lp_code_rate, const QString &ofdm_modulation, const QString &trans_mode, const QString &guard_interval, const QString &hierarchy, const QString &modulation, const QString &bandwidth, const QString &mod_sys, const QString &rolloff)
DTVTransmitMode m_transMode
DTVModulation m_modulation
DTVModulationSystem m_modSys
DTVGuardInterval m_guardInterval
DTVGuardInterval m_guardInterval
DTVModulation m_modulation
DTVTransmitMode m_transMode
QString GetDeviceKey(void) const
uint64_t freq_offset(uint i) const
IPTVTuningData m_iptvTuning
std::array< int, 3 > m_freqOffsets
uint GetMultiplexIdFromDB(void) const
Fetches mplexid if it exists, based on the frequency and sourceid.
std::chrono::milliseconds m_timeoutTune
Timeout to tune to a frequency.
static const std::array< const uint32_t, 4 > freq
const CHANLISTS_vec gChanLists
static freq_table_map_t frequencies
#define FREQ(A, B, C, D, E, F, G, H, I)
bool teardown_frequency_tables(void)
static constexpr uint64_t EIA_542_FREQUENCY(uint64_t bandwidth, uint64_t offset, uint64_t channel)
long long get_center_frequency(const QString &format, const QString &modulation, const QString &country, int freqid)
freq_table_list_t get_matching_freq_tables(const QString &format, const QString &modulation, const QString &country)
static freq_table_list_t get_matching_freq_tables_internal(const QString &format, const QString &modulation, const QString &country)
static void init_freq_tables(freq_table_map_t &)
static QMutex frequencies_lock
static constexpr uint8_t US_MAX_CHAN
static bool frequencies_initialized
int get_closest_freqid(const QString &format, QString modulation, const QString &country, long long centerfreq)
QMap< QString, const FrequencyTable * > freq_table_map_t
std::vector< const FrequencyTable * > freq_table_list_t
#define LOG(_MASK_, _LEVEL_, _QSTRING_)