change plugins code.
authorkos <kos@dev3>
Wed, 4 Jan 2012 10:33:09 +0000 (19:33 +0900)
committerkos <kos@dev3>
Wed, 4 Jan 2012 10:33:09 +0000 (19:33 +0900)
- fpgaupgrade/firmwareupgrade : cpp -> python.

lib/python/Plugins/SystemPlugins/FPGAUpgrade/Makefile.am
lib/python/Plugins/SystemPlugins/FPGAUpgrade/_fpga.so [deleted file]
lib/python/Plugins/SystemPlugins/FPGAUpgrade/fpga.py [deleted file]
lib/python/Plugins/SystemPlugins/FPGAUpgrade/plugin.py
lib/python/Plugins/SystemPlugins/FirmwareUpgrade/Makefile.am
lib/python/Plugins/SystemPlugins/FirmwareUpgrade/_fu.so [deleted file]
lib/python/Plugins/SystemPlugins/FirmwareUpgrade/fu.py [deleted file]
lib/python/Plugins/SystemPlugins/FirmwareUpgrade/plugin.py

index 36e60c8..52ab77a 100755 (executable)
@@ -5,6 +5,4 @@ SUBDIRS = meta
 install_PYTHON =        \
        __init__.py \
        plugin.py \
-       fpga.py \
-       fpga.conf \
-       _fpga.so
+       fpga.conf 
diff --git a/lib/python/Plugins/SystemPlugins/FPGAUpgrade/_fpga.so b/lib/python/Plugins/SystemPlugins/FPGAUpgrade/_fpga.so
deleted file mode 100644 (file)
index b031d6f..0000000
Binary files a/lib/python/Plugins/SystemPlugins/FPGAUpgrade/_fpga.so and /dev/null differ
diff --git a/lib/python/Plugins/SystemPlugins/FPGAUpgrade/fpga.py b/lib/python/Plugins/SystemPlugins/FPGAUpgrade/fpga.py
deleted file mode 100644 (file)
index 8819dac..0000000
+++ /dev/null
@@ -1,103 +0,0 @@
-# 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)
-
-
-
index 76cf06b..14b5087 100644 (file)
@@ -1,6 +1,5 @@
-import os
+import os, fcntl, thread
 
-import fpga
 from enigma import eTimer
 
 from urllib import urlretrieve
@@ -21,6 +20,107 @@ from Components.ActionMap import ActionMap
 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">
@@ -159,7 +259,7 @@ class FPGAUpgrade(Screen):
                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
index be62e85..e47942c 100644 (file)
@@ -3,7 +3,5 @@ installdir = $(pkglibdir)/python/Plugins/SystemPlugins/FirmwareUpgrade
 SUBDIRS = meta
 
 install_PYTHON = __init__.py \
-                fu.py \
-                _fu.so \
                 plugin.py
 
diff --git a/lib/python/Plugins/SystemPlugins/FirmwareUpgrade/_fu.so b/lib/python/Plugins/SystemPlugins/FirmwareUpgrade/_fu.so
deleted file mode 100644 (file)
index c4c34be..0000000
Binary files a/lib/python/Plugins/SystemPlugins/FirmwareUpgrade/_fu.so and /dev/null differ
diff --git a/lib/python/Plugins/SystemPlugins/FirmwareUpgrade/fu.py b/lib/python/Plugins/SystemPlugins/FirmwareUpgrade/fu.py
deleted file mode 100644 (file)
index 1cc0778..0000000
+++ /dev/null
@@ -1,92 +0,0 @@
-# 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)
-
-
-
index 0e1ec25..0181fac 100644 (file)
@@ -43,6 +43,172 @@ if os.path.exists("/proc/stb/info/vumodel"):
                        "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=" ">
@@ -78,8 +244,7 @@ class UpgradeStatus(Screen):
 
                self.setTitle(firmware.upper() + " Upgrade Status")
 
-               import fu
-               self.FU = fu.FU()
+               self.FU = FirmwareUpgradeManager()
 
                self.old_status   = 0
                self.status_exit  = None