FactoryTest :
[vuplus_dvbapp] / lib / python / Plugins / SystemPlugins / FactoryTest / plugin.py
index 9ae55c7..38ac2f5 100755 (executable)
@@ -16,40 +16,114 @@ from Components.HTMLComponent import HTMLComponent
 from Components.GUIComponent import GUIComponent
 from enigma import eListboxPythonStringContent, eListbox, gFont, eServiceCenter, eDVBResourceManager
 from enigma import eServiceReference
-from enigma import eMemtest
-from enigma import eSctest
+from sctest import eSctest
 from enigma import eDVBDB
 from Components.NimManager import nimmanager
 from enigma import eDVBCI_UI,eDVBCIInterfaces
+from Tools.Directories import resolveFilename, SCOPE_SYSETC
+from Components.Sources.StaticText import StaticText
 
-class TestResultList(HTMLComponent, GUIComponent):
-       def __init__(self, source):
-               GUIComponent.__init__(self)
-               self.l = eListboxPythonStringContent()
-               self.list = source
+class TestResultList(MenuList):
+       def postWidgetCreate(self, instance):
+               self.instance.setSelectionEnable(0)
+               instance.setContent(self.l)
+               instance.selectionChanged.get().append(self.selectionChanged)
+               if self.enableWrapAround:
+                       self.instance.setWrapAround(True)
+
+       def updateList(self, list):
+               self.list = list
                self.l.setList(self.list)
 
-       GUI_WIDGET = eListbox
+class TuneMessageBox(MessageBox):
+       skin = """
+               <screen position="center,center" size="600,10" title="Message">
+                       <widget name="text" position="65,8" size="420,0" font="Regular;22" />
+                       <widget name="ErrorPixmap" pixmap="Vu_HD/icons/input_error.png" position="5,5" size="53,53" alphatest="blend" />
+                       <widget name="QuestionPixmap" pixmap="Vu_HD/icons/input_question.png" position="5,5" size="53,53" alphatest="blend" />
+                       <widget name="InfoPixmap" pixmap="Vu_HD/icons/input_info.png" position="5,5" size="53,53" alphatest="blend" />
+                       <widget name="list" position="100,100" size="380,375" transparent="1" backgroundColor="darkgrey" />
+                       <!-- Signal Quality -->
+                       <eLabel text="SNR : " position="60,130" size="60,25" font="Regular;25" transparent="1" />
+                       <widget source="session.FrontendStatus" render="Label" position="120,130" size="60,25" font="Regular;25"  transparent="1">
+                               <convert type="FrontendInfo">SNRdB</convert>
+                       </widget>
+                       <!-- AGC -->
+                       <eLabel text="AGC : " position="200,130" size="60,25" font="Regular;25"  transparent="1" noWrap="1" />
+                       <widget source="session.FrontendStatus" render="Label" position="260,130" size="60,25" font="Regular;25"  transparent="1" noWrap="1">
+                               <convert type="FrontendInfo">AGC</convert>
+                       </widget>
+                       <applet type="onLayoutFinish">
+# this should be factored out into some helper code, but currently demonstrates applets.
+from enigma import eSize, ePoint
+
+orgwidth = self.instance.size().width()
+orgpos = self.instance.position()
+textsize = self[&quot;text&quot;].getSize()
+
+# y size still must be fixed in font stuff...
+textsize = (textsize[0] + 50, textsize[1] + 50)
+offset = 0
+if self.type == self.TYPE_YESNO:
+       offset = 60
+wsizex = textsize[0] + 60
+wsizey = textsize[1] + offset
+if (280 &gt; wsizex):
+       wsizex = 280
+wsizex = wsizex + 30
+wsizey = wsizey + 30
+wsize = (wsizex, wsizey)
+
+# resize
+self.instance.resize(eSize(*wsize))
+
+# resize label
+self[&quot;text&quot;].instance.resize(eSize(*textsize))
+
+# move list
+listsize = (wsizex, 50)
+self[&quot;list&quot;].instance.move(ePoint(0, textsize[1]))
+self[&quot;list&quot;].instance.resize(eSize(*listsize))
+
+# center window
+newwidth = wsize[0]
+self.instance.move(ePoint(orgpos.x() + (orgwidth - newwidth)/2, orgpos.y()))
+                       </applet>
+               </screen>"""
+       def __init__(self, session, text, type = MessageBox.TYPE_YESNO):
+               MessageBox.__init__(self, session, text, type)
 
-       def postWidgetCreate(self, instance):
-               self.instance.setSelectionEnable(0)
-               self.instance.setContent(self.l)
+class FactoryTestSummary(Screen):
+       skin = """
+       <screen name="FactoryTestSummary" position="0,0" size="132,64" id="1">
+               <widget source="parent.Title" render="Label" position="6,0" size="132,64" font="Regular;18" halign="center" valign="center"/>
+       </screen>"""
 
-       def updateList(self,list):
-               self.l.setList(list)
+class FactoryTestSummary_VFD(Screen):
+       skin = """
+       <screen name="FactoryTestSummary" position="0,0" size="256,64" id="1">
+               <widget source="parent.Title" render="Label" position="0,0" size="256,64" font="VFD;24" halign="center" valign="center"/>
+       </screen>"""
 
 class FactoryTest(Screen):
        skin = """
-               <screen position="120,125" size="440,400" title="Test Menu" >
-                       <widget name="testlist" position="10,0" size="340,350" />
-                       <widget name="resultlist" position="370,0" size="60,350" />
-                       <widget name="testdate" position="20,350" size="150,25" font="Regular;22" />
-                       <widget name="testversion" position="20,375" size="150,25" font="Regular;22" />
-                       <widget name="mactext" position="180,350" size="230,25" font="Regular;22" />                    
+               <screen name="FactoryTest" position="300,100" size="660,550" title="Test Menu" >
+                       <widget name="testlist" position="10,0" size="440,455" itemHeight="35" />
+                       <widget name="resultlist" position="470,0" size="60,455" itemHeight="35" />
+                       <widget name="testdate" position="20,470" size="250,35" font="Regular;30" />
+                       <widget name="testversion" position="20,505" size="250,35" font="Regular;30" />
+                       <widget name="mactext" position="320,470" size="340,35" font="Regular;30" />
                </screen>"""
+
+       def createSummary(self):
+               if self.model == 4:
+                       return FactoryTestSummary_VFD
+               else:
+                       return FactoryTestSummary
+
        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,13 +141,14 @@ class FactoryTest(Screen):
                        "6": self.numberaction,                 
                        "7": self.numberaction,                 
                        "8": self.numberaction,                 
-                       "9": self.numberaction,
-                       "red": self.shutdownaction,             
+                       "9": self.numberaction,                 
+                       "red": self.shutdownaction,
+                       "blue": self.Agingmode2,
                }, -2)
 
                Screen.__init__(self, session)
-               TESTPROGRAM_DATE = "2010-06-09"
-               TESTPROGRAM_VERSION = "Version 00.01"
+               TESTPROGRAM_DATE = self.getImageVersion() +" (v1.20)"
+               TESTPROGRAM_VERSION = "Version 01.20"
 
                self.model = 0
                self.getModelInfo()
@@ -81,12 +156,13 @@ class FactoryTest(Screen):
                self["testdate"]=Label((TESTPROGRAM_DATE))
                self["testversion"]=Label(("Loading version..."))
                self["mactext"]=Label(("Loading mac address..."))
-               nimConfig = nimmanager.getNimConfig(0)
-               nimConfig.configMode.slot_id=0
-               nimConfig.configMode.value= "simple"
-               nimConfig.diseqcMode.value="diseqc_a_b"
-               nimConfig.diseqcA.value="160"
-               nimConfig.diseqcB.value="100"
+               if self.model == 0 or self.model == 1:
+                       nimConfig = nimmanager.getNimConfig(0)
+                       nimConfig.configMode.slot_id=0
+                       nimConfig.configMode.value= "simple"
+                       nimConfig.diseqcMode.value="diseqc_a_b"
+                       nimConfig.diseqcA.value="160"
+                       nimConfig.diseqcB.value="100"
                if self.model == 0:
                        nimConfig = nimmanager.getNimConfig(1)
                        nimConfig.configMode.slot_id=1          
@@ -94,13 +170,125 @@ class FactoryTest(Screen):
                        nimConfig.diseqcMode.value="diseqc_a_b"
                        nimConfig.diseqcA.value="130"
                        nimConfig.diseqcB.value="192"
-               nimmanager.sec.update()         
+               if self.model == 2:
+                       pass
+               if self.model == 3 or self.model == 4:
+                       self.NimType = {}
+                       sat_list = ["160","100","130","192","620","642","685","720"]
+#                                      ' sat ' : namespace , # satname
+#                                      '160' : '0xA00000', # Eutelsat W2
+#                                      '100' : '0x64af79', # Eutelsat
+#                                      '130' : '0x820000', # Hotbird
+#                                      '192' : '0xC00000', # Astra
+#                                      '620' : '0x26c0000', # Intelsat 902
+#                                      '642' : '0x282AF79' # Intelsat 906
+#                                      '685' : '02ad0000' # Panamsat 7,10 (68.5E)
+#                                      '720' : '02d0af79' # Panamsat 4 (72.0E)
+                       try:
+                               nimfile = open("/proc/bus/nim_sockets")
+                       except IOError:
+                               nimfile = None
+                       if nimfile is None:
+                               self.session.openWithCallback(self.close, MessageBox, _("File not Found!\n/proc/bus/nim_sockets"), MessageBox.TYPE_ERROR)
+                       for line in nimfile.readlines():
+                               print line
+                               if line == "":
+                                       break
+                               if line.strip().startswith("NIM Socket"):
+                                       parts = line.strip().split(" ")
+                                       current_slot = int(parts[2][:-1])
+                                       self.NimType[current_slot]={}
+                                       self.NimType[current_slot]["slot"] = current_slot
+                               elif line.strip().startswith("Type:"):
+                                       print str(line.strip())
+                                       self.NimType[current_slot]["type"] = str(line.strip()[6:])
+                                       if self.NimType[current_slot]["type"].startswith("DVB-S"):
+                                               self.NimType[current_slot]["sat1"] = sat_list.pop(0)
+                                               self.NimType[current_slot]["sat2"] = sat_list.pop(0)
+                                       else:
+                                               self.NimType[current_slot]["sat1"] = None
+                                               self.NimType[current_slot]["sat2"] = None
+                               elif line.strip().startswith("empty"):
+                                       self.NimType.pop(current_slot)  
+                       nimfile.close()
+                       if True:
+                               for (key, val) in self.NimType.items():
+                                       print key
+                                       print val
+                                       if val["type"].startswith("DVB-S"):
+                                               print "nimConfig (dvb-s): ",key
+                                               nimConfig = nimmanager.getNimConfig(key)
+                                               nimConfig.configMode.slot_id=key
+                                               nimConfig.configMode.value= "simple"
+                                               nimConfig.diseqcMode.value="diseqc_a_b"
+                                               nimConfig.diseqcA.value = val["sat1"]
+                                               nimConfig.diseqcB.value = val["sat2"]
+                                       else :
+                                               nimConfig = nimmanager.getNimConfig(key)
+                                               print "configMode check : ",nimConfig.configMode.value
+                       
+               nimmanager.sec.update()
                
                system("cp /usr/lib/enigma2/python/Plugins/SystemPlugins/FactoryTest/testdb /etc/enigma2/lamedb")
                db = eDVBDB.getInstance()
                db.reloadServicelist()
+               self.createConfig()
+               
+               self.rlist = []
+               for x in range(self.menulength-1):
+                       self.rlist.append((".."))
+               self.rlist.append((" "))
+               self["resultlist"] = TestResultList(self.rlist)
+
+               self.avswitch = AVSwitch()
+               self.scTest= eSctest()
+               
+               self.testing = 0
+
+               self.servicelist = ServiceList()
+               self.oldref = session.nav.getCurrentlyPlayingServiceReference()
+               print "oldref",self.oldref
+               session.nav.stopService() # try to disable foreground service
+               
+               self.tunemsgtimer = eTimer()
+               self.tunemsgtimer.callback.append(self.tunemsg)
+
+               self.camstep = 1
+               self.camtimer = eTimer()
+               self.camtimer.callback.append(self.cam_state)
+               self.mactry = 1
+               self.getmacaddr()
+               self.getversion()
+               
+               self.tunerlock = 0
+               self.tuningtimer = eTimer()
+               self.tuningtimer.callback.append(self.updateStatus)
+
+               self.satatry = 8
+               self.satatimer = eTimer()
+               self.satatimer.callback.append(self.sataCheck)
+
+               self.usbtimer = eTimer()
+               self.usbtimer.callback.append(self.usbCheck)
+
+               self.setSourceVar()
+               self.FanSpeedUp(255)
 
+       def FanSpeedUp(self,value):
+               if self.model in (3,4): # uno or ultimo
+                       if value <0:
+                               value = 0
+                       elif value >255:
+                               value = 255
+                       print "[FactoryTest, FanSpeedUp] setPWM to : %d"%value
+                       f = open("/proc/stb/fp/fan_pwm", "w")
+                       f.write("%x" % value)
+                       f.close()
+
+       def createConfig(self):
                tlist = []
+               self.satetestIndex = -1
+               self.scarttestIndex = -1
                if self.model == 0:
                        self.satetestIndex=0
                        tlist.append((" 0. Sata & extend hdd test",self.satetestIndex))
@@ -111,33 +299,27 @@ class FactoryTest(Screen):
                        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))
+                       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))
+                       tlist.append((" 5. T1/V/22k o/16:9/RGB",self.tuner1_2testIndex))
                        self.tuner2_1testIndex=6
-                       tlist.append((" 6. T2 H 22k x 4:3 YC",self.tuner2_1testIndex))
+                       tlist.append((" 6. T2/H/22k x/4:3/YC",self.tuner2_1testIndex))
                        self.tuner2_2testIndex=7
-                       tlist.append((" 7. T2 V 22k o 16:9 CVBS CAM",self.tuner2_2testIndex))
+                       tlist.append((" 7. T2/V/22k o/16:9/CVBS/CAM",self.tuner2_2testIndex))
                        self.scarttestIndex=8
                        tlist.append((" 8. VCR Scart loop",self.scarttestIndex))
                        self.rs232testIndex=9
                        tlist.append((" 9. RS232 test",self.rs232testIndex))
                        self.ethernettestIndex=10
                        tlist.append(("10. Ethernet & mac test",self.ethernettestIndex))
-#              tlist.append(("11. DRAM test",11))
-#              tlist.append(("12. Flash test",12))
-#              tlist.append(("13. DRAM+Flash test",13))
                        self.fdefaultIndex=11
                        tlist.append(("11. Factory default",self.fdefaultIndex))
                        self.shutdownIndex=12
-                       tlist.append(("12. Shutdown",self.shutdownIndex))
+                       tlist.append(("12. Shutdown(Deep Standby)",self.shutdownIndex))
+                       self.tuner_test_first_index = 4
+                       self.tuner_test_last_index = 7
+                       
                elif self.model == 1:
-#                      tlist.append((" 0. Sata & extend hdd test",self.satetestIndex=0))
-                       self.satetestIndex = -1
-                       self.scarttestIndex = -1
-
-
-
                        self.usbtestIndex=0
                        tlist.append((" 0. USB test",self.usbtestIndex))
                        self.fronttestIndex=1
@@ -145,190 +327,311 @@ class FactoryTest(Screen):
                        self.smarttestIndex=2
                        tlist.append((" 2. Smartcard test",self.smarttestIndex))
                        self.tuner1_1testIndex=3
