From 792c4625d009c6b542756ba39a555be2264cd3a8 Mon Sep 17 00:00:00 2001 From: kos Date: Wed, 24 Aug 2011 18:43:07 +0900 Subject: [PATCH] [FPGAUpgrade] improving ui --- .../Plugins/SystemPlugins/FPGAUpgrade/_fpga.so | Bin 70828 -> 43782 bytes .../Plugins/SystemPlugins/FPGAUpgrade/fpga.py | 13 +++ .../Plugins/SystemPlugins/FPGAUpgrade/plugin.py | 113 ++++++++++++++++++--- 3 files changed, 112 insertions(+), 14 deletions(-) diff --git a/lib/python/Plugins/SystemPlugins/FPGAUpgrade/_fpga.so b/lib/python/Plugins/SystemPlugins/FPGAUpgrade/_fpga.so index 79edeb38ffd19969656a38fb2875c3c1ae0058c5..0076479c028489066ac066075657f28ad8477886 100644 GIT binary patch literal 43782 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 diff --git a/lib/python/Plugins/SystemPlugins/FPGAUpgrade/fpga.py b/lib/python/Plugins/SystemPlugins/FPGAUpgrade/fpga.py index 61e1209..437e654 100644 --- a/lib/python/Plugins/SystemPlugins/FPGAUpgrade/fpga.py +++ b/lib/python/Plugins/SystemPlugins/FPGAUpgrade/fpga.py @@ -66,6 +66,17 @@ except AttributeError: _newclass = 0 +DP_NO_ACTION_FOUND = _fpga.DP_NO_ACTION_FOUND +DP_DEVICE_INFO_ACTION_CODE = _fpga.DP_DEVICE_INFO_ACTION_CODE +DP_READ_IDCODE_ACTION_CODE = _fpga.DP_READ_IDCODE_ACTION_CODE +DP_ERASE_ACTION_CODE = _fpga.DP_ERASE_ACTION_CODE +DP_PROGRAM_ACTION_CODE = _fpga.DP_PROGRAM_ACTION_CODE +DP_VERIFY_ACTION_CODE = _fpga.DP_VERIFY_ACTION_CODE +NO_SRC_FILE_PATH = _fpga.NO_SRC_FILE_PATH +NO_TAR_DEVICE_PATH = _fpga.NO_TAR_DEVICE_PATH +FAIL_OPEN_SRC_FILE = _fpga.FAIL_OPEN_SRC_FILE +ZERO_SRC_FILE_SIZE = _fpga.ZERO_SRC_FILE_SIZE +FAIL_OPEN_DEVICE = _fpga.FAIL_OPEN_DEVICE class Fpga(_object): __swig_setmethods__ = {} __setattr__ = lambda self, name, value: _swig_setattr(self, Fpga, name, value) @@ -78,8 +89,10 @@ class Fpga(_object): except: self.this = this __swig_destroy__ = _fpga.delete_Fpga __del__ = lambda self : None; + def get_interval(self): return _fpga.Fpga_get_interval(self) def get_error_msg(self, *args): return _fpga.Fpga_get_error_msg(self, *args) def fpga_upgrade(self, *args): return _fpga.Fpga_fpga_upgrade(self, *args) + def get_status(self): return _fpga.Fpga_get_status(self) Fpga_swigregister = _fpga.Fpga_swigregister Fpga_swigregister(Fpga) diff --git a/lib/python/Plugins/SystemPlugins/FPGAUpgrade/plugin.py b/lib/python/Plugins/SystemPlugins/FPGAUpgrade/plugin.py index 2066706..a5b76b0 100644 --- a/lib/python/Plugins/SystemPlugins/FPGAUpgrade/plugin.py +++ b/lib/python/Plugins/SystemPlugins/FPGAUpgrade/plugin.py @@ -1,5 +1,8 @@ import os +import fpga +from enigma import eTimer + from urllib import urlretrieve import urllib @@ -8,15 +11,93 @@ from Screens.MessageBox import MessageBox from Plugins.Plugin import PluginDescriptor -from Components.PluginComponent import plugins +from Tools.Directories import fileExists + +from Components.Label import Label +from Components.Slider import Slider from Components.Pixmap import Pixmap +from Components.FileList import FileList from Components.ActionMap import ActionMap +from Components.PluginComponent import plugins from Components.Sources.StaticText import StaticText -from Components.FileList import FileList -from Tools.Directories import fileExists +class UpgradeStatus(Screen): + skin = """ + + + + + + + """ + def __init__(self, session, parent, timeout = 10): + Screen.__init__(self,session) + self.session = session + + self["actions"] = ActionMap(["OkCancelActions"], + { + "ok": self.keyExit, + }, -1) + + self.is_done = 0 + self.exit_count = 0 + self.timeout = timeout + self.title_str = "FPGA Upgrade" + + #self["name"] = Label(_("Upgrade status")) + self["name"] = Label(_(" ")) + self["info"] = StaticText(_("Can't cancel during upgrade!!")) + + self["status"] = Label(_("Status : 0%")) + self.status_bar = self["status"] + + self.slider = Slider(0, 100) + self["slider"] = self.slider + + self.parent = parent + self.timer_check_progress = eTimer() + self.timer_check_progress.callback.append(self.callbackDoCheckProgress) + interval = self.parent.FPGA.get_interval() + self.timer_check_progress.start(interval) + + def callbackDoCheckProgress(self): + self.status = self.parent.FPGA.get_status() + + if self.status > 0: + self.slider.setValue(self.status) + + if self.status == 100: + #print "fpga-upgrade done!!" + self.status_bar.setText(_("Success. Press OK to exit.")) + #self.status_bar.setText(_("%d / 100" % (self.status))) + self.timer_check_progress.stop() + self.is_done = 1 + + self.timer_exit = eTimer() + self.timer_exit.callback.append(self.callbackExit) + self.timer_exit.start(1000) + elif self.status == -1 or self.status == -2: + #print "fpga-upgrade error >> errno : [%d]" % (self.status) + self.status_bar.setText(_("Error[%d]. Press Cancel to exit." % (self.status))) + self.timer_check_progress.stop() + self.is_done = 1 + else: + #print "fpga-upgrade status : %d" % self.status + self.status_bar.setText(_("%d / 100" % (self.status))) + + def callbackExit(self): + if self.exit_count == self.timeout: + self.timer_exit.stop() + self.keyExit() + self.exit_count = self.exit_count + 1 + self.instance.setTitle("%s (%d)" % (self.title_str, (self.timeout-self.exit_count))) + + def keyExit(self): + if self.is_done : + self.close() + class FPGAUpgrade(Screen): - skin = """ + skin = """ @@ -30,7 +111,8 @@ class FPGAUpgrade(Screen): - """ + + """ def __init__(self, session): Screen.__init__(self, session) @@ -69,7 +151,7 @@ class FPGAUpgrade(Screen): self.DOWNLOAD_FILE_NAME = 'TS_PRO.dat' self.DOWNLOAD_URL = '' self.doLoadConf() - + self.FPGA = fpga.Fpga() print self.DEVICE_PATH print self.DOWNLOAD_TAR_PATH print self.DOWNLOAD_FILE_NAME @@ -99,12 +181,12 @@ class FPGAUpgrade(Screen): if confirmed: self.doExit() + + def doUpgradeHandler(self, confirmed): if confirmed == False: return - - import fpga - FPGA = fpga.Fpga() + path = '' try: path = self.SOURCELIST.getCurrentDirectory() + self.SOURCELIST.getFilename() @@ -112,15 +194,17 @@ class FPGAUpgrade(Screen): #self.session.open(MessageBox, _("Can't select directory."), MessageBox.TYPE_INFO, timeout = 5) return - self.ERROR_CODE = FPGA.fpga_upgrade(path, self.DEVICE_PATH) + self.ERROR_CODE = self.FPGA.fpga_upgrade(path, self.DEVICE_PATH) if self.ERROR_CODE > 0: - self.ERROR_MSG = FPGA.get_error_msg(self.ERROR_CODE, self.ERROR_MSG) - self.session.openWithCallback(self.onCallbackHandler, MessageBox, _("Fail to upgrade.\nCause : " + self.ERROR_MSG + "\nDo you want to exit?"), MessageBox.TYPE_YESNO, timeout = 10, default = True) + self.ERROR_MSG = self.FPGA.get_error_msg(self.ERROR_CODE, self.ERROR_MSG) + message = "Fail to upgrade.\nCause : " + self.ERROR_MSG + "\nDo you want to exit?" + self.session.openWithCallback(self.onCallbackHandler, MessageBox, _(message), MessageBox.TYPE_YESNO, timeout = 10, default = True) print "DEVICE_PATH : ", self.DEVICE_PATH print "FILE_PATH : ", path else: - self.session.open(MessageBox, _("Success!!"), MessageBox.TYPE_INFO, timeout = 5) + #self.session.open(MessageBox, _("Success!!"), MessageBox.TYPE_INFO, timeout = 5) + self.session.open(UpgradeStatus, self, timeout = 10) def onClickRed(self): self.doExit() @@ -128,7 +212,8 @@ class FPGAUpgrade(Screen): # run upgrade!! def onClickGreen(self): #self.session.open(MessageBox, _("Upgrade will take about 5 minutes to finish."), MessageBox.TYPE_INFO, timeout = 10) - self.session.openWithCallback(self.doUpgradeHandler, MessageBox, _("Upgrade will take about 5 minutes to finish.\nDo you want to upgrade?"), MessageBox.TYPE_YESNO, timeout = 10, default = True) + message = "Upgrade will take about 5 minutes to finish.\nDo you want to upgrade?" + self.session.openWithCallback(self.doUpgradeHandler, MessageBox, _(message), MessageBox.TYPE_YESNO, timeout = 10, default = True) def onClickBlue(self): fname = '' -- 2.7.4