fix getModelInfo
[vuplus_dvbapp] / lib / python / Plugins / SystemPlugins / FactoryTest / plugin.py
index 6f01dd8..2beba26 100755 (executable)
@@ -49,7 +49,7 @@ class FactoryTest(Screen):
                </screen>"""
        def __init__(self, session):
 
-               self["actions"] = NumberActionMap(["OkCancelActions","WizardActions","NumberActions","ColorActions"],
+               self["actions"] = NumberActionMap(["OkCancelActions","WizardActions","NumberActions","ColorActions",],
                {
                        "left": self.nothing,
                        "right":self.nothing,
@@ -67,12 +67,12 @@ class FactoryTest(Screen):
                        "6": self.numberaction,                 
                        "7": self.numberaction,                 
                        "8": self.numberaction,                 
-                       "9": self.numberaction,
-                       "red": self.shutdownaction,             
+                       "9": self.numberaction,                 
+                       "red": self.shutdownaction,
                }, -2)
 
                Screen.__init__(self, session)
-               TESTPROGRAM_DATE = "2010-03-22"
+               TESTPROGRAM_DATE = "2010-12-14"
                TESTPROGRAM_VERSION = "Version 00.01"
 
                self.model = 0
@@ -94,6 +94,8 @@ class FactoryTest(Screen):
                        nimConfig.diseqcMode.value="diseqc_a_b"
                        nimConfig.diseqcA.value="130"
                        nimConfig.diseqcB.value="192"
+               if self.model == 2:
+                       pass
                nimmanager.sec.update()         
                
                system("cp /usr/lib/enigma2/python/Plugins/SystemPlugins/FactoryTest/testdb /etc/enigma2/lamedb")
@@ -163,11 +165,36 @@ class FactoryTest(Screen):
                        tlist.append((" 7. Factory default",self.fdefaultIndex))
                        self.shutdownIndex=8
                        tlist.append((" 8. Shutdown",self.shutdownIndex))
+
+               elif self.model == 2:
+                       self.scarttestIndex = -1
+                       self.satetestIndex=0
+                       tlist.append((" 0. Sata & extend hdd test",self.satetestIndex))
+                       self.usbtestIndex=1
+                       tlist.append((" 1. USB test",self.usbtestIndex))
+                       self.fronttestIndex=2
+                       tlist.append((" 2. Front test",self.fronttestIndex))
+                       self.smarttestIndex=3
+                       tlist.append((" 3. Smartcard test",self.smarttestIndex))
+                       self.tuner1_1testIndex=4
+                       tlist.append((" 4. T1 H 22K x 4:3 CVBS",self.tuner1_1testIndex))
+                       self.tuner1_2testIndex=5
+                       tlist.append((" 5. T1 V 22k o 16:9 RGB",self.tuner1_2testIndex))
+                       self.tuner2_1testIndex = -1
+                       self.tuner2_2testIndex=6
+                       tlist.append((" 6. T2 DVB-C 4:3 YC CAM",self.tuner2_2testIndex))
+                       self.rs232testIndex=7
+                       tlist.append((" 7. RS232 test",self.rs232testIndex))
+                       self.ethernettestIndex=8
+                       tlist.append(("8. Ethernet & mac test",self.ethernettestIndex))
+                       self.fdefaultIndex=9
+                       tlist.append(("9. Factory default",self.fdefaultIndex))
+                       self.shutdownIndex=10
+                       tlist.append(("10. Shutdown",self.shutdownIndex))
+                       
                self.menulength= len(tlist)-1
                self["testlist"] = MenuList(tlist)
                self.rlist = []
-#              for x in range(15):
-#              for x in range(12):
                for x in range(self.menulength):
                        self.rlist.append((".."))
                self["resultlist"] = TestResultList(self.rlist)
@@ -190,9 +217,16 @@ class FactoryTest(Screen):
                self.tunemsgtimer = eTimer()
                self.tunemsgtimer.callback.append(self.tunemsg)
 
+               if self.model == 0:
+                       self.cam_index = 7
+               elif self.model == 1:
+                       self.cam_index = 4
+               elif self.model == 2:
+                       self.cam_index = 6      
                self.camstep = 1
                self.camtimer = eTimer()
                self.camtimer.callback.append(self.cam_state)
+               self.mactry = 1
                self.getmacaddr()
                self.getversion()
                
@@ -204,14 +238,34 @@ class FactoryTest(Screen):
                self.satatimer = eTimer()
                self.satatimer.callback.append(self.sataCheck)
 
+               self.usbtimer = eTimer()
+               self.usbtimer.callback.append(self.usbCheck)
+
        def getModelInfo(self):
-               info = open("/proc/stb/info/version").read()
-               print info,info[:2]
-               if info[:2] == "14":
-                       self.model = 1
-               elif info[:2] == "12":
-                       self.model= 0
-               
+               getmodel = 0
+               if fileExists("/proc/stb/info/vumodel"):
+                       info = open("/proc/stb/info/vumodel").read().strip()
+                       if info == "combo":
+                               self.model = 2
+                               getmodel = 1
+                               print "getModelInfo : combo"
+                       if info == "solo":
+                               self.model = 1
+                               getmodel = 1
+                               print "getModelInfo : solo"
+                       if info == "duo":
+                               self.model = 0
+                               getmodel = 1
+                               print "getModelInfo : duo"
+               if getmodel == 0 and fileExists("/proc/stb/info/version"):
+                       info = open("/proc/stb/info/version").read()
+#                      print info,info[:2]
+                       if info[:2] == "14":
+                               self.model = 1
+                               print "getModelInfo : solo_"
+                       elif info[:2] == "12":
+                               self.model = 0
+                               print "getModelInfo : duo_"
 
        def nothing(self):
                print "nothing"
@@ -253,8 +307,9 @@ class FactoryTest(Screen):
                        tunno = 1
                        result = eSctest.getInstance().getFrontendstatus(0)
                        hv = "Ver"
-                       
-               if index == self.tuner1_2testIndex or index==self.tuner2_2testIndex:
+               if self.model == 2 and index==self.tuner2_2testIndex:
+                       hv = ""
+               elif index == self.tuner1_2testIndex or index==self.tuner2_2testIndex:
                        hv = "Ver"
                else:
                        hv = "Hor"
@@ -264,6 +319,7 @@ class FactoryTest(Screen):
                        self.tunerlock = 0
                        self.tunemsgtimer.stop()
                        self.session.nav.stopService()
+                       self.avswitch.setColorFormat(0)
                        self.session.open( MessageBox, _("Tune%d %s Locking Fail..."%(tunno,hv)), MessageBox.TYPE_ERROR)        
                        if self.agingmode==0:
                                self.rlist[self["testlist"].getCurrent()[1]]="fail"
@@ -282,22 +338,51 @@ class FactoryTest(Screen):
                        self["testversion"].setText(("Version no load"))
                        
 
-       def readmac(self, result, retval,extra_args=None):
-               (statecallback) = extra_args
-               if self.macConsole is not None:
-                       if retval == 0:
-                               self.macConsole = None
-                               content =result.split()
-                               self["mactext"].setText(("MAC : "+content[10]))
-       
        def getmacaddr(self):
                try:
-                       cmd = "ip -o addr"
+                       if self.model == 2:
+                               cmd = "nanddump -s 0x" + str((self.mactry-1)*2) + "0000 -b -o -l 64 -p /dev/mtd5"
+                       elif self.model == 0 or self.model == 1:
+                               cmd = "nanddump -s 0x" + str((self.mactry-1)*2) + "0000 -b -o -l 64 -p /dev/mtd4"
                        self.macConsole = Console()     
-                       self.macConsole.ePopen(cmd, self.readmac)       
-#                      self["stattext"].setText((macaddr))
+                       self.macConsole.ePopen(cmd, self.readmac,self.checkReadmac)     
                except:
                        return
+
+       def readmac(self, result, retval,extra_args=None):
+               (callback) = extra_args
+               if self.macConsole is not None:
+                       if retval == 0:
+                               self.macConsole = None
+                               macline = None
+                               content =result.splitlines()
+                               for x in content:
+                                       if x.startswith('0x000'+str((self.mactry-1)*2)+'0010:'):
+                                               macline = x.split()
+                               if macline == None:
+                                       callback(0)
+                               elif len(macline) < 10: 
+                                       callback(1)
+                               else:   
+                                       mac = macline[5]+":"+macline[6]+":"+macline[7]+":"+macline[8]+":"+macline[9]+":"+macline[10]
+                                       self["mactext"].setText(("MAC : "+mac))
+                                       callback(2)
+
+       def checkReadmac(self,data):
+               if data == 0:
+                       print "block %d is bad block" % self.mactry
+                       self.mactry = self.mactry + 1
+                       if self.mactry > 4:
+                               self.session.open(MessageBox, _("FLASH IS BROKEN"), type = MessageBox.TYPE_INFO, enable_input = False)
+                               return
+                       else:
+                               self.getmacaddr()
+               elif data == 1:
+                       print 'mac dump read error'
+                       return
+               elif data == 2:
+                       print 'mac address read ok'
+                       return
                
        def TestAction(self):
 #
@@ -347,8 +432,10 @@ class FactoryTest(Screen):
 #                      self.Test13()
                elif index==self.fdefaultIndex:
                        self.Test14()
-#              elif index==self.shutdownIndex:
-#                      self.Test15()
+               elif index==self.shutdownIndex:
+                       self.Test15()
+               else:
+                       pass
 
        def shutdownaction(self):
                if self["testlist"].getCurrent()[1] == self.shutdownIndex:
@@ -368,57 +455,33 @@ class FactoryTest(Screen):
                        self["resultlist"].updateList(self.rlist)
                        self.satatry -= 1
                        displayerror = 0
-               result = 0
-               checktab=0
+               result =0
                try:
-                       mtab = open('/etc/mtab','r')
-                       while(1):
-                               disk = mtab.readline().split(' ')
-                               if len(disk) < 2:
-                                       break
-                               if disk[1].startswith('/media/hdd'):
-                                       checktab+=1
-                               elif disk[1].startswith('/media/sdb1'):
-                                       checktab+=10
-                               if checktab==11:
-                                       break
-               except:
-                       checktab = 0
-
-               if checktab==0:
-                       if displayerror==1:
-                               self.session.open( MessageBox, _("Sata & extend hdd test error"), MessageBox.TYPE_ERROR)
-                               self.rlist[self["testlist"].getCurrent()[1]]="fail"
-                       else:
-                               self.satatimer.start(1100,True)
-                       return
-               elif checktab < 11:
-                       if displayerror==1:
-                               self.session.open( MessageBox, _("one hdd test error"), MessageBox.TYPE_ERROR)
-                               self.rlist[self["testlist"].getCurrent()[1]]="fail"
-                       else:
-                               self.satatimer.start(1100,True)
-                       return
-
-               try:
-                       if fileExists("/media/sdb1"):
-                               if access("/media/sdb1",F_OK|R_OK|W_OK):
-                                       dummy=open("/media/sdb1/dummy03","w")
+                       if fileExists("/autofs/sdb1"):
+                               if access("/autofs/sdb1",F_OK|R_OK|W_OK):
+                                       dummy=open("/autofs/sdb1/dummy03","w")
                                        dummy.write("complete")
                                        dummy.close()
-                                       dummy=open("/media/sdb1/dummy03","r")
+                                       dummy=open("/autofs/sdb1/dummy03","r")
                                        if dummy.readline()=="complete":
-                                               print "complete"
+                                               print "/autofs/sdb1 - complete"
                                        else:
+                                               print "/autofs/sdb1 - readline error"
                                                result = 1
+                                               displayerror = 1
                                        dummy.close()
-                                       system("rm /media/sdb1/dummy03")
+                                       system("rm /autofs/sdb1/dummy03")
                                else:
+                                       print "/autofs/sdb1 - rw access error"
                                        result = 1
+                                       displayerror = 1
                        else:
+                               print "/autofs/sdb1 - file not exist"
                                result = 1
                except:
+                       print "/autofs/sdb1 - exceptional error"
                        result = 1
+                       displayerror = 1
                try:
                        if fileExists("/media/hdd"):
                                if access("/media/hdd",F_OK|R_OK|W_OK):
@@ -427,37 +490,48 @@ class FactoryTest(Screen):
                                        dummy.close()
                                        dummy=open("/media/hdd/dummy03","r")
                                        if dummy.readline()=="complete":
-                                               print "complete"
+                                               print "/media/hdd - complete"
                                        else:
+                                               print "/autofs/sdb1 - readline error"
                                                result += 1
+                                               displayerror = 1
                                        dummy.close()
                                        system("rm /media/hdd/dummy03")
                                else:
-                                       result = 1
+                                       print "/autofs/sdb1 - rw access error"
+                                       result += 1
+                                       displayerror = 1
                        else:
+                               print "/autofs/sdb1 - file not exist"
                                result += 1
                except:
+                       print "/autofs/sdb1 - exceptional error"
                        result += 1
-                       
-               if result ==0:
+                       displayerror = 1
+               
+               if result == 0:
                        self.session.open( MessageBox, _("Sata & extend hdd test pass"), MessageBox.TYPE_INFO)
                        self.rlist[self["testlist"].getCurrent()[1]]="pass"
                elif result == 1:
                        if displayerror==1:
-                               self.session.open( MessageBox, _("one hdd test error"), MessageBox.TYPE_ERROR)
+                               self.session.open( MessageBox, _("One hdd test error"), MessageBox.TYPE_ERROR)
                                self.rlist[self["testlist"].getCurrent()[1]]="fail"
-                       self.satatimer.start(1100,True)
+                       else:
+                               self.satatimer.start(1100,True)
                else:
                        if displayerror==1:
                                self.session.open( MessageBox, _("Sata & extend hdd test error"), MessageBox.TYPE_ERROR)
                                self.rlist[self["testlist"].getCurrent()[1]]="fail"
-                       self.satatimer.start(1100,True)
+                       else:
+                               self.satatimer.start(1100,True)
 
        def Test1(self):
                if self.model== 0:
                        self.session.openWithCallback(self.displayresult ,FrontTest)
                elif self.model == 1:
-                       self.session.openWithCallback(self.displayresult ,FrontTest_solo)               
+                       self.session.openWithCallback(self.displayresult ,FrontTest_solo)
+               elif self.model == 2:
+                       self.session.openWithCallback(self.displayresult ,FrontTest_solo)
 
        def displayresult(self):
                global fronttest
@@ -530,16 +604,26 @@ class FactoryTest(Screen):
 #                      ref.setData(3,0x85)
 #              ref.setData(4,0xC00000)
 #      ikseong - for 22000 tp ( /home/ikseong/share/lamedb_ORF)
-                       ref.setData(0,0x19)
-                       ref.setData(1,0x1325)
-                       ref.setData(2,0x3ef)
-                       ref.setData(3,0x1)
-                       ref.setData(4,0xC00000)
-                       self.session.nav.playService(ref)
-                       self.avswitch.setColorFormat(0)                 
-                       self.avswitch.setAspectRatio(6)
-               self.tuningtimer.start(2000,True)
-               self.tunemsgtimer.start(3000, True)
+                       if self.model==0:
+                               ref.setData(0,0x19)
+                               ref.setData(1,0x1325)
+                               ref.setData(2,0x3ef)
+                               ref.setData(3,0x1)
+                               ref.setData(4,0xC00000)
+                               self.session.nav.playService(ref)
+                               self.avswitch.setColorFormat(0)                 
+                               self.avswitch.setAspectRatio(6)
+                       elif self.model==2:
+                               ref.setData(0,0x19)
+                               ref.setData(1,0x1325)
+                               ref.setData(2,0x3ef)
+                               ref.setData(3,0x1)
+                               ref.setData(4,0xfff029a)
+                               self.session.nav.playService(ref)
+                               self.avswitch.setColorFormat(2)
+                               self.avswitch.setAspectRatio(0)
+               self.tuningtimer.start(4000,True)
+               self.tunemsgtimer.start(5000, True)
 
        def cam_state(self):
                if self.camstep == 1:
@@ -551,7 +635,7 @@ class FactoryTest(Screen):
                                self.camtimer.start(100,True)
                        else:
                                self.session.nav.stopService()
-                               self.session.open( MessageBox, _("NO_CAM1_NOT_INSERTED"), MessageBox.TYPE_ERROR)
+                               self.session.open( MessageBox, _("CAM1_NOT_INSERTED\nPress exit!"), MessageBox.TYPE_ERROR)
                                self.rlist[self["testlist"].getCurrent()[1]]="fail"
                                self.tunemsgtimer.stop()
 #                              self.rlist[index]="fail"
@@ -562,7 +646,7 @@ class FactoryTest(Screen):
                        print 'appname',appname
                        if appname is None:
                                self.session.nav.stopService()
-                               self.session.open( MessageBox, _("NO_GET_APPNAME"), MessageBox.TYPE_ERROR)
+                               self.session.open( MessageBox, _("NO_GET_APPNAME\nPress exit!"), MessageBox.TYPE_ERROR)
                                self.rlist[self["testlist"].getCurrent()[1]]="fail"
                                self.tunemsgtimer.stop()                                
                        else:
@@ -577,7 +661,7 @@ class FactoryTest(Screen):
                                self.camtimer.start(100,True)
                        else:
                                self.session.nav.stopService()
-                               self.session.open( MessageBox, _("NO_CAM2_NOT_INSERTED"), MessageBox.TYPE_ERROR)
+                               self.session.open( MessageBox, _("CAM2_NOT_INSERTED\nPress exit!"), MessageBox.TYPE_ERROR)
                                self.rlist[self["testlist"].getCurrent()[1]]="fail"
                                self.tunemsgtimer.stop()                                
 #                              self.rlist[index]="fail"
@@ -588,7 +672,7 @@ class FactoryTest(Screen):
                        print 'appname',appname
                        if appname is None:
                                self.session.nav.stopService()
-                               self.session.open( MessageBox, _("NO_GET_APPNAME"), MessageBox.TYPE_ERROR)
+                               self.session.open( MessageBox, _("NO_GET_APPNAME\nPress exit!"), MessageBox.TYPE_ERROR)
                                self.rlist[self["testlist"].getCurrent()[1]]="fail"
                                self.tunemsgtimer.stop()                                
                        else:
@@ -629,11 +713,11 @@ class FactoryTest(Screen):
                        self.rlist[self["testlist"].getCurrent()[1]]="pass"
                        if self.tunerlock == 0:
                                self.rlist[self["testlist"].getCurrent()[1]]="fail"
-                       elif self["testlist"].getCurrent()[1] == 7 and self.camstep < 5:
+                       elif self["testlist"].getCurrent()[1] == self.cam_index and self.camstep < 5:
                                self.rlist[self["testlist"].getCurrent()[1]]="fail"
                else:
                        self.rlist[self["testlist"].getCurrent()[1]]="fail"
-               if self["testlist"].getCurrent()[1] == 6:
+               if self["testlist"].getCurrent()[1] == 6: # YC
                        self.avswitch.setColorFormat(0)                 
                self.resetSource()
                self["resultlist"].updateList(self.rlist)
@@ -694,76 +778,73 @@ class FactoryTest(Screen):
        def checkaging(self):
                global Agingresult
                if(Agingresult ==1):
-                       self["testlist"].moveToIndex(11)
+                       self["testlist"].moveToIndex(self.fdefaultIndex)
                        self.Test14()
-                       self["testlist"].moveToIndex(12)
+                       self["testlist"].moveToIndex(self.shutdownIndex)
                self.agingmode = 0
-#                      self["testlist"].instance.moveSelection(self["testlist"].instance.moveDown)
-                       
-               
-
+#                      self["testlist"].instance.moveSelection(self["testlist"].instance.moveDown)             
+       
        def Test8(self):
-               if self.model==0:                       
-                       try:
-                               result = 0
-                               mtab = open('/etc/mtab','r')
-                               while(1):
-                                       disk = mtab.readline().split(' ')
-                                       if len(disk) < 2:
-                                               break
-                                       if disk[1].startswith('/media/hdd'):
-                                               continue
-                                       elif disk[1].startswith('/media/sdb1'):
-                                               continue
-                                       elif disk[1].startswith('/media/sd'):
-                                               result=result +1
-
-                               if result < 0 :
-                                       result = 0
-                               if result == 3:
-                                       self.session.open( MessageBox, _("USB test pass %d devices"%result), MessageBox.TYPE_INFO)                      
-                                       self.rlist[self["testlist"].getCurrent()[1]]="pass"
-                               else:
-                                       self.session.open( MessageBox, _("USB test error : Success-%d"%result+" Fail-%d"%(3-result)), MessageBox.TYPE_ERROR)
-                                       self.rlist[self["testlist"].getCurrent()[1]]="fail"
-                       except:
-                               if result < 0 :
-                                       result = 0
-                               if result == 3:
-                                       self.session.open( MessageBox, _("USB test pass %d devices"%result), MessageBox.TYPE_INFO)                      
-                                       self.rlist[self["testlist"].getCurrent()[1]]="pass"
-                               else:
-                                       self.session.open( MessageBox, _("USB test error : Success-%d"%result+" Fail-%d"%(3-result)), MessageBox.TYPE_ERROR)
-                                       self.rlist[self["testlist"].getCurrent()[1]]="fail"
+               self.usbtry = 9
+               self.usbtimer.start(100,True)
+
+       def usbCheck(self):
+               if self.usbtry == 0:
+                       displayerror = 1
+               else:
+                       self.rlist[self["testlist"].getCurrent()[1]]="try %d"%self.usbtry
+                       self["resultlist"].updateList(self.rlist)
+                       self.usbtry -= 1
+                       displayerror = 0
+
+               if self.model==0:
+                       devices = [ "/autofs/sdc1", "/autofs/sdd1", "/autofs/sde1" ]
                elif self.model==1:
+                       devices = [ "/autofs/sda1", "/autofs/sdb1" ]
+               elif self.model==2:
+                       devices = [ "/autofs/sdc1", "/autofs/sdd1" ]
+
+               result=len(devices)
+               
+               for dev in devices:
                        try:
-                               result = 0
-                               mtab = open('/etc/mtab','r')
-                               while(1):
-                                       disk = mtab.readline().split(' ')
-                                       if len(disk) < 2:
-                                               break
-                                       if disk[1].startswith('/media/'):
-                                               result=result +1
-
-                               if result < 0 :
-                                       result = 0
-                               if result == 2:
-                                       self.session.open( MessageBox, _("USB test pass %d devices"%result), MessageBox.TYPE_INFO)                      
-                                       self.rlist[self["testlist"].getCurrent()[1]]="pass"
+                               if fileExists(dev):
+                                       if access(dev,F_OK|R_OK|W_OK):
+                                               dummy=open(dev+"/dummy03","w")
+                                               dummy.write("complete")
+                                               dummy.close()
+                                               dummy=open(dev+"/dummy03","r")
+                                               if dummy.readline()=="complete":
+                                                       print dev," - complete"
+                                               else:
+                                                       print dev," - readline error"
+                                                       result=result -1
+                                                       displayerror = 1
+                                               dummy.close()
+                                               system("rm "+dev+"/dummy03")
+                                       else:
+                                               print dev," - rw access error"
+                                               result=result -1
+                                               displayerror = 1
                                else:
-                                       self.session.open( MessageBox, _("USB test error : Success-%d"%result+" Fail-%d"%(2-result)), MessageBox.TYPE_ERROR)
-                                       self.rlist[self["testlist"].getCurrent()[1]]="fail"
+                                       print dev," - file not exist"
+                                       result=result-1
                        except:
-                               if result < 0 :
-                                       result = 0
-                               if result == 2:
-                                       self.session.open( MessageBox, _("USB test pass %d devices"%result), MessageBox.TYPE_INFO)                      
-                                       self.rlist[self["testlist"].getCurrent()[1]]="pass"
-                               else:
-                                       self.session.open( MessageBox, _("USB test error : Success-%d"%result+" Fail-%d"%(2-result)), MessageBox.TYPE_ERROR)
-                                       self.rlist[self["testlist"].getCurrent()[1]]="fail"
-               
+                               print dev," - exceptional error"
+                               result=result -1
+                               displayerror = 1
+       
+               if result < 0 :
+                       result = 0
+               elif result == len(devices):
+                       self.session.open( MessageBox, _("USB test pass %d devices\nPress OK!"%result), MessageBox.TYPE_INFO)                   
+                       self.rlist[self["testlist"].getCurrent()[1]]="pass"
+               else:
+                       if displayerror == 1:
+                               self.session.open( MessageBox, _("USB test error : Success-%d"%result+" Fail-%d\nPress EXIT!"%(len(devices)-result)), MessageBox.TYPE_ERROR)
+                               self.rlist[self["testlist"].getCurrent()[1]]="fail"
+                       else:
+                               self.usbtimer.start(1100,True)
 
        def pingtest(self):
                self.testing = 1
@@ -802,14 +883,14 @@ class FactoryTest(Screen):
                else:
                        ethtest = 0
                        print "fail"
-                       self.session.open( MessageBox, _("Ping test fail"), MessageBox.TYPE_ERROR)
+                       self.session.open( MessageBox, _("Ping test fail\nPress exit"), MessageBox.TYPE_ERROR)
                        self.macresult()
 
        def Test9(self):
                self.pingtest()
 
        def openMacConfig(self, ret=False):
-               self.session.openWithCallback(self.macresult ,MacConfig)        
+               self.session.openWithCallback(self.macresult ,MacConfig,mactry=self.mactry)     
                        
        def macresult(self):
                global ethtest
@@ -853,7 +934,7 @@ class FactoryTest(Screen):
                        self.rlist[self["testlist"].getCurrent()[1]]="fail"
 
        def Test10(self):
-               self.session.openWithCallback(self.scciresult ,SmartCardTest)   
+               self.session.openWithCallback(self.scciresult ,SmartCardTest,stbmodel=self.model)
 
        def Test11(self):
                self.MemTest(1)
@@ -892,6 +973,8 @@ class FactoryTest(Screen):
                        return
                print "exit"
                self.close()
+#              if self.oldref is not None:
+#                      self.session.nav.playService(self.oldref)
 
 ethtest = 0
 class MacConfig(Screen):
@@ -904,7 +987,7 @@ class MacConfig(Screen):
                        <widget name="stattext" position="30,75" size="400,25" font="Regular;20" />
                </screen>"""
 