-                       tlist.append((" 3. T1 H 22K x 4:3 CVBS",self.tuner1_1testIndex))
-                       self.tuner1_2testIndex=4
-                       tlist.append((" 4. T1 V 22k o 16:9 RGB CAM",self.tuner1_2testIndex))
-                       self.tuner2_2testIndex=4
-#                      tlist.append((" 6. T2 H 22k x 4:3 YC",self.tuner2_1testIndex=6))
-#                      tlist.append((" 7. T2 V 22k o 16:9 CVBS CAM",self.tuner2_2testIndex=7))
-#                      tlist.append((" 8. VCR Scart loop",self.scarttestIndex=8))
+                       tlist.append((" 3. T1/H/22K x/4:3/CVBS",self.tuner1_1testIndex))
+                       self.tuner2_2testIndex = self.tuner1_2testIndex=4
+                       tlist.append((" 4. T1/V/22k o/16:9/RGB/CAM",self.tuner1_2testIndex))
                        self.rs232testIndex=5
                        tlist.append((" 5. RS232 test",self.rs232testIndex))
                        self.ethernettestIndex=6
                        tlist.append((" 6. Ethernet & mac test",self.ethernettestIndex))
-#              tlist.append(("11. DRAM test",11))
-#              tlist.append(("12. Flash test",12))
-#              tlist.append(("13. DRAM+Flash test",13))
                        self.fdefaultIndex=7
                        tlist.append((" 7. Factory default",self.fdefaultIndex))
                        self.shutdownIndex=8
-                       tlist.append((" 8. 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)
-               self.NetworkState = 0
-               self.first = 0
+                       tlist.append((" 8. Shutdown(Deep Standby)",self.shutdownIndex))
+                       self.tuner_test_first_index = 3
+                       self.tuner_test_last_index = 4
 
-               self.avswitch = AVSwitch()
-               self.memTest = eMemtest()
-               self.scTest= eSctest()
-               
-               self.feid=0
-               self.agingmode=0
-               self.testing = 0
-
-               self.servicelist = ServiceList()
-               self.oldref = session.nav.getCurrentlyPlayingServiceReference()
-               print "oldref",self.oldref
-               session.nav.stopService() # try to disable foreground service
-               
-               self.tunemsgtimer = eTimer()
-               self.tunemsgtimer.callback.append(self.tunemsg)
-
-               self.camstep = 1
-               self.camtimer = eTimer()
-               self.camtimer.callback.append(self.cam_state)
-               self.getmacaddr()
-               self.getversion()
-               
-               self.tunerlock = 0
-               self.tuningtimer = eTimer()
-               self.tuningtimer.callback.append(self.updateStatus)
-
-               self.satatry = 8
-               self.satatimer = eTimer()
-               self.satatimer.callback.append(self.sataCheck)
+               elif self.model == 2:
+                       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.tuner_test_first_index = 4
+                       self.tuner_test_last_index = 6
+
+               elif self.model == 3 or self.model == 4:
+                       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))
+                       if self.model == 3:
+                               self.tuner_test_first_index = current_index = 4
+                       elif self.model == 4:
+                               self.tuner_test_first_index = 4
+                               current_index = 0
+                       AspectRatio=["4:3", "16:9"]
+                       ColorFormat=["CVBS","RGB","YC","CVBS","CVBS","CVBS","CVBS","CVBS"]      
+                       self.tuneInfo={}
+                       tunelist = []
+                       for (key, val) in self.NimType.items():
+                               if val["type"].startswith("DVB-S"):
+# Chang : DVB -S setting diseqc A
+                                       getRatio = AspectRatio.pop(0) # ratio
+                                       AspectRatio.append(getRatio)
+                                       getColorFormat=ColorFormat.pop(0) # colorFormat
+                                       menuname=" %d. T%d/%s/H/22k x/%s/%s" % (current_index, key+1, val["type"], getRatio, getColorFormat)    #menuname
+                                       print current_index
+#                                              current_index=4
+                                       self.setTuneInfo(index=current_index, slot=key, type=val["type"], sat=val["sat1"], pol="H", tone=False, ratio=getRatio, color=getColorFormat, cam=False) # setTuneInfo
+#                                              self.setTuneInfo(current_index, key, val["type"], val["sat1"], "H", True, getRatio, getColorFormat, False) # setTuneInfo
+                                       tunelist.append((menuname,current_index))
+                                       current_index+=1
+# Chang : DVB -S setting diseqc B
+                                       getRatio = AspectRatio.pop(0)
+                                       AspectRatio.append(getRatio)
+                                       getColorFormat=ColorFormat.pop(0)
+                                       menuname=" %d. T%d/%s/V/22k o/%s/%s" % (current_index, key+1, val["type"], getRatio, getColorFormat)
+                                       if len(self.NimType) == key+1: # CAM test on/off
+                                               menuname+="/CAM"
+                                               camtest = True
+                                       else:
+                                               camtest = False
+                                       self.setTuneInfo( index=current_index, slot=key, type=val["type"], sat=val["sat2"], pol="V", tone=True, ratio=getRatio, color=getColorFormat, cam=camtest)
+                                       tunelist.append((menuname,current_index))
+                                       current_index+=1
+# Chang : DVB -T or DVB-C
+                               elif val["type"].startswith("DVB-T") or val["type"].startswith("DVB-C"):
+                                       additionalMenu = None
+                                       menulen = 1
+                                       if len(self.NimType) == 1:
+                                               additionalMenu = True
+                                               menulen +=1
+                                       for x in range(menulen):
+                                               getRatio = AspectRatio.pop(0)
+                                               AspectRatio.append(getRatio)
+                                               getColorFormat=ColorFormat.pop(0)
+                                               menuname=" %d. T%d/%s/%s/%s" % (current_index, key+1, val["type"], getRatio, getColorFormat)
+                                               if len(self.NimType) == key+1 and (additionalMenu is None or x != 0): # CAM test on/off
+                                                       menuname+=" CAM"
+                                                       camtest = True
+                                               else:
+                                                       camtest = False
+                                               self.setTuneInfo( index=current_index, slot=key, type=val["type"], sat=None, pol=None, tone=None, ratio=getRatio, color=getColorFormat, cam=camtest)
+                                               tunelist.append((menuname,current_index))
+                                               current_index+=1
+                       if self.model == 3:
+                               tlist.extend(tunelist)
+                               self.tuner_test_last_index = current_index-1
+                       elif self.model == 4:
+                               self.tunelist = tunelist
+                               self.tuner_test_last_index = 4
+                               current_index = self.tuner_test_last_index
+                               tlist.append((" %d. Tuning test" % current_index,self.tuner_test_last_index))
+                               current_index+=1
+                       self.rs232testIndex=current_index
+                       tlist.append((" %d. RS232 test" % current_index,self.rs232testIndex))
+                       current_index+=1
+                       self.ethernettestIndex=current_index
+                       tlist.append((" %d. Ethernet & mac test" % current_index,self.ethernettestIndex))
+                       current_index+=1
+                       self.fdefaultIndex=current_index
+                       tlist.append((" %d. Factory default" % current_index,self.fdefaultIndex))
+                       current_index+=1
+                       self.shutdownIndex=current_index
+                       tlist.append((" %d. Shutdown(Deep Standby)" % current_index,self.shutdownIndex))
+                       
+               self.menulength= len(tlist)
+               self["testlist"] = MenuList(tlist)
+       
+       def setTuneInfo(self,index=0,slot=0,type="DVB-S2",sat="160",pol="H",tone=True,ratio="4:3",color="CVBS",cam=False):
+               self.tuneInfo[index]={}
+               self.tuneInfo[index]["slot"]=slot
+               self.tuneInfo[index]["type"]=type
+               self.tuneInfo[index]["sat"]=sat
+               self.tuneInfo[index]["pol"]=pol
+               self.tuneInfo[index]["22k"]=tone
+               self.tuneInfo[index]["ratio"]=ratio
+               self.tuneInfo[index]["color"]=color
+               self.tuneInfo[index]["cam"]=cam
 
        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"):
+                       vumodel = open("/proc/stb/info/vumodel")
+                       info=vumodel.read().strip()
+                       vumodel.close()
+                       if info == "duo":
+                               self.model = 0
+                               getmodel = 1
+                               print "getModelInfo : duo"
+                       if info == "solo":
+                               self.model = 1
+                               getmodel = 1
+                               print "getModelInfo : solo"
+                       if info == "combo":
+                               self.model = 2
+                               getmodel = 1
+                               print "getModelInfo : combo"
+                       if info == "uno":
+                               self.model = 3
+                               getmodel = 1
+                               print "getModelInfo : uno"
+                       if info == "ultimo":
+                               self.model = 4
+                               getmodel = 1
+                               print "getModelInfo : ultimo"
+
+               if getmodel == 0 and fileExists("/proc/stb/info/version"):
+                       vesion = open("/proc/stb/info/version")
+                       info=version.read()
+                       version.close()
+                       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"
 
        def keyup(self):
+               print "self.menulength = ",self.menulength
+               print "self[\"testlist\"].getCurrent()[1] = ",self["testlist"].getCurrent()[1]
                if self.testing==1:
                        return
                if self["testlist"].getCurrent()[1]==0:
-                       self["testlist"].moveToIndex(self.menulength)
+                       self["testlist"].moveToIndex(self.menulength-1)
+                       self["resultlist"].moveToIndex(self.menulength-1)
                else:
                        self["testlist"].up()
+                       self["resultlist"].up()
 
 
        def keydown(self):
+               print "self.menulength = ",self.menulength
+               print "self[\"testlist\"].getCurrent()[1] = ",self["testlist"].getCurrent()[1]
                if self.testing==1:
                        return
-               if self["testlist"].getCurrent()[1]==(self.menulength):
+               if self["testlist"].getCurrent()[1]==(self.menulength-1):
                        self["testlist"].moveToIndex(0)
+                       self["resultlist"].moveToIndex(0)
                else:
                        self["testlist"].down()
+                       self["resultlist"].down()
 
        def numberaction(self, number):
                if self.testing==1:
                        return
+               if number >= self.menulength:
+                       return
                index = int(number)
                self["testlist"].moveToIndex(index)
-
-
-       def updateStatus(self):
-               index = self["testlist"].getCurrent()[1]
-               if index ==self.tuner1_1testIndex or index==self.tuner1_2testIndex:
-                       tunno = 1
-                       result = eSctest.getInstance().getFrontendstatus(0)
-               else:
-                       tunno = 2
-                       result = eSctest.getInstance().getFrontendstatus(1)
-
-               if self.agingmode == 1:
-                       tunno = 1
-                       result = eSctest.getInstance().getFrontendstatus(0)
-                       hv = "Ver"
-                       
-               if index == self.tuner1_2testIndex or index==self.tuner2_2testIndex:
-                       hv = "Ver"
-               else:
-                       hv = "Hor"
-                       
-               print "eSctest.getInstance().getFrontendstatus - %d"%result
-               if result == 0:
-                       self.tunerlock = 0
-                       self.tunemsgtimer.stop()
-                       self.session.nav.stopService()
-                       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"
-                       self.agingmode = 0
-               else :
-                       self.tunerlock = 1
-                       if self.agingmode==1:
-                               self.session.openWithCallback(self.checkaging,AgingTest)                        
+               self["resultlist"].moveToIndex(index)
+
+       def getImageVersion(self):
+               date = 'xxxx-xx-xx'
+               file = open(resolveFilename(SCOPE_SYSETC, 'image-version'), 'r')
+               lines = file.readlines()
+               for x in lines:
+                       splitted = x.split('=')
+                       if splitted[0] == "version":
+                       #     YYYY MM DD hh mm
+                               #0120 2005 11 29 01 16
+                               #0123 4567 89 01 23 45
+                               version = splitted[1]
+                               year = version[4:8]
+                               month = version[8:10]
+                               day = version[10:12]
+                               date = '-'.join((year, month, day))
+                               break;
+               file.close()
+               return date
 
        def getversion(self):
                try:
                        fd = open("/proc/stb/info/version","r")
                        version = fd.read()
+                       fd.close()
                        self["testversion"].setText(("Version %s"%version))
                except:
                        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 or self.model == 3 or self.model == 4:
+                               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):
-#
-#                      tlist.append((" 0. Sata & extend hdd test",self.satetestIndex=0))
-#                      tlist.append((" 1. USB test",self.usbtestIndex=1))
-#                      tlist.append((" 2. Front test",self.fronttestIndex=2))
-#                      tlist.append((" 3. Smartcard test",self.smarttestIndex=3))
-#                      tlist.append((" 4. T1 H 22K x 4:3 CVBS",self.tuner1_1testIndex=4))
-#                      tlist.append((" 5. T1 V 22k o 16:9 RGB",self.tuner1_2testIndex=5))
-#                      tlist.append((" 6. T2 H 22k x 4:3 YC",self.tuner2_1testIndex=6))
-#                      tlist.append((" 7. T2 V 22k o 16:9 CVBS CAM",self.tuner2_2testIndex=7))
-#                      tlist.append((" 8. VCR Scart loop",self.scarttestIndex=8))
-#                      tlist.append((" 9. RS232 test",self.rs232testIndex=9))
-#                      tlist.append(("10. Ethernet & mac test",self.ethernettestIndex=10))
-#              tlist.append(("11. DRAM test",11))
-#              tlist.append(("12. Flash test",12))
-#              tlist.append(("13. DRAM+Flash test",13))
-#                      tlist.append(("11. Factory default",self.fdefaultIndex=11))
-#                      tlist.append(("12. Shutdown",self.shutdownIndex=12))
-#
                if self.testing==1:
                        return
                print "line - ",self["testlist"].getCurrent()[1]
-               index = self["testlist"].getCurrent()[1]
+               self.currentindex = index = self["testlist"].getCurrent()[1]
                result = 0
                if index==self.satetestIndex:
                        self.Test0()
                elif index==self.fronttestIndex:
                        self.Test1()
-               elif index>=self.tuner1_1testIndex and index<=self.tuner2_2testIndex:
-                       self.TestTune(index)
+               elif index>=self.tuner_test_first_index and index<=self.tuner_test_last_index:
+                       if self.model == 0 or self.model == 1 or self.model == 2 or self.model == 3:
+                               self.TestTune(index)
+                       elif self.model == 4:
+                               self.openTestTuneMenu()
                elif index==self.scarttestIndex:
                        self.Test6()
                elif index==self.rs232testIndex:
@@ -349,6 +652,8 @@ class FactoryTest(Screen):
                        self.Test14()
 #              elif index==self.shutdownIndex:
 #                      self.Test15()
+               else:
+                       pass
 
        def shutdownaction(self):
                if self["testlist"].getCurrent()[1] == self.shutdownIndex:
@@ -368,89 +673,72 @@ class FactoryTest(Screen):
                        self["resultlist"].updateList(self.rlist)
                        self.satatry -= 1
                        displayerror = 0
-               result = 0
-               checktab=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
-
+               result =0
                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):
-                                       dummy=open("/media/hdd/dummy03","w")
+                       if fileExists("/autofs/sda1"):
+                               if access("/autofs/sda1",F_OK|R_OK|W_OK):
+                                       dummy=open("/autofs/sda1/dummy03","w")
                                        dummy.write("complete")
                                        dummy.close()
-                                       dummy=open("/media/hdd/dummy03","r")
+                                       dummy=open("/autofs/sda1/dummy03","r")
                                        if dummy.readline()=="complete":
-                                               print "complete"
+                                               print "/autofs/sda1 - complete"
                                        else:
+                                               print "/autofs/sda1 - readline error"
                                                result += 1
+                                               displayerror = 1
                                        dummy.close()
-                                       system("rm /media/hdd/dummy03")
+                                       system("rm /autofs/sda1/dummy03")
                                else:
