From: acid-burn Date: Wed, 13 Oct 2010 08:09:01 +0000 (+0200) Subject: Merge commit 'origin/bug_600_softwaremanager_small_fixes' into experimental X-Git-Url: http://code.vuplus.com/gitweb/?p=vuplus_dvbapp;a=commitdiff_plain;h=f96a1caaf56a29eafb1aeac00c53fb150ee86a75;hp=bd2387ad4718ec4784eef071e9217cec1b218263 Merge commit 'origin/bug_600_softwaremanager_small_fixes' into experimental --- diff --git a/data/skin_default.xml b/data/skin_default.xml index 7cb5b00..e5b3132 100755 --- a/data/skin_default.xml +++ b/data/skin_default.xml @@ -670,12 +670,12 @@ self.instance.move(ePoint(orgpos.x() + (orgwidth - newwidth)/2, orgpos.y())) - - + + {"template": [ - MultiContentEntryText(pos = (10, 5), size = (360, 30), flags = RT_HALIGN_LEFT, text = 1), # index 1 is the nim name, - MultiContentEntryText(pos = (50, 30), size = (320, 50), font = 1, flags = RT_HALIGN_LEFT, text = 2), # index 2 is a description of the nim settings, + MultiContentEntryText(pos = (10, 5), size = (440, 30), flags = RT_HALIGN_LEFT, text = 1), # index 1 is the nim name, + MultiContentEntryText(pos = (50, 30), size = (400, 50), font = 1, flags = RT_HALIGN_LEFT, text = 2), # index 2 is a description of the nim settings, ], "fonts": [gFont("Regular", 20), gFont("Regular", 15)], "itemHeight": 80 diff --git a/data/startwizard.xml b/data/startwizard.xml index 70a6e0d..a6b773e 100644 --- a/data/startwizard.xml +++ b/data/startwizard.xml @@ -142,10 +142,10 @@ config.ParentalControl.configured.save() - + - + from ParentalControlSetup import ParentalControlChangePin @@ -153,9 +153,15 @@ if self["list"].index == 0: self.session.open(ParentalControlChangePin, config.ParentalControl.servicepin[0], _("parental control pin")) + + + -config.ParentalControl.setuppinactive.value = True +if config.ParentalControl.setuppin.value == "aaaa": + config.ParentalControl.setuppinactive.value = False +else: + config.ParentalControl.setuppinactive.value = True config.ParentalControl.setuppinactive.save() config.ParentalControl.servicepinactive.value = True config.ParentalControl.servicepinactive.save() diff --git a/lib/dvb/dvb.cpp b/lib/dvb/dvb.cpp index 40d4418..5162945 100644 --- a/lib/dvb/dvb.cpp +++ b/lib/dvb/dvb.cpp @@ -320,27 +320,34 @@ PyObject *eDVBResourceManager::setFrontendSlotInformations(ePyObject list) PyErr_SetString(PyExc_StandardError, "eDVBResourceManager::setFrontendSlotInformations argument should be a python list"); return NULL; } - if ((unsigned int)PyList_Size(list) != m_frontend.size()) + unsigned int assigned=0; + for (eSmartPtrList::iterator i(m_frontend.begin()); i != m_frontend.end(); ++i) { + int pos=0; + while (pos < PyList_Size(list)) { + ePyObject obj = PyList_GET_ITEM(list, pos++); + if (!i->m_frontend->setSlotInfo(obj)) + continue; + ++assigned; + break; + } + } + if (assigned != m_frontend.size()) { char blasel[256]; - sprintf(blasel, "eDVBResourceManager::setFrontendSlotInformations list size incorrect %d frontends avail, but %d entries in slotlist", - m_frontend.size(), PyList_Size(list)); + sprintf(blasel, "eDVBResourceManager::setFrontendSlotInformations .. assigned %d socket informations, but %d registered frontends!", + m_frontend.size(), assigned); PyErr_SetString(PyExc_StandardError, blasel); return NULL; } - int pos=0; - for (eSmartPtrList::iterator i(m_frontend.begin()); i != m_frontend.end(); ++i) - { - ePyObject obj = PyList_GET_ITEM(list, pos++); - if (!i->m_frontend->setSlotInfo(obj)) - return NULL; - } - pos=0; for (eSmartPtrList::iterator i(m_simulate_frontend.begin()); i != m_simulate_frontend.end(); ++i) { - ePyObject obj = PyList_GET_ITEM(list, pos++); - if (!i->m_frontend->setSlotInfo(obj)) - return NULL; + int pos=0; + while (pos < PyList_Size(list)) { + ePyObject obj = PyList_GET_ITEM(list, pos++); + if (!i->m_frontend->setSlotInfo(obj)) + continue; + break; + } } Py_RETURN_NONE; } diff --git a/lib/dvb/frontend.cpp b/lib/dvb/frontend.cpp index 01288d1..ebdad8a 100644 --- a/lib/dvb/frontend.cpp +++ b/lib/dvb/frontend.cpp @@ -2700,17 +2700,23 @@ int eDVBFrontend::isCompatibleWith(ePtr &feparm) bool eDVBFrontend::setSlotInfo(ePyObject obj) { - ePyObject Id, Descr, Enabled, IsDVBS2; - if (!PyTuple_Check(obj) || PyTuple_Size(obj) != 4) + ePyObject Id, Descr, Enabled, IsDVBS2, frontendId; + if (!PyTuple_Check(obj) || PyTuple_Size(obj) != 5) goto arg_error; Id = PyTuple_GET_ITEM(obj, 0); Descr = PyTuple_GET_ITEM(obj, 1); Enabled = PyTuple_GET_ITEM(obj, 2); IsDVBS2 = PyTuple_GET_ITEM(obj, 3); - if (!PyInt_Check(Id) || !PyString_Check(Descr) || !PyBool_Check(Enabled) || !PyBool_Check(IsDVBS2)) + frontendId = PyTuple_GET_ITEM(obj, 4); + m_slotid = PyInt_AsLong(Id); + if (!PyInt_Check(Id) || !PyString_Check(Descr) || !PyBool_Check(Enabled) || !PyBool_Check(IsDVBS2) || !PyInt_Check(frontendId)) goto arg_error; strcpy(m_description, PyString_AS_STRING(Descr)); - m_slotid = PyInt_AsLong(Id); + if (PyInt_AsLong(frontendId) == -1 || PyInt_AsLong(frontendId) != m_dvbid) { +// eDebugNoSimulate("skip slotinfo for slotid %d, descr %s", +// m_slotid, m_description); + return false; + } m_enabled = Enabled == Py_True; // HACK.. the rotor workaround is neede for all NIMs with LNBP21 voltage regulator... m_need_rotor_workaround = !!strstr(m_description, "Alps BSBE1") || diff --git a/lib/dvb/sec.cpp b/lib/dvb/sec.cpp index a8292c0..d48d44e 100644 --- a/lib/dvb/sec.cpp +++ b/lib/dvb/sec.cpp @@ -1004,19 +1004,6 @@ RESULT eDVBSatelliteEquipmentControl::clear() //reset some tuner configuration for (eSmartPtrList::iterator it(m_avail_frontends.begin()); it != m_avail_frontends.end(); ++it) { - long tmp; - char c; - if (sscanf(it->m_frontend->getDescription(), "BCM450%c (internal)", &c) == 1 && !it->m_frontend->getData(eDVBFrontend::LINKED_PREV_PTR, tmp) && tmp != -1) - { - FILE *f=fopen("/proc/stb/tsmux/lnb_b_input", "w"); - if (!f || fwrite("B", 1, 1, f) != 1) - eDebug("set /proc/stb/tsmux/lnb_b_input to B failed!! (%m)"); - else - { - eDebug("set /proc/stb/tsmux/lnb_b_input to B OK"); - fclose(f); - } - } it->m_frontend->setData(eDVBFrontend::SATPOS_DEPENDS_PTR, -1); it->m_frontend->setData(eDVBFrontend::LINKED_PREV_PTR, -1); it->m_frontend->setData(eDVBFrontend::LINKED_NEXT_PTR, -1); @@ -1448,17 +1435,6 @@ RESULT eDVBSatelliteEquipmentControl::setTunerLinked(int tu1, int tu2) char c; p1->m_frontend->setData(eDVBFrontend::LINKED_PREV_PTR, (long)p2); p2->m_frontend->setData(eDVBFrontend::LINKED_NEXT_PTR, (long)p1); - if (!strcmp(p1->m_frontend->getDescription(), p2->m_frontend->getDescription()) && sscanf(p1->m_frontend->getDescription(), "BCM450%c (internal)", &c) == 1) - { - FILE *f=fopen("/proc/stb/tsmux/lnb_b_input", "w"); - if (!f || fwrite("A", 1, 1, f) != 1) - eDebug("set /proc/stb/tsmux/lnb_b_input to A failed!! (%m)"); - else - { - eDebug("set /proc/stb/tsmux/lnb_b_input to A OK"); - fclose(f); - } - } } p1=p2=NULL; diff --git a/lib/python/Components/NimManager.py b/lib/python/Components/NimManager.py index b75b65e..7303186 100644 --- a/lib/python/Components/NimManager.py +++ b/lib/python/Components/NimManager.py @@ -110,9 +110,16 @@ class SecConfigure: def setSatposDepends(self, sec, nim1, nim2): print "tuner", nim1, "depends on satpos of", nim2 sec.setTunerDepends(nim1, nim2) + + def linkInternally(self, slotid): + nim = self.NimManager.getNim(slotid) + if nim.internallyConnectableTo is not None: + nim.setInternalLink() def linkNIMs(self, sec, nim1, nim2): print "link tuner", nim1, "to tuner", nim2 + if nim2 == (nim1 - 1): + self.linkInternally(nim1) sec.setTunerLinked(nim1, nim2) def getRoot(self, slotid, connto): @@ -127,6 +134,9 @@ class SecConfigure: def update(self): sec = secClass.getInstance() self.configuredSatellites = set() + for slotid in self.NimManager.getNimListOfType("DVB-S"): + if self.NimManager.nimInternallyConnectableTo(slotid) is not None: + self.NimManager.nimRemoveInternalLink(slotid) sec.clear() ## this do unlinking NIMs too !! print "sec config cleared" @@ -140,7 +150,7 @@ class SecConfigure: for slot in nim_slots: if slot.type is not None: - used_nim_slots.append((slot.slot, slot.description, slot.config.configMode.value != "nothing" and True or False, slot.isCompatible("DVB-S2"))) + used_nim_slots.append((slot.slot, slot.description, slot.config.configMode.value != "nothing" and True or False, slot.isCompatible("DVB-S2"), slot.frontend_id is None and -1 or slot.frontend_id)) eDVBResourceManager.getInstance().setFrontendSlotInformations(used_nim_slots) for slot in nim_slots: @@ -471,7 +481,7 @@ class SecConfigure: self.update() class NIM(object): - def __init__(self, slot, type, description, has_outputs = True, internally_connectable = None, multi_type = {}): + def __init__(self, slot, type, description, has_outputs = True, internally_connectable = None, multi_type = {}, frontend_id = None, i2c = None, is_empty = False): self.slot = slot if type not in ("DVB-S", "DVB-C", "DVB-T", "DVB-S2", None): @@ -483,8 +493,13 @@ class NIM(object): self.has_outputs = has_outputs self.internally_connectable = internally_connectable self.multi_type = multi_type + self.i2c = i2c + self.frontend_id = frontend_id + self.__is_empty = is_empty def isCompatible(self, what): + if not self.isSupported(): + return False compatible = { None: (None,), "DVB-S": ("DVB-S", None), @@ -517,15 +532,35 @@ class NIM(object): def getSlotID(self): return chr(ord('A') + self.slot) + def getI2C(self): + return self.i2c + def hasOutputs(self): return self.has_outputs def internallyConnectableTo(self): return self.internally_connectable + def setInternalLink(self): + if self.internally_connectable is not None: + print "setting internal link on frontend id", self.frontend_id + open("/proc/stb/frontend/%d/rf_switch" % self.frontend_id, "w").write("internal") + + def removeInternalLink(self): + if self.internally_connectable is not None: + print "removing internal link on frontend id", self.frontend_id + open("/proc/stb/frontend/%d/rf_switch" % self.frontend_id, "w").write("external") + def isMultiType(self): return (len(self.multi_type) > 0) + def isEmpty(self): + return self.__is_empty + + # empty tuners are supported! + def isSupported(self): + return (self.frontend_id is not None) or self.__is_empty + # returns dict {: } def getMultiTypeList(self): return self.multi_type @@ -548,8 +583,10 @@ class NIM(object): if self.empty: nim_text += _("(empty)") + elif not self.isSupported(): + nim_text += self.description + " (" + _("not supported") + ")" else: - nim_text += self.description + " (" + self.friendly_type + ")" + nim_text += self.description + " (" + self.friendly_type + ")" return nim_text @@ -667,14 +704,19 @@ class NimManager: entries[current_slot] = {} elif line.strip().startswith("Type:"): entries[current_slot]["type"] = str(line.strip()[6:]) + entries[current_slot]["isempty"] = False elif line.strip().startswith("Name:"): entries[current_slot]["name"] = str(line.strip()[6:]) + entries[current_slot]["isempty"] = False elif line.strip().startswith("Has_Outputs:"): input = str(line.strip()[len("Has_Outputs:") + 1:]) entries[current_slot]["has_outputs"] = (input == "yes") elif line.strip().startswith("Internally_Connectable:"): input = int(line.strip()[len("Internally_Connectable:") + 1:]) entries[current_slot]["internally_connectable"] = input + elif line.strip().startswith("Frontend_Device:"): + input = int(line.strip()[len("Frontend_Device:") + 1:]) + entries[current_slot]["frontend_device"] = input elif line.strip().startswith("Mode"): # "Mode 0: DVB-T" -> ["Mode 0", " DVB-T"] split = line.strip().split(":") @@ -683,22 +725,35 @@ class NimManager: modes = entries[current_slot].get("multi_type", {}) modes[split2[1]] = split[1].strip() entries[current_slot]["multi_type"] = modes + elif line.strip().startswith("I2C_Device:"): + input = int(line.strip()[len("I2C_Device:") + 1:]) + entries[current_slot]["i2c"] = input elif line.strip().startswith("empty"): entries[current_slot]["type"] = None entries[current_slot]["name"] = _("N/A") + entries[current_slot]["isempty"] = True nimfile.close() + from os import path + for id, entry in entries.items(): if not (entry.has_key("name") and entry.has_key("type")): entry["name"] = _("N/A") entry["type"] = None + if not (entry.has_key("i2c")): + entry["i2c"] = None if not (entry.has_key("has_outputs")): entry["has_outputs"] = True - if not (entry.has_key("internally_connectable")): - entry["internally_connectable"] = None + if entry.has_key("frontend_device"): # check if internally connectable + if path.exists("/proc/stb/frontend/%d/rf_switch" % entry["frontend_device"]): + entry["internally_connectable"] = entry["frontend_device"] - 1 + else: + entry["internally_connectable"] = None + else: + entry["frontend_device"] = entry["internally_connectable"] = None if not (entry.has_key("multi_type")): entry["multi_type"] = {} - self.nim_slots.append(NIM(slot = id, description = entry["name"], type = entry["type"], has_outputs = entry["has_outputs"], internally_connectable = entry["internally_connectable"], multi_type = entry["multi_type"])) + self.nim_slots.append(NIM(slot = id, description = entry["name"], type = entry["type"], has_outputs = entry["has_outputs"], internally_connectable = entry["internally_connectable"], multi_type = entry["multi_type"], frontend_id = entry["frontend_device"], i2c = entry["i2c"], is_empty = entry["isempty"])) def hasNimType(self, chktype): for slot in self.nim_slots: @@ -717,6 +772,12 @@ class NimManager: def getNimName(self, slotid): return self.nim_slots[slotid].description + + def getNim(self, slotid): + return self.nim_slots[slotid] + + def getI2CDevice(self, slotid): + return self.nim_slots[slotid].getI2C() def getNimListOfType(self, type, exception = -1): # returns a list of indexes for NIMs compatible to the given type, except for 'exception' @@ -747,6 +808,12 @@ class NimManager: def hasOutputs(self, slotid): return self.nim_slots[slotid].hasOutputs() + def nimInternallyConnectableTo(self, slotid): + return self.nim_slots[slotid].internallyConnectableTo() + + def nimRemoveInternalLink(self, slotid): + self.nim_slots[slotid].removeInternalLink() + def canConnectTo(self, slotid): slots = [] if self.nim_slots[slotid].internallyConnectableTo() is not None: diff --git a/lib/python/Plugins/Extensions/DVDBurn/Process.py b/lib/python/Plugins/Extensions/DVDBurn/Process.py index b64541b..e00dedd 100644 --- a/lib/python/Plugins/Extensions/DVDBurn/Process.py +++ b/lib/python/Plugins/Extensions/DVDBurn/Process.py @@ -95,6 +95,8 @@ class DemuxTask(Task): self.relevantAudioPIDs = [ ] self.getRelevantAudioPIDs(title) self.generated_files = [ ] + self.mplex_audiofiles = { } + self.mplex_videofile = "" self.mplex_streamfiles = [ ] if len(self.cutlist) > 1: self.args += [ "-cut", self.cutfile ] @@ -132,8 +134,10 @@ class DemuxTask(Task): def haveNewFile(self, file): print "[DemuxTask] produced file:", file, self.currentPID self.generated_files.append(file) - if self.currentPID in self.relevantAudioPIDs or file.endswith("m2v"): - self.mplex_streamfiles.append(file) + if self.currentPID in self.relevantAudioPIDs: + self.mplex_audiofiles[self.currentPID] = file + elif file.endswith("m2v"): + self.mplex_videofile = file def haveProgress(self, progress): #print "PROGRESS [%s]" % progress @@ -167,6 +171,12 @@ class DemuxTask(Task): f.close() def cleanup(self, failed): + print "[DemuxTask::cleanup]" + self.mplex_streamfiles = [ self.mplex_videofile ] + for pid in self.relevantAudioPIDs: + self.mplex_streamfiles.append(self.mplex_audiofiles[pid]) + print self.mplex_streamfiles + if failed: import os for file in self.generated_files: diff --git a/lib/python/Plugins/Extensions/DVDBurn/TitleCutter.py b/lib/python/Plugins/Extensions/DVDBurn/TitleCutter.py index a52fad9..71a7f23 100644 --- a/lib/python/Plugins/Extensions/DVDBurn/TitleCutter.py +++ b/lib/python/Plugins/Extensions/DVDBurn/TitleCutter.py @@ -32,9 +32,9 @@ class TitleCutter(CutListEditor): pid = str(i.getPID()) if description == "MPEG": description = "MP2" - print "[audiotrack] pid:", pid, "description:", description, "language:", DVB_lang + print "[audiotrack] pid:", pid, "description:", description, "language:", DVB_lang, "count:", x, "active:", (x < 8) self.t.properties.audiotracks.append(ConfigSubsection()) - self.t.properties.audiotracks[-1].active = ConfigYesNo(default = True) + self.t.properties.audiotracks[-1].active = ConfigYesNo(default = (x < 8)) self.t.properties.audiotracks[-1].format = ConfigFixedText(description) self.t.properties.audiotracks[-1].language = ConfigSelection(choices = languageChoices.choices, default=languageChoices.getLanguage(DVB_lang)) self.t.properties.audiotracks[-1].pid = ConfigFixedText(pid) diff --git a/lib/python/Plugins/Extensions/MediaPlayer/plugin.py b/lib/python/Plugins/Extensions/MediaPlayer/plugin.py index 9ae886f..e4bdba1 100755 --- a/lib/python/Plugins/Extensions/MediaPlayer/plugin.py +++ b/lib/python/Plugins/Extensions/MediaPlayer/plugin.py @@ -110,7 +110,7 @@ class MediaPlayer(Screen, InfoBarBase, InfoBarSeek, InfoBarAudioSelection, InfoB # 'None' is magic to start at the list of mountpoints defaultDir = config.mediaplayer.defaultDir.getValue() - self.filelist = FileList(defaultDir, matchingPattern = "(?i)^.*\.(mp2|mp3|ogg|ts|wav|wave|m3u|pls|e2pls|mpg|vob|avi|divx|m4v|mkv|mp4|m4a|dat|flac|mov)", useServiceRef = True, additionalExtensions = "4098:m3u 4098:e2pls 4098:pls") + self.filelist = FileList(defaultDir, matchingPattern = "(?i)^.*\.(mp2|mp3|ogg|ts|m2ts|wav|wave|m3u|pls|e2pls|mpg|vob|avi|divx|m4v|mkv|mp4|m4a|dat|flac|mov)", useServiceRef = True, additionalExtensions = "4098:m3u 4098:e2pls 4098:pls") self["filelist"] = self.filelist self.playlist = MyPlayList() diff --git a/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/__init__.py b/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/__init__.py index e69de29..cabaadd 100755 --- a/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/__init__.py +++ b/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/__init__.py @@ -0,0 +1,40 @@ +import sha + +def bin2long(s): + return reduce( lambda x,y:(x<<8L)+y, map(ord, s)) + +def long2bin(l): + res = "" + for byte in range(128): + res += chr((l >> (1024 - (byte + 1) * 8)) & 0xff) + return res + +def rsa_pub1024(src, mod): + return long2bin(pow(bin2long(src), 65537, bin2long(mod))) + +def decrypt_block(src, mod): + if len(src) != 128 and len(src) != 202: + return None + dest = rsa_pub1024(src[:128], mod) + hash = sha.new(dest[1:107]) + if len(src) == 202: + hash.update(src[131:192]) + result = hash.digest() + if result == dest[107:127]: + return dest + return None + +def validate_cert(cert, key): + buf = decrypt_block(cert[8:], key) + if buf is None: + return None + return buf[36:107] + cert[139:196] + +def read_random(): + try: + fd = open("/dev/urandom", "r") + buf = fd.read(8) + fd.close() + return buf + except: + return None \ No newline at end of file diff --git a/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py b/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py index 2563981..92c1628 100755 --- a/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py +++ b/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py @@ -8,12 +8,13 @@ from Screens.Screen import Screen from Screens.VirtualKeyBoard import VirtualKeyBoard from Screens.ChoiceBox import ChoiceBox from Screens.MessageBox import MessageBox -from enigma import ePoint +from enigma import ePoint, eTPM from Tools import Notifications import os from twisted.mail import smtp, relaymanager import MimeWriter, mimetools, StringIO +from __init__ import bin2long, long2bin, rsa_pub1024, decrypt_block, validate_cert, read_random config.plugins.crashlogautosubmit = ConfigSubsection() config.plugins.crashlogautosubmit.sendmail = ConfigSelection(default = "send", choices = [ @@ -376,11 +377,36 @@ def callCrashMailer(result,session): def autostart(reason, **kwargs): print "[CrashlogAutoSubmit] - autostart" - if "session" in kwargs: - try: - startMailer(kwargs["session"]) - except ImportError, e: - print "[CrashlogAutoSubmit] Twisted-mail not available, not starting CrashlogAutoSubmitter", e + try: + device = open("/proc/stb/info/model", "r").readline().strip() + except: + device = "" + if device != "dm7025": + rootkey = ['\x9f', '|', '\xe4', 'G', '\xc9', '\xb4', '\xf4', '#', '&', '\xce', '\xb3', '\xfe', '\xda', '\xc9', 'U', '`', '\xd8', '\x8c', 's', 'o', '\x90', '\x9b', '\\', 'b', '\xc0', '\x89', '\xd1', '\x8c', '\x9e', 'J', 'T', '\xc5', 'X', '\xa1', '\xb8', '\x13', '5', 'E', '\x02', '\xc9', '\xb2', '\xe6', 't', '\x89', '\xde', '\xcd', '\x9d', '\x11', '\xdd', '\xc7', '\xf4', '\xe4', '\xe4', '\xbc', '\xdb', '\x9c', '\xea', '}', '\xad', '\xda', 't', 'r', '\x9b', '\xdc', '\xbc', '\x18', '3', '\xe7', '\xaf', '|', '\xae', '\x0c', '\xe3', '\xb5', '\x84', '\x8d', '\r', '\x8d', '\x9d', '2', '\xd0', '\xce', '\xd5', 'q', '\t', '\x84', 'c', '\xa8', ')', '\x99', '\xdc', '<', '"', 'x', '\xe8', '\x87', '\x8f', '\x02', ';', 'S', 'm', '\xd5', '\xf0', '\xa3', '_', '\xb7', 'T', '\t', '\xde', '\xa7', '\xf1', '\xc9', '\xae', '\x8a', '\xd7', '\xd2', '\xcf', '\xb2', '.', '\x13', '\xfb', '\xac', 'j', '\xdf', '\xb1', '\x1d', ':', '?'] + etpm = eTPM() + l2cert = etpm.getCert(eTPM.TPMD_DT_LEVEL2_CERT) + if l2cert is None: + return + l2key = validate_cert(l2cert, rootkey) + if l2key is None: + return + l3cert = etpm.getCert(eTPM.TPMD_DT_LEVEL3_CERT) + if l3cert is None: + return + l3key = validate_cert(l3cert, l2key) + if l3key is None: + return + rnd = read_random() + if rnd is None: + return + val = etpm.challenge(rnd) + result = decrypt_block(val, l3key) + if device == "dm7025" or result[80:88] == rnd: + if "session" in kwargs: + try: + startMailer(kwargs["session"]) + except ImportError, e: + print "[CrashlogAutoSubmit] Twisted-mail not available, not starting CrashlogAutoSubmitter", e def openconfig(session, **kwargs): diff --git a/lib/python/Screens/ParentalControlSetup.py b/lib/python/Screens/ParentalControlSetup.py index eae12da..f174b58 100644 --- a/lib/python/Screens/ParentalControlSetup.py +++ b/lib/python/Screens/ParentalControlSetup.py @@ -78,21 +78,21 @@ class ParentalControlSetup(Screen, ConfigListScreen, ProtectedScreen): #self.list.append(getConfigListEntry(_("Configuration mode"), config.ParentalControl.mode)) self.list.append(getConfigListEntry(_("Protect setup"), config.ParentalControl.setuppinactive)) if config.ParentalControl.setuppinactive.value: - self.changeSetupPin = getConfigListEntry(_("Change setup pin"), NoSave(ConfigNothing())) + self.changeSetupPin = getConfigListEntry(_("Change setup PIN"), NoSave(ConfigNothing())) self.list.append(self.changeSetupPin) self.list.append(getConfigListEntry(_("Protect services"), config.ParentalControl.servicepinactive)) if config.ParentalControl.servicepinactive.value: self.list.append(getConfigListEntry(_("Parental control type"), config.ParentalControl.type)) if config.ParentalControl.mode.value == "complex": - self.changePin = getConfigListEntry(_("Change service pins"), NoSave(ConfigNothing())) + self.changePin = getConfigListEntry(_("Change service PINs"), NoSave(ConfigNothing())) self.list.append(self.changePin) elif config.ParentalControl.mode.value == "simple": - self.changePin = getConfigListEntry(_("Change service pin"), NoSave(ConfigNothing())) + self.changePin = getConfigListEntry(_("Change service PIN"), NoSave(ConfigNothing())) self.list.append(self.changePin) #Added Option to remember the service pin - self.list.append(getConfigListEntry(_("Remember service pin"), config.ParentalControl.storeservicepin)) + self.list.append(getConfigListEntry(_("Remember service PIN"), config.ParentalControl.storeservicepin)) #Added Option to remember the cancellation of service pin entry - self.list.append(getConfigListEntry(_("Remember service pin cancel"), config.ParentalControl.storeservicepincancel)) + self.list.append(getConfigListEntry(_("Remember service PIN cancel"), config.ParentalControl.storeservicepincancel)) self.editListEntry = getConfigListEntry(_("Edit services list"), NoSave(ConfigNothing())) self.list.append(self.editListEntry) #New funtion: Possibility to add Bouquets to whitelist / blacklist @@ -115,9 +115,9 @@ class ParentalControlSetup(Screen, ConfigListScreen, ProtectedScreen): if config.ParentalControl.mode.value == "complex": pass else: - self.session.open(ParentalControlChangePin, config.ParentalControl.servicepin[0], _("service pin")) + self.session.open(ParentalControlChangePin, config.ParentalControl.servicepin[0], _("service PIN")) elif self["config"].l.getCurrentSelection() == self.changeSetupPin: - self.session.open(ParentalControlChangePin, config.ParentalControl.setuppin, _("setup pin")) + self.session.open(ParentalControlChangePin, config.ParentalControl.setuppin, _("setup PIN")) elif self["config"].l.getCurrentSelection() == self.reloadLists: parentalControl.open() else: @@ -137,14 +137,14 @@ class ParentalControlSetup(Screen, ConfigListScreen, ProtectedScreen): def SetupPinMessageCallback(self, value): if value: - self.session.openWithCallback(self.cancelCB, ParentalControlChangePin, config.ParentalControl.setuppin, _("setup pin")) + self.session.openWithCallback(self.cancelCB, ParentalControlChangePin, config.ParentalControl.setuppin, _("setup PIN")) else: config.ParentalControl.setuppinactive.value = False self.keyCancel() def ServicePinMessageCallback(self, value): if value: - self.session.openWithCallback(self.cancelCB, ParentalControlChangePin, config.ParentalControl.servicepin[0], _("service pin")) + self.session.openWithCallback(self.cancelCB, ParentalControlChangePin, config.ParentalControl.servicepin[0], _("service PIN")) else: config.ParentalControl.servicepinactive.value = False self.keyCancel() @@ -317,8 +317,8 @@ class ParentalControlChangePin(Screen, ConfigListScreen, ProtectedScreen): self.pin2 = ConfigPIN(default = 1112, censor = "*") self.pin1.addEndNotifier(boundFunction(self.valueChanged, 1)) self.pin2.addEndNotifier(boundFunction(self.valueChanged, 2)) - self.list.append(getConfigListEntry(_("New pin"), NoSave(self.pin1))) - self.list.append(getConfigListEntry(_("Reenter new pin"), NoSave(self.pin2))) + self.list.append(getConfigListEntry(_("New PIN"), NoSave(self.pin1))) + self.list.append(getConfigListEntry(_("Reenter new PIN"), NoSave(self.pin2))) ConfigListScreen.__init__(self, self.list) # print "old pin:", pin #if pin.value != "aaaa": @@ -345,7 +345,7 @@ class ParentalControlChangePin(Screen, ConfigListScreen, ProtectedScreen): self.keyOK() def getPinText(self): - return _("Please enter the old pin code") + return _("Please enter the old PIN code") def isProtected(self): return (self.pin.value != "aaaa") @@ -364,9 +364,9 @@ class ParentalControlChangePin(Screen, ConfigListScreen, ProtectedScreen): if self.pin1.value == self.pin2.value: self.pin.value = self.pin1.value self.pin.save() - self.session.openWithCallback(self.close, MessageBox, _("The pin code has been changed successfully."), MessageBox.TYPE_INFO) + self.session.openWithCallback(self.close, MessageBox, _("The PIN code has been changed successfully."), MessageBox.TYPE_INFO) else: - self.session.open(MessageBox, _("The pin codes you entered are different."), MessageBox.TYPE_ERROR) + self.session.open(MessageBox, _("The PIN codes you entered are different."), MessageBox.TYPE_ERROR) def cancel(self): self.close(None) diff --git a/lib/python/Screens/Satconfig.py b/lib/python/Screens/Satconfig.py index 44f4251..a5712dc 100644 --- a/lib/python/Screens/Satconfig.py +++ b/lib/python/Screens/Satconfig.py @@ -489,7 +489,7 @@ class NimSelection(Screen): def okbuttonClick(self): nim = self["nimlist"].getCurrent() nim = nim and nim[3] - if nim is not None and not nim.empty: + if nim is not None and not nim.empty and nim.isSupported(): self.session.openWithCallback(self.updateList, self.resultclass, nim.slot) def showNim(self, nim): @@ -548,6 +548,8 @@ class NimSelection(Screen): text = _("enabled") if x.isMultiType(): text = _("Switchable tuner types:") + "(" + ','.join(x.getMultiTypeList().values()) + ")" + "\n" + text + if not x.isSupported(): + text = _("tuner is not supported") self.list.append((slotid, x.friendly_full_description, text, x)) self["nimlist"].setList(self.list) diff --git a/lib/python/Screens/ScanSetup.py b/lib/python/Screens/ScanSetup.py index f482808..2e2f836 100644 --- a/lib/python/Screens/ScanSetup.py +++ b/lib/python/Screens/ScanSetup.py @@ -192,21 +192,16 @@ class CableTransponderSearchSupport: self.cable_search_container.dataAvail.append(self.getCableTransponderData) cableConfig = config.Nims[nim_idx].cable tunername = nimmanager.getNimName(nim_idx) + bus = nimmanager.getI2CDevice(nim_idx) + if bus is None: + print "ERROR: could not get I2C device for nim", nim_idx, "for cable transponder search" + bus = 2 + if tunername == "CXD1981": - cmd = "cxd1978 --init --scan --verbose --wakeup --inv 2 --bus " - else: - cmd = "tda1002x --init --scan --verbose --wakeup --inv 2 --bus " - #FIXMEEEEEE hardcoded i2c devices for dm7025 and dm8000 - if nim_idx < 2: - if HardwareInfo().get_device_name() == "dm500hd": - cmd += "2" - else: - cmd += str(nim_idx) + cmd = "cxd1978 --init --scan --verbose --wakeup --inv 2 --bus %d" % bus else: - if nim_idx == 2: - cmd += "2" # first nim socket on DM8000 use /dev/i2c/2 - else: - cmd += "4" # second nim socket on DM8000 use /dev/i2c/4 + cmd = "tda1002x --init --scan --verbose --wakeup --inv 2 --bus %d" % bus + if cableConfig.scan_type.value == "bands": cmd += " --scan-bands " bands = 0 diff --git a/lib/service/servicemp3.cpp b/lib/service/servicemp3.cpp index 1fb1e44..9c24d4b 100644 --- a/lib/service/servicemp3.cpp +++ b/lib/service/servicemp3.cpp @@ -48,6 +48,7 @@ eServiceFactoryMP3::eServiceFactoryMP3() extensions.push_back("mp4"); extensions.push_back("mov"); extensions.push_back("m4a"); + extensions.push_back("m2ts"); sc->addServiceFactory(eServiceFactoryMP3::id, this, extensions); } diff --git a/main/bsod.cpp b/main/bsod.cpp index 45f97c6..68b5d57 100755 --- a/main/bsod.cpp +++ b/main/bsod.cpp @@ -234,6 +234,13 @@ void bsodFatal(const char *component) #endif fprintf(f, "\t\t%s\n", crash_emailaddr); fprintf(f, "\t\t\n"); + std::string activeSkin = getConfigFileValue("config.skin.primary_skin"); + if (activeSkin != "Error") + { + if (activeSkin == "") + activeSkin = "Default Skin"; + fprintf(f, "\t\t%s\n", activeSkin.c_str()); + } fprintf(f, "\t\n"); fprintf(f, "\t\n");