123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851 |
- import sys
- import os
- from time import time
-
- if os.path.isfile("/usr/lib/enigma2/python/enigma.zip"):
- sys.path.append("/usr/lib/enigma2/python/enigma.zip")
-
- from Tools.Profile import profile, profile_final
- profile("PYTHON_START")
-
- import Tools.RedirectOutput
- import enigma
- from boxbranding import getBoxType, getBrandOEM, getMachineBuild
- import eConsoleImpl
- import eBaseImpl
- enigma.eTimer = eBaseImpl.eTimer
- enigma.eSocketNotifier = eBaseImpl.eSocketNotifier
- enigma.eConsoleAppContainer = eConsoleImpl.eConsoleAppContainer
- boxtype = getBoxType()
-
- if os.path.isfile("/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/plugin.pyo") and boxtype in ('dm7080','dm820'):
- import pyo_patcher
-
- from traceback import print_exc
- profile("SimpleSummary")
- from Screens import InfoBar
- from Screens.SimpleSummary import SimpleSummary
-
- from sys import stdout, exc_info
-
- profile("Bouquets")
- from Components.config import config, configfile, ConfigText, ConfigYesNo, ConfigInteger, NoSave
- config.misc.load_unlinked_userbouquets = ConfigYesNo(default=False)
- def setLoadUnlinkedUserbouquets(configElement):
- enigma.eDVBDB.getInstance().setLoadUnlinkedUserbouquets(configElement.value)
- config.misc.load_unlinked_userbouquets.addNotifier(setLoadUnlinkedUserbouquets)
- enigma.eDVBDB.getInstance().reloadBouquets()
-
- profile("ParentalControl")
- import Components.ParentalControl
- Components.ParentalControl.InitParentalControl()
-
- profile("LOAD:Navigation")
- from Navigation import Navigation
-
- profile("LOAD:skin")
- from skin import readSkin
-
- profile("LOAD:Tools")
- from Tools.Directories import InitFallbackFiles, resolveFilename, SCOPE_PLUGINS, SCOPE_ACTIVE_SKIN, SCOPE_CURRENT_SKIN, SCOPE_CONFIG
- from Components.config import config, configfile, ConfigText, ConfigYesNo, ConfigInteger, ConfigSelection, NoSave
- import Components.RecordingConfig
- InitFallbackFiles()
-
- profile("config.misc")
- config.misc.boxtype = ConfigText(default = boxtype)
- config.misc.blackradiopic = ConfigText(default = resolveFilename(SCOPE_ACTIVE_SKIN, "black.mvi"))
- radiopic = resolveFilename(SCOPE_ACTIVE_SKIN, "radio.mvi")
- if os.path.exists(resolveFilename(SCOPE_CONFIG, "radio.mvi")):
- radiopic = resolveFilename(SCOPE_CONFIG, "radio.mvi")
- config.misc.radiopic = ConfigText(default = radiopic)
- #config.misc.isNextRecordTimerAfterEventActionAuto = ConfigYesNo(default=False)
- #config.misc.isNextPowerTimerAfterEventActionAuto = ConfigYesNo(default=False)
- config.misc.nextWakeup = ConfigText(default = "-1,-1,0,0,-1,0") #wakeup time, timer begins, set by (0=rectimer,1=zaptimer, 2=powertimer or 3=plugin), go in standby, next rectimer, force rectimer
- config.misc.SyncTimeUsing = ConfigSelection(default = "0", choices = [("0", "Transponder Time"), ("1", _("NTP"))])
- config.misc.NTPserver = ConfigText(default = 'pool.ntp.org', fixed_size=False)
-
- config.misc.startCounter = ConfigInteger(default=0) # number of e2 starts...
- config.misc.standbyCounter = NoSave(ConfigInteger(default=0)) # number of standby
- config.misc.DeepStandby = NoSave(ConfigYesNo(default=False)) # detect deepstandby
-
- #demo code for use of standby enter leave callbacks
- #def leaveStandby():
- # print "!!!!!!!!!!!!!!!!!leave standby"
-
- #def standbyCountChanged(configelement):
- # print "!!!!!!!!!!!!!!!!!enter standby num", configelement.value
- # from Screens.Standby import inStandby
- # inStandby.onClose.append(leaveStandby)
-
- #config.misc.standbyCounter.addNotifier(standbyCountChanged, initial_call = False)
- ####################################################
-
- def useSyncUsingChanged(configelement):
- if config.misc.SyncTimeUsing.value == "0":
- print "[Time By]: Transponder"
- enigma.eDVBLocalTimeHandler.getInstance().setUseDVBTime(True)
- enigma.eEPGCache.getInstance().timeUpdated()
- else:
- print "[Time By]: NTP"
- enigma.eDVBLocalTimeHandler.getInstance().setUseDVBTime(False)
- enigma.eEPGCache.getInstance().timeUpdated()
- config.misc.SyncTimeUsing.addNotifier(useSyncUsingChanged)
-
- def NTPserverChanged(configelement):
- if config.misc.NTPserver.value == "pool.ntp.org":
- return
- print "[NTPDATE] save /etc/default/ntpdate"
- f = open("/etc/default/ntpdate", "w")
- f.write('NTPSERVERS="' + config.misc.NTPserver.value + '"')
- f.close()
- os.chmod("/etc/default/ntpdate", 0755)
- from Components.Console import Console
- Console = Console()
- Console.ePopen('/usr/bin/ntpdate-sync')
- config.misc.NTPserver.addNotifier(NTPserverChanged, immediate_feedback = True)
-
- profile("Twisted")
- try:
- import e2reactor
- e2reactor.install()
-
- from twisted.internet import reactor
-
- def runReactor():
- reactor.run(installSignalHandlers=False)
- except ImportError:
- print "twisted not available"
- def runReactor():
- enigma.runMainloop()
-
- profile("LOAD:Plugin")
-
- # initialize autorun plugins and plugin menu entries
- from Components.PluginComponent import plugins
-
- profile("LOAD:Wizard")
- from Screens.StartWizard import *
- import Screens.Rc
- from Tools.BoundFunction import boundFunction
- from Plugins.Plugin import PluginDescriptor
-
- profile("misc")
- had = dict()
-
- def dump(dir, p = ""):
- if isinstance(dir, dict):
- for (entry, val) in dir.items():
- dump(val, p + "(dict)/" + entry)
- if hasattr(dir, "__dict__"):
- for name, value in dir.__dict__.items():
- if not had.has_key(str(value)):
- had[str(value)] = 1
- dump(value, p + "/" + str(name))
- else:
- print p + "/" + str(name) + ":" + str(dir.__class__) + "(cycle)"
- else:
- print p + ":" + str(dir)
-
- # + ":" + str(dir.__class__)
-
- # display
-
- profile("LOAD:ScreenGlobals")
- from Screens.Globals import Globals
- from Screens.SessionGlobals import SessionGlobals
- from Screens.Screen import Screen
-
- profile("Screen")
- Screen.global_screen = Globals()
-
- # Session.open:
- # * push current active dialog ('current_dialog') onto stack
- # * call execEnd for this dialog
- # * clear in_exec flag
- # * hide screen
- # * instantiate new dialog into 'current_dialog'
- # * create screens, components
- # * read, apply skin
- # * create GUI for screen
- # * call execBegin for new dialog
- # * set in_exec
- # * show gui screen
- # * call components' / screen's onExecBegin
- # ... screen is active, until it calls 'close'...
- # Session.close:
- # * assert in_exec
- # * save return value
- # * start deferred close handler ('onClose')
- # * execEnd
- # * clear in_exec
- # * hide screen
- # .. a moment later:
- # Session.doClose:
- # * destroy screen
-
- class Session:
- def __init__(self, desktop = None, summary_desktop = None, navigation = None):
- self.desktop = desktop
- self.summary_desktop = summary_desktop
- self.nav = navigation
- self.delay_timer = enigma.eTimer()
- self.delay_timer.callback.append(self.processDelay)
-
- self.current_dialog = None
-
- self.dialog_stack = [ ]
- self.summary_stack = [ ]
- self.summary = None
-
- self.in_exec = False
-
- self.screen = SessionGlobals(self)
-
- for p in plugins.getPlugins(PluginDescriptor.WHERE_SESSIONSTART):
- try:
- p(reason=0, session=self)
- except:
- print "Plugin raised exception at WHERE_SESSIONSTART"
- import traceback
- traceback.print_exc()
-
- def processDelay(self):
- callback = self.current_dialog.callback
-
- retval = self.current_dialog.returnValue
-
- if self.current_dialog.isTmp:
- self.current_dialog.doClose()
- # dump(self.current_dialog)
- del self.current_dialog
- else:
- del self.current_dialog.callback
-
- self.popCurrent()
- if callback is not None:
- callback(*retval)
-
- def execBegin(self, first=True, do_show = True):
- assert not self.in_exec
- self.in_exec = True
- c = self.current_dialog
-
- # when this is an execbegin after a execend of a "higher" dialog,
- # popSummary already did the right thing.
- if first:
- self.instantiateSummaryDialog(c)
-
- c.saveKeyboardMode()
- c.execBegin()
-
- # when execBegin opened a new dialog, don't bother showing the old one.
- if c == self.current_dialog and do_show:
- c.show()
-
- def execEnd(self, last=True):
- assert self.in_exec
- self.in_exec = False
-
- self.current_dialog.execEnd()
- self.current_dialog.restoreKeyboardMode()
- self.current_dialog.hide()
-
- if last:
- self.current_dialog.removeSummary(self.summary)
- self.popSummary()
-
- def instantiateDialog(self, screen, *arguments, **kwargs):
- return self.doInstantiateDialog(screen, arguments, kwargs, self.desktop)
-
- def deleteDialog(self, screen):
- screen.hide()
- screen.doClose()
-
- def deleteDialogWithCallback(self, callback, screen, *retval):
- screen.hide()
- screen.doClose()
- if callback is not None:
- callback(*retval)
-
- def instantiateSummaryDialog(self, screen, **kwargs):
- self.pushSummary()
- summary = screen.createSummary() or SimpleSummary
- arguments = (screen,)
- self.summary = self.doInstantiateDialog(summary, arguments, kwargs, self.summary_desktop)
- self.summary.show()
- screen.addSummary(self.summary)
-
- def doInstantiateDialog(self, screen, arguments, kwargs, desktop):
- # create dialog
- dlg = screen(self, *arguments, **kwargs)
- if dlg is None:
- return
- # read skin data
- readSkin(dlg, None, dlg.skinName, desktop)
- # create GUI view of this dialog
- dlg.setDesktop(desktop)
- dlg.applySkin()
- return dlg
-
- def pushCurrent(self):
- if self.current_dialog is not None:
- self.dialog_stack.append((self.current_dialog, self.current_dialog.shown))
- self.execEnd(last=False)
-
- def popCurrent(self):
- if self.dialog_stack:
- (self.current_dialog, do_show) = self.dialog_stack.pop()
- self.execBegin(first=False, do_show=do_show)
- else:
- self.current_dialog = None
-
- def execDialog(self, dialog):
- self.pushCurrent()
- self.current_dialog = dialog
- self.current_dialog.isTmp = False
- self.current_dialog.callback = None # would cause re-entrancy problems.
- self.execBegin()
-
- def openWithCallback(self, callback, screen, *arguments, **kwargs):
- dlg = self.open(screen, *arguments, **kwargs)
- dlg.callback = callback
- return dlg
-
- def open(self, screen, *arguments, **kwargs):
- if self.dialog_stack and not self.in_exec:
- raise RuntimeError("modal open are allowed only from a screen which is modal!")
- # ...unless it's the very first screen.
-
- self.pushCurrent()
- dlg = self.current_dialog = self.instantiateDialog(screen, *arguments, **kwargs)
- dlg.isTmp = True
- dlg.callback = None
- self.execBegin()
- return dlg
-
- def close(self, screen, *retval):
- if not self.in_exec:
- print "close after exec!"
- return
-
- # be sure that the close is for the right dialog!
- # if it's not, you probably closed after another dialog
- # was opened. this can happen if you open a dialog
- # onExecBegin, and forget to do this only once.
- # after close of the top dialog, the underlying will
- # gain focus again (for a short time), thus triggering
- # the onExec, which opens the dialog again, closing the loop.
- assert screen == self.current_dialog
-
- self.current_dialog.returnValue = retval
- self.delay_timer.start(0, 1)
- self.execEnd()
-
- def pushSummary(self):
- if self.summary is not None:
- self.summary.hide()
- self.summary_stack.append(self.summary)
- self.summary = None
-
- def popSummary(self):
- if self.summary is not None:
- self.summary.doClose()
- self.summary = self.summary_stack.pop()
- if self.summary is not None:
- self.summary.show()
-
- profile("Standby,PowerKey")
- import Screens.Standby
- from Screens.Menu import MainMenu, mdom
- from GlobalActions import globalActionMap
-
- class PowerKey:
- """ PowerKey stuff - handles the powerkey press and powerkey release actions"""
-
- def __init__(self, session):
- self.session = session
- globalActionMap.actions["power_down"]=self.powerdown
- globalActionMap.actions["power_up"]=self.powerup
- globalActionMap.actions["power_long"]=self.powerlong
- globalActionMap.actions["deepstandby"]=self.shutdown # frontpanel long power button press
- globalActionMap.actions["discrete_off"]=self.standby
- globalActionMap.actions["sleeptimer"]=self.openSleepTimer
- globalActionMap.actions["powertimer_standby"]=self.sleepStandby
- globalActionMap.actions["powertimer_deepstandby"]=self.sleepDeepStandby
- self.standbyblocked = 1
-
- def MenuClosed(self, *val):
- self.session.infobar = None
-
- def shutdown(self):
- recordings = self.session.nav.getRecordingsCheckBeforeActivateDeepStandby()
- if recordings:
- from Screens.MessageBox import MessageBox
- self.session.openWithCallback(self.gotoStandby,MessageBox,_("Recording(s) are in progress or coming up in few seconds!\nEntering standby, after recording the box will shutdown."), type = MessageBox.TYPE_INFO, close_on_any_key = True, timeout = 10)
- elif not Screens.Standby.inTryQuitMainloop and self.session.current_dialog and self.session.current_dialog.ALLOW_SUSPEND:
- self.session.open(Screens.Standby.TryQuitMainloop, 1)
-
- def powerlong(self):
- if Screens.Standby.inTryQuitMainloop or (self.session.current_dialog and not self.session.current_dialog.ALLOW_SUSPEND):
- return
- self.doAction(action = config.usage.on_long_powerpress.value)
-
- def doAction(self, action):
- self.standbyblocked = 1
- if action == "shutdown":
- self.shutdown()
- elif action == "show_menu":
- print "Show shutdown Menu"
- root = mdom.getroot()
- for x in root.findall("menu"):
- y = x.find("id")
- if y is not None:
- id = y.get("val")
- if id and id == "shutdown":
- self.session.infobar = self
- menu_screen = self.session.openWithCallback(self.MenuClosed, MainMenu, x)
- menu_screen.setTitle(_("Standby / restart"))
- return
- elif action == "standby":
- self.standby()
- elif action == "powertimerStandby":
- val = 3
- self.setSleepTimer(val)
- elif action == "powertimerDeepStandby":
- val = 4
- self.setSleepTimer(val)
- elif action == "sleeptimer":
- self.openSleepTimer()
-
- def powerdown(self):
- self.standbyblocked = 0
-
- def powerup(self):
- if self.standbyblocked == 0:
- self.doAction(action = config.usage.on_short_powerpress.value)
-
- def gotoStandby(self, ret):
- self.standby()
-
- def standby(self):
- if not Screens.Standby.inStandby and self.session.current_dialog and self.session.current_dialog.ALLOW_SUSPEND and self.session.in_exec:
- self.session.open(Screens.Standby.Standby)
-
- def openSleepTimer(self):
- from Screens.SleepTimerEdit import SleepTimerEdit
- self.session.open(SleepTimerEdit)
-
- def setSleepTimer(self, val):
- from PowerTimer import PowerTimerEntry
- sleeptime = 15
- data = (int(time() + 60), int(time() + 120))
- self.addSleepTimer(PowerTimerEntry(checkOldTimers = True, *data, timerType = val, autosleepdelay = sleeptime))
-
- def addSleepTimer(self, timer):
- from Screens.PowerTimerEntry import TimerEntry
- self.session.openWithCallback(self.finishedAdd, TimerEntry, timer)
-
- def finishedAdd(self, answer):
- if answer[0]:
- entry = answer[1]
- simulTimerList = self.session.nav.PowerTimer.record(entry)
-
- def sleepStandby(self):
- self.doAction(action = "powertimerStandby")
-
- def sleepDeepStandby(self):
- self.doAction(action = "powertimerDeepStandby")
-
- profile("Scart")
- from Screens.Scart import Scart
-
- class AutoScartControl:
- def __init__(self, session):
- self.force = False
- self.current_vcr_sb = enigma.eAVSwitch.getInstance().getVCRSlowBlanking()
- if self.current_vcr_sb and config.av.vcrswitch.value:
- self.scartDialog = session.instantiateDialog(Scart, True)
- else:
- self.scartDialog = session.instantiateDialog(Scart, False)
- config.av.vcrswitch.addNotifier(self.recheckVCRSb)
- enigma.eAVSwitch.getInstance().vcr_sb_notifier.get().append(self.VCRSbChanged)
-
- def recheckVCRSb(self, configelement):
- self.VCRSbChanged(self.current_vcr_sb)
-
- def VCRSbChanged(self, value):
- #print "vcr sb changed to", value
- self.current_vcr_sb = value
- if config.av.vcrswitch.value or value > 2:
- if value:
- self.scartDialog.showMessageBox()
- else:
- self.scartDialog.switchToTV()
-
- profile("Load:CI")
- from Screens.Ci import CiHandler
-
- profile("Load:VolumeControl")
- from Components.VolumeControl import VolumeControl
-
- from time import time, localtime, strftime
- from Tools.StbHardware import setFPWakeuptime, setRTCtime
-
- def autorestoreLoop():
- # Check if auto restore settings fails, just start the wizard (avoid a endless loop)
- count = 0
- if os.path.exists("/media/hdd/images/config/autorestore"):
- f = open("/media/hdd/images/config/autorestore", "r")
- try:
- count = int(f.read())
- except:
- count = 0;
- f.close()
- if count >= 3:
- return False
- count += 1
- f = open("/media/hdd/images/config/autorestore", "w")
- f.write(str(count))
- f.close()
- return True
-
- def runScreenTest():
- config.misc.startCounter.value += 1
-
- profile("readPluginList")
- plugins.readPluginList(resolveFilename(SCOPE_PLUGINS))
-
- profile("Init:Session")
- nav = Navigation(config.misc.nextWakeup.value)
- session = Session(desktop = enigma.getDesktop(0), summary_desktop = enigma.getDesktop(1), navigation = nav)
-
- CiHandler.setSession(session)
-
- profile("wizards")
- screensToRun = []
- RestoreSettings = None
- if os.path.exists("/media/hdd/images/config/settings") and config.misc.firstrun.value:
- if autorestoreLoop():
- RestoreSettings = True
- from Plugins.SystemPlugins.SoftwareManager.BackupRestore import RestoreScreen
- session.open(RestoreScreen, runRestore = True)
- else:
- screensToRun = [ p.__call__ for p in plugins.getPlugins(PluginDescriptor.WHERE_WIZARD) ]
- screensToRun += wizardManager.getWizards()
- else:
- if os.path.exists("/media/hdd/images/config/autorestore"):
- os.system('rm -f /media/hdd/images/config/autorestore')
- screensToRun = [ p.__call__ for p in plugins.getPlugins(PluginDescriptor.WHERE_WIZARD) ]
- screensToRun += wizardManager.getWizards()
-
- screensToRun.append((100, InfoBar.InfoBar))
- screensToRun.sort()
- print screensToRun
-
- enigma.ePythonConfigQuery.setQueryFunc(configfile.getResolvedKey)
-
- def runNextScreen(session, screensToRun, *result):
- if result:
- print "[mytest.py] quitMainloop #3"
- enigma.quitMainloop(*result)
- return
-
- screen = screensToRun[0][1]
- args = screensToRun[0][2:]
- if screensToRun:
- session.openWithCallback(boundFunction(runNextScreen, session, screensToRun[1:]), screen, *args)
- else:
- session.open(screen, *args)
-
- if not RestoreSettings:
- runNextScreen(session, screensToRun)
-
- profile("Init:VolumeControl")
- vol = VolumeControl(session)
- profile("Init:PowerKey")
- power = PowerKey(session)
-
- if boxtype in ('sf3038', 'spycat', 'e4hd', 'e4hdhybrid', 'mbmicro', 'et7500', 'mixosf5', 'mixosf7', 'mixoslumi', 'gi9196m', 'maram9', 'ixussone', 'ixussone', 'uniboxhd1', 'uniboxhd2', 'uniboxhd3', 'sezam5000hd', 'mbtwin', 'sezam1000hd', 'mbmini', 'atemio5x00', 'beyonwizt3') or getBrandOEM() in ('fulan') or getMachineBuild() in ('dags7362' , 'dags5'):
- profile("VFDSYMBOLS")
- import Components.VfdSymbols
- Components.VfdSymbols.SymbolsCheck(session)
-
- # we need session.scart to access it from within menu.xml
- session.scart = AutoScartControl(session)
-
- profile("Init:Trashcan")
- import Tools.Trashcan
- Tools.Trashcan.init(session)
-
- profile("Init:AutoVideoMode")
- import Screens.VideoMode
- Screens.VideoMode.autostart(session)
-
- profile("RunReactor")
- profile_final()
-
- if boxtype in ('sf8', 'classm', 'axodin', 'axodinc', 'starsatlx', 'genius', 'evo'):
- f = open("/dev/dbox/oled0", "w")
- f.write('-E2-')
- f.close()
-
- print "lastshutdown=%s (True = last shutdown was OK)" % config.usage.shutdownOK.value
- print "NOK shutdown action=%s" % config.usage.shutdownNOK_action.value
- print "bootup action=%s" % config.usage.boot_action.value
- if not config.usage.shutdownOK.value and not config.usage.shutdownNOK_action.value == 'normal' or not config.usage.boot_action.value == 'normal':
- print "last shutdown = %s" % config.usage.shutdownOK.value
- import Screens.PowerLost
- Screens.PowerLost.PowerLost(session)
-
- config.usage.shutdownOK.setValue(False)
- config.usage.shutdownOK.save()
- if not RestoreSettings:
- configfile.save()
-
- runReactor()
-
- print "[mytest.py] normal shutdown"
- config.misc.startCounter.save()
- config.usage.shutdownOK.setValue(True)
- config.usage.shutdownOK.save()
-
- profile("wakeup")
-
- #get currentTime
- nowTime = time()
- # if not config.misc.SyncTimeUsing.value == "0" or getBrandOEM() == 'gigablue':
- if not config.misc.SyncTimeUsing.value == "0" or boxtype.startswith('gb') or getBrandOEM().startswith('ini'):
- print "dvb time sync disabled... so set RTC now to current linux time!", strftime("%Y/%m/%d %H:%M", localtime(nowTime))
- setRTCtime(nowTime)
-
- #recordtimer
- if session.nav.isRecordTimerImageStandard: #check RecordTimer instance
- tmp = session.nav.RecordTimer.getNextRecordingTime(getNextStbPowerOn = True)
- nextRecordTime = tmp[0]
- nextRecordTimeInStandby = tmp[1]
- else:
- nextRecordTime = session.nav.RecordTimer.getNextRecordingTime()
- nextRecordTimeInStandby = session.nav.RecordTimer.isNextRecordAfterEventActionAuto()
- #zaptimer
- nextZapTime = session.nav.RecordTimer.getNextZapTime()
- nextZapTimeInStandby = 0
- #powertimer
- tmp = session.nav.PowerTimer.getNextPowerManagerTime(getNextStbPowerOn = True)
- nextPowerTime = tmp[0]
- nextPowerTimeInStandby = tmp[1]
- #plugintimer
- tmp = plugins.getNextWakeupTime(getPluginIdent = True)
- nextPluginTime = tmp[0]
- nextPluginIdent = tmp[1] #"pluginname | pluginfolder"
- tmp = tmp[1].lower()
- #start in standby, depending on plugin type
- if "epgrefresh" in tmp:
- nextPluginName = "EPGRefresh"
- nextPluginTimeInStandby = 1
- elif "vps" in tmp:
- nextPluginName = "VPS"
- nextPluginTimeInStandby = 1
- elif "serienrecorder" in tmp:
- nextPluginName = "SerienRecorder"
- nextPluginTimeInStandby = 0 # plugin function for deep standby from standby not compatible (not available)
- elif "elektro" in tmp:
- nextPluginName = "Elektro"
- nextPluginTimeInStandby = 1
- elif "minipowersave" in tmp:
- nextPluginName = "MiniPowersave"
- nextPluginTimeInStandby = 1
- elif "enhancedpowersave" in tmp:
- nextPluginName = "EnhancedPowersave"
- nextPluginTimeInStandby = 1
- else:
- #default for plugins
- nextPluginName = nextPluginIdent
- nextPluginTimeInStandby = 0
-
- wakeupList = [
- x for x in ((nextRecordTime, 0, nextRecordTimeInStandby),
- (nextZapTime, 1, nextZapTimeInStandby),
- (nextPowerTime, 2, nextPowerTimeInStandby),
- (nextPluginTime, 3, nextPluginTimeInStandby))
- if x[0] != -1
- ]
- wakeupList.sort()
-
- # individual wakeup time offset
- if config.workaround.wakeuptimeoffset.value == "standard":
- if boxtype.startswith("gb"):
- wpoffset = -120 # Gigaboxes already starts 2 min. before wakeup time
- else:
- wpoffset = 0
- else:
- wpoffset = int(config.workaround.wakeuptimeoffset.value)
-
- print "="*100
- if wakeupList and wakeupList[0][0] > 0:
- startTime = wakeupList[0]
- # wakeup time is 5 min before timer starts + offset
- wptime = startTime[0] - 300 - wpoffset
- if (wptime - nowTime) < 120: # no time to switch box back on
- wptime = int(nowTime) + 120 # so switch back on in 120 seconds
-
- #check for plugin-, zap- or power-timer to enable the 'forced' record-timer wakeup
- forceNextRecord = 0
- setStandby = startTime[2]
- if startTime[1] != 0 and nextRecordTime > 0:
- #when next record starts in 15 mins
- if abs(nextRecordTime - startTime[0]) <= 900:
- setStandby = forceNextRecord = 1
- #by vps-plugin
- elif startTime[1] == 3 and nextPluginName == "VPS":
- setStandby = forceNextRecord = 1
-
- if startTime[1] == 3:
- nextPluginName = " (%s)" % nextPluginName
- else:
- nextPluginName = ""
- print "[mytest.py] set next wakeup type to '%s'%s %s" % ({0:"record-timer",1:"zap-timer",2:"power-timer",3:"plugin-timer"}[startTime[1]], nextPluginName, {0:"and starts normal",1:"and starts in standby"}[setStandby])
- if forceNextRecord:
- print "[mytest.py] set from 'vps-plugin' or just before a 'record-timer' starts, set 'record-timer' wakeup flag"
- print "[mytest.py] set next wakeup time to", strftime("%a, %Y/%m/%d %H:%M:%S", localtime(wptime))
- #set next wakeup
- setFPWakeuptime(wptime)
- #set next standby only after shutdown in deep standby
- if Screens.Standby.quitMainloopCode != 1 and Screens.Standby.quitMainloopCode != 45:
- setStandby = 2 # 0=no standby, but get in standby if wakeup to timer start > 60 sec (not for plugin-timer, here is no standby), 1=standby, 2=no standby, when before was not in deep-standby
- config.misc.nextWakeup.value = "%d,%d,%d,%d,%d,%d" % (wptime,startTime[0],startTime[1],setStandby,nextRecordTime,forceNextRecord)
- else:
- config.misc.nextWakeup.value = "-1,-1,0,0,-1,0"
- setFPWakeuptime(int(nowTime) - 3600) #minus one hour -> overwrite old wakeup time
- print "[mytest.py] no set next wakeup time"
- config.misc.nextWakeup.save()
- print "="*100
-
- profile("stopService")
- session.nav.stopService()
- profile("nav shutdown")
- session.nav.shutdown()
-
- profile("configfile.save")
- configfile.save()
- from Screens import InfoBarGenerics
- InfoBarGenerics.saveResumePoints()
-
- return 0
-
- profile("Init:skin")
- import skin
- skin.loadSkinData(enigma.getDesktop(0))
-
- profile("InputDevice")
- import Components.InputDevice
- Components.InputDevice.InitInputDevices()
- import Components.InputHotplug
-
- profile("SetupDevices")
- import Components.SetupDevices
- Components.SetupDevices.InitSetupDevices()
-
- profile("AVSwitch")
- import Components.AVSwitch
- Components.AVSwitch.InitAVSwitch()
- Components.AVSwitch.InitiVideomodeHotplug()
-
- profile("RecordingConfig")
- import Components.RecordingConfig
- Components.RecordingConfig.InitRecordingConfig()
-
- profile("UsageConfig")
- import Components.UsageConfig
- Components.UsageConfig.InitUsageConfig()
-
- profile("Init:DebugLogCheck")
- import Screens.LogManager
- Screens.LogManager.AutoLogManager()
-
- #profile("Init:OnlineCheckState")
- #import Components.OnlineUpdateCheck
- #Components.OnlineUpdateCheck.OnlineUpdateCheck()
-
- profile("Init:NTPSync")
- import Components.NetworkTime
- Components.NetworkTime.AutoNTPSync()
-
- profile("keymapparser")
- import keymapparser
- keymapparser.readKeymap(config.usage.keymap.value)
-
- profile("Network")
- import Components.Network
- Components.Network.InitNetwork()
-
- profile("LCD")
- import Components.Lcd
- Components.Lcd.InitLcd()
- Components.Lcd.IconCheck()
- # Disable internal clock vfd for ini5000 until we can adjust it for standby
- if boxtype in ('uniboxhd1', 'uniboxhd2', 'uniboxhd3', 'sezam5000hd', 'mbtwin', 'beyonwizt3'):
- try:
- f = open("/proc/stb/fp/enable_clock", "r").readline()[:-1]
- if f != '0':
- f = open("/proc/stb/fp/enable_clock", "w")
- f.write('0')
- f.close()
- except:
- print "Error disable enable_clock for ini5000 boxes"
-
- if boxtype in ('dm7080', 'dm820'):
- f=open("/proc/stb/hdmi-rx/0/hdmi_rx_monitor","r")
- check=f.read()
- f.close()
- if check.startswith("on"):
- f=open("/proc/stb/hdmi-rx/0/hdmi_rx_monitor","w")
- f.write("off")
- f.close()
- f=open("/proc/stb/audio/hdmi_rx_monitor","r")
- check=f.read()
- f.close()
- if check.startswith("on"):
- f=open("/proc/stb/audio/hdmi_rx_monitor","w")
- f.write("off")
- f.close()
-
- profile("UserInterface")
- import Screens.UserInterfacePositioner
- Screens.UserInterfacePositioner.InitOsd()
-
- profile("EpgCacheSched")
- import Components.EpgLoadSave
- Components.EpgLoadSave.EpgCacheSaveCheck()
- Components.EpgLoadSave.EpgCacheLoadCheck()
-
- profile("RFMod")
- import Components.RFmod
- Components.RFmod.InitRFmod()
-
- profile("Init:CI")
- import Screens.Ci
- Screens.Ci.InitCiConfig()
-
- profile("RcModel")
- import Components.RcModel
-
- #from enigma import dump_malloc_stats
- #t = eTimer()
- #t.callback.append(dump_malloc_stats)
- #t.start(1000)
-
- # first, setup a screen
- try:
- runScreenTest()
-
- plugins.shutdown()
-
- Components.ParentalControl.parentalControl.save()
- except:
- print 'EXCEPTION IN PYTHON STARTUP CODE:'
- print '-'*60
- print_exc(file=stdout)
- print "[mytest.py] quitMainloop #4"
- enigma.quitMainloop(5)
- print '-'*60
|