-                                       result = 1
+                                       print "/autofs/sda1 - rw access error"
+                                       result += 1
+                                       displayerror = 1
                        else:
+                               print "/autofs/sda1 - file not exist"
                                result += 1
                except:
+                       print "/autofs/sda1 - exceptional error"
                        result += 1
-                       
-               if result ==0:
-                       self.session.open( MessageBox, _("Sata & extend hdd test pass"), MessageBox.TYPE_INFO)
+                       displayerror = 1
+               
+               if result == 0:
+                       self.session.open( MessageBox, _("Sata & extend hdd test pass\nPress 'OK' button!"), 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\nPress 'EXIT' button!"), MessageBox.TYPE_ERROR)
                                self.rlist[self["testlist"].getCurrent()[1]]="fail"
                        else:
                                self.satatimer.start(1100,True)
                else:
                        if displayerror==1:
-                               self.session.open( MessageBox, _("Sata & extend hdd test error"), MessageBox.TYPE_ERROR)
+                               self.session.open( MessageBox, _("Sata & extend hdd test error\nPress 'EXIT' button!"), MessageBox.TYPE_ERROR)
                                self.rlist[self["testlist"].getCurrent()[1]]="fail"
                        else:
                                self.satatimer.start(1100,True)
@@ -459,7 +747,11 @@ class FactoryTest(Screen):
                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 or self.model == 3:
+                       self.session.openWithCallback(self.displayresult ,FrontTest_uno)
+               elif  self.model == 4:
+                       self.session.openWithCallback(self.displayresult ,FrontTest_ultimo)
 
        def displayresult(self):
                global fronttest
@@ -468,10 +760,15 @@ class FactoryTest(Screen):
                else:
                        self.rlist[self["testlist"].getCurrent()[1]]="fail"
 
-       INTERNAL_PID_STATUS_NOOP = 0
-       INTERNAL_PID_STATUS_WAITING = 1
-       INTERNAL_PID_STATUS_SUCCESSFUL = 2
-       INTERNAL_PID_STATUS_FAILED = 3
+       def openTestTuneMenu(self):
+               self.session.openWithCallback(self.TestTuneMenuResult ,TestTuneMenu, self.tuneInfo, self.tunelist, self.NimType)
+
+       def TestTuneMenuResult(self,result):
+               if result :
+                       self.rlist[self["testlist"].getCurrent()[1]]="pass"
+               else:
+                       self.rlist[self["testlist"].getCurrent()[1]]="fail"
+               self["resultlist"].updateList(self.rlist)
 
        def TestTune(self,index):       
                if self.oldref is None:
@@ -481,69 +778,115 @@ class FactoryTest(Screen):
                        if not servicelist is None:
                                ref = servicelist.getNext()
                        else:
-                               ref = self.getCurrentSelection()
+                               ref = self.getCurrentSelection() # raise error
                                print "servicelist none"
                else:
                        ref = self.oldref
                self.session.nav.stopService() # try to disable foreground service
-               if index==self.tuner1_1testIndex:
-                       ref.setData(0,1)
-                       ref.setData(1,0x6D3)
-                       ref.setData(2,0x3)
-                       ref.setData(3,0xA4)
-                       ref.setData(4,0xA00000)
-                       self.session.nav.playService(ref)
-                       self.avswitch.setColorFormat(0)
-                       self.avswitch.setAspectRatio(0)
-               elif index==self.tuner1_2testIndex:
-                       if self.model == 1:
+               if self.model == 0 or self.model == 1:
+                       if index==self.tuner1_1testIndex:
+                               ref.setData(0,1)
+                               ref.setData(1,0x6D3)
+                               ref.setData(2,0x3)
+                               ref.setData(3,0xA4)
+                               ref.setData(4,0xA00000)
+                               self.session.nav.playService(ref)
+                               self.avswitch.setColorFormat(0)
+                               self.avswitch.setAspectRatio(0)
+                       elif index==self.tuner1_2testIndex:
+                               if self.model == 1:
+                                       self.camstep = 1
+                                       self.camtimer.start(100,True)
+                               ref.setData(0,0x19)
+                               ref.setData(1,0x1325)
+                               ref.setData(2,0x3ef)
+                               ref.setData(3,0x1)
+                               ref.setData(4,0x64af79)
+                               self.session.nav.playService(ref)
+                               self.avswitch.setColorFormat(1)
+                               self.avswitch.setAspectRatio(6)                 
+                       elif index==self.tuner2_1testIndex:
+                               ref.setData(0,1)
+                               ref.setData(1,0x6D3)
+                               ref.setData(2,0x3)
+                               ref.setData(3,0xA4)
+                               ref.setData(4,0x820000)
+                               self.session.nav.playService(ref)
+                               self.avswitch.setColorFormat(2)                 
+                               self.avswitch.setAspectRatio(0)                 
+                       elif index==self.tuner2_2testIndex:
                                self.camstep = 1
                                self.camtimer.start(100,True)
-                       ref.setData(0,0x19)
-                       ref.setData(1,0x1325)
-                       ref.setData(2,0x3ef)
-                       ref.setData(3,0x1)
-                       ref.setData(4,0x64af79)
-#              ref.setData(0,0x19)
-#              ref.setData(1,0x83)
-#              ref.setData(2,0x6)
-#              ref.setData(3,0x85)
-#              ref.setData(4,0x640000)
-                       self.session.nav.playService(ref)
-                       self.avswitch.setColorFormat(1)
-                       self.avswitch.setAspectRatio(6)                 
-               elif index==self.tuner2_1testIndex:
-#                      self.camstep = 1
-#                      self.camtimer.start(100,True)
-                       ref.setData(0,1)
-                       ref.setData(1,0x6D3)
-                       ref.setData(2,0x3)
-                       ref.setData(3,0xA4)
-                       ref.setData(4,0x820000)
-                       self.session.nav.playService(ref)
-                       self.avswitch.setColorFormat(2)                 
-                       self.avswitch.setAspectRatio(0)                 
-               elif index==self.tuner2_2testIndex:
-                       self.camstep = 1
-                       self.camtimer.start(100,True)
-#                      ref.setData(0,0x19)
-#                      ref.setData(1,0x83)
-#                      ref.setData(2,0x6)
-#                      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)
+                               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)
+               elif self.model == 3 or self.model == 4:
+                       getTuneInfo=self.tuneInfo[index]
+                       if getTuneInfo["cam"] is True:
+                               self.camstep = 1
+                               self.camtimer.start(100,True)
+                       if getTuneInfo["type"].startswith("DVB-S"):
+                               if getTuneInfo["pol"] == "H":
+                                       ref.setData(0,1)
+                                       ref.setData(1,0x6D3)
+                                       ref.setData(2,0x3)
+                                       ref.setData(3,0xA4)
+                               else:
+                                       ref.setData(0,0x19)
+                                       ref.setData(1,0x1325)
+                                       ref.setData(2,0x3ef)
+                                       ref.setData(3,0x1)
+                               if getTuneInfo["sat"] == "160": # Eutelsat W2
+                                       ref.setData(4,0xA00000)
+                               elif getTuneInfo["sat"] == "100": # Eutelsat
+                                       ref.setData(4,0x64af79)
+                               elif getTuneInfo["sat"] == "130": # Hotbird
+                                       ref.setData(4,0x820000)
+                               elif getTuneInfo["sat"] == "192": # Astra
+                                       ref.setData(4,0xC00000)
+                               elif getTuneInfo["sat"] == "620": # Intelsat 902
+                                       ref.setData(4,0x26c0000) 
+                               elif getTuneInfo["sat"] == "642": # Intelsat 906
+                                       ref.setData(4,0x282AF79) 
+                               elif getTuneInfo["sat"] == "685": # Panamsat 7,10 (68.5E)
+                                       ref.setData(4,0x02ad0000) 
+                               elif getTuneInfo["sat"] == "720": # Panamsat 4 (72.0E)
+                                       ref.setData(4,0x02d0af79) 
+                       elif getTuneInfo["type"].startswith("DVB-C"):
+                               ref.setData(0,0x19)
+                               ref.setData(1,0x1325)
+                               ref.setData(2,0x3ef)
+                               ref.setData(3,0x1)
+                               ref.setData(4,-64870) # ffff029a
+                       elif getTuneInfo["type"].startswith("DVB-T"):
+                               ref.setData(0,0x19)
+                               ref.setData(1,0x1325)
+                               ref.setData(2,0x3ef)
+                               ref.setData(3,0x1)
+                               ref.setData(4,-286391716) # eeee025c
                        self.session.nav.playService(ref)
-                       self.avswitch.setColorFormat(0)                 
-                       self.avswitch.setAspectRatio(6)
-               self.tuningtimer.start(2000,True)
-               self.tunemsgtimer.start(3000, True)
-
+                       if getTuneInfo["color"]=="CVBS":
+                               self.avswitch.setColorFormat(0)
+                       elif getTuneInfo["color"]=="RGB":
+                               self.avswitch.setColorFormat(1)
+                       elif getTuneInfo["color"]=="YC":
+                               self.avswitch.setColorFormat(2)
+                       if getTuneInfo["ratio"] == "4:3":
+                               self.avswitch.setAspectRatio(0)
+                       elif getTuneInfo["ratio"] == "16:9":
+                               self.avswitch.setAspectRatio(6)
+                       self.tuningtimer.start(2000,True)
+                       self.tunemsgtimer.start(3000, True) 
+               
        def cam_state(self):
+               current_index = self.currentindex
                if self.camstep == 1:
                        slot = 0
                        state = eDVBCI_UI.getInstance().getState(slot)
@@ -554,10 +897,8 @@ class FactoryTest(Screen):
                        else:
                                self.session.nav.stopService()
                                self.session.open( MessageBox, _("CAM1_NOT_INSERTED\nPress exit!"), MessageBox.TYPE_ERROR)
-                               self.rlist[self["testlist"].getCurrent()[1]]="fail"
+                               self.rlist[current_index]="fail"
                                self.tunemsgtimer.stop()
-#                              self.rlist[index]="fail"
-#                              self["resultlist"].updateList(self.rlist)
                elif self.camstep == 2:
                        slot = 0
                        appname = eDVBCI_UI.getInstance().getAppName(slot)
@@ -565,7 +906,7 @@ class FactoryTest(Screen):
                        if appname is None:
                                self.session.nav.stopService()
                                self.session.open( MessageBox, _("NO_GET_APPNAME\nPress exit!"), MessageBox.TYPE_ERROR)
-                               self.rlist[self["testlist"].getCurrent()[1]]="fail"
+                               self.rlist[current_index]="fail"
                                self.tunemsgtimer.stop()                                
                        else:
                                self.camstep=3
@@ -580,10 +921,8 @@ class FactoryTest(Screen):
                        else:
                                self.session.nav.stopService()
                                self.session.open( MessageBox, _("CAM2_NOT_INSERTED\nPress exit!"), MessageBox.TYPE_ERROR)
-                               self.rlist[self["testlist"].getCurrent()[1]]="fail"
+                               self.rlist[current_index]="fail"
                                self.tunemsgtimer.stop()                                
-#                              self.rlist[index]="fail"
-#                              self["resultlist"].updateList(self.rlist)
                elif self.camstep == 4:
                        slot = 1
                        appname = eDVBCI_UI.getInstance().getAppName(slot)
@@ -591,54 +930,109 @@ class FactoryTest(Screen):
                        if appname is None:
                                self.session.nav.stopService()
                                self.session.open( MessageBox, _("NO_GET_APPNAME\nPress exit!"), MessageBox.TYPE_ERROR)
-                               self.rlist[self["testlist"].getCurrent()[1]]="fail"
+                               self.rlist[current_index]="fail"
                                self.tunemsgtimer.stop()                                
                        else:
                                self.setSource()
                                self.camstep = 5
-#                              self.session.open( MessageBox, _("CAM OK!"), MessageBox.TYPE_INFO,2)
+
+       def updateStatus(self):
+               current_index = self.currentindex
+               if self.model == 0 or self.model == 1:
+                       if current_index ==self.tuner1_1testIndex or current_index==self.tuner1_2testIndex:
+                               tunno = 1
+                               result = eSctest.getInstance().getFrontendstatus(0)
+                       else:
+                               tunno = 2
+                               result = eSctest.getInstance().getFrontendstatus(1)
+                       if current_index == self.tuner1_2testIndex or current_index==self.tuner2_2testIndex:
+                               hv = "Ver"
+                       else:
+                               hv = "Hor"
+
+               elif self.model == 3 or self.model == 4:
+                       getTuneInfo=self.tuneInfo[current_index]
+                       result = eSctest.getInstance().getFrontendstatus(getTuneInfo["slot"])
+                       tunno = getTuneInfo["slot"]+1
+                       hv = getTuneInfo["pol"]
+                       if hv == "H":
+                               hv = "Hor"
+                       elif hv == "V":
+                               hv = "Ver"
+                       else :
+                               hv == ""
+                               
+               print "eSctest.getInstance().getFrontendstatus - %d"%result
+               if result == 0 or result == -1:
+                       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)
+                       self.rlist[current_index]="fail"
+               else : 
+                       self.tunerlock = 1
+
+       def tuneback(self,yesno):
+               current_index=self.currentindex
+               self.session.nav.stopService() # try to disable foreground service
+               if yesno and self.tunerlock == 1:
+                       if current_index == self.tuner_test_last_index and self.camstep < 5: # need fix to depending about CAM exist
+                               self.rlist[current_index]="fail"
+                       else :
+                               self.rlist[current_index]="pass"
+               else:
+                       self.rlist[current_index]="fail"
+               if self.model == 0 and current_index == 6: # YC
+                       self.avswitch.setColorFormat(0)
+               elif ( self.model == 3 or self.model == 4 ) and self.tuneInfo[current_index]["color"] == "YC":
+                       self.avswitch.setColorFormat(0)
+               self.resetSource()
+               self["resultlist"].updateList(self.rlist)
+
+       def tunemsg(self):
+               self.tuningtimer.stop()
+               self.session.openWithCallback(self.tuneback, TuneMessageBox, _("%s ok?" %(self["testlist"].getCurrent()[0])), MessageBox.TYPE_YESNO)
+
+       def setSourceVar(self):
+               if self.model == 0:
+                       self.input_pad_num=1
+                       self.setTuner = 'B'
+               elif self.model == 1:
+                       self.input_pad_num=0
+                       self.setTuner = 'A'
+               else:
+                       self.input_pad_num=len(self.NimType)-1
+                       if self.input_pad_num == 0:
+                               self.setTuner = 'A'
+                       elif self.input_pad_num == 1:
+                               self.setTuner = 'B'
+                       elif self.input_pad_num == 2:
+                               self.setTuner = 'C'
 
 #      ikseong - for 22000 tp
        def setSource(self):
+# fix input source
+               inputname = ("/proc/stb/tsmux/input%d" % self.input_pad_num)
+               print "<setsource> inputname : ",inputname
+               fd=open(inputname,"w")
+               fd.write("CI0")
+               fd.close()
+# fix ci_input Tuner
                filename = ("/proc/stb/tsmux/ci0_input")
                fd = open(filename,'w')
-               fd.write('B')
-#              fd.write('A')
-               fd.close()
-#              filename = ("/proc/stb/tsmux/ci1_input")
-#              fd = open(filename,'w')
-#              fd.write('CI0')
-#              fd.close()
-               fd=open("/proc/stb/tsmux/input1","w")
-#              fd=open("/proc/stb/tsmux/input0","w")
-               fd.write("CI0")
+               fd.write(self.setTuner)
+               print "setTuner(CI0) : ",self.setTuner
                fd.close()
                print "CI loop test!!!!!!!!!!!!!!"
                        
        def resetSource(self):
