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,100" 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,30" 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)
63 def callbackDoCheckProgress(self):
64 self.status = self.parent.FPGA.get_status()
67 self.slider.setValue(self.status)
69 if self.status == 100:
70 #print "fpga-upgrade done!!"
71 self.status_bar.setText(_("Success. Press OK to exit."))
72 #self.status_bar.setText(_("%d / 100" % (self.status)))
73 self.timer_check_progress.stop()
76 self.timer_exit = eTimer()
77 self.timer_exit.callback.append(self.callbackExit)
78 self.timer_exit.start(1000)
79 elif self.status == -1 or self.status == -2:
80 #print "fpga-upgrade error >> errno : [%d]" % (self.status)
81 self.status_bar.setText(_("Error[%d]. Press Cancel to exit." % (self.status)))
82 self.timer_check_progress.stop()
85 #print "fpga-upgrade status : %d" % self.status
86 self.status_bar.setText(_("%d / 100" % (self.status)))
88 def callbackExit(self):
89 if self.exit_count == self.timeout:
90 self.timer_exit.stop()
92 self.exit_count = self.exit_count + 1
93 self.instance.setTitle("%s (%d)" % (self.title_str, (self.timeout-self.exit_count)))
99 class FPGAUpgrade(Screen):
101 <screen position="center,center" size="560,440" title="FPGA Upgrade" >
102 <ePixmap pixmap="Vu_HD/buttons/red.png" position="0,7" size="80,40" alphatest="blend" />
103 <ePixmap pixmap="Vu_HD/buttons/green.png" position="186,7" size="80,40" alphatest="blend" />
104 <ePixmap pixmap="Vu_HD/buttons/blue.png" position="372,7" size="80,40" alphatest="blend" />
106 <widget source="key_red" render="Label" position="28,0" zPosition="1" size="160,40" font="Regular;20" halign="center" valign="center" transparent="1"/>
107 <widget source="key_green" render="Label" position="213,0" zPosition="1" size="160,40" font="Regular;20" halign="center" valign="center" transparent="1"/>
108 <widget source="key_blue" render="Label" position="400,0" zPosition="1" size="160,40" font="Regular;20" halign="center" valign="center" transparent="1"/>
110 <widget source="status" render="Label" position="15,45" zPosition="1" size="540,40" font="Regular;18" halign="left" valign="center" backgroundColor="#a08500" transparent="1" />
111 <widget name="file_list" position="0,100" size="555,325" scrollbarMode="showOnDemand" />
115 def __init__(self, session):
116 Screen.__init__(self, session)
117 self.session = session
119 self["key_red"] = StaticText(_("Close"))
120 self["key_green"] = StaticText(_("Upgrade"))
121 self["key_blue"] = StaticText(_("Download"))
123 self["status"] = StaticText(_(" "))
124 self["file_list"] = FileList("/", matchingPattern = "^.*")
126 self["actions"] = ActionMap(["OkCancelActions", "ShortcutActions", "WizardActions", "ColorActions", ],
128 "red": self.onClickRed,
129 "green": self.onClickGreen,
130 "blue": self.onClickBlue,
131 "back": self.onClickRed,
132 "ok": self.onClickOk,
133 "up": self.onClickUp,
134 "down": self.onClickDown,
135 "left": self.onClickLeft,
136 "right": self.onClickRight,
138 self.onLayoutFinish.append(self.doLayoutFinish)
142 self.SOURCELIST = self["file_list"]
143 self.STATUS_BAR = self["status"]
144 self.STATUS_BAR.setText(_(self.SOURCELIST.getCurrentDirectory()))
146 self.DEVICE_LIST = '/dev/fpga_dp;/dev/misc/dp;'
147 self.DOWNLOAD_TAR_PATH = '/tmp/'
148 self.DOWNLOAD_FILE_NAME = 'TS_PRO.dat'
149 self.DOWNLOAD_URL = ''
151 self.FPGA = fpga.Fpga()
152 print self.DEVICE_LIST
153 print self.DOWNLOAD_TAR_PATH
154 print self.DOWNLOAD_FILE_NAME
155 print self.DOWNLOAD_URL
157 def doLayoutFinish(self):
161 if fileExists(self.DOWNLOAD_TAR_PATH + self.DOWNLOAD_FILE_NAME):
162 os.remove(self.DOWNLOAD_TAR_PATH + self.DOWNLOAD_FILE_NAME)
165 def doLoadConf(self):
166 if fileExists("/proc/stb/info/vumodel"):
167 model = open("/proc/stb/info/vumodel").read().strip()
168 download_uri_header = open('/usr/lib/enigma2/python/Plugins/SystemPlugins/FPGAUpgrade/fpga.conf').readline().strip()
169 self.DOWNLOAD_URL = str(download_uri_header) + "vu" + str(model) + "/" + self.DOWNLOAD_FILE_NAME
171 def doHook(self, blockNumber, blockSize, totalSize) :
172 if blockNumber*blockSize > totalSize :
173 self.STATUS_BAR.setText(_("Downloaded " + self.DOWNLOAD_TAR_PATH + self.DOWNLOAD_FILE_NAME))
175 self.STATUS_BAR.setText(_("Downloading..."))
177 def onCallbackHandler(self, confirmed):
181 def doUpgradeHandler(self, confirmed):
182 if confirmed == False:
187 path = self.SOURCELIST.getCurrentDirectory() + self.SOURCELIST.getFilename()
189 #self.session.open(MessageBox, _("Can't select directory."), MessageBox.TYPE_INFO, timeout = 5)
193 device_list = self.DEVICE_LIST.split(";")
195 for d in device_list:
196 if os.path.exists(d):
200 if device == None or len(device) == 0:
201 message = "Fail to upgrade.\nCause : Can't found device.\nDo you want to exit?"
202 self.session.openWithCallback(self.onCallbackHandler, MessageBox, _(message), MessageBox.TYPE_YESNO, timeout = 10, default = True)
203 print "DEVICE_LIST : ", device_list
205 print "DEVICE : ", device
206 self.ERROR_CODE = self.FPGA.fpga_upgrade(path, device)
207 if self.ERROR_CODE > 0:
208 self.ERROR_MSG = self.FPGA.get_error_msg(self.ERROR_CODE, self.ERROR_MSG)
209 message = "Fail to upgrade.\nCause : " + self.ERROR_MSG + "\nDo you want to exit?"
210 self.session.openWithCallback(self.onCallbackHandler, MessageBox, _(message), MessageBox.TYPE_YESNO, timeout = 10, default = True)
211 print "DEVICE : ", device
212 print "FILE : ", path
214 #self.session.open(MessageBox, _("Success!!"), MessageBox.TYPE_INFO, timeout = 5)
215 self.session.open(UpgradeStatus, self, timeout = 10)
217 def onClickRed(self):
221 def onClickGreen(self):
222 #self.session.open(MessageBox, _("Upgrade will take about 5 minutes to finish."), MessageBox.TYPE_INFO, timeout = 10)
223 message = "Upgrade will take about 5 minutes to finish.\nDo you want to upgrade?"
224 self.session.openWithCallback(self.doUpgradeHandler, MessageBox, _(message), MessageBox.TYPE_YESNO, timeout = 10, default = True)
226 def onClickBlue(self):
229 test_opener = urllib.URLopener()
231 test_opener.open(self.DOWNLOAD_URL)
233 self.session.open(MessageBox, _('File not found'), MessageBox.TYPE_INFO, timeout = 5)
237 fname, header = urlretrieve(self.DOWNLOAD_URL, self.DOWNLOAD_TAR_PATH + self.DOWNLOAD_FILE_NAME, self.doHook)
239 self.session.open(MessageBox, _(str(msg)), MessageBox.TYPE_INFO, timeout = 5)
245 self.SOURCELIST.changeDir(self.DOWNLOAD_TAR_PATH)
246 self.SOURCELIST.moveToIndex(0)
247 while cmp(self.SOURCELIST.getFilename(), self.DOWNLOAD_FILE_NAME) != 0 :
248 self.SOURCELIST.down()
249 if cmp(before_name, self.SOURCELIST.getFilename()) == 0:
251 before_name = self.SOURCELIST.getFilename()
254 if self.SOURCELIST.canDescent() : # isDir
255 self.SOURCELIST.descent()
256 if self.SOURCELIST.getCurrentDirectory():
257 self.STATUS_BAR.setText(_(self.SOURCELIST.getCurrentDirectory()))
263 self.STATUS_BAR.setText(_(self.SOURCELIST.getCurrentDirectory()))
265 def onClickDown(self):
266 self.SOURCELIST.down()
267 self.STATUS_BAR.setText(_(self.SOURCELIST.getCurrentDirectory()))
269 def onClickLeft(self):
270 self.SOURCELIST.pageUp()
271 self.STATUS_BAR.setText(_(self.SOURCELIST.getCurrentDirectory()))
273 def onClickRight(self):
274 self.SOURCELIST.pageDown()
275 self.STATUS_BAR.setText(_(self.SOURCELIST.getCurrentDirectory()))
277 def main(session, **kwargs):
278 session.open(FPGAUpgrade)
280 def Plugins(**kwargs):
281 return PluginDescriptor(name=_("FPGA Upgrade"), description="Upgrade FPGA..", where = PluginDescriptor.WHERE_PLUGINMENU, fnc=main)