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 = 10):
34 Screen.__init__(self,session)
35 self.session = session
37 self["actions"] = ActionMap(["OkCancelActions"],
44 self.timeout = timeout
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(_("Success. Press OK to exit."))
73 #self.status_bar.setText(_("%d / 100" % (self.status)))
74 self.timer_check_progress.stop()
77 self.timer_exit = eTimer()
78 self.timer_exit.callback.append(self.callbackExit)
79 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()
90 #print "fpga-upgrade status : %d" % self.status
91 self.status_bar.setText(_("%d / 100" % (self.status)))
93 def callbackExit(self):
94 self.need_restart = True
95 if self.exit_count == self.timeout:
96 self.timer_exit.stop()
98 self.exit_count = self.exit_count + 1
99 self.instance.setTitle("%s (%d)" % (self.title_str, (self.timeout-self.exit_count)))
102 if self.need_restart:
103 from Screens.Standby import TryQuitMainloop
104 self.session.open(TryQuitMainloop, 2)
108 class FPGAUpgrade(Screen):
110 <screen position="center,center" size="560,440" title="FPGA Upgrade" >
111 <ePixmap pixmap="Vu_HD/buttons/red.png" position="0,7" size="80,40" alphatest="blend" />
112 <ePixmap pixmap="Vu_HD/buttons/green.png" position="186,7" size="80,40" alphatest="blend" />
113 <ePixmap pixmap="Vu_HD/buttons/blue.png" position="372,7" size="80,40" alphatest="blend" />
115 <widget source="key_red" render="Label" position="28,0" zPosition="1" size="160,40" font="Regular;20" halign="center" valign="center" transparent="1"/>
116 <widget source="key_green" render="Label" position="213,0" zPosition="1" size="160,40" font="Regular;20" halign="center" valign="center" transparent="1"/>
117 <widget source="key_blue" render="Label" position="400,0" zPosition="1" size="160,40" font="Regular;20" halign="center" valign="center" transparent="1"/>
119 <widget source="status" render="Label" position="15,45" zPosition="1" size="540,40" font="Regular;18" halign="left" valign="center" backgroundColor="#a08500" transparent="1" />
120 <widget name="file_list" position="0,100" size="555,325" scrollbarMode="showOnDemand" />
124 def __init__(self, session):
125 Screen.__init__(self, session)
126 self.session = session
128 self["key_red"] = StaticText(_("Close"))
129 self["key_green"] = StaticText(_("Upgrade"))
130 self["key_blue"] = StaticText(_("Download"))
132 self["status"] = StaticText(_(" "))
133 self["file_list"] = FileList("/", matchingPattern = "^.*")
135 self["actions"] = ActionMap(["OkCancelActions", "ShortcutActions", "WizardActions", "ColorActions", ],
137 "red": self.onClickRed,
138 "green": self.onClickGreen,
139 "blue": self.onClickBlue,
140 "back": self.onClickRed,
141 "ok": self.onClickOk,
142 "up": self.onClickUp,
143 "down": self.onClickDown,
144 "left": self.onClickLeft,
145 "right": self.onClickRight,
147 self.onLayoutFinish.append(self.doLayoutFinish)
151 self.SOURCELIST = self["file_list"]
152 self.STATUS_BAR = self["status"]
153 self.STATUS_BAR.setText(_(self.SOURCELIST.getCurrentDirectory()))
155 self.DEVICE_LIST = '/dev/fpga_dp;/dev/misc/dp;'
156 self.DOWNLOAD_TAR_PATH = '/tmp/'
157 self.DOWNLOAD_FILE_NAME = 'TS_PRO.dat'
158 self.DOWNLOAD_URL = ''
160 self.FPGA = fpga.Fpga()
161 print self.DEVICE_LIST
162 print self.DOWNLOAD_TAR_PATH
163 print self.DOWNLOAD_FILE_NAME
164 print self.DOWNLOAD_URL
166 def doLayoutFinish(self):
170 if fileExists(self.DOWNLOAD_TAR_PATH + self.DOWNLOAD_FILE_NAME):
171 os.remove(self.DOWNLOAD_TAR_PATH + self.DOWNLOAD_FILE_NAME)
174 def doLoadConf(self):
175 if fileExists("/proc/stb/info/vumodel"):
176 model = open("/proc/stb/info/vumodel").read().strip()
177 download_uri_header = open('/usr/lib/enigma2/python/Plugins/SystemPlugins/FPGAUpgrade/fpga.conf').readline().strip()
178 self.DOWNLOAD_URL = str(download_uri_header) + "vu" + str(model) + "/" + self.DOWNLOAD_FILE_NAME
180 def doHook(self, blockNumber, blockSize, totalSize) :
181 if blockNumber*blockSize > totalSize :
182 self.STATUS_BAR.setText(_("Downloaded " + self.DOWNLOAD_TAR_PATH + self.DOWNLOAD_FILE_NAME))
184 self.STATUS_BAR.setText(_("Downloading..."))
186 def onCallbackHandler(self, confirmed):
190 def doUpgradeHandler(self, confirmed):
191 if confirmed == False:
196 path = self.SOURCELIST.getCurrentDirectory() + self.SOURCELIST.getFilename()
198 #self.session.open(MessageBox, _("Can't select directory."), MessageBox.TYPE_INFO, timeout = 5)
202 device_list = self.DEVICE_LIST.split(";")
204 for d in device_list:
205 if os.path.exists(d):
209 if device == None or len(device) == 0:
210 message = "Fail to upgrade.\nCause : Can't found device.\nDo you want to exit?"
211 self.session.openWithCallback(self.onCallbackHandler, MessageBox, _(message), MessageBox.TYPE_YESNO, timeout = 10, default = True)
212 print "DEVICE_LIST : ", device_list
214 print "DEVICE : ", device
215 self.ERROR_CODE = self.FPGA.fpga_upgrade(path, device)
216 if self.ERROR_CODE > 0:
217 self.ERROR_MSG = self.FPGA.get_error_msg(self.ERROR_CODE, self.ERROR_MSG)
218 message = "Fail to upgrade.\nCause : " + self.ERROR_MSG + "\nDo you want to exit?"
219 self.session.openWithCallback(self.onCallbackHandler, MessageBox, _(message), MessageBox.TYPE_YESNO, timeout = 10, default = True)
220 print "DEVICE : ", device
221 print "FILE : ", path
223 #self.session.open(MessageBox, _("Success!!"), MessageBox.TYPE_INFO, timeout = 5)
224 self.session.open(UpgradeStatus, self, timeout = 10)
226 def onClickRed(self):
230 def onClickGreen(self):
231 #self.session.open(MessageBox, _("Upgrade will take about 5 minutes to finish."), MessageBox.TYPE_INFO, timeout = 10)
232 message = "Upgrade will take about 5 minutes to finish.\nDo you want to upgrade?"
233 self.session.openWithCallback(self.doUpgradeHandler, MessageBox, _(message), MessageBox.TYPE_YESNO, timeout = 10, default = True)
235 def onClickBlue(self):
238 test_opener = urllib.URLopener()
240 test_opener.open(self.DOWNLOAD_URL)
242 self.session.open(MessageBox, _('File not found'), MessageBox.TYPE_INFO, timeout = 5)
246 fname, header = urlretrieve(self.DOWNLOAD_URL, self.DOWNLOAD_TAR_PATH + self.DOWNLOAD_FILE_NAME, self.doHook)
248 self.session.open(MessageBox, _(str(msg)), MessageBox.TYPE_INFO, timeout = 5)
254 self.SOURCELIST.changeDir(self.DOWNLOAD_TAR_PATH)
255 self.SOURCELIST.moveToIndex(0)
256 while cmp(self.SOURCELIST.getFilename(), self.DOWNLOAD_FILE_NAME) != 0 :
257 self.SOURCELIST.down()
258 if cmp(before_name, self.SOURCELIST.getFilename()) == 0:
260 before_name = self.SOURCELIST.getFilename()
263 if self.SOURCELIST.canDescent() : # isDir
264 self.SOURCELIST.descent()
265 if self.SOURCELIST.getCurrentDirectory():
266 self.STATUS_BAR.setText(_(self.SOURCELIST.getCurrentDirectory()))
272 self.STATUS_BAR.setText(_(self.SOURCELIST.getCurrentDirectory()))
274 def onClickDown(self):
275 self.SOURCELIST.down()
276 self.STATUS_BAR.setText(_(self.SOURCELIST.getCurrentDirectory()))
278 def onClickLeft(self):
279 self.SOURCELIST.pageUp()
280 self.STATUS_BAR.setText(_(self.SOURCELIST.getCurrentDirectory()))
282 def onClickRight(self):
283 self.SOURCELIST.pageDown()
284 self.STATUS_BAR.setText(_(self.SOURCELIST.getCurrentDirectory()))
286 def main(session, **kwargs):
287 session.open(FPGAUpgrade)
289 def Plugins(**kwargs):
290 return PluginDescriptor(name=_("FPGA Upgrade"), description="Upgrade FPGA..", where = PluginDescriptor.WHERE_PLUGINMENU, fnc=main)