X-Git-Url: http://code.vuplus.com/gitweb/?a=blobdiff_plain;f=lib%2Fdvb%2Fdb.cpp;h=0f367be5ec8b709da7c562a03aecf207c744ae86;hb=097eb7b26bdc1fc761a745b71bfab29e076856c0;hp=522035eb7585b751c0f22bf6ac117ea0bdc03ed9;hpb=80a99b08bd6e0932a420e805d928dc5ae5b80f61;p=vuplus_dvbapp diff --git a/lib/dvb/db.cpp b/lib/dvb/db.cpp old mode 100644 new mode 100755 index 522035e..0f367be --- a/lib/dvb/db.cpp +++ b/lib/dvb/db.cpp @@ -160,9 +160,10 @@ int eDVBService::isPlayable(const eServiceReference &ref, const eServiceReferenc else { eDVBChannelID chid, chid_ignore; + int system; ((const eServiceReferenceDVB&)ref).getChannelID(chid); ((const eServiceReferenceDVB&)ignore).getChannelID(chid_ignore); - return res_mgr->canAllocateChannel(chid, chid_ignore, simulate); + return res_mgr->canAllocateChannel(chid, chid_ignore, system, simulate); } return 0; } @@ -325,19 +326,11 @@ void eDVBDB::loadServicelist(const char *file) { eDebug("---- opening lame channel db"); FILE *f=fopen(file, "rt"); - if (!f && strcmp(file, eEnv::resolve("${sysconfdir}/enigma2/lamedb").c_str()) == 0) - { - struct stat s; - if ( !stat("lamedb", &s) ) - { - if ( !stat(eEnv::resolve("${sysconfdir}/enigma2").c_str(), &s) ) - { - rename("lamedb", eEnv::resolve("${sysconfdir}/enigma2/lamedb").c_str()); - reloadServicelist(); - } - } + if (!f) { + eDebug("can't open %s: %m", file); return; } + char line[256]; int version=3; if ((!fgets(line, 256, f)) || sscanf(line, "eDVB services /%d/", &version) != 1) @@ -406,8 +399,9 @@ void eDVBDB::loadServicelist(const char *file) } else if (line[1]=='t') { eDVBFrontendParametersTerrestrial ter; - int frequency, bandwidth, code_rate_HP, code_rate_LP, modulation, transmission_mode, guard_interval, hierarchy, inversion, flags=0; - sscanf(line+3, "%d:%d:%d:%d:%d:%d:%d:%d:%d:%d", &frequency, &bandwidth, &code_rate_HP, &code_rate_LP, &modulation, &transmission_mode, &guard_interval, &hierarchy, &inversion, &flags); + int frequency, bandwidth, code_rate_HP, code_rate_LP, modulation, transmission_mode, guard_interval, hierarchy, inversion, flags = 0, plpid = 0; + int system=eDVBFrontendParametersTerrestrial::System_DVB_T; + sscanf(line+3, "%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d", &frequency, &bandwidth, &code_rate_HP, &code_rate_LP, &modulation, &transmission_mode, &guard_interval, &hierarchy, &inversion, &flags, &system, &plpid); ter.frequency = frequency; ter.bandwidth = bandwidth; ter.code_rate_HP = code_rate_HP; @@ -417,6 +411,8 @@ void eDVBDB::loadServicelist(const char *file) ter.guard_interval = guard_interval; ter.hierarchy = hierarchy; ter.inversion = inversion; + ter.system = system; + ter.plpid = plpid; feparm->setDVBT(ter); feparm->setFlags(flags); } else if (line[1]=='c') @@ -540,10 +536,10 @@ void eDVBDB::saveServicelist(const char *file) } else if (!ch.m_frontendParameters->getDVBT(ter)) { - fprintf(f, "\tt %d:%d:%d:%d:%d:%d:%d:%d:%d:%d\n", + fprintf(f, "\tt %d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d\n", ter.frequency, ter.bandwidth, ter.code_rate_HP, ter.code_rate_LP, ter.modulation, ter.transmission_mode, - ter.guard_interval, ter.hierarchy, ter.inversion, flags); + ter.guard_interval, ter.hierarchy, ter.inversion, flags, ter.system, ter.plpid); } else if (!ch.m_frontendParameters->getDVBC(cab)) { @@ -623,24 +619,16 @@ void eDVBDB::loadBouquet(const char *path) p+=path; eDebug("loading bouquet... %s", p.c_str()); FILE *fp=fopen(p.c_str(), "rt"); - int entries=0; if (!fp) { - struct stat s; - if ( !stat(path, &s) ) - { - rename(path, p.c_str() ); - loadBouquet(path); - return; - } - eDebug("failed to open."); - if ( strstr(path, "bouquets.tv") ) + eDebug("can't open %s: %m", p.c_str()); + if (!strcmp(path, "bouquets.tv")) { eDebug("recreate bouquets.tv"); bouquet.m_bouquet_name="Bouquets (TV)"; bouquet.flushChanges(); } - else if ( strstr(path, "bouquets.radio") ) + else if (!strcmp(path, "bouquets.radio")) { eDebug("recreate bouquets.radio"); bouquet.m_bouquet_name="Bouquets (Radio)"; @@ -648,29 +636,25 @@ void eDVBDB::loadBouquet(const char *path) } return; } - char line[256]; + int entries=0; + size_t linesize = 256; + char *line = (char*)malloc(linesize); bool read_descr=false; eServiceReference *e = NULL; while (1) { - if (!fgets(line, 256, fp)) - break; - line[strlen(line)-1]=0; - if (strlen(line) && line[strlen(line)-1]=='\r') - line[strlen(line)-1]=0; - if (!line[0]) - break; + int len; + if ((len = getline(&line, &linesize, fp)) < 2) break; + /* strip newline */ + line[--len] = 0; + /* strip carriage return (when found) */ + if (line[len - 1] == '\r') line[--len] = 0; if (line[0]=='#') { if (!strncmp(line, "#SERVICE", 8)) { int offs = line[8] == ':' ? 10 : 9; eServiceReference tmp(line+offs); - if (tmp.type != eServiceReference::idDVB) - { - eDebug("only DVB Bouquets supported"); - continue; - } if ( tmp.flags&eServiceReference::canDescent ) { size_t pos = tmp.path.rfind('/'); @@ -720,6 +704,7 @@ void eDVBDB::loadBouquet(const char *path) continue; } } + free(line); fclose(fp); eDebug("%d entries in Bouquet %s", entries, bouquet_name.c_str()); } @@ -1077,7 +1062,8 @@ PyObject *eDVBDB::readTerrestrials(ePyObject ter_list, ePyObject tp_dict) const Attribute *at; std::string name; int tmp, *dest, - freq, bw, constellation, crh = 5, crl = 5, guard = 4, transm, hierarchy, inv = 2; +// freq, bw, constellation, crh = 5, crl = 5, guard = 4, transm, hierarchy, inv = 2; + freq, bw, constellation, crh, crl, guard, transm, hierarchy, inv, system, plpid; char *end_ptr; const ElementList &root_elements = root->getElementList(); for (ElementConstIterator it(root_elements.begin()); it != root_elements.end(); ++it) @@ -1127,6 +1113,8 @@ PyObject *eDVBDB::readTerrestrials(ePyObject ter_list, ePyObject tp_dict) transm = eDVBFrontendParametersTerrestrial::TransmissionMode_Auto; hierarchy = eDVBFrontendParametersTerrestrial::Hierarchy_Auto; inv = eDVBFrontendParametersTerrestrial::Inversion_Unknown; + system = eDVBFrontendParametersTerrestrial::System_DVB_T; + plpid = 0; for (AttributeConstIterator it(tp_attributes.begin()); it != end; ++it) { // eDebug("\t\tattr: %s", at->name().c_str()); @@ -1142,6 +1130,8 @@ PyObject *eDVBDB::readTerrestrials(ePyObject ter_list, ePyObject tp_dict) else if (name == "transmission_mode") dest = &transm; else if (name == "hierarchy_information") dest = &hierarchy; else if (name == "inversion") dest = &inv; + else if (name == "system") dest = &system; + else if (name == "plp_id") dest = &plpid; else continue; if (dest) { @@ -1152,11 +1142,11 @@ PyObject *eDVBDB::readTerrestrials(ePyObject ter_list, ePyObject tp_dict) } if (freq) { - if (crh > 5) // our terrestrial.xml is buggy... 6 for AUTO - crh = 5; - if (crl > 5) // our terrestrial.xml is buggy... 6 for AUTO - crl = 5; - tuple = PyTuple_New(10); + if (crh > eDVBFrontendParametersTerrestrial::FEC_8_9) + crh = eDVBFrontendParametersTerrestrial::FEC_Auto; + if (crl > eDVBFrontendParametersTerrestrial::FEC_8_9) + crl = eDVBFrontendParametersTerrestrial::FEC_Auto; + tuple = PyTuple_New(12); PyTuple_SET_ITEM(tuple, 0, PyInt_FromLong(2)); PyTuple_SET_ITEM(tuple, 1, PyInt_FromLong(freq)); PyTuple_SET_ITEM(tuple, 2, PyInt_FromLong(bw)); @@ -1167,6 +1157,8 @@ PyObject *eDVBDB::readTerrestrials(ePyObject ter_list, ePyObject tp_dict) PyTuple_SET_ITEM(tuple, 7, PyInt_FromLong(transm)); PyTuple_SET_ITEM(tuple, 8, PyInt_FromLong(hierarchy)); PyTuple_SET_ITEM(tuple, 9, PyInt_FromLong(inv)); + PyTuple_SET_ITEM(tuple, 10, PyInt_FromLong(system)); + PyTuple_SET_ITEM(tuple, 11, PyInt_FromLong(plpid)); PyList_Append(tplist, tuple); Py_DECREF(tuple); }