-       def __init__(self, session):
+       def __init__(self, session, mactry = 1):
                self["actions"] = ActionMap(["DirectionActions","OkCancelActions"],
                {
                        "ok": self.keyOk,
@@ -914,75 +997,134 @@ class MacConfig(Screen):
                }, -2)
 
                Screen.__init__(self, session)
-       
-               self.result = 0
+
+               self.mactry = mactry
+               self.model = 0
+               self.getModelInfo()
+#              self.result = 0
                self.macfd = 0
                self.macaddr = "000000000000"
-               self.NetworkState = 0
+               self.ReadMacinfo = 0
                self["text"]=Label((self.macaddr))
                self["text1"]= Label(("< >"))
                self["stattext"]= Label((""))
                self.displaymac()
                self.loadmacaddr()
                self.getmacaddr()
-               self.pingok=1
-#              self.pingtest()
                global ethtest
                ethtest = 1
 
+       def getModelInfo(self):
+               getmodel = 0
+               if fileExists("/proc/stb/info/vumodel"):
+                       info = open("/proc/stb/info/vumodel").read().strip()
+                       if info == "combo":
+                               self.model = 2
+                               getmodel = 1
+                               print "MacConfig, model : combo"
+                       if info == "solo":
+                               self.model = 1
+                               getmodel = 1
+                               print "MacConfig, model : solo"
+                       if info == "duo":
+                               self.model = 0
+                               getmodel = 1
+                               print "MacConfig, model : duo"
+               if getmodel == 0 and fileExists("/proc/stb/info/version"):
+                       info = open("/proc/stb/info/version").read()
+#                      print info,info[:2]
+                       if info[:2] == "14":
+                               self.model = 1
+                               print "MacConfig, model : solo_"
+                       elif info[:2] == "12":
+                               self.model = 0
+                               print "MacConfig, model: duo_"
+
        def loadmacaddr(self):
                try:
