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_LIST = '/dev/fpga_dp;/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_LIST
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):
184 def doUpgradeHandler(self, confirmed):
185 if confirmed == False:
190 path = self.SOURCELIST.getCurrentDirectory() + self.SOURCELIST.getFilename()
192 #self.session.open(MessageBox, _("Can't select directory."), MessageBox.TYPE_INFO, timeout = 5)
196 device_list = self.DEVICE_LIST.split(";")
198 for d in device_list:
199 if os.path.exists(d):
203 if device == None or len(device) == 0:
204 message = "Fail to upgrade.\nCause : Can't found device.\nDo you want to exit?"
205 self.session.openWithCallback(self.onCallbackHandler, MessageBox, _(message), MessageBox.TYPE_YESNO, timeout = 10, default = True)
206 print "DEVICE_LIST : ", device_list
208 print "DEVICE : ", device
209 self.ERROR_CODE = self.FPGA.fpga_upgrade(path, device)
210 if self.ERROR_CODE > 0:
211 self.ERROR_MSG = self.FPGA.get_error_msg(self.ERROR_CODE, self.ERROR_MSG)
212 message = "Fail to upgrade.\nCause : " + self.ERROR_MSG + "\nDo you want to exit?"
213 self.session.openWithCallback(self.onCallbackHandler, MessageBox, _(message), MessageBox.TYPE_YESNO, timeout = 10, default = True)
214 print "DEVICE : ", device
215 print "FILE : ", path
217 #self.session.open(MessageBox, _("Success!!"), MessageBox.TYPE_INFO, timeout = 5)
218 self.session.open(UpgradeStatus, self, timeout = 10)
220 def onClickRed(self):
224 def onClickGreen(self):
225 #self.session.open(MessageBox, _("Upgrade will take about 5 minutes to finish."), MessageBox.TYPE_INFO, timeout = 10)
226 message = "Upgrade will take about 5 minutes to finish.\nDo you want to upgrade?"
227 self.session.openWithCallback(self.doUpgradeHandler, MessageBox, _(message), MessageBox.TYPE_YESNO, timeout = 10, default = True)
229 def onClickBlue(self):
232 test_opener = urllib.URLopener()
234 test_opener.open(self.DOWNLOAD_URL)
236 self.session.open(MessageBox, _('File not found'), MessageBox.TYPE_INFO, timeout = 5)
240 fname, header = urlretrieve(self.DOWNLOAD_URL, self.DOWNLOAD_TAR_PATH + self.DOWNLOAD_FILE_NAME, self.doHook)
242 self.session.open(MessageBox, _(str(msg)), MessageBox.TYPE_INFO, timeout = 5)
248 self.SOURCELIST.changeDir(self.DOWNLOAD_TAR_PATH)
249 self.SOURCELIST.moveToIndex(0)
250 while cmp(self.SOURCELIST.getFilename(), self.DOWNLOAD_FILE_NAME) != 0 :
251 self.SOURCELIST.down()
252 if cmp(before_name, self.SOURCELIST.getFilename()) == 0:
254 before_name = self.SOURCELIST.getFilename()
257 if self.SOURCELIST.canDescent() : # isDir
258 self.SOURCELIST.descent()
259 if self.SOURCELIST.getCurrentDirectory():
260 self.STATUS_BAR.setText(_(self.SOURCELIST.getCurrentDirectory()))
266 self.STATUS_BAR.setText(_(self.SOURCELIST.getCurrentDirectory()))
268 def onClickDown(self):
269 self.SOURCELIST.down()
270 self.STATUS_BAR.setText(_(self.SOURCELIST.getCurrentDirectory()))
272 def onClickLeft(self):
273 self.SOURCELIST.pageUp()
274 self.STATUS_BAR.setText(_(self.SOURCELIST.getCurrentDirectory()))
276 def onClickRight(self):
277 self.SOURCELIST.pageDown()
278 self.STATUS_BAR.setText(_(self.SOURCELIST.getCurrentDirectory()))
280 def main(session, **kwargs):
281 session.open(FPGAUpgrade)
283 def Plugins(**kwargs):
284 return PluginDescriptor(name=_("FPGA Upgrade"), description="Upgrade FPGA..", where = PluginDescriptor.WHERE_PLUGINMENU, fnc=main)