4 from enigma import eTimer
6 from urllib import urlretrieve
9 from Screens.Screen import Screen
10 from Screens.MessageBox import MessageBox
12 from Plugins.Plugin import PluginDescriptor
14 from Tools.Directories import fileExists
16 from Components.Label import Label
17 from Components.Slider import Slider
18 from Components.Pixmap import Pixmap
19 from Components.FileList import FileList
20 from Components.ActionMap import ActionMap
21 from Components.PluginComponent import plugins
22 from Components.Sources.StaticText import StaticText
24 class UpgradeStatus(Screen):
26 <screen position="center,center" size="450,130" title="FPGA Upgrade">
27 <widget name="name" position="10,0" size="430,20" font="Regular;18" halign="left" valign="bottom"/>
28 <widget name="slider" position="10,25" size="430,30" backgroundColor="white"/>
29 <widget name="status" position="10,25" zPosition="1" size="430,30" font="Regular;18" halign="center" valign="center" foregroundColor="black" backgroundColor="black" transparent="1"/>
30 <widget source="info" render="Label" position="10,70" zPosition="1" size="430,60" font="Regular;22" halign="center" valign="center" backgroundColor="#a08500" transparent="1"/>
33 def __init__(self, session, parent, timeout = 20):
34 Screen.__init__(self,session)
35 self.session = session
37 self["actions"] = ActionMap(["OkCancelActions"],
45 self.title_str = "FPGA Upgrade"
47 #self["name"] = Label(_("Upgrade status"))
48 self["name"] = Label(_(" "))
49 self["info"] = StaticText(_("Can't cancel during upgrade!!"))
51 self["status"] = Label(_("Status : 0%"))
52 self.status_bar = self["status"]
54 self.slider = Slider(0, 100)
55 self["slider"] = self.slider
58 self.timer_check_progress = eTimer()
59 self.timer_check_progress.callback.append(self.callbackDoCheckProgress)
60 interval = self.parent.FPGA.get_interval()
61 self.timer_check_progress.start(interval)
62 self.need_restart = False
64 def callbackDoCheckProgress(self):
65 self.status = self.parent.FPGA.get_status()
68 self.slider.setValue(self.status)
70 if self.status == 100:
71 #print "fpga-upgrade done!!"
72 self.status_bar.setText(_("Succeed"))
73 #self.status_bar.setText(_("%d / 100" % (self.status)))
74 self.timer_check_progress.stop()
76 self.timer_exit = eTimer()
77 self.timer_exit.callback.append(self.callbackExit)
78 self.timer_exit.start(1000)
80 elif self.status < 0:#elif self.status == -1 or self.status == -2:
81 #print "fpga-upgrade error >> errno : [%d]" % (self.status)
83 ERROR_CODE = int(self.status) * -1
84 ERROR_MSG = self.parent.FPGA.get_error_msg(ERROR_CODE, ERROR_MSG)
85 self.status_bar.setText("Fail to update!!")
86 self["info"].setText(_("Error[%d] : %s.\nPress OK to exit." % (self.status, ERROR_MSG)))
87 self.timer_check_progress.stop()
91 #print "fpga-upgrade status : %d" % self.status
92 self.status_bar.setText(_("%d / 100" % (self.status)))
94 def callbackExit(self):
95 self.need_restart = True
96 if self.exit_count == self.timeout:
97 self.timer_exit.stop()
99 self.exit_count = self.exit_count + 1
100 #self.instance.setTitle("%s (%d)" % (self.title_str, (self.timeout-self.exit_count)))
101 self["info"].setText("Reboot after %d seconds.\nPress the OK to reboot now." %(self.timeout-self.exit_count))
104 if self.need_restart:
105 from Screens.Standby import TryQuitMainloop
106 self.session.open(TryQuitMainloop, 2)
110 class FPGAUpgrade(Screen):
112 <screen position="center,center" size="560,440" title="FPGA Upgrade" >
113 <ePixmap pixmap="Vu_HD/buttons/red.png" position="0,7" size="80,40" alphatest="blend" />
114 <ePixmap pixmap="Vu_HD/buttons/green.png" position="186,7" size="80,40" alphatest="blend" />
115 <ePixmap pixmap="Vu_HD/buttons/blue.png" position="372,7" size="80,40" alphatest="blend" />
117 <widget source="key_red" render="Label" position="28,0" zPosition="1" size="160,40" font="Regular;20" halign="center" valign="center" transparent="1"/>
118 <widget source="key_green" render="Label" position="213,0" zPosition="1" size="160,40" font="Regular;20" halign="center" valign="center" transparent="1"/>
119 <widget source="key_blue" render="Label" position="400,0" zPosition="1" size="160,40" font="Regular;20" halign="center" valign="center" transparent="1"/>
121 <widget source="status" render="Label" position="15,45" zPosition="1" size="540,40" font="Regular;18" halign="left" valign="center" backgroundColor="#a08500" transparent="1" />
122 <widget name="file_list" position="0,100" size="555,325" scrollbarMode="showOnDemand" />
126 def __init__(self, session):
127 Screen.__init__(self, session)
128 self.session = session
130 self["key_red"] = StaticText(_("Close"))
131 self["key_green"] = StaticText(_("Upgrade"))
132 self["key_blue"] = StaticText(_("Download"))
134 self["status"] = StaticText(_(" "))
135 self["file_list"] = FileList("/", matchingPattern = "^.*")
137 self["actions"] = ActionMap(["OkCancelActions", "ShortcutActions", "WizardActions", "ColorActions", ],
139 "red": self.onClickRed,
140 "green": self.onClickGreen,
141 "blue": self.onClickBlue,
142 "back": self.onClickRed,
143 "ok": self.onClickOk,
144 "up": self.onClickUp,
145 "down": self.onClickDown,
146 "left": self.onClickLeft,
147 "right": self.onClickRight,
149 self.onLayoutFinish.append(self.doLayoutFinish)
153 self.SOURCELIST = self["file_list"]
154 self.STATUS_BAR = self["status"]
155 self.STATUS_BAR.setText(_(self.SOURCELIST.getCurrentDirectory()))
157 self.DEVICE_LIST = '/dev/fpga_dp;/dev/misc/dp;'
158 self.DOWNLOAD_TAR_PATH = '/tmp/'
159 self.DOWNLOAD_FILE_NAME = 'TS_PRO.dat'
160 self.DOWNLOAD_URL = ''
162 self.FPGA = fpga.Fpga()
163 print self.DEVICE_LIST
164 print self.DOWNLOAD_TAR_PATH
165 print self.DOWNLOAD_FILE_NAME
166 print self.DOWNLOAD_URL
168 def doLayoutFinish(self):
172 if fileExists(self.DOWNLOAD_TAR_PATH + self.DOWNLOAD_FILE_NAME):
173 os.remove(self.DOWNLOAD_TAR_PATH + self.DOWNLOAD_FILE_NAME)
176 def doLoadConf(self):
177 if fileExists("/proc/stb/info/vumodel"):
178 model = open("/proc/stb/info/vumodel").read().strip()
179 download_uri_header = open('/usr/lib/enigma2/python/Plugins/SystemPlugins/FPGAUpgrade/fpga.conf').readline().strip()
180 self.DOWNLOAD_URL = str(download_uri_header) + "vu" + str(model) + "/" + self.DOWNLOAD_FILE_NAME
182 def doHook(self, blockNumber, blockSize, totalSize) :
183 if blockNumber*blockSize > totalSize :
184 self.STATUS_BAR.setText(_("Downloaded " + self.DOWNLOAD_TAR_PATH + self.DOWNLOAD_FILE_NAME))
186 self.STATUS_BAR.setText(_("Downloading..."))
188 def onCallbackHandler(self, confirmed):
192 def doUpgradeHandler(self, confirmed):
193 if confirmed == False:
198 path = self.SOURCELIST.getCurrentDirectory() + self.SOURCELIST.getFilename()
200 #self.session.open(MessageBox, _("Can't select directory."), MessageBox.TYPE_INFO, timeout = 5)
204 device_list = self.DEVICE_LIST.split(";")
206 for d in device_list:
207 if os.path.exists(d):
211 if device == None or len(device) == 0:
212 message = "Fail to upgrade.\nCause : Can't found device.\nDo you want to exit?"
213 self.session.openWithCallback(self.onCallbackHandler, MessageBox, _(message), MessageBox.TYPE_YESNO, timeout = 10, default = True)
214 print "DEVICE_LIST : ", device_list
216 print "DEVICE : ", device
217 self.ERROR_CODE = self.FPGA.fpga_upgrade(path, device)
218 if self.ERROR_CODE > 0:
219 self.ERROR_MSG = self.FPGA.get_error_msg(self.ERROR_CODE, self.ERROR_MSG)
220 message = "Fail to upgrade.\nCause : " + self.ERROR_MSG + "\nDo you want to exit?"
221 self.session.openWithCallback(self.onCallbackHandler, MessageBox, _(message), MessageBox.TYPE_YESNO, timeout = 10, default = True)
222 print "DEVICE : ", device
223 print "FILE : ", path
225 #self.session.open(MessageBox, _("Success!!"), MessageBox.TYPE_INFO, timeout = 5)
226 self.session.open(UpgradeStatus, self, timeout = 20)
228 def onClickRed(self):
232 def onClickGreen(self):
233 #self.session.open(MessageBox, _("Upgrade will take about 5 minutes to finish."), MessageBox.TYPE_INFO, timeout = 10)
234 message = "Upgrade will take about 5 minutes to finish.\nDo you want to upgrade?"
235 self.session.openWithCallback(self.doUpgradeHandler, MessageBox, _(message), MessageBox.TYPE_YESNO, timeout = 10, default = True)
237 def onClickBlue(self):
240 test_opener = urllib.URLopener()
242 test_opener.open(self.DOWNLOAD_URL)
244 self.session.open(MessageBox, _('File not found'), MessageBox.TYPE_INFO, timeout = 5)
248 fname, header = urlretrieve(self.DOWNLOAD_URL, self.DOWNLOAD_TAR_PATH + self.DOWNLOAD_FILE_NAME, self.doHook)
250 self.session.open(MessageBox, _(str(msg)), MessageBox.TYPE_INFO, timeout = 5)
256 self.SOURCELIST.changeDir(self.DOWNLOAD_TAR_PATH)
257 self.SOURCELIST.moveToIndex(0)
258 while cmp(self.SOURCELIST.getFilename(), self.DOWNLOAD_FILE_NAME) != 0 :
259 self.SOURCELIST.down()
260 if cmp(before_name, self.SOURCELIST.getFilename()) == 0:
262 before_name = self.SOURCELIST.getFilename()
265 if self.SOURCELIST.canDescent() : # isDir
266 self.SOURCELIST.descent()
267 if self.SOURCELIST.getCurrentDirectory():
268 self.STATUS_BAR.setText(_(self.SOURCELIST.getCurrentDirectory()))
274 self.STATUS_BAR.setText(_(self.SOURCELIST.getCurrentDirectory()))
276 def onClickDown(self):
277 self.SOURCELIST.down()
278 self.STATUS_BAR.setText(_(self.SOURCELIST.getCurrentDirectory()))
280 def onClickLeft(self):
281 self.SOURCELIST.pageUp()
282 self.STATUS_BAR.setText(_(self.SOURCELIST.getCurrentDirectory()))
284 def onClickRight(self):
285 self.SOURCELIST.pageDown()
286 self.STATUS_BAR.setText(_(self.SOURCELIST.getCurrentDirectory()))
288 def main(session, **kwargs):
289 session.open(FPGAUpgrade)
291 def Plugins(**kwargs):
292 return PluginDescriptor(name=_("FPGA Upgrade"), description="Upgrade FPGA..", where = PluginDescriptor.WHERE_PLUGINMENU, fnc=main)