-                       result = 0
                        self.macfd = 0
-                       mtab = open('/etc/mtab','r')
-                       while(1):
-                               disk = mtab.readline().split(' ')
-                               if len(disk) < 2:
+
+                       if self.model==0:
+                               devices = ["/autofs/sda1", "/autofs/sdb1", "/autofs/sdc1", "/autofs/sdd1", "/autofs/sde1" ]
+                       elif self.model==1:
+                               devices = [ "/autofs/sda1", "/autofs/sdb1" ]
+                       elif self.model==2:
+                               devices = [ "/autofs/sda1", "/autofs/sdb1", "/autofs/sdc1", "/autofs/sdd1" ]
+
+                       for dev in devices:
+                               print 'try..',dev
+                               if  fileExists(dev+"/macinfo.txt"):
+                                       self.macfd = open(dev+"/macinfo.txt","r+")
                                        break
-                               if disk[1].startswith('/media/sd') or disk[1].startswith('/media/hdd'):
-                                       print 'try..',disk[1]
-                                       if  fileExists(disk[1]+"/Vuplus_mac.txt"):
-                                               self.macfd = open(disk[1]+"/Vuplus_mac.txt","r+")
-                                               break
+
                        if self.macfd == 0:
                                self["text"].setText(("cannot read usb!!"))
                                self["text1"].setText((" "))
                                self["stattext"].setText((" Press Exit Key."))
