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="140,40" alphatest="blend" />
103 <ePixmap pixmap="Vu_HD/buttons/green.png" position="140,7" size="140,40" alphatest="blend" />
104 <ePixmap pixmap="Vu_HD/buttons/yellow.png" position="280,7" size="140,40" alphatest="blend" />
105 <ePixmap pixmap="Vu_HD/buttons/blue.png" position="420,7" size="140,40" alphatest="blend" />
107 <widget source="key_red" render="Label" position="20,0" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" transparent="1" />
108 <widget source="key_green" render="Label" position="160,0" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" transparent="1" />
109 <widget source="key_yellow" render="Label" position="300,0" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" transparent="1" />
110 <widget source="key_blue" render="Label" position="440,0" zPosition="1" size="115,40" font="Regular;20" halign="center" valign="center" transparent="1" />
112 <widget source="status" render="Label" position="15,45" zPosition="1" size="540,40" font="Regular;18" halign="left" valign="center" backgroundColor="#a08500" transparent="1" />
113 <widget name="file_list" position="0,100" size="555,325" scrollbarMode="showOnDemand" />
117 def __init__(self, session):
118 Screen.__init__(self, session)
119 self.session = session
121 self["key_red"] = StaticText(_("Close"))
122 self["key_green"] = StaticText(_("Ugrade"))
123 self["key_yellow"] = StaticText(_(" "))
124 self["key_blue"] = StaticText(_("Download"))
125 #self["key_blue"] = StaticText(_(" "))
126 self["status"] = StaticText(_(" "))
127 self["file_list"] = FileList("/", matchingPattern = "^.*")
129 self["actions"] = ActionMap(["OkCancelActions", "ShortcutActions", "WizardActions", "ColorActions", ],
131 "red": self.onClickRed,
132 "green": self.onClickGreen,
133 "blue": self.onClickBlue,
134 "back": self.onClickRed,
135 "ok": self.onClickOk,
136 "up": self.onClickUp,
137 "down": self.onClickDown,
138 "left": self.onClickLeft,
139 "right": self.onClickRight,
141 self.onLayoutFinish.append(self.doLayoutFinish)
145 self.SOURCELIST = self["file_list"]
146 self.STATUS_BAR = self["status"]
147 self.STATUS_BAR.setText(_(self.SOURCELIST.getCurrentDirectory()))
149 self.DEVICE_PATH = '/dev/misc/dp'
150 self.DOWNLOAD_TAR_PATH = '/tmp/'
151 self.DOWNLOAD_FILE_NAME = 'TS_PRO.dat'
152 self.DOWNLOAD_URL = ''
154 self.FPGA = fpga.Fpga()
155 print self.DEVICE_PATH
156 print self.DOWNLOAD_TAR_PATH
157 print self.DOWNLOAD_FILE_NAME
158 print self.DOWNLOAD_URL
160 def doLayoutFinish(self):
164 if fileExists(self.DOWNLOAD_TAR_PATH + self.DOWNLOAD_FILE_NAME):
165 os.remove(self.DOWNLOAD_TAR_PATH + self.DOWNLOAD_FILE_NAME)
168 def doLoadConf(self):
169 if fileExists("/proc/stb/info/vumodel"):
170 model = open("/proc/stb/info/vumodel").read().strip()
171 download_uri_header = open('/usr/lib/enigma2/python/Plugins/SystemPlugins/FPGAUpgrade/fpga.conf').readline().strip()
172 self.DOWNLOAD_URL = str(download_uri_header) + "vu" + str(model) + "/" + self.DOWNLOAD_FILE_NAME
174 def doHook(self, blockNumber, blockSize, totalSize) :
175 if blockNumber*blockSize > totalSize :
176 self.STATUS_BAR.setText(_("Downloaded " + self.DOWNLOAD_TAR_PATH + self.DOWNLOAD_FILE_NAME))
178 self.STATUS_BAR.setText(_("Downloading..."))
180 def onCallbackHandler(self, confirmed):
186 def doUpgradeHandler(self, confirmed):
187 if confirmed == False:
192 path = self.SOURCELIST.getCurrentDirectory() + self.SOURCELIST.getFilename()
194 #self.session.open(MessageBox, _("Can't select directory."), MessageBox.TYPE_INFO, timeout = 5)
197 self.ERROR_CODE = self.FPGA.fpga_upgrade(path, self.DEVICE_PATH)
198 if self.ERROR_CODE > 0:
199 self.ERROR_MSG = self.FPGA.get_error_msg(self.ERROR_CODE, self.ERROR_MSG)
200 message = "Fail to upgrade.\nCause : " + self.ERROR_MSG + "\nDo you want to exit?"
201 self.session.openWithCallback(self.onCallbackHandler, MessageBox, _(message), MessageBox.TYPE_YESNO, timeout = 10, default = True)
203 print "DEVICE_PATH : ", self.DEVICE_PATH
204 print "FILE_PATH : ", path
206 #self.session.open(MessageBox, _("Success!!"), MessageBox.TYPE_INFO, timeout = 5)
207 self.session.open(UpgradeStatus, self, timeout = 10)
209 def onClickRed(self):
213 def onClickGreen(self):
214 #self.session.open(MessageBox, _("Upgrade will take about 5 minutes to finish."), MessageBox.TYPE_INFO, timeout = 10)
215 message = "Upgrade will take about 5 minutes to finish.\nDo you want to upgrade?"
216 self.session.openWithCallback(self.doUpgradeHandler, MessageBox, _(message), MessageBox.TYPE_YESNO, timeout = 10, default = True)
218 def onClickBlue(self):
221 test_opener = urllib.URLopener()
223 test_opener.open(self.DOWNLOAD_URL)
225 self.session.open(MessageBox, _('File not found'), MessageBox.TYPE_INFO, timeout = 5)
229 fname, header = urlretrieve(self.DOWNLOAD_URL, self.DOWNLOAD_TAR_PATH + self.DOWNLOAD_FILE_NAME, self.doHook)
231 self.session.open(MessageBox, _(str(msg)), MessageBox.TYPE_INFO, timeout = 5)
237 self.SOURCELIST.changeDir(self.DOWNLOAD_TAR_PATH)
238 self.SOURCELIST.moveToIndex(0)
239 while cmp(self.SOURCELIST.getFilename(), self.DOWNLOAD_FILE_NAME) != 0 :
240 self.SOURCELIST.down()
241 if cmp(before_name, self.SOURCELIST.getFilename()) == 0:
243 before_name = self.SOURCELIST.getFilename()
246 if self.SOURCELIST.canDescent() : # isDir
247 self.SOURCELIST.descent()
248 if self.SOURCELIST.getCurrentDirectory():
249 self.STATUS_BAR.setText(_(self.SOURCELIST.getCurrentDirectory()))
255 self.STATUS_BAR.setText(_(self.SOURCELIST.getCurrentDirectory()))
257 def onClickDown(self):
258 self.SOURCELIST.down()
259 self.STATUS_BAR.setText(_(self.SOURCELIST.getCurrentDirectory()))
261 def onClickLeft(self):
262 self.SOURCELIST.pageUp()
263 self.STATUS_BAR.setText(_(self.SOURCELIST.getCurrentDirectory()))
265 def onClickRight(self):
266 self.SOURCELIST.pageDown()
267 self.STATUS_BAR.setText(_(self.SOURCELIST.getCurrentDirectory()))
269 def main(session, **kwargs):
270 session.open(FPGAUpgrade)
272 def Plugins(**kwargs):
273 return PluginDescriptor(name=_("FPGA Upgrade"), description="Upgrade FPGA..", where = PluginDescriptor.WHERE_PLUGINMENU, fnc=main)