00001
00002 #include <QMutex>
00003 #include <QMap>
00004
00005 #include "mythlogging.h"
00006 #include "dtvconfparserhelpers.h"
00007
00008 bool DTVParamHelper::ParseParam(const QString &symbol, int &value,
00009 const DTVParamHelperStruct *table)
00010 {
00011 const DTVParamHelperStruct *p = table;
00012
00013 while (!p->symbol.isEmpty())
00014 {
00015 if (p->symbol == symbol)
00016 {
00017
00018 value = p->value;
00019 return true;
00020 }
00021 p++;
00022 }
00023
00024 return false;
00025 }
00026
00027 QString DTVParamHelper::toString(const char *strings[], int index,
00028 uint strings_size)
00029 {
00030 if ((index < 0) || ((uint)index >= strings_size))
00031 {
00032 LOG(VB_GENERAL, LOG_ERR,
00033 "DTVParamHelper::toString() index out of bounds");
00034
00035 return QString::null;
00036 }
00037
00038 return strings[index];
00039 }
00040
00041 const int DTVTunerType::kTunerTypeDVBS1 = 0x0000;
00042 const int DTVTunerType::kTunerTypeDVBS2 = 0x0020;
00043 const int DTVTunerType::kTunerTypeDVBC = 0x0001;
00044 const int DTVTunerType::kTunerTypeDVBT = 0x0002;
00045 const int DTVTunerType::kTunerTypeATSC = 0x0003;
00046 const int DTVTunerType::kTunerTypeASI = 0x1000;
00047 const int DTVTunerType::kTunerTypeOCUR = 0x2000;
00048 const int DTVTunerType::kTunerTypeUnknown = 0x80000000;
00049
00050 static QMutex dtv_tt_canonical_str_lock;
00051 static QMap<int,QString> dtv_tt_canonical_str;
00052 void DTVTunerType::initStr(void)
00053 {
00054 QMutexLocker locker(&dtv_tt_canonical_str_lock);
00055 dtv_tt_canonical_str[kTunerTypeATSC] = "ATSC";
00056 dtv_tt_canonical_str[kTunerTypeDVBT] = "OFDM";
00057 dtv_tt_canonical_str[kTunerTypeDVBC] = "QAM";
00058 dtv_tt_canonical_str[kTunerTypeDVBS1] = "QPSK";
00059 dtv_tt_canonical_str[kTunerTypeDVBS2] = "DVB_S2";
00060 dtv_tt_canonical_str[kTunerTypeASI] = "ASI";
00061 dtv_tt_canonical_str[kTunerTypeOCUR] = "OCUR";
00062 dtv_tt_canonical_str[kTunerTypeUnknown] = "UNKNOWN";
00063 }
00064
00065 QString DTVTunerType::toString(int _value)
00066 {
00067 QMutexLocker locker(&dtv_tt_canonical_str_lock);
00068 QMap<int,QString>::const_iterator it = dtv_tt_canonical_str.find(_value);
00069 if (it != dtv_tt_canonical_str.end())
00070 return *it;
00071 return dtv_tt_canonical_str[kTunerTypeUnknown];
00072 }
00073
00074 const DTVParamHelperStruct DTVTunerType::parseTable[] =
00075 {
00076 { "QPSK", kTunerTypeDVBS1 },
00077 { "QAM", kTunerTypeDVBC },
00078 { "OFDM", kTunerTypeDVBT },
00079 { "ATSC", kTunerTypeATSC },
00080 { "DVB_S2", kTunerTypeDVBS2 },
00081 { "ASI", kTunerTypeASI },
00082 { "OCUR", kTunerTypeOCUR },
00083 { "UNKNOWN", kTunerTypeUnknown },
00084 { NULL, kTunerTypeUnknown },
00085 };
00086
00087 const DTVParamHelperStruct DTVInversion::confTable[] =
00088 {
00089 { "INVERSION_AUTO", kInversionAuto },
00090 { "INVERSION_OFF", kInversionOff },
00091 { "INVERSION_ON", kInversionOn },
00092 { NULL, kInversionAuto },
00093 };
00094
00095 const DTVParamHelperStruct DTVInversion::vdrTable[] =
00096 {
00097 { "999", kInversionAuto },
00098 { "0", kInversionOff },
00099 { "1", kInversionOn },
00100 { NULL, kInversionAuto },
00101 };
00102
00103 const DTVParamHelperStruct DTVInversion::parseTable[] =
00104 {
00105 { "a", kInversionAuto },
00106 { "0", kInversionOff },
00107 { "1", kInversionOn },
00108 { NULL, kInversionAuto },
00109 };
00110
00111 const char *DTVInversion::dbStr[DTVInversion::kDBStrCnt] =
00112 {
00113 "0",
00114 "1",
00115 "a"
00116 };
00117
00118 const DTVParamHelperStruct DTVBandwidth::confTable[] =
00119 {
00120 { "BANDWIDTH_AUTO", kBandwidthAuto },
00121 { "BANDWIDTH_8_MHZ", kBandwidth8MHz },
00122 { "BANDWIDTH_7_MHZ", kBandwidth7MHz },
00123 { "BANDWIDTH_6_MHZ", kBandwidth6MHz },
00124 { NULL, kBandwidthAuto },
00125 };
00126
00127 const DTVParamHelperStruct DTVBandwidth::vdrTable[] =
00128 {
00129 { "999", kBandwidthAuto },
00130 { "8", kBandwidth8MHz },
00131 { "7", kBandwidth7MHz },
00132 { "6", kBandwidth6MHz },
00133 { NULL, kBandwidthAuto },
00134 };
00135
00136 const DTVParamHelperStruct DTVBandwidth::parseTable[] =
00137 {
00138 { "a", kBandwidthAuto },
00139 { "8", kBandwidth8MHz },
00140 { "7", kBandwidth7MHz },
00141 { "6", kBandwidth6MHz },
00142 { NULL, kBandwidthAuto },
00143 };
00144
00145 const char *DTVBandwidth::dbStr[DTVBandwidth::kDBStrCnt] =
00146 {
00147 "8",
00148 "7",
00149 "6",
00150 "a"
00151 };
00152
00153 const DTVParamHelperStruct DTVCodeRate::confTable[] =
00154 {
00155 { "FEC_AUTO", kFECAuto },
00156 { "FEC_1_2", kFEC_1_2 },
00157 { "FEC_2_3", kFEC_2_3 },
00158 { "FEC_3_4", kFEC_3_4 },
00159 { "FEC_4_5", kFEC_4_5 },
00160 { "FEC_5_6", kFEC_5_6 },
00161 { "FEC_6_7", kFEC_6_7 },
00162 { "FEC_7_8", kFEC_7_8 },
00163 { "FEC_8_9", kFEC_8_9 },
00164 { "FEC_NONE", kFECNone },
00165 { "FEC_3_5", kFEC_3_5 },
00166 { "FEC_9_10", kFEC_9_10 },
00167 { NULL, kFECAuto },
00168 };
00169
00170 const DTVParamHelperStruct DTVCodeRate::vdrTable[] =
00171 {
00172 { "999", kFECAuto },
00173 { "12", kFEC_1_2 },
00174 { "23", kFEC_2_3 },
00175 { "34", kFEC_3_4 },
00176 { "45", kFEC_4_5 },
00177 { "56", kFEC_5_6 },
00178 { "67", kFEC_6_7 },
00179 { "78", kFEC_7_8 },
00180 { "89", kFEC_8_9 },
00181 { "0", kFECNone },
00182 { "35", kFEC_3_5 },
00183 { "910", kFEC_9_10 },
00184 { NULL, kFECAuto }
00185 };
00186
00187 const DTVParamHelperStruct DTVCodeRate::parseTable[] =
00188 {
00189 { "auto", kFECAuto },
00190 { "1/2", kFEC_1_2 },
00191 { "2/3", kFEC_2_3 },
00192 { "3/4", kFEC_3_4 },
00193 { "4/5", kFEC_4_5 },
00194 { "5/6", kFEC_5_6 },
00195 { "6/7", kFEC_6_7 },
00196 { "7/8", kFEC_7_8 },
00197 { "8/9", kFEC_8_9 },
00198 { "none", kFECNone },
00199 { "3/5", kFEC_3_5 },
00200 { "9/10", kFEC_9_10},
00201 { NULL, kFECAuto }
00202 };
00203
00204 const char *DTVCodeRate::dbStr[DTVCodeRate::kDBStrCnt] =
00205 {
00206 "none",
00207 "1/2",
00208 "2/3",
00209 "3/4",
00210 "4/5",
00211 "5/6",
00212 "6/7",
00213 "7/8",
00214 "8/9",
00215 "auto",
00216 "3/5",
00217 "9/10",
00218 };
00219
00220 const DTVParamHelperStruct DTVModulation::confTable[] =
00221 {
00222 { "QAM_AUTO", kModulationQAMAuto },
00223 { "QAM_16", kModulationQAM16 },
00224 { "QAM_32", kModulationQAM32 },
00225 { "QAM_64", kModulationQAM64 },
00226 { "QAM_128", kModulationQAM128 },
00227 { "QAM_256", kModulationQAM256 },
00228 { "QPSK", kModulationQPSK },
00229 { "8VSB", kModulation8VSB },
00230 { "16VSB", kModulation16VSB },
00231 { "8PSK", kModulation8PSK },
00232 { "16APSK", kModulation16APSK },
00233 { "32APSK", kModulation32APSK },
00234 { "DQPSK", kModulationDQPSK },
00235 { "16PSK", kModulationInvalid },
00236 { "2VSB", kModulationInvalid },
00237 { "4VSB", kModulationInvalid },
00238 { "BPSK", kModulationInvalid },
00239 { "analog", kModulationAnalog },
00240 { NULL, kModulationQAMAuto },
00241 };
00242
00243 const DTVParamHelperStruct DTVModulation::vdrTable[] =
00244 {
00245 { "998", kModulationQAMAuto },
00246 { "16", kModulationQAM16 },
00247 { "32", kModulationQAM32 },
00248 { "64", kModulationQAM64 },
00249 { "128", kModulationQAM128 },
00250 { "256", kModulationQAM256 },
00251 { "2", kModulationQPSK },
00252 { "5", kModulation8PSK },
00253 { "6", kModulation16APSK },
00254 { "7", kModulation32APSK },
00255 { "10", kModulation8VSB },
00256 { "11", kModulation16VSB },
00257 { NULL, kModulationQAMAuto },
00258 };
00259
00260 const DTVParamHelperStruct DTVModulation::parseTable[] =
00261 {
00262 { "auto", kModulationQAMAuto },
00263 { "qam_16", kModulationQAM16 },
00264 { "qam_32", kModulationQAM32 },
00265 { "qam_64", kModulationQAM64 },
00266 { "qam_128", kModulationQAM128 },
00267 { "qam_256", kModulationQAM256 },
00268 { "qpsk", kModulationQPSK },
00269 { "8vsb", kModulation8VSB },
00270 { "16vsb", kModulation16VSB },
00271 { "8psk", kModulation8PSK },
00272 { "16apsk", kModulation16APSK },
00273 { "32apsk", kModulation32APSK },
00274 { "dqpsk", kModulationDQPSK },
00275
00276 { "a", kModulationQAMAuto },
00277 { "qam_auto", kModulationQAMAuto },
00278 { "qam-16", kModulationQAM16 },
00279 { "qam-32", kModulationQAM32 },
00280 { "qam-64", kModulationQAM64 },
00281 { "qam-128", kModulationQAM128 },
00282 { "qam-256", kModulationQAM256 },
00283
00284 { "8-vsb", kModulation8VSB },
00285 { "16-vsb", kModulation16VSB },
00286
00287 { "16-apsk", kModulation16APSK },
00288 { "32-apsk", kModulation32APSK },
00289 { "8-psk", kModulation8PSK },
00290
00291 { "bpsk", kModulationInvalid },
00292 { "2vsb", kModulationInvalid },
00293 { "2-vsb", kModulationInvalid },
00294 { "4vsb", kModulationInvalid },
00295 { "4-vsb", kModulationInvalid },
00296 { "16psk", kModulationInvalid },
00297 { "16-psk", kModulationInvalid },
00298 { NULL, kModulationQAMAuto },
00299 };
00300
00301 const char *DTVModulation::dbStr[DTVModulation::kDBStrCnt] =
00302 {
00303 "qpsk",
00304 "qam_16",
00305 "qam_32",
00306 "qam_64",
00307 "qam_128",
00308 "qam_256",
00309 "auto",
00310 "8vsb",
00311 "16vsb",
00312 "8psk",
00313 "16apsk",
00314 "32apsk",
00315 "dqpsk"
00316 };
00317
00318 const DTVParamHelperStruct DTVTransmitMode::confTable[] =
00319 {
00320 { "TRANSMISSION_MODE_AUTO", kTransmissionModeAuto },
00321 { "TRANSMISSION_MODE_2K", kTransmissionMode2K },
00322 { "TRANSMISSION_MODE_8K", kTransmissionMode8K },
00323 { NULL, kTransmissionModeAuto },
00324 };
00325
00326 const DTVParamHelperStruct DTVTransmitMode::vdrTable[] =
00327 {
00328 { "999", kTransmissionModeAuto },
00329 { "2", kTransmissionMode2K },
00330 { "8", kTransmissionMode8K },
00331 { NULL, kTransmissionModeAuto },
00332 };
00333
00334 const DTVParamHelperStruct DTVTransmitMode::parseTable[] =
00335 {
00336 { "a", kTransmissionModeAuto },
00337 { "2", kTransmissionMode2K },
00338 { "8", kTransmissionMode8K },
00339 { NULL, kTransmissionModeAuto },
00340 };
00341
00342 const char *DTVTransmitMode::dbStr[DTVTransmitMode::kDBStrCnt] =
00343 {
00344 "2",
00345 "8",
00346 "a"
00347 };
00348
00349 const DTVParamHelperStruct DTVGuardInterval::confTable[] =
00350 {
00351 { "GUARD_INTERVAL_AUTO", kGuardIntervalAuto },
00352 { "GUARD_INTERVAL_1_32", kGuardInterval_1_32 },
00353 { "GUARD_INTERVAL_1_16", kGuardInterval_1_16 },
00354 { "GUARD_INTERVAL_1_8", kGuardInterval_1_8 },
00355 { "GUARD_INTERVAL_1_4", kGuardInterval_1_4 },
00356 { NULL, kGuardIntervalAuto },
00357 };
00358
00359 const DTVParamHelperStruct DTVGuardInterval::vdrTable[] =
00360 {
00361 { "999", kGuardIntervalAuto },
00362 { "32", kGuardInterval_1_32 },
00363 { "16", kGuardInterval_1_16 },
00364 { "8", kGuardInterval_1_8 },
00365 { "4", kGuardInterval_1_4 },
00366 { NULL, kGuardIntervalAuto },
00367 };
00368
00369 const DTVParamHelperStruct DTVGuardInterval::parseTable[] =
00370 {
00371 { "auto", kGuardIntervalAuto },
00372 { "1/32", kGuardInterval_1_32 },
00373 { "1/16", kGuardInterval_1_16 },
00374 { "1/8", kGuardInterval_1_8 },
00375 { "1/4", kGuardInterval_1_4 },
00376 { NULL, kGuardIntervalAuto },
00377 };
00378
00379 const char *DTVGuardInterval::dbStr[DTVGuardInterval::kDBStrCnt] =
00380 {
00381 "1/32",
00382 "1/16",
00383 "1/8",
00384 "1/4",
00385 "auto"
00386 };
00387
00388 const DTVParamHelperStruct DTVHierarchy::confTable[] =
00389 {
00390 { "HIERARCHY_NONE", kHierarchyNone },
00391 { "HIERARCHY_1", kHierarchy1 },
00392 { "HIERARCHY_2", kHierarchy2 },
00393 { "HIERARCHY_4", kHierarchy4 },
00394 { "HIERARCHY_AUTO", kHierarchyAuto },
00395 { NULL, kHierarchyAuto },
00396 };
00397
00398 const DTVParamHelperStruct DTVHierarchy::vdrTable[] =
00399 {
00400 { "0", kHierarchyNone },
00401 { "1", kHierarchy1 },
00402 { "2", kHierarchy2 },
00403 { "4", kHierarchy4 },
00404 { "999", kHierarchyAuto },
00405 { NULL, kHierarchyAuto },
00406 };
00407
00408 const DTVParamHelperStruct DTVHierarchy::parseTable[] =
00409 {
00410 { "n", kHierarchyNone },
00411 { "1", kHierarchy1 },
00412 { "2", kHierarchy2 },
00413 { "4", kHierarchy4 },
00414 { "a", kHierarchyAuto },
00415 { NULL, kHierarchyAuto },
00416 };
00417
00418 const char *DTVHierarchy::dbStr[DTVHierarchy::kDBStrCnt] =
00419 {
00420 "n",
00421 "1",
00422 "2",
00423 "4",
00424 "a"
00425 };
00426
00427 const DTVParamHelperStruct DTVPolarity::parseTable[] =
00428 {
00429 { "v", kPolarityVertical },
00430 { "h", kPolarityHorizontal },
00431 { "r", kPolarityRight },
00432 { "l", kPolarityLeft },
00433 { NULL, kPolarityVertical },
00434 };
00435
00436 const char *DTVPolarity::dbStr[DTVPolarity::kDBStrCnt] =
00437 {
00438 "v",
00439 "h",
00440 "r",
00441 "l"
00442 };
00443
00444 const DTVParamHelperStruct DTVModulationSystem::confTable[] =
00445 {
00446 { "SYS_UNDEFINED", kModulationSystem_UNDEFINED },
00447 { "SYS_DVBC_ANNEX_AC", kModulationSystem_DVBC_ANNEX_AC },
00448 { "SYS_DVBC_ANNEX_B", kModulationSystem_DVBC_ANNEX_B },
00449 { "SYS_DVBT", kModulationSystem_DVBT },
00450 { "SYS_DSS", kModulationSystem_DSS },
00451 { "SYS_DVBS", kModulationSystem_DVBS },
00452 { "SYS_DVBS2", kModulationSystem_DVBS2 },
00453 { "SYS_DVBH", kModulationSystem_DVBH },
00454 { "SYS_ISDBT", kModulationSystem_ISDBT },
00455 { "SYS_ISDBS", kModulationSystem_ISDBS },
00456 { "SYS_ISDBC", kModulationSystem_ISDBC },
00457 { "SYS_ATSC", kModulationSystem_ATSC },
00458 { "SYS_ATSCMH", kModulationSystem_ATSCMH },
00459 { "SYS_DMBTH", kModulationSystem_DMBTH },
00460 { "SYS_CMMB", kModulationSystem_CMMB },
00461 { "SYS_DAB", kModulationSystem_DAB },
00462 { NULL, kModulationSystem_UNDEFINED },
00463 };
00464
00465 const DTVParamHelperStruct DTVModulationSystem::vdrTable[] =
00466 {
00467 { "0", kModulationSystem_DVBS },
00468 { "1", kModulationSystem_DVBS2 },
00469 { NULL, kModulationSystem_UNDEFINED },
00470 };
00471
00472 const DTVParamHelperStruct DTVModulationSystem::parseTable[] =
00473 {
00474 { "UNDEFINED", kModulationSystem_UNDEFINED },
00475 { "DVBC_AC", kModulationSystem_DVBC_ANNEX_AC },
00476 { "DVBC_B", kModulationSystem_DVBC_ANNEX_B },
00477 { "DVBT", kModulationSystem_DVBT },
00478 { "DSS", kModulationSystem_DSS },
00479 { "DVB-S", kModulationSystem_DVBS },
00480 { "DVB-S2", kModulationSystem_DVBS2 },
00481 { "DVBH", kModulationSystem_DVBH },
00482 { "ISDBT", kModulationSystem_ISDBT },
00483 { "ISDBS", kModulationSystem_ISDBS },
00484 { "ISDBC", kModulationSystem_ISDBC },
00485 { "ATSC", kModulationSystem_ATSC },
00486 { "ATSCMH", kModulationSystem_ATSCMH },
00487 { "DMBTH", kModulationSystem_DMBTH },
00488 { "CMMB", kModulationSystem_CMMB },
00489 { "DAB", kModulationSystem_DAB },
00490 { NULL, kModulationSystem_UNDEFINED },
00491 };
00492
00493 const char *DTVModulationSystem::dbStr[DTVModulationSystem::kDBStrCnt] =
00494 {
00495 "UNDEFINED",
00496 "DVBCAC",
00497 "DVBC_B",
00498 "DVBT",
00499 "DSS",
00500 "DVB-S",
00501 "DVB-S2",
00502 "DVBH",
00503 "ISDBT",
00504 "ISDBS",
00505 "ISDBC",
00506 "ATSC",
00507 "ATSCMH",
00508 "DMBTH",
00509 "CMMB",
00510 "DAB",
00511 };
00512
00513 const DTVParamHelperStruct DTVRollOff::confTable[] =
00514 {
00515 { "ROLLOFF_35", kRollOff_35 },
00516 { "ROLLOFF_20", kRollOff_20 },
00517 { "ROLLOFF_25", kRollOff_25 },
00518 { "ROLLOFF_AUTO", kRollOff_Auto },
00519 { NULL, kRollOff_35 },
00520 };
00521
00522 const DTVParamHelperStruct DTVRollOff::vdrTable[] =
00523 {
00524 { "35", kRollOff_35 },
00525 { "20", kRollOff_20 },
00526 { "25", kRollOff_25 },
00527 { "0", kRollOff_Auto },
00528 { NULL, kRollOff_35 },
00529 };
00530 const DTVParamHelperStruct DTVRollOff::parseTable[] =
00531 {
00532 { "0.35", kRollOff_35 },
00533 { "0.20", kRollOff_20 },
00534 { "0.25", kRollOff_25 },
00535 { "auto", kRollOff_Auto },
00536 { NULL, kRollOff_35 },
00537 };
00538
00539 const char *DTVRollOff::dbStr[DTVRollOff::kDBStrCnt] =
00540 {
00541 "0.35",
00542 "0.20",
00543 "0.25",
00544 "auto",
00545 };