-                               self.NetworkState=0
+                               self.ReadMacinfo=0
                                return
                        
                        macaddr=self.macfd.readline().split(":")
                        self.macaddr=macaddr[1]+macaddr[2]+macaddr[3]+macaddr[4]+macaddr[5]+macaddr[6]
                        self.displaymac()
-                       self.NetworkState = 1
+                       self.ReadMacinfo = 1
                except:
                        self["text"].setText(("cannot read usb!!"))
                        self["text1"].setText((" "))
                        self["stattext"].setText((" Press Exit Key."))
-                       self.NetworkState=0
-#                      self.session.open( MessageBox, _("Mac address fail"), MessageBox.TYPE_ERROR)
-
-       def readmac(self, result, retval,extra_args=None):
-               (statecallback) = extra_args
-               if self.macConsole is not None:
-                       if retval == 0:
-                               self.macConsole = None
-                               content =result.split()
-                               self["stattext"].setText(("now : "+content[10]))
+                       self.ReadMacinfo=0
        
        def getmacaddr(self):
-               if self.NetworkState==0:
+               if self.ReadMacinfo==0:
                        return
                try:
-                       cmd = "ip -o addr"
+                       if self.model == 2:
+                               cmd = "nanddump -s 0x" + str((self.mactry-1)*2) + "0000 -b -o -l 64 -p /dev/mtd5"
+                       elif self.model == 0 or self.model == 1:
+                               cmd = "nanddump -s 0x" + str((self.mactry-1)*2) + "0000 -b -o -l 64 -p /dev/mtd4"
                        self.macConsole = Console()     
