00001
00002 #include <qmutex.h>
00003 #include <qmap.h>
00004
00005 #include "mythcontext.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 != NULL)
00014 {
00015 if (p->symbol == symbol.left(p->symbol.length()))
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 VERBOSE(VB_IMPORTANT,
00033 "DTVParamHelper::toString() index out of bounds");
00034
00035 return QString::null;
00036 }
00037
00038 return strings[index];
00039 }
00040
00041 static QMutex dtv_tt_canonical_str_lock;
00042 static QMap<int,QString> dtv_tt_canonical_str;
00043 void DTVTunerType::initStr(void)
00044 {
00045 QMutexLocker locker(&dtv_tt_canonical_str_lock);
00046 dtv_tt_canonical_str[kTunerTypeQPSK] = "QPSK";
00047 dtv_tt_canonical_str[kTunerTypeQAM] = "QAM";
00048 dtv_tt_canonical_str[kTunerTypeOFDM] = "OFDM";
00049 dtv_tt_canonical_str[kTunerTypeATSC] = "ATSC";
00050 dtv_tt_canonical_str[kTunerTypeDVB_S] = "DVB_S";
00051 dtv_tt_canonical_str[kTunerTypeDVB_C] = "DVB_C";
00052 dtv_tt_canonical_str[kTunerTypeDVB_T] = "DVB_T";
00053 dtv_tt_canonical_str[kTunerTypeDVB_S2] = "DVB_S2";
00054 dtv_tt_canonical_str[kTunerTypeUnknown] = "UNKNOWN";
00055 }
00056
00057 QString DTVTunerType::toString(int _value)
00058 {
00059 QMutexLocker locker(&dtv_tt_canonical_str_lock);
00060 QMap<int,QString>::const_iterator it = dtv_tt_canonical_str.find(_value);
00061 if (it != dtv_tt_canonical_str.end())
00062 return *it;
00063 return dtv_tt_canonical_str[kTunerTypeUnknown];
00064 }
00065
00066 const DTVParamHelperStruct DTVTunerType::parseTable[] =
00067 {
00068 { "QPSK", kTunerTypeQPSK },
00069 { "QAM", kTunerTypeQAM },
00070 { "OFDM", kTunerTypeOFDM },
00071 { "ATSC", kTunerTypeATSC },
00072 { "DVB_S", kTunerTypeDVB_S },
00073 { "DVB_C", kTunerTypeDVB_C },
00074 { "DVB_T", kTunerTypeDVB_T },
00075 { "DVB_S2", kTunerTypeDVB_S2 },
00076 { "UNKNOWN", kTunerTypeUnknown },
00077 { NULL, kTunerTypeUnknown },
00078 };
00079
00080 const DTVParamHelperStruct DTVInversion::confTable[] =
00081 {
00082 { "INVERSION_AUTO", kInversionAuto },
00083 { "INVERSION_OFF", kInversionOff },
00084 { "INVERSION_ON", kInversionOn },
00085 { NULL, kInversionAuto },
00086 };
00087
00088 const DTVParamHelperStruct DTVInversion::vdrTable[] =
00089 {
00090 { "999", kInversionAuto },
00091 { "0", kInversionOff },
00092 { "1", kInversionOn },
00093 { NULL, kInversionAuto },
00094 };
00095
00096 const DTVParamHelperStruct DTVInversion::parseTable[] =
00097 {
00098 { "a", kInversionAuto },
00099 { "0", kInversionOff },
00100 { "1", kInversionOn },
00101 { NULL, kInversionAuto },
00102 };
00103
00104 const char *DTVInversion::dbStr[DTVInversion::kDBStrCnt] =
00105 {
00106 "0",
00107 "1",
00108 "a"
00109 };
00110
00111 const DTVParamHelperStruct DTVBandwidth::confTable[] =
00112 {
00113 { "BANDWIDTH_AUTO", kBandwidthAuto },
00114 { "BANDWIDTH_8_MHZ", kBandwidth8MHz },
00115 { "BANDWIDTH_7_MHZ", kBandwidth7MHz },
00116 { "BANDWIDTH_6_MHZ", kBandwidth6MHz },
00117 { NULL, kBandwidthAuto },
00118 };
00119
00120 const DTVParamHelperStruct DTVBandwidth::vdrTable[] =
00121 {
00122 { "999", kBandwidthAuto },
00123 { "8", kBandwidth8MHz },
00124 { "7", kBandwidth7MHz },
00125 { "6", kBandwidth6MHz },
00126 { NULL, kBandwidthAuto },
00127 };
00128
00129 const DTVParamHelperStruct DTVBandwidth::parseTable[] =
00130 {
00131 { "a", kBandwidthAuto },
00132 { "8", kBandwidth8MHz },
00133 { "7", kBandwidth7MHz },
00134 { "6", kBandwidth6MHz },
00135 { NULL, kBandwidthAuto },
00136 };
00137
00138 const char *DTVBandwidth::dbStr[DTVBandwidth::kDBStrCnt] =
00139 {
00140 "8",
00141 "7",
00142 "6",
00143 "a"
00144 };
00145
00146 const DTVParamHelperStruct DTVCodeRate::confTable[] =
00147 {
00148 { "FEC_AUTO", kFECAuto },
00149 { "FEC_1_2", kFEC_1_2 },
00150 { "FEC_2_3", kFEC_2_3 },
00151 { "FEC_3_4", kFEC_3_4 },
00152 { "FEC_4_5", kFEC_4_5 },
00153 { "FEC_5_6", kFEC_5_6 },
00154 { "FEC_6_7", kFEC_6_7 },
00155 { "FEC_7_8", kFEC_7_8 },
00156 { "FEC_8_9", kFEC_8_9 },
00157 { "FEC_NONE", kFECNone },
00158 { NULL, kFECAuto },
00159 };
00160
00161 const DTVParamHelperStruct DTVCodeRate::vdrTable[] =
00162 {
00163 { "999", kFECAuto },
00164 { "12", kFEC_1_2 },
00165 { "23", kFEC_2_3 },
00166 { "34", kFEC_3_4 },
00167 { "45", kFEC_4_5 },
00168 { "56", kFEC_5_6 },
00169 { "67", kFEC_6_7 },
00170 { "78", kFEC_7_8 },
00171 { "89", kFEC_8_9 },
00172 { "0", kFECNone },
00173 { NULL, kFECAuto }
00174 };
00175
00176 const DTVParamHelperStruct DTVCodeRate::parseTable[] =
00177 {
00178 { "auto", kFECAuto },
00179 { "1/2", kFEC_1_2 },
00180 { "2/3", kFEC_2_3 },
00181 { "3/4", kFEC_3_4 },
00182 { "4/5", kFEC_4_5 },
00183 { "5/6", kFEC_5_6 },
00184 { "6/7", kFEC_6_7 },
00185 { "7/8", kFEC_7_8 },
00186 { "8/9", kFEC_8_9 },
00187 { "none", kFECNone },
00188 { NULL, kFECAuto }
00189 };
00190
00191 const char *DTVCodeRate::dbStr[DTVCodeRate::kDBStrCnt] =
00192 {
00193 "none",
00194 "1/2",
00195 "2/3",
00196 "3/4",
00197 "4/5",
00198 "5/6",
00199 "6/7",
00200 "7/8",
00201 "8/9",
00202 "auto"
00203 };
00204
00205 const DTVParamHelperStruct DTVModulation::confTable[] =
00206 {
00207 { "QAM_AUTO", kModulationQAMAuto },
00208 { "QAM_16", kModulationQAM16 },
00209 { "QAM_32", kModulationQAM32 },
00210 { "QAM_64", kModulationQAM64 },
00211 { "QAM_128", kModulationQAM128 },
00212 { "QAM_256", kModulationQAM256 },
00213 { "QPSK", kModulationQPSK },
00214 { "8VSB", kModulation8VSB },
00215 { "16VSB", kModulation16VSB },
00216 { "2VSB", kModulation2VSB },
00217 { "4VSB", kModulation4VSB },
00218 { "BPSK", kModulationBPSK },
00219 { "16APSK", kModulation16APSK },
00220 { "32APSK", kModulation32APSK },
00221 { "8PSK", kModulation8PSK },
00222 { "16PSK", kModulation16PSK },
00223 { "analog", kModulation16PSK },
00224 { NULL, kModulationQAMAuto },
00225 };
00226
00227 const DTVParamHelperStruct DTVModulation::vdrTable[] =
00228 {
00229 { "999", kModulationQAMAuto },
00230 { "16", kModulationQAM16 },
00231 { "32", kModulationQAM32 },
00232 { "64", kModulationQAM64 },
00233 { "128", kModulationQAM128 },
00234 { "256", kModulationQAM256 },
00235 { "0", kModulationQPSK },
00236 { NULL, kModulationQAMAuto },
00237 };
00238
00239 const DTVParamHelperStruct DTVModulation::parseTable[] =
00240 {
00241 { "auto", kModulationQAMAuto },
00242 { "qam_16", kModulationQAM16 },
00243 { "qam_32", kModulationQAM32 },
00244 { "qam_64", kModulationQAM64 },
00245 { "qam_128", kModulationQAM128 },
00246 { "qam_256", kModulationQAM256 },
00247 { "qpsk", kModulationQPSK },
00248 { "8vsb", kModulation8VSB },
00249 { "16vsb", kModulation16VSB },
00250 { "2vsb", kModulation2VSB },
00251 { "4vsb", kModulation4VSB },
00252 { "bpsk", kModulationBPSK },
00253 { "16apsk", kModulation16APSK },
00254 { "32apsk", kModulation32APSK },
00255 { "8psk", kModulation8PSK },
00256 { "16psk", kModulation16PSK },
00257
00258 { "a", kModulationQAMAuto },
00259 { "qam_auto", kModulationQAMAuto },
00260 { "qam-16", kModulationQAM16 },
00261 { "qam-32", kModulationQAM32 },
00262 { "qam-64", kModulationQAM64 },
00263 { "qam-128", kModulationQAM128 },
00264 { "qam-256", kModulationQAM256 },
00265
00266 { "8-vsb", kModulation8VSB },
00267 { "16-vsb", kModulation16VSB },
00268 { "2-vsb", kModulation2VSB },
00269 { "4-vsb", kModulation4VSB },
00270
00271 { "16-apsk", kModulation16APSK },
00272 { "32-apsk", kModulation32APSK },
00273 { "8-psk", kModulation8PSK },
00274 { "16-psk", kModulation16PSK },
00275 { NULL, kModulationQAMAuto },
00276 };
00277
00278 const char *DTVModulation::dbStr[DTVModulation::kDBStrCnt] =
00279 {
00280 "qpsk",
00281 "qam_16",
00282 "qam_32",
00283 "qam_64",
00284 "qam_128",
00285 "qam_256",
00286 "auto",
00287 "8vsb",
00288 "16vsb",
00289 "2vsb",
00290 "4vsb",
00291 "bpsk",
00292 "16apsk",
00293 "32apsk",
00294 "8psk",
00295 "16psk",
00296 };
00297
00298 const DTVParamHelperStruct DTVTransmitMode::confTable[] =
00299 {
00300 { "TRANSMISSION_MODE_AUTO", kTransmissionModeAuto },
00301 { "TRANSMISSION_MODE_2K", kTransmissionMode2K },
00302 { "TRANSMISSION_MODE_8K", kTransmissionMode8K },
00303 { NULL, kTransmissionModeAuto },
00304 };
00305
00306 const DTVParamHelperStruct DTVTransmitMode::vdrTable[] =
00307 {
00308 { "999", kTransmissionModeAuto },
00309 { "2", kTransmissionMode2K },
00310 { "8", kTransmissionMode8K },
00311 { NULL, kTransmissionModeAuto },
00312 };
00313
00314 const DTVParamHelperStruct DTVTransmitMode::parseTable[] =
00315 {
00316 { "a", kTransmissionModeAuto },
00317 { "2", kTransmissionMode2K },
00318 { "8", kTransmissionMode8K },
00319 { NULL, kTransmissionModeAuto },
00320 };
00321
00322 const char *DTVTransmitMode::dbStr[DTVTransmitMode::kDBStrCnt] =
00323 {
00324 "2",
00325 "8",
00326 "a"
00327 };
00328
00329 const DTVParamHelperStruct DTVGuardInterval::confTable[] =
00330 {
00331 { "GUARD_INTERVAL_AUTO", kGuardIntervalAuto },
00332 { "GUARD_INTERVAL_1_32", kGuardInterval_1_32 },
00333 { "GUARD_INTERVAL_1_16", kGuardInterval_1_16 },
00334 { "GUARD_INTERVAL_1_8", kGuardInterval_1_8 },
00335 { "GUARD_INTERVAL_1_4", kGuardInterval_1_4 },
00336 { NULL, kGuardIntervalAuto },
00337 };
00338
00339 const DTVParamHelperStruct DTVGuardInterval::vdrTable[] =
00340 {
00341 { "999", kGuardIntervalAuto },
00342 { "32", kGuardInterval_1_32 },
00343 { "16", kGuardInterval_1_16 },
00344 { "8", kGuardInterval_1_8 },
00345 { "4", kGuardInterval_1_4 },
00346 { NULL, kGuardIntervalAuto },
00347 };
00348
00349 const DTVParamHelperStruct DTVGuardInterval::parseTable[] =
00350 {
00351 { "auto", kGuardIntervalAuto },
00352 { "1/32", kGuardInterval_1_32 },
00353 { "1/16", kGuardInterval_1_16 },
00354 { "1/8", kGuardInterval_1_8 },
00355 { "1/4", kGuardInterval_1_4 },
00356 { NULL, kGuardIntervalAuto },
00357 };
00358
00359 const char *DTVGuardInterval::dbStr[DTVGuardInterval::kDBStrCnt] =
00360 {
00361 "1/32",
00362 "1/16",
00363 "1/8",
00364 "1/4",
00365 "auto"
00366 };
00367
00368 const DTVParamHelperStruct DTVHierarchy::confTable[] =
00369 {
00370 { "HIERARCHY_NONE", kHierarchyNone },
00371 { "HIERARCHY_1", kHierarchy1 },
00372 { "HIERARCHY_2", kHierarchy2 },
00373 { "HIERARCHY_4", kHierarchy4 },
00374 { "HIERARCHY_AUTO", kHierarchyAuto },
00375 { NULL, kHierarchyAuto },
00376 };
00377
00378 const DTVParamHelperStruct DTVHierarchy::vdrTable[] =
00379 {
00380 { "0", kHierarchyNone },
00381 { "1", kHierarchy1 },
00382 { "2", kHierarchy2 },
00383 { "4", kHierarchy4 },
00384 { "999", kHierarchyAuto },
00385 { NULL, kHierarchyAuto },
00386 };
00387
00388 const DTVParamHelperStruct DTVHierarchy::parseTable[] =
00389 {
00390 { "n", kHierarchyNone },
00391 { "1", kHierarchy1 },
00392 { "2", kHierarchy2 },
00393 { "4", kHierarchy4 },
00394 { "a", kHierarchyAuto },
00395 { NULL, kHierarchyAuto },
00396 };
00397
00398 const char *DTVHierarchy::dbStr[DTVHierarchy::kDBStrCnt] =
00399 {
00400 "n",
00401 "1",
00402 "2",
00403 "4",
00404 "a"
00405 };
00406
00407 const DTVParamHelperStruct DTVPolarity::parseTable[] =
00408 {
00409 { "v", kPolarityVertical },
00410 { "h", kPolarityHorizontal },
00411 { "r", kPolarityRight },
00412 { "l", kPolarityLeft },
00413 { NULL, kPolarityVertical },
00414 };
00415
00416 const char *DTVPolarity::dbStr[DTVPolarity::kDBStrCnt] =
00417 {
00418 "v",
00419 "h",
00420 "r",
00421 "l"
00422 };