-               fd=open("/proc/stb/tsmux/input1","w")
-               fd.write("B")
+               inputname = ("/proc/stb/tsmux/input%d" % self.input_pad_num)
+               print "<resetsource> inputname : ",inputname
+               fd=open(inputname,"w")
+               fd.write(self.setTuner)
                fd.close()
                print "CI loop test end!!!!!!!!!!!!!!"
-               
-       def tunemsg(self):
-               self.tuningtimer.stop()
-               self.session.openWithCallback(self.tuneback, MessageBox, _("%s ok?" %(self["testlist"].getCurrent()[0])), MessageBox.TYPE_YESNO)
-
-       def tuneback(self,yesno):
-               self.session.nav.stopService() # try to disable foreground service
-               if yesno:
-                       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:
-                               self.rlist[self["testlist"].getCurrent()[1]]="fail"
-               else:
-                       self.rlist[self["testlist"].getCurrent()[1]]="fail"
-               if self["testlist"].getCurrent()[1] == 6:
-                       self.avswitch.setColorFormat(0)                 
-               self.resetSource()
-               self["resultlist"].updateList(self.rlist)
                                
        def Test6(self):
                self.avswitch.setInput("SCART")
@@ -663,109 +1057,87 @@ class FactoryTest(Screen):
                self.session.openWithCallback(self.check7,RS232Test)
 
        def Agingmode(self):
-               if self.testing==1:
-                       return
-               if self.oldref is None:
-                       eref = eServiceReference("1:0:19:1324:3EF:1:C00000:0:0:0")
-                       serviceHandler = eServiceCenter.getInstance()
-                       servicelist = serviceHandler.list(eref)
-                       if not servicelist is None:
-                               ref = servicelist.getNext()
-                       else:
-                               ref = self.getCurrentSelection()
-                               print "servicelist none"
-               else:
-                       ref = self.oldref
-               self.session.nav.stopService() # try to disable foreground service
-               ref.setData(0,0x19)
-               ref.setData(1,0x1325)
-               ref.setData(2,0x3ef)
-               ref.setData(3,0x1)
-               ref.setData(4,0x64af79)
-#              ref.setData(0,1)
-#              ref.setData(1,0x6D3)
-#              ref.setData(2,0x3)
-#              ref.setData(3,0xA4)
-#              ref.setData(4,0xA00000)
-               self.session.nav.playService(ref)
-               self.avswitch.setColorFormat(0)
-               self.avswitch.setAspectRatio(0)
-               self.tuningtimer.start(2000,True)
-               self.agingmode = 1
+               self.session.openWithCallback(self.AgingmodeCallback,AgingTest, self.model)
 
-       def checkaging(self):
-               global Agingresult
-               if(Agingresult ==1):
+       def AgingmodeCallback(self,ret):
+               if ret == 1:
                        self["testlist"].moveToIndex(self.fdefaultIndex)
                        self.Test14()
-                       self["testlist"].moveToIndex(self.shotdownIndex)
-               self.agingmode = 0
-#                      self["testlist"].instance.moveSelection(self["testlist"].instance.moveDown)
-                       
-               
+                       self["testlist"].moveToIndex(self.shutdownIndex)        
+
+       def Agingmode2(self):
+               self.session.openWithCallback(self.Agingmode2Callback,AgingTest_mode2, self.model)
 
+       def Agingmode2Callback(self):
+               self["testlist"].moveToIndex(self.fdefaultIndex)
+               self.Test14()
+               self["testlist"].moveToIndex(self.shutdownIndex)        
+       
        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\nPress OK!"%result), MessageBox.TYPE_INFO)                   