-                       self.macConsole.ePopen(cmd, self.readmac)       
-#                      self["stattext"].setText((macaddr))
+                       self.macConsole.ePopen(cmd, self.readmac,self.checkReadmac)
                except:
                        return
+
+       def readmac(self, result, retval,extra_args=None):
+               (callback) = extra_args
+               if self.macConsole is not None:
+                       if retval == 0:
+                               self.macConsole = None
+                               macline = None
+                               content =result.splitlines()
+                               for x in content:
+                                       if x.startswith('0x000'+str((self.mactry-1)*2)+'0010:'):
+                                               macline = x.split()
+                               if macline == None:
+                                       callback(0)
+                               elif len(macline) < 10: 
+                                       callback(1)
+                               else:   
+                                       mac = macline[5]+":"+macline[6]+":"+macline[7]+":"+macline[8]+":"+macline[9]+":"+macline[10]
+                                       self["stattext"].setText(("now : "+mac))
+                                       callback(2)
+
+       def checkReadmac(self,data):
+               if data == 0:
+                       print "block %d is bad block" % self.mactry
+                       self.mactry = self.mactry + 1
+                       if self.mactry > 4:
+                               self.session.open(MessageBox, _("FLASH IS BROKEN"), type = MessageBox.TYPE_INFO, enable_input = False)
+                               return
+                       else:
+                               self.getmacaddr()
+               elif data == 1:
+                       print 'mac dump read error'
+                       return
+               elif data == 2:
+                       print 'mac address read ok'
+                       return
+
                        
        def keyleft(self):
