- fpgaupgrade/firmwareupgrade : cpp -> python.
install_PYTHON = \
__init__.py \
plugin.py \
- fpga.py \
- fpga.conf \
- _fpga.so
+ fpga.conf
+++ /dev/null
-# This file was automatically generated by SWIG (http://www.swig.org).
-# Version 1.3.39
-#
-# Do not make changes to this file unless you know what you are doing--modify
-# the SWIG interface file instead.
-# This file is compatible with both classic and new-style classes.
-
-from sys import version_info
-if version_info >= (2,6,0):
- def swig_import_helper():
- from os.path import dirname
- import imp
- fp = None
- try:
- fp, pathname, description = imp.find_module('_fpga', [dirname(__file__)])
- except ImportError:
- import _fpga
- return _fpga
- if fp is not None:
- try:
- _mod = imp.load_module('_fpga', fp, pathname, description)
- finally:
- fp.close()
- return _mod
- _fpga = swig_import_helper()
- del swig_import_helper
-else:
- import _fpga
-del version_info
-try:
- _swig_property = property
-except NameError:
- pass # Python < 2.2 doesn't have 'property'.
-def _swig_setattr_nondynamic(self,class_type,name,value,static=1):
- if (name == "thisown"): return self.this.own(value)
- if (name == "this"):
- if type(value).__name__ == 'SwigPyObject':
- self.__dict__[name] = value
- return
- method = class_type.__swig_setmethods__.get(name,None)
- if method: return method(self,value)
- if (not static) or hasattr(self,name):
- self.__dict__[name] = value
- else:
- raise AttributeError("You cannot add attributes to %s" % self)
-
-def _swig_setattr(self,class_type,name,value):
- return _swig_setattr_nondynamic(self,class_type,name,value,0)
-
-def _swig_getattr(self,class_type,name):
- if (name == "thisown"): return self.this.own()
- method = class_type.__swig_getmethods__.get(name,None)
- if method: return method(self)
- raise AttributeError(name)
-
-def _swig_repr(self):
- try: strthis = "proxy of " + self.this.__repr__()
- except: strthis = ""
- return "<%s.%s; %s >" % (self.__class__.__module__, self.__class__.__name__, strthis,)
-
-try:
- _object = object
- _newclass = 1
-except AttributeError:
- class _object : pass
- _newclass = 0
-
-
-DP_NO_ACTION_FOUND = _fpga.DP_NO_ACTION_FOUND
-DP_DEVICE_INFO_ACTION_CODE = _fpga.DP_DEVICE_INFO_ACTION_CODE
-DP_READ_IDCODE_ACTION_CODE = _fpga.DP_READ_IDCODE_ACTION_CODE
-DP_ERASE_ACTION_CODE = _fpga.DP_ERASE_ACTION_CODE
-DP_PROGRAM_ACTION_CODE = _fpga.DP_PROGRAM_ACTION_CODE
-DP_VERIFY_ACTION_CODE = _fpga.DP_VERIFY_ACTION_CODE
-NO_SRC_FILE_PATH = _fpga.NO_SRC_FILE_PATH
-NO_TAR_DEVICE_PATH = _fpga.NO_TAR_DEVICE_PATH
-FAIL_OPEN_SRC_FILE = _fpga.FAIL_OPEN_SRC_FILE
-ZERO_SRC_FILE_SIZE = _fpga.ZERO_SRC_FILE_SIZE
-FAIL_OPEN_DEVICE = _fpga.FAIL_OPEN_DEVICE
-ERROR_FILE_SIZE = _fpga.ERROR_FILE_SIZE
-ERROR_SET_ACTION_CODE = _fpga.ERROR_SET_ACTION_CODE
-ERROR_PROGRAMMING = _fpga.ERROR_PROGRAMMING
-class Fpga(_object):
- __swig_setmethods__ = {}
- __setattr__ = lambda self, name, value: _swig_setattr(self, Fpga, name, value)
- __swig_getmethods__ = {}
- __getattr__ = lambda self, name: _swig_getattr(self, Fpga, name)
- __repr__ = _swig_repr
- def __init__(self):
- this = _fpga.new_Fpga()
- try: self.this.append(this)
- except: self.this = this
- __swig_destroy__ = _fpga.delete_Fpga
- __del__ = lambda self : None;
- def get_interval(self): return _fpga.Fpga_get_interval(self)
- def get_error_msg(self, *args): return _fpga.Fpga_get_error_msg(self, *args)
- def fpga_upgrade(self, *args): return _fpga.Fpga_fpga_upgrade(self, *args)
- def get_status(self): return _fpga.Fpga_get_status(self)
-Fpga_swigregister = _fpga.Fpga_swigregister
-Fpga_swigregister(Fpga)
-
-
-
-import os
+import os, fcntl, thread
-import fpga
from enigma import eTimer
from urllib import urlretrieve
from Components.PluginComponent import plugins
from Components.Sources.StaticText import StaticText
+STATUS_READY = 0
+STATUS_DONE = 1
+STATUS_ERROR = 2
+STATUS_PREPARED = 3
+STATUS_PROGRAMMING = 4
+
+class FPGAUpgradeCore() :
+ status = STATUS_READY
+ errmsg = ''
+ callcount = 0
+ MAX_CALL_COUNT = 1500
+ def __init__(self, firmwarefile, devicefile):
+ print '[FPGAUpgrade]'
+ self.devicefile = devicefile
+ self.firmwarefile = firmwarefile
+
+ def doUpgrade(self):
+ firmware,device = None,None
+ def closefpga(fp, fd):
+ if fd is not None: os.close(fd)
+ if fp is not None: fp.close()
+ try:
+ size = os.path.getsize(self.firmwarefile)
+ if size == 0: raise Exception, 'data_size is zero'
+ #print '[FPGAUpgradeCore] data_size :',size
+
+ firmware = open(self.firmwarefile, 'rb')
+ device = os.open(self.devicefile, os.O_RDWR)
+ #print '[FPGAUpgradeCore] open >> [ok]'
+
+ rc = fcntl.ioctl(device, 0, size)
+ if rc < 0: raise Exception, 'fail to set size : %d'%(rc)
+ #print '[FPGAUpgradeCore] set size >> [ok]'
+
+ rc = fcntl.ioctl(device, 2, 5)
+ if rc < 0: raise Exception, 'fail to set programming mode : %d'%(rc)
+ #print '[FPGAUpgradeCore] programming mode >> [ok]'
+ self.status = STATUS_PREPARED
+
+ while True:
+ data = firmware.read(1024)
+ if data == '': break
+ os.write(device, data)
+ #print '[FPGAUpgradeCore] write data >> [ok]'
+
+ self.status = STATUS_PROGRAMMING
+ rc = fcntl.ioctl(device, 1, 0)
+ if rc < 0: raise Exception, 'fail to programming : %d'%(rc)
+ #print '[FPGAUpgradeCore] upgrade done.'
+ if self.callcount < 100: raise Exception, 'wrong fpga file.'
+ except Exception, msg:
+ self.errmsg = msg
+ print '[FPGAUpgradeCore] ERROR >>',msg
+ closefpga(firmware, device)
+ return STATUS_ERROR
+ closefpga(firmware, device)
+ return STATUS_DONE
+
+ def upgradeMain(self):
+ self.status = STATUS_READY
+ self.status = self.doUpgrade()
+ if self.status == STATUS_DONE:
+ print '[FPGAUpgrade] upgrade done.'
+ elif self.status == STATUS_ERROR:
+ print '[FPGAUpgrade] occur error.'
+ else: print '[FPGAUpgrade] occur unknown error.'
+
+class FPGAUpgradeManager:
+ fu = None
+ def get_interval(self):
+ return 200
+
+ def fpga_upgrade(self, datafile, device):
+ self.fu = FPGAUpgradeCore(firmwarefile=datafile, devicefile=device)
+ thread.start_new_thread(self.fu.upgradeMain, ())
+
+ def checkError(self):
+ if self.fu.status == STATUS_ERROR:
+ self.fu.callcount = 0
+ return True
+ return False
+
+ def get_status(self):
+ if self.fu.status == STATUS_READY:
+ return 0
+ elif self.fu.status == STATUS_ERROR:
+ return -1
+ elif self.fu.status == STATUS_PREPARED:
+ return 2
+ elif self.fu.status == STATUS_PROGRAMMING:
+ self.fu.callcount += 1
+ ret = (self.fu.callcount * 100) / self.fu.MAX_CALL_COUNT + 2
+ if ret >= 100: ret = 99
+ #print "callcount : [%d]"%(self.fu.callcount);
+ return ret
+ elif self.fu.status == STATUS_DONE:
+ return 100
+
+ def get_error_msg(self, errno, errmsg):
+ return str(self.fu.errmsg)
+
class UpgradeStatus(Screen):
skin = """
<screen position="center,center" size="450,130" title="FPGA Upgrade">
self.DOWNLOAD_FILE_NAME = 'TS_PRO.dat'
self.DOWNLOAD_URL = ''
self.doLoadConf()
- self.FPGA = fpga.Fpga()
+ self.FPGA = FPGAUpgradeManager()
print self.DEVICE_LIST
print self.DOWNLOAD_TAR_PATH
print self.DOWNLOAD_FILE_NAME
SUBDIRS = meta
install_PYTHON = __init__.py \
- fu.py \
- _fu.so \
plugin.py
+++ /dev/null
-# This file was automatically generated by SWIG (http://www.swig.org).
-# Version 1.3.39
-#
-# Do not make changes to this file unless you know what you are doing--modify
-# the SWIG interface file instead.
-# This file is compatible with both classic and new-style classes.
-
-from sys import version_info
-if version_info >= (2,6,0):
- def swig_import_helper():
- from os.path import dirname
- import imp
- fp = None
- try:
- fp, pathname, description = imp.find_module('_fu', [dirname(__file__)])
- except ImportError:
- import _fu
- return _fu
- if fp is not None:
- try:
- _mod = imp.load_module('_fu', fp, pathname, description)
- finally:
- fp.close()
- return _mod
- _fu = swig_import_helper()
- del swig_import_helper
-else:
- import _fu
-del version_info
-try:
- _swig_property = property
-except NameError:
- pass # Python < 2.2 doesn't have 'property'.
-def _swig_setattr_nondynamic(self,class_type,name,value,static=1):
- if (name == "thisown"): return self.this.own(value)
- if (name == "this"):
- if type(value).__name__ == 'SwigPyObject':
- self.__dict__[name] = value
- return
- method = class_type.__swig_setmethods__.get(name,None)
- if method: return method(self,value)
- if (not static) or hasattr(self,name):
- self.__dict__[name] = value
- else:
- raise AttributeError("You cannot add attributes to %s" % self)
-
-def _swig_setattr(self,class_type,name,value):
- return _swig_setattr_nondynamic(self,class_type,name,value,0)
-
-def _swig_getattr(self,class_type,name):
- if (name == "thisown"): return self.this.own()
- method = class_type.__swig_getmethods__.get(name,None)
- if method: return method(self)
- raise AttributeError(name)
-
-def _swig_repr(self):
- try: strthis = "proxy of " + self.this.__repr__()
- except: strthis = ""
- return "<%s.%s; %s >" % (self.__class__.__module__, self.__class__.__name__, strthis,)
-
-try:
- _object = object
- _newclass = 1
-except AttributeError:
- class _object : pass
- _newclass = 0
-
-
-class FU(_object):
- __swig_setmethods__ = {}
- __setattr__ = lambda self, name, value: _swig_setattr(self, FU, name, value)
- __swig_getmethods__ = {}
- __getattr__ = lambda self, name: _swig_getattr(self, FU, name)
- __repr__ = _swig_repr
- def __init__(self):
- this = _fu.new_FU()
- try: self.this.append(this)
- except: self.this = this
- def getStatus(self): return _fu.FU_getStatus(self)
- def getInterval(self): return _fu.FU_getInterval(self)
- def checkError(self): return _fu.FU_checkError(self)
- def getErrorMessage(self, *args): return _fu.FU_getErrorMessage(self, *args)
- def startUpgrade(self, *args): return _fu.FU_startUpgrade(self, *args)
- def getDataPath(self): return _fu.FU_getDataPath(self)
- def getDevicePath(self): return _fu.FU_getDevicePath(self)
- __swig_destroy__ = _fu.delete_FU
- __del__ = lambda self : None;
-FU_swigregister = _fu.FU_swigregister
-FU_swigregister(FU)
-
-
-
"fpga" : ["http://archive.vuplus.com/download/fpga", "fpga.file", "/dev/fpga_dp;/dev/misc/dp;"]
}
+import os, fcntl, thread
+STATUS_READY = 0
+STATUS_DONE = 1
+STATUS_ERROR = 2
+STATUS_PREPARED = 3
+STATUS_PROGRAMMING = 4
+STATUS_RETRY_UPGRADE = 5
+
+class FPUpgradeCore() :
+ status = STATUS_READY
+ errmsg = ''
+ MAX_CALL_COUNT = 120
+ def __init__(self, firmwarefile, devicefile):
+ self.devicefile = devicefile
+ self.firmwarefile = firmwarefile
+
+ def doUpgrade(self):
+ firmware,device = None,None
+ def closefpga(fp, fd):
+ if fd is not None: os.close(fd)
+ if fp is not None: fp.close()
+ try:
+ size = os.path.getsize(self.firmwarefile)
+ if size == 0: raise Exception, 'data_size is zero'
+ #print '[FPUpgradeCore] data_size :',size
+
+ for xx in range(3):
+ self.callcount = 0
+ self.status = STATUS_READY
+
+ firmware = open(self.firmwarefile, 'rb')
+ device = os.open(self.devicefile, os.O_RDWR)
+ #print '[FPUpgradeCore] open >> [ok]'
+
+ rc = fcntl.ioctl(device, 0, size)
+ if rc < 0: raise Exception, 'fail to set size : %d'%(rc)
+ #print '[FPUpgradeCore] set size >> [ok]'
+ self.status = STATUS_PREPARED
+
+ while True:
+ data = firmware.read(1024)
+ if data == '': break
+ os.write(device, data)
+ #print '[FPUpgradeCore] write data >> [ok]'
+
+ self.status = STATUS_PROGRAMMING
+ rc = fcntl.ioctl(device, 1, 0)
+ if rc == 0: break
+ if xx == 2: raise Exception, 'fail to upgrade : %d'%(rc)
+ self.errmsg = 'fail to upgrade, retry..'
+ self.status = STATUS_RETRY_UPGRADE
+ closefpga(firmware, device)
+ #print '[FPUpgradeCore] upgrade done.'
+ if self.callcount < 20: raise Exception, 'wrong fpga file.'
+ except Exception, msg:
+ self.errmsg = msg
+ print '[FPUpgradeCore] ERROR >>',msg
+ closefpga(firmware, device)
+ return STATUS_ERROR
+ return STATUS_DONE
+
+ def upgradeMain(self):
+ self.status = STATUS_READY
+ self.status = self.doUpgrade()
+ if self.status == STATUS_DONE:
+ print 'upgrade done.'
+ elif self.status == STATUS_ERROR:
+ print 'error!!'
+ else: print 'unknown.'
+
+class FPGAUpgradeCore() :
+ status = STATUS_READY
+ errmsg = ''
+ callcount = 0
+ MAX_CALL_COUNT = 1500
+ def __init__(self, firmwarefile, devicefile):
+ print '[FPGAUpgrade]'
+ self.devicefile = devicefile
+ self.firmwarefile = firmwarefile
+
+ def doUpgrade(self):
+ firmware,device = None,None
+ def closefpga(fp, fd):
+ if fd is not None: os.close(fd)
+ if fp is not None: fp.close()
+ try:
+ size = os.path.getsize(self.firmwarefile)
+ if size == 0: raise Exception, 'data_size is zero'
+ #print '[FPGAUpgradeCore] data_size :',size
+
+ firmware = open(self.firmwarefile, 'rb')
+ device = os.open(self.devicefile, os.O_RDWR)
+ #print '[FPGAUpgradeCore] open >> [ok]'
+
+ rc = fcntl.ioctl(device, 0, size)
+ if rc < 0: raise Exception, 'fail to set size : %d'%(rc)
+ #print '[FPGAUpgradeCore] set size >> [ok]'
+
+ rc = fcntl.ioctl(device, 2, 5)
+ if rc < 0: raise Exception, 'fail to set programming mode : %d'%(rc)
+ #print '[FPGAUpgradeCore] programming mode >> [ok]'
+ self.status = STATUS_PREPARED
+
+ while True:
+ data = firmware.read(1024)
+ if data == '': break
+ os.write(device, data)
+ #print '[FPGAUpgradeCore] write data >> [ok]'
+
+ self.status = STATUS_PROGRAMMING
+ rc = fcntl.ioctl(device, 1, 0)
+ if rc < 0: raise Exception, 'fail to programming : %d'%(rc)
+ #print '[FPGAUpgradeCore] upgrade done.'
+ if self.callcount < 20: raise Exception, 'wrong fpga file.'
+ except Exception, msg:
+ self.errmsg = msg
+ print '[FPGAUpgradeCore] ERROR >>',msg
+ closefpga(firmware, device)
+ return STATUS_ERROR
+ closefpga(firmware, device)
+ return STATUS_DONE
+
+ def upgradeMain(self):
+ self.status = STATUS_READY
+ self.status = self.doUpgrade()
+ if self.status == STATUS_DONE:
+ print '[FPGAUpgrade] upgrade done.'
+ elif self.status == STATUS_ERROR:
+ print '[FPGAUpgrade] occur error.'
+ else: print '[FPGAUpgrade] occur unknown error.'
+
+class FirmwareUpgradeManager:
+ fu = None
+ def getInterval(self):
+ return 200
+
+ def startUpgrade(self, datafile, device, firmware):
+ if firmware == 'fpga':
+ self.fu = FPGAUpgradeCore(firmwarefile=datafile, devicefile=device)
+ elif firmware == 'fp':
+ self.fu = FPUpgradeCore(firmwarefile=datafile, devicefile=device)
+ thread.start_new_thread(self.fu.upgradeMain, ())
+
+ def checkError(self):
+ if self.fu.status == STATUS_ERROR:
+ self.fu.callcount = 0
+ return True
+ return False
+
+ def getStatus(self):
+ if self.fu.status in (STATUS_READY, STATUS_ERROR):
+ return 0
+ elif self.fu.status == STATUS_PREPARED:
+ return 2
+ elif self.fu.status == STATUS_PROGRAMMING:
+ self.fu.callcount += 1
+ ret = (self.fu.callcount * 100) / self.fu.MAX_CALL_COUNT + 2
+ if ret >= 100: ret = 99
+ #print "callcount : [%d]"%(self.fu.callcount);
+ return ret
+ elif self.fu.status == STATUS_DONE:
+ return 100
+
+ def getErrorMessage(self, errno, errmsg):
+ return str(self.fu.errmsg)
+
class UpgradeStatus(Screen):
skin = """
<screen position="center,center" size="450,100" title=" ">
self.setTitle(firmware.upper() + " Upgrade Status")
- import fu
- self.FU = fu.FU()
+ self.FU = FirmwareUpgradeManager()
self.old_status = 0
self.status_exit = None