-                                       self.rlist[self["testlist"].getCurrent()[1]]="pass"
-                               else:
-                                       self.session.open( MessageBox, _("USB test error : Success-%d"%result+" Fail-%d\nPress EXIT!"%(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\nPress OK!"%result), MessageBox.TYPE_INFO)                   
-                                       self.rlist[self["testlist"].getCurrent()[1]]="pass"
-                               else:
-                                       self.session.open( MessageBox, _("USB test error : Success-%d"%result+" Fail-%d\nPress EXIT!"%(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 or self.model==3 or self.model==4:
+                       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" ]
+               else :
+                       self.session.open( MessageBox, _("invalid model"), MessageBox.TYPE_ERROR)                       
+                       self.rlist[self["testlist"].getCurrent()[1]]="fail"
+                       return
+
+               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\nPress OK!"%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\nPress EXIT!"%(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\nPress OK!"%result), MessageBox.TYPE_INFO)                   
-                                       self.rlist[self["testlist"].getCurrent()[1]]="pass"
-                               else:
-                                       self.session.open( MessageBox, _("USB test error : Success-%d"%result+" Fail-%d\nPress EXIT!"%(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' button!"%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' button!"%(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
@@ -798,7 +1170,6 @@ class FactoryTest(Screen):
                if data == 1:
                        ethtest = 1
                        print "success"
-#                      self.session.open( MessageBox, _("Ping test pass"), MessageBox.TYPE_INFO,2)
                        self.session.openWithCallback(self.openMacConfig ,MessageBox, _("Ping test pass"), MessageBox.TYPE_INFO,2)
                
                else:
@@ -811,41 +1182,39 @@ class FactoryTest(Screen):
                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
                if ethtest == 1:
                        self.rlist[self.ethernettestIndex]="pass"               
-#                      self.rlist[self["testlist"].getCurrent()[1]]="pass"
                else:
                        self.rlist[self.ethernettestIndex]="fail"               
-#                      self.rlist[self["testlist"].getCurrent()[1]]="fail"
                self.getmacaddr()
                self.testing = 0                        
        
-       def MemTest(self, which):
-               index = which
-               result = 0
-               if index==0:
-                       result = eMemtest.getInstance().dramtest()
-               elif index==1:
-                       result = eMemtest.getInstance().flashtest()
-                       result = 0      #       temp
-               else:
-                       result = eMemtest.getInstance().dramtest()
-                       result = eMemtest.getInstance().flashtest()
-                       result = 0      #       temp
+#      def MemTest(self, which):
+#              index = which
+#              result = 0
+#              if index==0:
+#                      result = eMemtest.getInstance().dramtest()
+#              elif index==1:
+#                      result = eMemtest.getInstance().flashtest()
+#                      result = 0      #       temp
+#              else:
+#                      result = eMemtest.getInstance().dramtest()
+#                      result = eMemtest.getInstance().flashtest()
+#                      result = 0      #       temp
                        
-               index = index+10
+#              index = index+10
                
-               if result == 0:
-                       print index,self.rlist[index]
-                       self.rlist[index]="pass"
-               else:
-                       print index,self.rlist[index]
-                       self.rlist[index]="fail"
-               self["resultlist"].updateList(self.rlist)
+#              if result == 0:
+#                      print index,self.rlist[index]
+#                      self.rlist[index]="pass"
+#              else:
+#                      print index,self.rlist[index]
+#                      self.rlist[index]="fail"
+#              self["resultlist"].updateList(self.rlist)
                        
        def scciresult(self):
                global smartcardtest
@@ -855,25 +1224,27 @@ 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)
+#      def Test11(self):
+#              self.MemTest(1)
                
-       def Test12(self):
-               self.MemTest(2)
-
-       def Test13(self):
-               self.MemTest(3) 
+#      def Test12(self):
+#              self.MemTest(2)
 
+#      def Test13(self):
+#              self.MemTest(3)
 
        def Test14(self):
                try:
+                       print "test14"
                        system("rm -R /etc/enigma2")
+                       system("ls /")
                        system("cp -R /usr/share/enigma2/defaults /etc/enigma2")
                        self.rlist[self["testlist"].getCurrent()[1]]="pass"
                        self["resultlist"].updateList(self.rlist)
                except:
+                       print "test14 except"
                        self.rlist[self["testlist"].getCurrent()[1]]="fail"
                        self["resultlist"].updateList(self.rlist)
                        self.session.open( MessageBox, _("Factory reset fail"), MessageBox.TYPE_ERROR)
@@ -894,19 +1265,21 @@ 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):
        skin = """
-               <screen position="100,250" size="520,100" title="Mac Config" >
+               <screen name="MacConfig" position="center,center" size="520,100" title="Mac Config" >
                        <eLabel text="Mac Address " position="10,15" size="200,40" font="Regular;30" />         
-                       <widget name="text" position="230,15" size="230,40" font="Regular;30" />
+                       <widget name="text" position="230,15" size="230,40" font="Regular;30" halign="right"/>
                        <widget name="text1" position="470,15" size="40,40" font="Regular;30" />                
                        <eLabel text=" " position="5,55" zPosition="-1" size="510,5" backgroundColor="#02e1e8e6" />             
-                       <widget name="stattext" position="30,75" size="400,25" font="Regular;20" />
+                       <widget name="stattext" position="30,75" size="450,35" font="Regular;30" />
                </screen>"""
 
-       def __init__(self, session):
+       def __init__(self, session, mactry = 1):
                self["actions"] = ActionMap(["DirectionActions","OkCancelActions"],
                {
                        "ok": self.keyOk,
@@ -916,75 +1289,147 @@ class MacConfig(Screen):
                }, -2)
 
                Screen.__init__(self, session)
-       
-               self.result = 0
+
+               self.mactry = mactry
+               self.model = 0
+               self.getModelInfo()
                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"):
+                       vumodel = open("/proc/stb/info/vumodel")
+                       info=vumodel.read().strip()
+                       vumodel.close()
+                       if info == "combo":
+                               self.model = 2
+                               getmodel = 1
+                               print "MacConfig, model : combo"
+                       elif info == "solo":
+                               self.model = 1
+                               getmodel = 1
+                               print "MacConfig, model : solo"
+                       elif info == "duo":
+                               self.model = 0
+                               getmodel = 1
+                               print "MacConfig, model : duo"
+                       elif info == "uno":
+                               self.model = 3
+                               getmodel = 1
+                               print "getModelInfo : uno"
+                       elif info == "ultimo":
+                               self.model = 4
+                               getmodel = 1
+                               print "getModelInfo : ultimo"
+
+               if getmodel == 0 and fileExists("/proc/stb/info/version"):
+                       version = open("/proc/stb/info/version")
+                       info=version.read()
+                       version.close()
+#                      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 or self.model==3 or self.model==4 :
+                               devices = ["/autofs/sdb1", "/autofs/sdc1", "/autofs/sdd1", "/autofs/sde1" ]
+                       elif self.model==1:
+                               devices = [ "/autofs/sda1", "/autofs/sdb1" ]
+                       elif self.model==2:
+                               devices = [ "/autofs/sdb1", "/autofs/sdc1", "/autofs/sdd1" ]
+
+                       for dev in devices:
+                               print 'try..',dev
+                               if  fileExists(dev+"/macinfo.txt"):
+                                       print "<open>"+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]+"/macinfo.txt"):
-                                               self.macfd = open(disk[1]+"/macinfo.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 or self.model == 3 or self.model == 4:
+                               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 :
@@ -993,7 +1438,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:
@@ -1006,21 +1451,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
 #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")
-                       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)
+                       if self.model == 2 or self.model == 3 or self.model == 4:
+                               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
@@ -1028,393 +1473,81 @@ 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
                ethtest = 0
                self.close()
 
-
-
-sccitest = 0
-
-class ScCiTest(Screen):
-       skin = """
-               <screen position="120,225" size="440,200" title="CI Smartcard Test" >
-                       <widget name="testlist" position="10,0" size="340,120" />
-                       <widget name="resultlist" position="370,0" size="60,120" />
-                       <eLabel text=" " position="5,125" zPosition="-1" size="430,5" backgroundColor="#02e1e8e6" />            
-                       <widget name="text" position="10,140" size="420,50" font="Regular;25" />
-               </screen>"""
-       step=1
-       def __init__(self, session):
-               self["actions"] = ActionMap(["DirectionActions","OkCancelActions"],
-               {
-                       "ok": self.keyOk,
-                       "up": self.up,
-                       "down":self.down,
-                       "cancel": self.keyCancel,
-               }, -2)
-
-               Screen.__init__(self, session)
-               tlist = []
-               tlist.append(("Smartcard 1 Test",0))
-               tlist.append(("Smartcard 2 Test",1))
-               tlist.append(("CI 1 Test",2))
-               tlist.append(("CI 2 Test",3))
-               self["testlist"] = MenuList(tlist)
-               self.rlist = []
-               for x in range(4):
-                       self.rlist.append((".."))
-               self["resultlist"] = TestResultList(self.rlist)
-               self.result = 0
-               self.removecard = eTimer()
-               self.removecard.callback.append(self.remove_card)
-               self["text"]=Label(("Press OK Key"))
-               self.camstate= eTimer()
-               self.camstate.callback.append(self.cam_state)
-               self.camtry = 5
-               self.camstep = 0
-
-       def keyCancel(self):
-               global sccitest
-               print "result ", self.result
-               if self.result==15:
-                       sccitest=1
-               self.resetSource()
-               self.close()
-
-       def up(self):
-               self["text"].setText(_("Press OK Key"))
-               self["testlist"].instance.moveSelection(self["testlist"].instance.moveUp)
-               
-       def down(self):
-               self["text"].setText(_("Press OK Key"))
-               self["testlist"].instance.moveSelection(self["testlist"].instance.moveDown)
-               
-       def keyOk(self):
-               print "line - ",self["testlist"].getCurrent()[1]
-               index = self["testlist"].getCurrent()[1]
-               result = 0
-               if index==0 or index==1:                
-                       self["text"].setText(_("Insert Card?"))
-                       self.ScTest(True)
-               elif index ==2 or index==3:
-                       self["text"].setText(_("Insert Cam"))
-                       self.CamTest()
-
-       def CamTest(self):
-               self.camtry = 10
-               self.camstep = 1
-               self.camstate.start(1000,True)          
-
-       def setSource(self, cislot):
-               filename = ("/proc/stb/tsmux/ci%d_input"%cislot)
-               fd = open(filename,'w')
-               fd.write('A')
-               fd.close()
-
-       def setInputSource(self, cislot):
-               fd=open("/proc/stb/tsmux/input0","w")
-               if cislot==0:
-                       fd.write("CI0")
-               else:
-                       fd.write("CI1")
-               fd.close()
-                       
-       def resetSource(self):
-               fd=open("/proc/stb/tsmux/input0","w")
-               fd.write("A")
-               fd.close()
-#              fd = open("/proc/stb/tsmux/ci0_input","w")
-#              fd.write("CI0")
-#              fd.close()
-#              fd = open("/proc/stb/tsmux/ci1_input","w")
-#              fd.write("CI1")
-#              fd.close()
-
-       def channelstart(self):
-               ref = eServiceReference("1:0:19:1324:3EF:1:C00000:0:0:0")
-               ref.setData(0,0x19)
-               ref.setData(1,0x83)
-               ref.setData(2,0x6)
-               ref.setData(3,0x85)
-               ref.setData(4,0x640000)
-               self.session.nav.playService(ref)
-
-       def channelstop(self):
-               self.session.nav.stopService() # try to disable foreground service              
-       
-       def cam_state(self):
-               index = self["testlist"].getCurrent()[1] 
-               if (index-2)==0:
-                       slot = 1
-               else:
-                       slot = 0
-               print 'cam_state', self.camstep,self.camtry
-               if self.camstep == 1:
-                       state = eDVBCI_UI.getInstance().getState(slot)
-                       print 'stat',state
-                       if state == 1:
-                               self.camstep=2
-                               self.camtry=10
-                               self["text"].setText(_("Getting Cam name...."))
-                               self.camstate.start(5000,True)
-                       else:
-                               self.camtry-=1
-                               if self.camtry>0:
-                                       self.camstate.start(1000,True)
-                               else:
-                                       self.session.open( MessageBox, _("NO_NOT_INSERTED"), MessageBox.TYPE_ERROR)
-                                       self.rlist[index]="fail"
-                                       self["resultlist"].updateList(self.rlist)
-
-               elif self.camstep == 2:
-                       appname = eDVBCI_UI.getInstance().getAppName(slot)
-                       print 'appname',appname
-                       if appname is None:
-                               self.camtry-=1
-                               if self.camtry>0:
-                                       self.camstate.start(1000,True)
-                               else:
-                                       self.session.open( MessageBox, _("NO_GET_APPNAME"), MessageBox.TYPE_ERROR)
-                                       self.rlist[index]="fail"
-                                       self["resultlist"].updateList(self.rlist)
-                       else:
-                               self["text"].setText(_("Get Cam name : %s"%appname+". \n Remove Cam!"))
-                               self.channelstart()
-                               self.setInputSource(slot)
-                               self.setSource(slot)
-                               self.camstep=3
-                               self.camtry=30
-                               self.camstate.start(1000,True)          
-               elif self.camstep==3:
-                       state = eDVBCI_UI.getInstance().getState(slot)
-                       print 'stat', state
-                       if state == 0:
-                               self.channelstop()
-                               self.result += (1<<index)
-                               print self.result
-                               self.rlist[index]="pass"
-                               self["text"].setText(_("Press OK Key"))
-                               self["resultlist"].updateList(self.rlist)                               
-                               if index==2:
-                                       self.down()
-                               elif index == 3:
-                                       self.keyCancel()
-                       else:
-                               self.camtry-=1
-                               if self.camtry>0:
-                                       self.camstate.start(1000,True)
-                               else:
-                                       self.channelstop()
-                                       self.session.open( MessageBox, _("NO_REMOVE_CAM"), MessageBox.TYPE_ERROR)
-                                       self.rlist[index]="fail"
-                                       self["resultlist"].updateList(self.rlist)
-
-       def check_smart_card(self,which):
-               index = which
-               result  = 0
-               if which==0:
-                       result = eSctest.getInstance().check_smart_card("/dev/sci0")
-               elif which ==1:
-                       result = eSctest.getInstance().check_smart_card("/dev/sci1")
-               else:
-                       result = -1
-
-               print result                    
-               
-               if result == 0:
-                       print 'pass'
-               else:
-                       if result ==-1:
-                               self.session.open( MessageBox, _("1:NO_DEV_FOUND"), MessageBox.TYPE_ERROR)
-                       elif result == -2:
-                               self.session.open( MessageBox, _("1:SC_NOT_INSERTED"), MessageBox.TYPE_ERROR)
-                       elif result == -3:
-                               self.session.open( MessageBox, _("1:SC_NOT_VALID_ATR"), MessageBox.TYPE_ERROR)
-                       elif result == -5:
-                               self.session.open( MessageBox, _("1:SC_READ_TIMEOUT"), MessageBox.TYPE_ERROR)
-                       self.rlist[which]="fail"
-                       self["resultlist"].updateList(self.rlist)
-               return result
-               
-       def remove_card(self):
-               index = self["testlist"].getCurrent()[1]
-               if index==0:
-                       result = eSctest.getInstance().eject_smart_card("/dev/sci0")    
-               elif index==1:
-                       result = eSctest.getInstance().eject_smart_card("/dev/sci1")    
-               print 'remove result' ,result
-               if result == 0:
-                       self.rlist[index]="pass"
-                       self.result += (1<<index)
-               else:
-                       if result ==-1:
-                               self.session.open( MessageBox, _("2:NO_DEV_FOUND"), MessageBox.TYPE_ERROR)
-                       elif result == -2:
-                               self.session.open( MessageBox, _("2:SC_NOT_INSERTED"), MessageBox.TYPE_ERROR)
-                       elif result == -3:
-                               self.session.open( MessageBox, _("2:SC_NOT_VALID_ATR"), MessageBox.TYPE_ERROR)
-                       elif result == -4:
-                               self.session.open( MessageBox, _("2:SC_NOT_REMOVED"), MessageBox.TYPE_ERROR)
-                       self.rlist[index]="fail"
-               self["resultlist"].updateList(self.rlist)
-               self["text"].setText(_("Press OK Key"))
-               self.down()
-               return result
-       
-
-       def ScTest(self, yesno):
-               if yesno==False:
-                       return
-               index = self["testlist"].getCurrent()[1]
-               result = self.check_smart_card(index)
-               if result==0:
-                       self.removecard.start(100,True)
-                       self["text"].setText(_("Read Ok. Remove Card!"))
-               else:
-                       return
-
 smartcardtest = 0
-
 class SmartCardTest(Screen):
        skin = """
-               <screen position="300,240" size="160,120" title="SmartCard Test" >
-                       <widget name="text" position="10,10" size="140,100" font="Regular;22" />
+               <screen name="SmartCardTest" position="center,center" size="300,120" title="SmartCard Test" >
+                       <widget name="text" position="10,10" size="280,100" font="Regular;30" />
                </screen>"""
 
-       def __init__(self, session):
+       def __init__(self, session, stbmodel = 0):
                self["actions"] = ActionMap(["DirectionActions", "OkCancelActions"],
                {
                        "cancel": self.keyCancel,
-                       "ok" : self.keyCancel
+                       "ok" : self.keyOk
                }, -2)
 
                Screen.__init__(self, session)
-#              self["text"]=Label(("Press Key LEFT"))
                self["text"]=Label(("Testing Smartcard 1..."))
-               self.step = 0
+               self.testok = 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.smartcardtimer.start(100,True)
 
        def check_smart_card(self):
                global smartcardtest
                index = self.smartcard
                result  = 0
                if index==0:
-                       if self.Testmode==0:
-                               result = eSctest.getInstance().check_smart_card("/dev/sci0")
-                       else:
-                               result = eSctest.getInstance().n_check_smart_card("/dev/sci0")                  
+                       result = eSctest.getInstance().check_smart_card("/dev/sci0")
                elif index ==1:
-                       if self.Testmode==0:
-                               result = eSctest.getInstance().check_smart_card("/dev/sci1")
-                       else:
-                               result = eSctest.getInstance().n_check_smart_card("/dev/sci1")                  
+                       result = eSctest.getInstance().check_smart_card("/dev/sci1")
                else:
                        result = -1
 
-               print result                    
+               print "check smartcard : ", result
                
                if result == 0:
                        print 'pass'
-                       if(index== 0 and self.model== 0):
+                       if(index== 0 and ( self.model== 0 or self.model==2 or self.model == 3 or self.model == 4) ):
                                self.smartcard = 1
                                self["text"].setText(_("Testing Smartcard 2..."))
                                self.smartcardtimer.start(100,True)
                                return
                        elif (index==1 or self.model==1):
                                smartcardtest = 1
-#                              self.session.open( MessageBox, _("Smart Card OK!!"), MessageBox.TYPE_INFO,2)
-                               self.step = 1
+                               self.testok = 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 :
+                               
+                               self["text"].setText(_("Smart Card model type error"))
+                               self.closetimer.start(2000,True)
+                               self.smartcardtimer.stop()
                else:
 #                      if result ==-1:
 #                              self.session.open( MessageBox, _("%d:NO_DEV_FOUND"%(index+1)), MessageBox.TYPE_ERROR)
@@ -1435,14 +1568,18 @@ class SmartCardTest(Screen):
        def keyCancel(self):
                self.close()
 
+       def keyOk(self):
+               if self.testok == 1:
+                       self.close()
+
        
 
 fronttest = 0
 
 class FrontTest(Screen):
        skin = """
-               <screen position="260,240" size="200,180" title="Front Test" >
-                       <widget name="text" position="10,10" size="180,160" font="Regular;22" />
+               <screen name="FrontTest" position="center,center" size="300,180" title="Front Test" >
+                       <widget name="text" position="10,10" size="280,160" font="Regular;30" />
                </screen>"""
 
        def __init__(self, session):
@@ -1499,8 +1636,6 @@ class FrontTest(Screen):
                        self.keytimeout.start(5000,True)
                        self.step=2
                        self["text"].setText(_("Wheel RIGHT"))
-#              else:
-#                      print ""
 
        def keyOk(self):
                if self.step == 3:
@@ -1527,8 +1662,8 @@ class FrontTest(Screen):
 
 class FrontTest_solo(Screen):
        skin = """
-               <screen position="260,240" size="200,180" title="Front Test" >
-                       <widget name="text" position="10,10" size="180,160" font="Regular;22" />
+               <screen name="FrontTest_solo" position="center,center" size="300,180" title="Front Test" >
+                       <widget name="text" position="10,10" size="280,160" font="Regular;30" />
                </screen>"""
 
        def __init__(self, session):
@@ -1622,11 +1757,11 @@ class FrontTest_solo(Screen):
 
        def keyOk(self):
                global fronttest
-               self.fronttimer.stop()
-               eSctest.getInstance().VFD_Close()
                if self.step == 6:
                        fronttest = 1
-               self.close()
+                       self.fronttimer.stop()
+                       eSctest.getInstance().VFD_Close()
+                       self.close()
 
        def FrontAnimate(self):
                if (self.frontturnonoff==0):
@@ -1637,27 +1772,217 @@ class FrontTest_solo(Screen):
                        eSctest.getInstance().turnoff_VFD()
                self.fronttimer.start(1000,True)
 
-
-       
-
-rstest = 0
-
-import select
-
-class RS232Test(Screen):
+class FrontTest_uno(Screen):
        skin = """
-               <screen position="300,240" size="160,100" title="RS232 Test" >
-                       <widget name="text" position="10,10" size="140,80" font="Regular;22" />
+               <screen name="FrontTest_uno" position="center,center" size="300,180" title="Front Test" >
+                       <widget name="text" position="10,10" size="280,160" font="Regular;30" />
                </screen>"""
-       step=1
+
        def __init__(self, session):
-               self["actions"] = ActionMap(["DirectionActions", "OkCancelActions"],
+               self["actions"] = ActionMap(["DirectionActions", "OkCancelActions","GlobalActions"],
                {
+                       "ok": self.keyOk,
                        "cancel": self.keyCancel,
+                       "left": self.keyleft,
+                       "right": self.keyright,
+                       "volumeUp": self.keyvolup,
+                       "volumeDown": self.keyvoldown,
+                       "power_down": self.keypower,
                }, -2)
 
                Screen.__init__(self, session)
-               self["text"]=Label(("Press \"Enter\" Key"))
+               self["text"]=Label(("Press Front CH -"))
+               self.step = 1
+               self.fronttimer= eTimer()
+               self.fronttimer.callback.append(self.FrontAnimate)
+               self.frontturnonoff = 0
+               eSctest.getInstance().VFD_Open()
+               self.keytimeout = eTimer()
+               self.keytimeout.callback.append(self.KeyTimeOut)
+               self.keytimeout.start(5000,True)
+
+       def KeyTimeOut(self):
+               if self.step == 1:
+                       self["text"].setText(("Front CH - ERROR\nPress exit!"))
+               elif self.step == 2:
+                       self["text"].setText(("Front CH + ERROR\nPress exit!"))
+               elif self.step == 3 :
+                       self["text"].setText(("Front VOL - ERROR\nPress exit!"))
+               elif self.step == 4:
+                       self["text"].setText(("Front VOL + ERROR\nPress exit!"))
+               elif self.step == 5:
+                       self["text"].setText(("Front STANDBY ERROR\nPress exit!"))
+               self.step = 0
+
+       def keyleft(self):
+               if self.step== 1:
+                       self.keytimeout.stop()
+                       self.keytimeout.start(5000,True)
+                       self.step = 2
+                       self["text"].setText(_("Press Front CH +"))
+       def keyright(self):
+               if self.step== 2:
+                       self.keytimeout.stop()
+                       self.keytimeout.start(5000,True)
+                       self.step = 3
+                       self["text"].setText(_("Press Front VOL -"))
+
+       def keyvoldown(self):
+               if self.step== 3:
+                       self.keytimeout.stop()
+                       self.keytimeout.start(5000,True)
+                       self.step = 4
+                       self["text"].setText(_("Press Front VOL +"))
+
+       def keyvolup(self):
+               if self.step== 4:
+                       self.keytimeout.stop()
+                       self.keytimeout.start(5000,True)
+                       self.step = 5
+                       self["text"].setText(_("Press Front STANDBY"))
+
+       def keypower(self):
+               if self.step== 5:
+                       self.keytimeout.stop()
+                       self.step = 6
+                       self.fronttimer.start(1000,True)
+                       self["text"].setText(_("Front LED OK?\n\nyes-ok\nno-exit"))
+
+       def keyCancel(self):
+               global fronttest
+               self.fronttimer.stop()
+               eSctest.getInstance().VFD_Close()
+               fronttest = 0
+               self.close()
+
+       def keyOk(self):
+               global fronttest
+               if self.step == 6:
+                       fronttest = 1
+                       self.fronttimer.stop()
+                       eSctest.getInstance().VFD_Close()
+                       self.close()
+
+       def FrontAnimate(self):
+               if (self.frontturnonoff==0):
+                       eSctest.getInstance().turnon_VFD()
+                       self.frontturnonoff = 1
+               else:
+                       self.frontturnonoff = 0
+                       eSctest.getInstance().turnoff_VFD()
+               self.fronttimer.start(1000,True)
+
+class FrontTest_ultimo_Summary(Screen):
+       skin = """
+       <screen name="FactoryTestSummary" position="0,0" size="256,64" id="1">
+               <widget source="parent.Title" render="Label" position="0,0" size="256,24" font="Regular;18" halign="center" valign="center"/>
+               <widget name="text" position="0,24" size="256,40" font="VFD;20" halign="center" valign="center"/>
+       </screen>"""
+
+       def __init__(self, session, parent):
+               Screen.__init__(self, session, parent = parent)
+               self["text"] = Label("Press Front STANDBY")
+
+       def setText(self, text = ""):
+               if not isinstance(text, str):
+                       text = str(text)
+               self["text"].setText(text)
+
+class FrontTest_ultimo(FrontTest_solo):
+       skin = """
+               <screen position="center,center" size="300,180" title="Front Test" >
+                <widget name="text" position="10,10" size="280,160" font="Regular;30" />
+               </screen>"""
+
+       def createSummary(self):
+               return FrontTest_ultimo_Summary
+
+       def KeyTimeOut(self):
+               if self.step == 1:
+                       self["text"].setText(("Front STANDBY ERROR\nPress exit!"))
+                       self.summaries.setText("Front STANDBY ERROR\nPress exit!")
+               elif self.step == 2 :
+                       self["text"].setText(("Front CH - ERROR\nPress exit!"))
+                       self.summaries.setText("Front CH - ERROR\nPress exit!")
+               elif self.step == 3:
+                       self["text"].setText(("Front CH + ERROR\nPress exit!"))
+                       self.summaries.setText("Front CH + ERROR\nPress exit!")
+               elif self.step == 4 :
+                       self["text"].setText(("Front VOL - ERROR\nPress exit!"))
+                       self.summaries.setText("Front VOL - ERROR\nPress exit!")
+               elif self.step == 5:
+                       self["text"].setText(("Front VOL + ERROR\nPress exit!"))
+                       self.summaries.setText("Front VOL + ERROR\nPress exit!")
+               self.step = 0
+
+       def keypower(self):
+               if self.step== 1:
+                       self.keytimeout.stop()
+                       self.keytimeout.start(5000,True)
+                       self.step = 2
+                       self["text"].setText(_("Press Front CH -"))
+                       self.summaries.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.summaries.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.summaries.setText(_("Press Front CH +"))
+
+       def keyvolup(self):
+               if self.step== 5:
+                       self.keytimeout.stop()
+                       self.step = 6
+                       self.fronttimer.start(1000,True)
+                       self["text"].setText(_("Front LED OK?\n\nyes-ok\nno-exit"))
+                       self.summaries.setText(_("Front LED OK?"))
+
+       def keyvoldown(self):
+               if self.step== 4:
+                       self.keytimeout.stop()
+                       self.keytimeout.start(5000,True)
+                       self.step = 5
+                       self["text"].setText(_("Press Front VOL +"))
+                       self.summaries.setText(_("Press Front VOL +"))
+
+       def FrontAnimate(self):
+               if (self.frontturnonoff==0):
+                       eSctest.getInstance().turnon_VFD()
+                       self.frontturnonoff = 1
+                       self.fronttimer.start(1500,True)
+               else:
+                       self.frontturnonoff = 0
+                       eSctest.getInstance().turnoff_VFD()
+                       self.fronttimer.start(500,True)
+
+rstest = 0
+
+import select
+
+class RS232Test(Screen):
+       skin = """
+               <screen name="RS232Test" position="center,center" size="260,100" title="RS232 Test" >
+                       <widget name="text" position="10,10" size="240,80" font="Regular;30" />
+               </screen>"""
+       step=1
+       def __init__(self, session):
+               self["actions"] = ActionMap(["DirectionActions", "OkCancelActions"],
+               {
+                       "cancel": self.keyCancel,
+               }, -2)
+
+               Screen.__init__(self, session)
+               self["text"]=Label(("Press \"Enter\" Key"))
                self.timer = eTimer()
                self.timer.callback.append(self.checkrs232)
                self.timer.start(100, True)
@@ -1671,104 +1996,920 @@ class RS232Test(Screen):
                        if r:
                                input = rs.read(1)
                                if input == "\n":
-#                              if input == "m":
                                        rstest = 1
                                else:
                                        rstest = 0 
                        else:
                                rstest = 0
+                       rs.close()
                except:
-                       print 'error'
+                       try:
+                               if rs:
+                                       rs.close()
+                       except:
+                               pass
+                       print 'except error'
                        rstest = 0
+               if rstest == 0:
+                       self.session.open( MessageBox, _("RS232 Test Failed!\nPress 'EXIT' button!"), MessageBox.TYPE_ERROR)
                self.close()
 
        def keyCancel(self):
                self.close()
 
-Agingresult = 0
+class AgingTestSummary(Screen):
+       skin = """
+               <screen name="AgingTestSummary" position="0,0" size="132,64" id="1">
+                       <widget source="parent.Title" render="Label" position="6,0" size="132,64" font="Regular;18" halign="center" valign="center"/>
+               </screen>"""
+
+class AgingTestSummaryVFD(Screen):
+       skin = """
+               <screen name="AgingTestSummaryVFD" position="0,0" size="256,64" id="1">
+                       <eLabel text="MODE: " position="0,0" size="50,16" font="VFD;14" />
+                       <widget name="zapmode" position="51,0" size="70,16" font="VFD;14" halign="left" valign="center"/>
+                       <widget name="timer" position="152,0" size="124,16" font="VFD;14" halign="left" valign="center"/>
+                       <eLabel text="TUNER: " position="0,16" size="50,16" font="VFD;14" />
+                       <widget name="curtuner" position="51,16" size="200,16" font="VFD;14" halign="left" valign="center"/>
+                       <!-- Signal Quality -->
+                       <eLabel text="SNR: " position="0,32" size="45,16" font="VFD;14" transparent="1" halign="left" valign="center"/>
+                       <widget source="session.FrontendStatus" render="Label" position="46,32" size="40,16" font="VFD;14"  transparent="1">
+                               <convert type="FrontendInfo">SNRdB</convert>
+                       </widget>
+                       <!-- AGC -->
+                       <eLabel text="AGC: " position="0,48" size="45,16" font="VFD;14"  transparent="1" noWrap="1" />
+                       <widget source="session.FrontendStatus" render="Label" position="46,48" size="40,16" font="VFD;14"  transparent="1" noWrap="1">
+                               <convert type="FrontendInfo">AGC</convert>
+                       </widget>
+                       <widget name="error" position="90,32" size="166,32" font="VFD;18" halign="center" valign="center"/>
+               </screen>"""
+
+       def __init__(self, session, parent):
+               Screen.__init__(self, session)
+               self["zapmode"] = Label("")
+               self["timer"] = Label("")
+               self["curtuner"] = Label("")
+               self["error"] = Label("")
+
+       def setText(self, label = "zapmode",text = ""):
+               if not isinstance(text,str):
+                       text = str(text)
+               self[label].setText(text)
 
 class AgingTest(Screen):
        skin = """
-               <screen position="200,240" size="250,100" title="Aging Test" >
-                       <widget name="text1" position="10,10" size="230,40" font="Regular;22" />
-                       <widget name="text2" position="10,50" size="230,40" font="Regular;22" />
+               <screen position="center,center" size="350,220" title="Aging Test" >
+                       <widget name="text1" position="10,10" size="340,40" font="Regular;30" halign = "center" valign = "center"/>
+                       <widget name="text2" position="10,60" size="340,40" font="Regular;30" halign = "center" valign = "center"/>
+                       <!-- Signal Quality -->
+                       <eLabel text="SNR : " position="40,120" size="60,25" font="Regular;25" transparent="1" />
+                       <widget source="session.FrontendStatus" render="Label" position="100,120" size="60,25" font="Regular;25"  transparent="1">
+                               <convert type="FrontendInfo">SNRdB</convert>
+                       </widget>
+                       <!-- AGC -->
+                       <eLabel text="AGC : " position="180,120" size="60,25" font="Regular;25"  transparent="1" noWrap="1" />
+                       <widget source="session.FrontendStatus" render="Label" position="240,120" size="60,25" font="Regular;25"  transparent="1" noWrap="1">
+                               <convert type="FrontendInfo">AGC</convert>
+                       </widget>
+                       <widget name="text3" position="10,150" size="330,35" font="Regular;28" halign = "center" valign = "center"/>
+                       <widget name="text4" position="10,185" size="330,35" font="Regular;20" halign = "center" valign = "center"/>
                </screen>"""
        step=1
-       def __init__(self, session):
-               self["actions"] = ActionMap(["WizardActions","GlobalActions"],
+       def __init__(self, session, model):
+               Screen.__init__(self, session)
+               self["actions"] = ActionMap(["MediaPlayerActions","GlobalActions", "MediaPlayerSeekActions", "ChannelSelectBaseActions"],
                {
-                       "agingend": self.keyEnd,
-                       "agingfinish": self.keyFinish,
-                       "volumeUp": self.nothing,
-                       "volumeDown": self.nothing,
-                       "volumeMute": self.nothing,             
+                       "pause": self.keyEnd,
+                       "stop": self.keyFinish,
+                       "volumeUp": self.keyVolumeup,
+                       "volumeDown": self.keyVolumedown,
+                       "volumeMute": self.nothing,
+                       "seekFwd" : self.keyFFW,
                }, -2)
-
-               Screen.__init__(self, session)
+               self.model = model
                self["text1"]=Label(("Exit - Press Pause Key"))
                self["text2"]=Label(("Reset - Press Stop Key"))
-#              self.servicelist = ServiceList()
-#              self.oldref = session.nav.getCurrentlyPlayingServiceReference()
-#              print "oldref",self.oldref
-#              session.nav.stopService() # try to disable foreground service
-#              self.chstart()
-               self.tunerlock = 0
-               self.tuningtimer = eTimer()
-               self.tuningtimer.callback.append(self.updateStatus)
-#              self.tuningtimer.start(2000,True)
+               self["text3"]=Label(("Manual zapping"))
+               self["text4"]=Label((" "))
+               self.avswitch = AVSwitch()
+               self.curzappingmode = 'manual'
+               self.zapping_interval = 300
+               self.error = 0
+               self.timeout = self.zapping_interval
+               self.tunelist = []
+               self.zappinglist = {
+                                       'DVB-S2' : [
+                                                               ('S-1','1:0:19:1325:3EF:1:0x64af79:0:0:0:'), # astra hd
+                                                               ('S-2','1:0:19:1324:3EF:1:0x64af79:0:0:0:'), # anixe hd
+                                                               ('S-3','1:0:19:1331:3EF:1:0x64af79:0:0:0:') # servus hd
+                                                       ],
+                                       'DVB-C': [
+                                                               ('C-1','1:0:19:1325:3EF:1:FFFF029A:0:0:0:'), # astra hd (DVB-C)
+                                                               ('C-2','1:0:19:1324:3EF:1:FFFF029A:0:0:0:') # anixe hd (DVB-C)
+                                                       ]
+               }
+               self.LockCheckTimer = eTimer()
+               self.LockCheckTimer.callback.append(self.LockCheck)
+               self.nextzappingtimer = eTimer()
+               self.nextzappingtimer.callback.append(self.checktimeout)
+               self.checkTunerType()
+               self.makeTunelList()
+               self.playservice(service = self.tunelist[0][1])
+#              self.logmessage("AGING TEST START")
+
+       def createSummary(self):
+               if self.model == 4:
+                       self.onShown.append(self.VFDinit)
+                       return AgingTestSummaryVFD
+               else:
+                       return AgingTestSummary
 
+       def setTextVFD(self, name ,text):
+               if self.model == 4:
+                       self.summaries.setText(name ,text)
 
-       def updateStatus(self):
-               result = eSctest.getInstance().getFrontendstatus(0)             
-               hv = "Ver"
-                       
-               print "eSctest.getInstance().getFrontendstatus - %d"%result
-               if result == 0:
-                       self.tunerlock = 0
-                       self.session.nav.stopService()
-                       self.session.open( MessageBox, _("Tune 1 Ver Locking Fail..."), MessageBox.TYPE_ERROR)  
-               elif result==1 :
-                       self.tunerlock = 1
+       def VFDinit(self):
+               if self.curzappingmode == 'manual' :
+                       self.summaries.setText("zapmode", 'MANUAL')
                else:
-                       self.tunerlock = 0
-                       self.session.nav.stopService()
-                       self.session.open( MessageBox, _("Tune 1 Ver Error %d..."%result), MessageBox.TYPE_ERROR)       
+                       self.summaries.setText("zapmode", 'AUTO')
+                       self.summaries.setText("timer", "Timer %d sec"%self.timeout)
+               self.summaries.setText("curtuner", "%s,  CHANNEL - %s)"%(self.NimType[0], self.tunelist[0][0]))
+
+       def checkTunerType(self):
+               self.NimType={}
+               nimfile = open("/proc/bus/nim_sockets")
+               for line in nimfile.readlines():
+                       print line
+                       if line == "":
+                               break
+                       if line.strip().startswith("NIM Socket"):
+                               parts = line.strip().split(" ")
+                               current_slot = int(parts[2][:-1])
+                       elif line.strip().startswith("Type:"):
+                               self.NimType[current_slot]= str(line.strip()[6:])
+                       elif line.strip().startswith("empty"):
+                               self.NimType.pop(current_slot)
+               nimfile.close()
+
+       def makeTunelList(self):
+               if self.NimType[0].startswith("DVB-S"):
+                       tunetype = "DVB-S2"
+               elif self.NimType[0].startswith("DVB-C"):
+                       tunetype = "DVB-C"
+               elif self.NimType[0].startswith("DVB-T"):
+#                      tunetype = "DVB-T"
+                       pass # fix later..
+               try :
+                       self.tunelist = self.zappinglist[tunetype]
+               except:
+                       print "[FactoryTest] ERROR, index error (%s)"%tunetype
+
+       def nextZapping(self, zap_rev = False):
+               if zap_rev:
+                       tunelistlen = len(self.tunelist)
+                       nextservice = self.tunelist.pop(tunelistlen-1)
+                       self.tunelist.insert(0,nextservice)
+               else:
+                       currentservice = self.tunelist.pop(0)
+                       self.tunelist.append(currentservice)
+               self.playservice(service=self.tunelist[0][1])
+               if self.curzappingmode == 'auto':
+                       self.timeout = self.zapping_interval
+               self.setTextVFD("curtuner", "%s,  CHANNEL - %s)"%(self.NimType[0], self.tunelist[0][0]))
+
+       def checktimeout(self):
+               if self.timeout == 0:
+                       self.nextZapping()
+               else:
+                       self.timeout -=1
+               self["text4"].setText("remain %d sec for next tuning" %self.timeout)
+               self.setTextVFD("timer", "Timer %d sec"%self.timeout)
 
+       def playservice(self,service = '1:0:19:1325:3EF:1:0x64af79:0:0:0:'):
+               ref = eServiceReference(service)
+               self.session.nav.playService(ref)
+               self.avswitch.setAspectRatio(6)
+               self.avswitch.setColorFormat(0)
+               self.LockCheckTimer.start(2000,True)
+
+       def LockCheck(self):
+               result = eSctest.getInstance().getFrontendstatus(0)
+               if result == 0 or result == -1:
+                       if self.model == 4:
+                               self.error +=1
+                               print "AGINGTEST - LOCK FAIL(%d)"%self.error
+                               self.setTextVFD("error", "LOCK FAIL(%d)"%self.error)
+       #                       logmsg = "[LOCKFAIL][%d] TYPE : %s, CH : %s, ZAPMODE: %s"%(self.error,self.NimType[0],self.tunelist[0][0],self.curzappingmode)
+       #                       self.logmessage(logmsg)
+                       else:
+                               self.session.open( MessageBox, _("Locking Fail Error"), MessageBox.TYPE_ERROR)
+
+       def logmessage(self,msg):
+               pass
 
        def nothing(self):
                print "nothing"
 
-       def chstart(self):
-               if self.oldref is None:
-                       eref = eServiceReference("1:0:19:1324:3EF:1:C00000:0:0:0")
-                       serviceHandler = eServiceCenter.getInstance()
-                       servicelist = serviceHandler.list(eref)
-                       if not servicelist is None:
-                               ref = servicelist.getNext()
+       def keyFFW(self):
+               if self.curzappingmode == 'auto':
+                       self.curzappingmode = 'manual'
+                       self.nextzappingtimer.stop()
+                       self.timeout = self.zapping_interval
+                       self["text3"].setText("Manual zapping")
+                       self["text4"].setText("")
+                       self.setTextVFD("zapmode", 'MANUAL')
+                       self.setTextVFD("timer", "")
+
+               elif self.curzappingmode == 'manual':
+                       self.curzappingmode = 'auto'
+                       self["text3"].setText("Auto zapping")
+                       self["text4"].setText("remain %d sec for next tuning" %self.timeout)
+                       self.setTextVFD("zapmode", 'AUTO')
+                       self.setTextVFD("timer", "Timer %d sec"%self.timeout)
+#                      self.timeout = self.zapping_interval
+                       self.nextzappingtimer.start(1000)
+
+       def keyVolumeup(self):
+               self.nextZapping(zap_rev = False)
+
+       def keyVolumedown(self):
+               self.nextZapping(zap_rev = True)
+
+       def nothing(self):
+               print "nothing"
+
+       def keyEnd(self):
+               self.session.nav.stopService()
+               self.close(0) # exit
+
+       def keyFinish(self):
+               self.session.nav.stopService()
+               self.close(1) # exit and reset
+
+class AgingTest_mode2_Summary(Screen):
+       skin = """
+               <screen name="AgingTest_mode2_Summary" position="0,0" size="132,64" id="1">
+                       <widget source="parent.Title" render="Label" position="6,0" size="132,64" font="Regular;18" halign="center" valign="center"/>
+               </screen>"""
+
+class AgingTest_mode2_Summary_VFD(Screen):
+       skin = """
+               <screen name="AgingTest_mode2_Summary_VFD" position="0,0" size="256,64" id="1">
+                       <eLabel text="MODE: " position="0,0" size="50,16" font="VFD;14" />
+                       <widget name="zapmode" position="51,0" size="70,16" font="VFD;14" halign="left" valign="center"/>
+                       <widget name="timer" position="152,0" size="124,16" font="VFD;14" halign="left" valign="center"/>
+                       <eLabel text="TUNER: " position="0,16" size="50,16" font="VFD;14" />
+                       <widget name="curtuner" position="51,16" size="200,16" font="VFD;14" halign="left" valign="center"/>
+                       <!-- Signal Quality -->
+                       <eLabel text="SNR: " position="0,32" size="45,16" font="VFD;14" transparent="1" halign="left" valign="center"/>
+                       <widget source="session.FrontendStatus" render="Label" position="46,32" size="40,16" font="VFD;14"  transparent="1">
+                               <convert type="FrontendInfo">SNRdB</convert>
+                       </widget>
+                       <!-- AGC -->
+                       <eLabel text="AGC: " position="0,48" size="45,16" font="VFD;14"  transparent="1" noWrap="1" />
+                       <widget source="session.FrontendStatus" render="Label" position="46,48" size="40,16" font="VFD;14"  transparent="1" noWrap="1">
+                               <convert type="FrontendInfo">AGC</convert>
+                       </widget>
+                       <widget name="error" position="90,32" size="166,32" font="VFD;18" halign="center" valign="center"/>
+               </screen>"""
+
+       def __init__(self, session, parent):
+               Screen.__init__(self, session)
+               self["zapmode"] = Label("")
+               self["timer"] = Label("")
+               self["curtuner"] = Label("")
+               self["error"] = Label("")
+
+       def setText(self, label = "zapmode",text = ""):
+               if not isinstance(text,str):
+                       text = str(text)
+               self[label].setText(text)
+
+from Components.Input import Input
+from Screens.InputBox import InputBox
+class AgingTest_mode2(Screen):
+       skin = """
+               <screen position="center,center" size="370,190" title="Aging Test 2" >
+                       <widget name="text1" position="10,10" size="350,40" font="Regular;30" halign="center" valign="center"/>
+                       <widget name="text2" position="10,60" size="350,30" font="Regular;25" halign="center" valign="center"/>
+                       <!-- Signal Quality -->
+                       <eLabel text="SNR : " position="50,100" size="60,25" font="Regular;25" transparent="1" />
+                       <widget source="session.FrontendStatus" render="Label" position="110,100" size="60,25" font="Regular;25"  transparent="1">
+                               <convert type="FrontendInfo">SNRdB</convert>
+                       </widget>
+                       <!-- AGC -->
+                       <eLabel text="AGC : " position="190,100" size="60,25" font="Regular;25"  transparent="1" noWrap="1" />
+                       <widget source="session.FrontendStatus" render="Label" position="250,100" size="60,25" font="Regular;25"  transparent="1" noWrap="1">
+                               <convert type="FrontendInfo">AGC</convert>
+                       </widget>
+                       <widget name="text3" position="10,130" size="350,25" font="Regular;18" halign="center" valign="center"/>
+                       <widget name="text4" position="10,155" size="350,25" font="Regular;18" halign="center" valign="center"/>
+               </screen>"""
+       step=1
+       def __init__(self, session,model = 4):
+               self["actions"] = ActionMap(["MediaPlayerActions","GlobalActions","InfobarMenuActions","ChannelSelectBaseActions"],
+               {
+                       "pause": self.keyEnd,
+                       "stop": self.keyFinish,
+                       "volumeUp": self.keyVolumeup,
+                       "volumeDown": self.keyVolumedown,
+                       "volumeMute": self.nothing,
+                       "mainMenu" : self.keyMenu,
+                       "nextBouquet" : self.keyChannelup,
+                       "prevBouquet" : self.keyChannelDown,
+                       "showFavourites" : self.keyBlue,
+               }, -2)
+
+               Screen.__init__(self, session)
+               self.model = model
+               self.slotindex = { 0 : 'A', 1 : 'B', 2 : 'C', 3: 'D'}
+               self.curtuner = 0
+               self.isChangeTuner = True
+               self.isChangeChannel = False
+               self.zapping_interval = 300
+               self.timeout = self.zapping_interval
+               self.avswitch = AVSwitch()
+               self.error = 0
+               self.LockCheckTimer = eTimer()
+               self.LockCheckTimer.callback.append(self.LockCheck)
+               self.nextzappingtimer = eTimer()
+               self.nextzappingtimer.callback.append(self.checktimeout)
+               self.tunelist_db = {
+                                       'DVB-S2' : [
+                                                               [
+                                                                       ('1-1','1:0:19:1325:3EF:1:0x64af79:0:0:0:'), # astra hd
+                                                                       ('1-2','1:0:19:1324:3EF:1:0x64af79:0:0:0:'), # anixe hd
+                                                                       ('1-3','1:0:19:1331:3EF:1:0x64af79:0:0:0:') # servus hd
+                                                               ],
+                                                               [
+                                                                       ('2-1','1:0:19:1325:3EF:1:0xC00000:0:0:0:'), # astra hd
+                                                                       ('2-2','1:0:19:1324:3EF:1:0xC00000:0:0:0:'), # anixe hd
+                                                                       ('2-3','1:0:19:1331:3EF:1:0xC00000:0:0:0:') # servus hd
+                                                               ],
+                                                               [
+                                                                       ('3-1','1:0:19:1325:3EF:1:0x282AF79:0:0:0:'), # astra hd
+                                                                       ('3-2','1:0:19:1324:3EF:1:0x282AF79:0:0:0:'), # anixe hd
+                                                                       ('3-3','1:0:19:1331:3EF:1:0x282AF79:0:0:0:') # servus hd
+                                                               ],
+                                                               [
+                                                                       ('4-1','1:0:19:1325:3EF:1:0x02d0af79:0:0:0:'), # astra hd, Panamsat 4 (72.0E) 
+                                                                       ('4-2','1:0:19:1324:3EF:1:0x02d0af79:0:0:0:'), # anixe hd
+                                                                       ('4-3','1:0:19:1331:3EF:1:0x02d0af79:0:0:0:') # servus hd
+                                                               ]
+#                                                              namespace : 0x02d0af79, 720 # Panamsat 7,10 (68.5E) 
+                                                       ],
+                                       'DVB-C': [
+                                                               [
+                                                                       ('C-1','1:0:19:1325:3EF:1:FFFF029A:0:0:0:'), # astra hd (DVB-C)
+                                                                       ('C-2','1:0:19:1324:3EF:1:FFFF029A:0:0:0:') # anixe hd (DVB-C)
+                                                               ]
+                                                       ]
+               }
+               self.tunelist = {}
+               self.NimType={}
+               self.checkTunerType()
+               self.makeTunelList()
+               self.playservice(service = self.tunelist[self.curtuner][0][1])
+               self.curzappingmode = 'auto'
+               self["text1"]=Label("ZAPPING MODE : AUTO")
+               self["text2"]=Label("CURRENT TUNER : %s (%s)"%(self.slotindex[self.curtuner], self.NimType[self.curtuner]))
+               self["text3"]=Label("remain %d sec for next tuning" %self.timeout)
+               self["text4"]=Label("Press 'stop' key for exit")
+               self.nextzappingtimer.start(1000)
+               self.logmessage("AGING TEST START")
+
+       def createSummary(self):
+               if self.model == 4:
+                       self.onShown.append(self.VFDinit)
+                       return AgingTest_mode2_Summary_VFD
+               else:
+                       return AgingTest_mode2_Summary
+
+       def VFDinit(self):
+               if self.curzappingmode == 'manual' :
+                       self.summaries.setText("zapmode", 'MANUAL')
+               else:
+                       self.summaries.setText("zapmode", 'AUTO')
+                       self.summaries.setText("timer", "Timer %d sec"%self.timeout)
+               self.summaries.setText("curtuner", "%s (%s,  CHANNEL - %s)"%(self.slotindex[self.curtuner], self.NimType[self.curtuner], self.tunelist[self.curtuner][0][0]))
+
+       def setTextVFD(self,name ,text):
+               if self.model == 4:
+                       self.summaries.setText(name, text)
+
+       def checkTunerType(self):
+               nimfile = open("/proc/bus/nim_sockets")
+               for line in nimfile.readlines():
+                       print line
+                       if line == "":
+                               break
+                       if line.strip().startswith("NIM Socket"):
+                               parts = line.strip().split(" ")
+                               current_slot = int(parts[2][:-1])
+                       elif line.strip().startswith("Type:"):
+                               self.NimType[current_slot]= str(line.strip()[6:])
+                       elif line.strip().startswith("empty"):
+                               self.NimType.pop(current_slot)
+               nimfile.close()
+
+       def makeTunelList(self):
+               for slot, type in self.NimType.items():
+                       if type.startswith('DVB-S'):
+                               tunelist_type = 'DVB-S2'
+                       elif type.startswith('DVB-C'):
+                               tunelist_type = 'DVB-C'
+                       elif type.startswith('DVB-T'):
+                               tunelist_type = 'DVB-T'
+                       try :
+                               self.tunelist[slot] = self.tunelist_db[tunelist_type].pop(0)
+                       except:
+                               print "[FactoryTest] ERROR, pop from empty list (%s)"%tunelist_type
+               print "tunelist : "
+               print self.tunelist
+
+       def nextZapping(self, mode = 'auto', changeTuner = True, changeService = False, reverse_tuner = False, reverse_service = False):
+               if mode == 'manual' and changeTuner or mode == 'auto' and self.isChangeTuner:
+                       if reverse_tuner:
+                               self.curtuner -=1
                        else:
-                               ref = self.getCurrentSelection()
-                               print "servicelist none"
+                               self.curtuner +=1
+                       if self.curtuner >= len(self.tunelist):
+                               self.curtuner = 0
+                       if self.curtuner < 0:
+                               self.curtuner = len(self.tunelist)-1
+               if mode == 'manual' and changeService or mode == 'auto' and self.isChangeChannel:
+                       if reverse_service:
+                               tunelistlen = len(self.tunelist[self.curtuner])
+                               nextservice = self.tunelist[self.curtuner].pop(tunelistlen-1)
+                               self.tunelist[self.curtuner].insert(0,nextservice)
+                       else:
+                               currentservice = self.tunelist[self.curtuner].pop(0)
+                               self.tunelist[self.curtuner].append(currentservice)
+               self.playservice(service=self.tunelist[self.curtuner][0][1])
+               if self.curzappingmode == 'auto':
+                       self.timeout = self.zapping_interval
+               self["text2"].setText("CURRENT TUNER : %s (%s)"%(self.slotindex[self.curtuner], self.NimType[self.curtuner]))
+               self.setTextVFD("curtuner", "%s (%s,  CHANNEL - %s)"%(self.slotindex[self.curtuner], self.NimType[self.curtuner], self.tunelist[self.curtuner][0][0]))
+
+
+       def checktimeout(self):
+               if self.timeout == 0:
+                       self.nextZapping(mode = 'auto')
                else:
-                       ref = self.oldref
-               self.session.nav.stopService() # try to disable foreground service
-               ref.setData(0,0x19)
-               ref.setData(1,0x83)
-               ref.setData(2,0x6)
-               ref.setData(3,0x85)
-               ref.setData(4,0x640000)
+                       self.timeout -=1
+               self["text3"].setText("remain %d sec for next tuning" %self.timeout)
+               self.setTextVFD("timer", "Timer %d sec"%self.timeout)
+
+       def playservice(self,service = '1:0:19:1325:3EF:1:0x64af79:0:0:0:'):
+               ref = eServiceReference(service)
                self.session.nav.playService(ref)
+               self.avswitch.setAspectRatio(6)
+               self.avswitch.setColorFormat(0)
+               self.LockCheckTimer.start(2000,True)
+
+       def LockCheck(self):
+               result = eSctest.getInstance().getFrontendstatus(self.curtuner)
+               if result == 0 or result == -1:
+                       if self.model == 4:
+                               self.error +=1
+                               print "AGINGTEST - LOCK FAIL(%d)"%self.error
+                               self.summaries.setText("error", "LOCK FAIL(%d)"%self.error)
+                               logmsg = "[LOCKFAIL][%d] SLOT : %d, TYPE : %s, CH : %s, ZAPMODE: %s"%(self.error,self.curtuner,self.NimType[self.curtuner],self.tunelist[self.curtuner][0][0],self.curzappingmode)
+                               self.logmessage(logmsg)
+                       else:
+                               self.error +=1
+                               print "AGINGTEST - LOCK FAIL(%d)"%self.error
+                               logmsg = "[LOCKFAIL][%d] SLOT : %d, TYPE : %s, CH : %s, ZAPMODE: %s"%(self.error,self.curtuner,self.NimType[self.curtuner],self.tunelist[self.curtuner][0][0],self.curzappingmode)
+                               self.logmessage(logmsg)
+                               self.session.open( MessageBox, _("Locking Fail Error"), MessageBox.TYPE_ERROR)
+
+       def logmessage(self,msg):
+               print "[logmessage]",msg
+               devpath = None
+               checklist = ["/autofs/sda1", "/autofs/sdb1", "/autofs/sdc1", "/autofs/sdd1", "/autofs/sde1"]
+               for dev in checklist:
+                       try:
+                               if fileExists(dev):
+                                       if access(dev,F_OK|R_OK|W_OK):
+                                               dummy=open(dev+"/dummy03","w")
+                                               dummy.write("check")
+                                               dummy.close()
+                                               dummy=open(dev+"/dummy03","r")
+                                               if dummy.readline()=="check":
+                                                       print dev," - rw check ok"
+                                                       devpath = dev
+                                                       break
+                                               else:
+                                                       print dev," - read check error"
+                                               dummy.close()
+                                               system("rm "+dev+"/dummy03")
+                                       else:
+                                               print dev," - rw access error"
+                               else:
+                                       pass
+                       except:
+                               print dev," - exceptional error"
+               if devpath:
+                       cmd = "echo %s >> %s/agingTest.log" % (msg,devpath)
+                       print "[logmessage] %s(%s)"%(cmd,devpath)
+                       system(cmd)
+
+       def nothing(self):
+               print "nothing"
+
+       def keyBlue(self):
+               if self.curzappingmode == 'auto':
+                       self.curzappingmode = 'manual'
+                       self["text1"].setText("ZAPPING MODE : MANUAL")
+                       self["text3"].setText("Press 'stop' key for exit")
+                       self["text4"].setText("")
+                       self.setTextVFD("zapmode", 'MANUAL')
+                       self.setTextVFD("timer", "")
+                       self.nextzappingtimer.stop()
+                       self.timeout = self.zapping_interval
+               elif self.curzappingmode == 'manual':
+                       self.curzappingmode = 'auto'
+                       self["text1"].setText("ZAPPING MODE : AUTO")
+                       self["text3"].setText("remain %d sec for next tuning" %self.timeout)
+                       self["text4"].setText("Press 'stop' key for exit")
+                       self.setTextVFD("zapmode", 'AUTO')
+                       self.setTextVFD("timer", "Timer %d sec"%self.timeout)
+                       self.timeout = self.zapping_interval
+                       self.nextzappingtimer.start(1000)
+
+       def keyVolumeup(self):  
+               self.nextZapping(mode = 'manual', changeTuner = False, changeService = True)
+
+       def keyVolumedown(self):
+               self.nextZapping(mode = 'manual', changeTuner = False, changeService = True, reverse_service = True)
+
+       def keyChannelup(self):
+               self.nextZapping(mode = 'manual', changeTuner = True, changeService = False)
+
+       def keyChannelDown(self):
+               self.nextZapping(mode = 'manual', changeTuner = True, changeService = False, reverse_tuner = True)
+
+       def keyMenu(self):
+               self.session.openWithCallback(self.menuCallback, AgingTest_mode2_setmenu, tuner = self.isChangeTuner, channel = self.isChangeChannel, interval = self.zapping_interval)
+
+       def menuCallback(self, tuner, channel, interval):
+               if tuner is not None:
+                       self.isChangeTuner = tuner
+               if channel is not None:
+                       self.isChangeChannel = channel
+               if interval is not None:
+                       self.zapping_interval = interval
+                       self.timeout = self.zapping_interval
 
        def keyEnd(self):
-               global Agingresult
-               Agingresult = 0
-               self.session.nav.stopService() # try to disable foreground service
+               self.session.nav.stopService()
                self.close()
 
        def keyFinish(self):
-               global Agingresult
-               Agingresult = 1
-               self.session.nav.stopService() # try to disable foreground service
+               self.session.nav.stopService()
                self.close()
+
+from Components.ConfigList import ConfigListScreen
+from Components.config import ConfigInteger, ConfigYesNo, getConfigListEntry, NoSave
+class AgingTest_mode2_setmenu(Screen,ConfigListScreen):
+       skin = """
+               <screen position="center,center" size="370,190" title="Aging Test - settings" >
+                       <widget name="config" zPosition="2" position="10,10" size="360,180" scrollbarMode="showOnDemand" transparent="1" />
+                       <ePixmap pixmap="Vu_HD/buttons/green.png" position="50,135" size="25,25" alphatest="on" />
+                       <ePixmap pixmap="Vu_HD/buttons/red.png" position="215,135" size="25,25" alphatest="on" />
+                       <widget source="key_red" render="Label" position="75,135" zPosition="1" size="90,25" font="Regular;20" halign="center" valign="center" transparent="1" />
+                       <widget source="key_green" render="Label" position="240,135" zPosition="1" size="90,25" font="Regular;20" halign="center" valign="center" transparent="1" />
+               </screen>"""
+       def __init__(self,session, tuner = True, channel = False, interval = 300):
+               Screen.__init__(self,session)
+               self.session = session
+               self.tuner = tuner
+               self.channel = channel
+               self.zap_interval = interval
+               self["key_red"] = StaticText(_("Save"))
+               self["key_green"] = StaticText(_("Cancel"))
+               self["shortcuts"] = ActionMap(["ShortcutActions", "SetupActions" ],
+               {
+                       "ok": self.keySave,
+                       "cancel": self.keyCancel,
+                       "red": self.keyCancel,
+                       "green": self.keySave,
+               }, -2)
+               self.list = []
+               ConfigListScreen.__init__(self, self.list,session = self.session)
+               self.config_tuner = NoSave(ConfigYesNo(default = self.tuner))
+               self.config_channel = NoSave(ConfigYesNo(default = self.channel))
+               self.config_zap_interval = NoSave(ConfigInteger(default = self.zap_interval, limits=(5, 9999) ) )
+               self.configSetup()
+
+       def configSetup(self):
+               self.list = []
+               self.setupEntryTuner = getConfigListEntry(_("change tuner on timeout"), self.config_tuner )
+               self.setupEntryChannel = getConfigListEntry(_("change channel on timeout"), self.config_channel )
+               self.setupEntryZapInterval = getConfigListEntry(_("zapping interval (sec) "), self.config_zap_interval )
+               self.list.append( self.setupEntryTuner )
+               self.list.append( self.setupEntryChannel )
+               self.list.append( self.setupEntryZapInterval )
+               self["config"].list = self.list
+               self["config"].l.setList(self.list)
+
+       def keySave(self):
+               self.close(self.config_tuner.value, self.config_channel.value, self.config_zap_interval.value)
+
+       def keyCancel(self):
+               self.close(None, None, None)
+
+class TestTuneMenu(Screen):
+       skin = """
+       <screen position="350,230" size="550,300" title="Tuning Test" >
+               <widget name="testlist" position="10,0" size="440,250" itemHeight="35"/>
+               <widget name="resultlist" position="470,0" size="60,250" itemHeight="35"/>
+               <widget source="text" render="Label" position="100,270" size="450,30" font="Regular;22" />
+       </screen>"""
+
+       def __init__(self ,session ,tuneInfo, tunelist,NimType):
+               self.session = session
+               self.NimType = NimType
+               self.tuneInfo = tuneInfo
+               self.tunelist = tunelist
+               self.model = 4
+               self["actions"] = NumberActionMap(["OkCancelActions","WizardActions","NumberActions"],
+               {
+                       "left": self.nothing,
+                       "right":self.nothing,
+                       "ok": self.TestAction,
+                       "cancel": self.keyCancel,
+                       "up": self.keyup,
+                       "down": self.keydown,
+                       "0": self.numberaction,
+                       "1": self.numberaction,
+                       "2": self.numberaction,
+                       "3": self.numberaction,
+                       "4": self.numberaction,
+                       "5": self.numberaction,
+                       "6": self.numberaction,
+                       "7": self.numberaction,
+                       "8": self.numberaction,
+                       "9": self.numberaction,
+
+               }, -2)
+               Screen.__init__(self, session)
+               self.text = _("Press 'EXIT' key to finish tune test.")
+               self["text"] = StaticText(self.text)
+               self.createConfig()
+               session.nav.stopService() # try to disable foreground service
+
+               self.tunemsgtimer = eTimer()
+               self.tunemsgtimer.callback.append(self.tunemsg)
+
+               self.camstep = 1
+               self.camtimer = eTimer()
+               self.camtimer.callback.append(self.cam_state)
+
+               self.tunerlock = 0
+               self.tuningtimer = eTimer()
+               self.tuningtimer.callback.append(self.updateStatus)
+               self.setSourceVar()
+               self.avswitch = AVSwitch()
+
+       def createConfig(self):
+               self.menulength= len(self.tunelist)
+               self["testlist"] = MenuList(self.tunelist)
+               self.rlist = []
+               for x in range(self.menulength):
+                       self.rlist.append((".."))
+               self["resultlist"] = TestResultList(self.rlist)
+
+       def TestAction(self):
+               print "line - ",self["testlist"].getCurrent()[1]
+               self.currentindex = index = self["testlist"].getCurrent()[1]
+               result = 0
+               self.TestTune(index)
+
+       def nothing(self):
+               print "nothing"
+
+       def keyup(self):
+               print "self.menulength = ",self.menulength
+               print "self[\"testlist\"].getCurrent()[1] = ",self["testlist"].getCurrent()[1]
+               if self["testlist"].getCurrent()[1]==0:
+                       self["testlist"].moveToIndex(self.menulength-1)
+                       self["resultlist"].moveToIndex(self.menulength-1)
+               else:
+                       self["testlist"].up()
+                       self["resultlist"].up()
+
+
+       def keydown(self):
+               print "self.menulength = ",self.menulength
+               print "self[\"testlist\"].getCurrent()[1] = ",self["testlist"].getCurrent()[1]
+               if self["testlist"].getCurrent()[1]==(self.menulength-1):
+                       self["testlist"].moveToIndex(0)
+                       self["resultlist"].moveToIndex(0)
+               else:
+                       self["testlist"].down()
+                       self["resultlist"].down()
+
+       def numberaction(self, number):
+               if number >= self.menulength:
+                       return
+               index = int(number)
+               self["testlist"].moveToIndex(index)
+               self["resultlist"].moveToIndex(index)
+
+       def keyCancel(self):
+               print "testtunemenu exit"
+               if not '..' in self.rlist and not 'fail' in self.rlist:
+                       self.close(True)
+               else:
+                       self.close(False)
+#              if self.oldref is not None:
+#                      self.session.nav.playService(self.oldref)
+
+       def TestTune(self,index):
+               ref = eServiceReference("1:0:19:1324:3EF:1:C00000:0:0:0")
+               self.session.nav.stopService() # try to disable foreground service
+               getTuneInfo=self.tuneInfo[index]
+               if getTuneInfo["cam"] is True:
+                       self.camstep = 1
+                       self.camtimer.start(100,True)
+               if getTuneInfo["type"].startswith("DVB-S"):
+                       if getTuneInfo["pol"] == "H":
+                               ref.setData(0,1)
+                               ref.setData(1,0x6D3)
+                               ref.setData(2,0x3)
+                               ref.setData(3,0xA4)
+                       else:
+                               ref.setData(0,0x19)
+                               ref.setData(1,0x1325)
+                               ref.setData(2,0x3ef)
+                               ref.setData(3,0x1)
+                       if getTuneInfo["sat"] == "160": # Eutelsat W2
+                               ref.setData(4,0xA00000)
+                       elif getTuneInfo["sat"] == "100": # Eutelsat
+                               ref.setData(4,0x64af79)
+                       elif getTuneInfo["sat"] == "130": # Hotbird
+                               ref.setData(4,0x820000)
+                       elif getTuneInfo["sat"] == "192": # Astra
+                               ref.setData(4,0xC00000)
+                       elif getTuneInfo["sat"] == "620": # Intelsat 902
+                               ref.setData(4,0x26c0000) # need to fix later
+                       elif getTuneInfo["sat"] == "642": # Intelsat 906
+                               ref.setData(4,0x282AF79) # need to fix later
+               elif getTuneInfo["type"].startswith("DVB-C"):
+                       ref.setData(0,0x19)
+                       ref.setData(1,0x1325)
+                       ref.setData(2,0x3ef)
+                       ref.setData(3,0x1)
+                       ref.setData(4,-64870) # ffff029a
+               elif getTuneInfo["type"].startswith("DVB-T"):
+                       ref.setData(0,0x19)
+                       ref.setData(1,0x1325)
+                       ref.setData(2,0x3ef)
+                       ref.setData(3,0x1)
+                       ref.setData(4,-286391716) # eeee025c
+               self.session.nav.playService(ref)
+               if getTuneInfo["color"]=="CVBS":
+                       self.avswitch.setColorFormat(0)
+               elif getTuneInfo["color"]=="RGB":
+                       self.avswitch.setColorFormat(1)
+               elif getTuneInfo["color"]=="YC":
+                       self.avswitch.setColorFormat(2)
+               if getTuneInfo["ratio"] == "4:3":
+                       self.avswitch.setAspectRatio(0)
+               elif getTuneInfo["ratio"] == "16:9":
+                       self.avswitch.setAspectRatio(6)
+               self.tuningtimer.start(2000,True)
+               self.tunemsgtimer.start(3000, True)
+
+       def cam_state(self):
+               current_index = self.currentindex
+               if self.camstep == 1:
+                       slot = 0
+                       state = eDVBCI_UI.getInstance().getState(slot)
+                       print '-1-stat',state
+                       if state > 0:
+                               self.camstep=2
+                               self.camtimer.start(100,True)
+                       else:
+                               self.session.nav.stopService()
+                               self.session.open( MessageBox, _("CAM1_NOT_INSERTED\nPress exit!"), MessageBox.TYPE_ERROR)
+                               self.rlist[current_index]="fail"
+                               self.tunemsgtimer.stop()
+               elif self.camstep == 2:
+                       slot = 0
+                       appname = eDVBCI_UI.getInstance().getAppName(slot)
+                       print 'appname',appname
+                       if appname is None:
+                               self.session.nav.stopService()
+                               self.session.open( MessageBox, _("NO_GET_APPNAME\nPress exit!"), MessageBox.TYPE_ERROR)
+                               self.rlist[current_index]="fail"
+                               self.tunemsgtimer.stop()
+                       else:
+                               self.camstep=3
+                               self.camtimer.start(100,True)
+               elif self.camstep==3:
+                       slot = 1
+                       state = eDVBCI_UI.getInstance().getState(slot)
+                       print '-2-stat',state
+                       if state > 0:
+                               self.camstep=4
+                               self.camtimer.start(100,True)
+                       else:
+                               self.session.nav.stopService()
+                               self.session.open( MessageBox, _("CAM2_NOT_INSERTED\nPress exit!"), MessageBox.TYPE_ERROR)
+                               self.rlist[current_index]="fail"
+                               self.tunemsgtimer.stop()
+               elif self.camstep == 4:
+                       slot = 1
+                       appname = eDVBCI_UI.getInstance().getAppName(slot)
+                       print 'appname',appname
+                       if appname is None:
+                               self.session.nav.stopService()
+                               self.session.open( MessageBox, _("NO_GET_APPNAME\nPress exit!"), MessageBox.TYPE_ERROR)
+                               self.rlist[current_index]="fail"
+                               self.tunemsgtimer.stop()
+                       else:
+                               self.setSource()
+                               self.camstep = 5
+
+       def updateStatus(self):
+               current_index = self.currentindex
+               getTuneInfo=self.tuneInfo[current_index]
+               result = eSctest.getInstance().getFrontendstatus(getTuneInfo["slot"])
+               tunno = getTuneInfo["slot"]+1
+               hv = getTuneInfo["pol"]
+               if hv == "H":
+                       hv = "Hor"
+               elif hv == "V":
+                       hv = "Ver"
+               else :
+                       hv == ""
+
+               print "eSctest.getInstance().getFrontendstatus - %d"%result
+               if result == 0 or result == -1:
+                       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)
+                       self.rlist[current_index]="fail"
+               else :
+                       self.tunerlock = 1
+
+       def tuneback(self,yesno):
+               current_index=self.currentindex
+               self.session.nav.stopService() # try to disable foreground service
+               if yesno and self.tunerlock == 1:
+                       getTuneInfo=self.tuneInfo[current_index]
+                       if getTuneInfo["cam"] and self.camstep < 5: # need fix to depending about CAM exist
+                               self.rlist[current_index]="fail"
+                       else :
+                               self.rlist[current_index]="pass"
+               else:
+                       self.rlist[current_index]="fail"
+               if self.tuneInfo[current_index]["color"] == "YC":
+                       self.avswitch.setColorFormat(0)
+               self.resetSource()
+               self["resultlist"].updateList(self.rlist)
+
+       def tunemsg(self):
+               self.tuningtimer.stop()
+               self.session.openWithCallback(self.tuneback, TuneMessageBox, _("%s ok?" %(self["testlist"].getCurrent()[0])), MessageBox.TYPE_YESNO)
+
+       def setSourceVar(self):
+               self.input_pad_num=len(self.NimType)-1
+               if self.input_pad_num == 0:
+                       self.setTuner = 'A'
+               elif self.input_pad_num == 1:
+                       self.setTuner = 'B'
+               elif self.input_pad_num == 2:
+                       self.setTuner = 'C'
+
+#      ikseong - for 22000 tp
+       def setSource(self):
+# fix input source
+               inputname = ("/proc/stb/tsmux/input%d" % self.input_pad_num)
+               print "<setsource> inputname : ",inputname
+               fd=open(inputname,"w")
+               fd.write("CI0")
+               fd.close()
+# fix ci_input Tuner
+               filename = ("/proc/stb/tsmux/ci0_input")
+               fd = open(filename,'w')
+               fd.write(self.setTuner)
+               print "setTuner(CI0) : ",self.setTuner
+               fd.close()
+               print "CI loop test!!!!!!!!!!!!!!"
+
+       def resetSource(self):
+               inputname = ("/proc/stb/tsmux/input%d" % self.input_pad_num)
+               print "<resetsource> inputname : ",inputname
+               fd=open(inputname,"w")
+               fd.write(self.setTuner)
+               fd.close()
+               print "CI loop test end!!!!!!!!!!!!!!"
                
 session = None
 
@@ -1790,3 +2931,6 @@ def main(session, servicelist, **kwargs):
 
 #def Plugins(**kwargs):
 #      return PluginDescriptor(name=_("Factory Test"), description="Test App for Factory", where = PluginDescriptor.WHERE_EXTENSIONSMENU, fnc=main)
+
+def Plugins(**kwargs):
+       return []