-               if self.NetworkState==0 or self.pingok<1:
+               if self.ReadMacinfo==0 :
                        return
                macaddress = long(self.macaddr,16)-1
                if macaddress < 0 :
@@ -991,7 +1133,7 @@ class MacConfig(Screen):
                self.displaymac()
 
        def keyright(self):
-               if self.NetworkState==0 or self.pingok<1:
+               if self.ReadMacinfo==0 :
                        return
                macaddress = long(self.macaddr,16)+1
                if macaddress > 0xffffffffffff:
@@ -1004,21 +1146,21 @@ class MacConfig(Screen):
                self["text"].setText(("%02x:%02x:%02x:%02x:%02x:%02x"%(int(macaddr[0:2],16),int(macaddr[2:4],16),int(macaddr[4:6],16),int(macaddr[6:8],16),int(macaddr[8:10],16),int(macaddr[10:12],16))))
 
        def keyOk(self):
-               if self.NetworkState==0 or self.pingok<1:
+               if self.ReadMacinfo==0 :
                        return
                try:
-                       system("/etc/init.d/networking stop")
-                       system("ifconfig eth0 down")
                        macaddr = self.macaddr
-                       macaddrcmd="ifconfig eth0 hw ether %02x:%02x:%02x:%02x:%02x:%02x"%(int(macaddr[0:2],16),int(macaddr[2:4],16),int(macaddr[4:6],16),int(macaddr[6:8],16),int(macaddr[8:10],16),int(macaddr[10:12],16))
-                       system(macaddrcmd)
 #make_mac_sector 00-99-99-99-00-00 > /tmp/mac.sector
 #flash_eraseall /dev/mtd4
 #nandwrite /dev/mtd4 /tmp/mac.sector -p                        
                        cmd = "make_mac_sector %02x-%02x-%02x-%02x-%02x-%02x > /tmp/mac.sector"%(int(macaddr[0:2],16),int(macaddr[2:4],16),int(macaddr[4:6],16),int(macaddr[6:8],16),int(macaddr[8:10],16),int(macaddr[10:12],16))
                        system(cmd)
-                       system("flash_eraseall /dev/mtd4")
-                       system("nandwrite /dev/mtd4 /tmp/mac.sector -p")
+                       if self.model == 2:
+                               system("flash_eraseall /dev/mtd5")
+                               system("nandwrite /dev/mtd5 /tmp/mac.sector -p")
+                       elif self.model == 0 or self.model ==1 :
+                               system("flash_eraseall /dev/mtd4")
+                               system("nandwrite /dev/mtd4 /tmp/mac.sector -p")
                        macaddress = long(macaddr,16)+1
                        if macaddress > 0xffffffffffff:
                                macaddress = 0
@@ -1026,65 +1168,17 @@ class MacConfig(Screen):
                        macwritetext = "MAC:%02x:%02x:%02x:%02x:%02x:%02x"%(int(macaddr[0:2],16),int(macaddr[2:4],16),int(macaddr[4:6],16),int(macaddr[6:8],16),int(macaddr[8:10],16),int(macaddr[10:12],16))
                        self.macfd.seek(0)
                        self.macfd.write(macwritetext)
+                       self.macfd.close()
+                       system("sync")
                        self.macaddr = macaddr
-                       system("ifconfig eth0 up")
-                       self.loadmacaddr()
-                       system("ifconfig eth0 192.168.0.10")
-                       system("/etc/init.d/networking start")
                        self.close()
                except:
                        self.session.open( MessageBox, _("Mac address fail"), MessageBox.TYPE_ERROR)
                        global ethtest
                        ethtest = 0
-                       self.close()
-               
-       def pingtest(self):
-               self["stattext"].setText(("now : wait to finish ping test..."))
-#              system("/etc/init.d/networking stop")
-               system("ifconfig eth0 192.168.0.10")
-#              system("/etc/init.d/networking start")
-               cmd1 = "ping -c 1 192.168.0.100"
-               self.PingConsole = Console()
-               self.PingConsole.ePopen(cmd1, self.checkNetworkStateFinished,self.NetworkStatedataAvail)
-               
-       def checkNetworkStateFinished(self, result, retval,extra_args):
-               (statecallback) = extra_args
-               if self.PingConsole is not None:
-                       if retval == 0:
-                               self.PingConsole = None
-                               content = result.splitlines()
-#                              print 'content',content
-                               x = content[4].split()
-#                              print 'x',x
-                               if x[0]==x[3]:
-                                       statecallback(1)
-                               else:
-                                       statecallback(0)                                        
-                       else:
-                               statecallback(0)
-
-
-       def NetworkStatedataAvail(self,data):
-               global ethtest
-               if data == 1:
-                       ethtest = 1
-                       print "success"
-                       self.pingok=1
-                       self.loadmacaddr()
-                       self.getmacaddr()                       
-                       self.session.open( MessageBox, _("Ping test pass"), MessageBox.TYPE_INFO,2)
-               else:
-                       ethtest = 0
-                       print "fail"
-                       self.pingok=0
-                       self["stattext"].setText(("ping test fail..    press Exit Key"))
-                       self.session.open( MessageBox, _("Ping test fail"), MessageBox.TYPE_ERROR,2)
-               self.getmacaddr()
-               
+                       self.close()            
 
        def keyCancel(self):
-               if self.pingok == -1:
-                       return
                if self.macfd != 0:
                        self.macfd.close()
                global ethtest
@@ -1092,7 +1186,6 @@ class MacConfig(Screen):
                self.close()
 
 
-
 sccitest = 0
 
 class ScCiTest(Screen):
@@ -1341,7 +1434,7 @@ class SmartCardTest(Screen):
                        <widget name="text" position="10,10" size="140,100" font="Regular;22" />
                </screen>"""
 
-       def __init__(self, session):
+       def __init__(self, session, stbmodel = 0):
                self["actions"] = ActionMap(["DirectionActions", "OkCancelActions"],
                {
                        "cancel": self.keyCancel,
@@ -1354,28 +1447,14 @@ class SmartCardTest(Screen):
                self.step = 0
                self.smartcardtimer = eTimer()
                self.smartcardtimer.callback.append(self.check_smart_card)
-               self.smartcardtimer.start(100,True)
+               self.closetimer = eTimer()
+               self.closetimer.callback.append(self.close)
                self.smartcard=0
                global smartcardtest
                smartcardtest = 0
-               self.Testmode = 0
-               self.model = 0
-               self.check_mode()
-
-       def check_mode(self):
-               try:
-                       fd = open("/proc/stb/info/version","r")
-                       version = fd.read()
-                       if int(version,16) <= 0x1200A3:
-                               self.Testmode = 0
-                       else:
-                               self.Testmode = 1
-                       if int(version,16) < 0x130000:
-                               self.model = 0
-                       elif int(version,16) > 0x140000:
-                               self.model = 1
-               except:
-                       self.Testmode = 0
+               self.model = stbmodel
+               self.Testmode = 1
+               self.smartcardtimer.start(100,True)
 
        def check_smart_card(self):
                global smartcardtest
@@ -1398,7 +1477,7 @@ class SmartCardTest(Screen):
                
                if result == 0:
                        print 'pass'
-                       if(index== 0 and self.model== 0):
+                       if(index== 0 and ( self.model== 0 or self.model==2) ):
                                self.smartcard = 1
                                self["text"].setText(_("Testing Smartcard 2..."))
                                self.smartcardtimer.start(100,True)
@@ -1408,21 +1487,23 @@ class SmartCardTest(Screen):
 #                              self.session.open( MessageBox, _("Smart Card OK!!"), MessageBox.TYPE_INFO,2)
                                self.step = 1
                                self["text"].setText(_("Smart Card OK!!"))
+                               self.closetimer.start(2000,True)
                                self.smartcardtimer.stop()
 #                      self.session.openWithCallback(self.check6, MessageBox, _("Scart loop ok?"), MessageBox.TYPE_INFO)
                else:
-                       if result ==-1:
-                               self.session.open( MessageBox, _("%d:NO_DEV_FOUND"%(index+1)), MessageBox.TYPE_ERROR)
-                       elif result == -2:
-                               self.session.open( MessageBox, _("%d:SC_NOT_INSERTED"%(index+1)), MessageBox.TYPE_ERROR)
-                       elif result == -3:
-                               self.session.open( MessageBox, _("%d:SC_NOT_VALID_ATR"%(index+1)), MessageBox.TYPE_ERROR)
-                       elif result == -5:
-                               self.session.open( MessageBox, _("%d:SC_READ_TIMEOUT"%(index+1)), MessageBox.TYPE_ERROR)
+#                      if result ==-1:
+#                              self.session.open( MessageBox, _("%d:NO_DEV_FOUND"%(index+1)), MessageBox.TYPE_ERROR)
+#                      elif result == -2:
+#                              self.session.open( MessageBox, _("%d:SC_NOT_INSERTED"%(index+1)), MessageBox.TYPE_ERROR)
+#                      elif result == -3:
+#                              self.session.open( MessageBox, _("%d:SC_NOT_VALID_ATR"%(index+1)), MessageBox.TYPE_ERROR)
+#                      elif result == -5:
+#                              self.session.open( MessageBox, _("%d:SC_READ_TIMEOUT"%(index+1)), MessageBox.TYPE_ERROR)
                        if(index==0):
-                               self["text"].setText(_("Smart Card 1 Error!"))
+                               self["text"].setText(_("Smart Card 1 Error!\nerrorcode=%d"%result))
                        elif (index==1):
-                               self["text"].setText(_("Smart Card 2 Error!"))
+                               self["text"].setText(_("Smart Card 2 Error!\nerrorcode=%d"%result))
+                       self.closetimer.start(2000,True)
                        self.smartcardtimer.stop()
 
                                
@@ -1501,7 +1582,7 @@ class FrontTest(Screen):
                        self.keytimeout.stop()
                        self.step =4
                        self.fronttimer.start(1000,True)
-                       self["text"].setText(("Front Test OK! Press Exit Key"))
+                       self["text"].setText(("Front Test OK!\nPress Exit Key"))
 #              elif self.step==4:
 #                      global fronttest
 #                      self.fronttimer.stop()
@@ -1551,15 +1632,15 @@ class FrontTest_solo(Screen):
 
        def KeyTimeOut(self):
                if self.step == 1:
-                       self["text"].setText(("Front STANDBY ERROR"))
+                       self["text"].setText(("Front STANDBY ERROR\nPress exit!"))
                elif self.step == 2 :
-                       self["text"].setText(("Front CH+ ERROR"))
+                       self["text"].setText(("Front CH - ERROR\nPress exit!"))
                elif self.step == 3:
-                       self["text"].setText(("Front CH- ERROR"))
+                       self["text"].setText(("Front CH + ERROR\nPress exit!"))
                elif self.step == 4 :
-                       self["text"].setText(("Front VOL + ERROR"))
+                       self["text"].setText(("Front VOL - ERROR\nPress exit!"))
                elif self.step == 5:
-                       self["text"].setText(("Front VOL - ERROR"))
+                       self["text"].setText(("Front VOL + ERROR\nPress exit!"))
                        
                self.step = 0
 #              self.keyCancel()
@@ -1569,51 +1650,58 @@ class FrontTest_solo(Screen):
                        self.keytimeout.stop()
                        self.keytimeout.start(5000,True)
                        self.step = 2
-                       self["text"].setText(_("Press Front CH+"))
+                       self["text"].setText(_("Press Front CH -"))
                        
        def keyright(self):
                if self.step== 3:
                        self.keytimeout.stop()
                        self.keytimeout.start(5000,True)
                        self.step = 4
-                       self["text"].setText(_("Press Front VOL +"))
+                       self["text"].setText(_("Press Front VOL -"))
                        
        def keyleft(self):
                if self.step== 2:
                        self.keytimeout.stop()
                        self.keytimeout.start(5000,True)
                        self.step = 3
-                       self["text"].setText(_("Press Front CH -"))
+                       self["text"].setText(_("Press Front CH +"))
 
        def keyvolup(self):
-               if self.step== 4:
+               if self.step== 5:
                        self.keytimeout.stop()
-                       self.keytimeout.start(5000,True)
-                       self.step = 5
-                       self["text"].setText(_("Press Front VOL -"))
+                       self.step = 6
+                       self.fronttimer.start(1000,True)
+                       self["text"].setText(_("Front LED OK?\n\nyes-ok\nno-exit"))                     
+#                      self["text"].setText(("Front Test OK!\nPress Exit Key"))
                
        def keyvoldown(self):
-               if self.step== 5:
+               if self.step== 4:
                        self.keytimeout.stop()
-                       self.step = 6
-                       self["text"].setText(("Front Test OK! Press Exit Key"))
+                       self.keytimeout.start(5000,True)
+                       self.step = 5
+                       self["text"].setText(_("Press Front VOL +"))
+
+       def checkled(self, yesno):
+               if yesno :
+                       self.step=6
+               else:
+                       self.step=0
+               self.keyCancel()
                        
        def keyCancel(self):
                global fronttest
                self.fronttimer.stop()
                eSctest.getInstance().VFD_Close()
-               if self.step==6:
-                       fronttest = 1
-               else:
-                       fronttest = 0
+               fronttest = 0
                self.close()
 
        def keyOk(self):
-               if self.step == 3:
-                       self.keytimeout.stop()
-                       self.step =4
-                       self.fronttimer.start(1000,True)
-                       self["text"].setText(("Front Test OK! Press Exit Key"))
+               global fronttest
+               self.fronttimer.stop()
+               eSctest.getInstance().VFD_Close()
+               if self.step == 6:
+                       fronttest = 1
+               self.close()
 
        def FrontAnimate(self):
                if (self.frontturnonoff==0):