Esempio n. 1
0
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>"""
	def __init__(self, session):

		self["actions"] = ActionMap(["OkCancelActions","WizardActions"],
		{
			"ok": self.TestAction,
			"cancel": self.keyCancel,
			"agingstart": self.Agingmode,
		}, -2)

		Screen.__init__(self, session)
		TESTPROGRAM_DATE = "2009-12-09"
		TESTPROGRAM_VERSION = "Version 00.01"
		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"
		nimConfig = nimmanager.getNimConfig(1)
		nimConfig.configMode.slot_id=1		
		nimConfig.configMode.value= "simple"
		nimConfig.diseqcMode.value="diseqc_a_b"
		nimConfig.diseqcA.value="130"
		nimConfig.diseqcB.value="192"
		nimmanager.sec.update()		
		
		system("cp /usr/lib/enigma2/python/Plugins/SystemPlugins/FactoryTest/testdb /etc/enigma2/lamedb")
		db = eDVBDB.getInstance()
		db.reloadServicelist()

		tlist = []
		tlist.append((" 0. sata & extend hdd test",0))
		tlist.append((" 1. Front test",1))
		tlist.append((" 2. Smartcard test",2))
		tlist.append((" 3. T1 H 22K x 4:3 CVBS",3))
		tlist.append((" 4. T1 V 22k o 16:9 RGB",4))
		tlist.append((" 5. T2 H 22k x 4:3 YC",5))
		tlist.append((" 6. T2 V 22k o 16:9 CVBS",6))
		tlist.append((" 7. VCR Scart loop",7))
		tlist.append((" 8. rs232 test",8))
		tlist.append((" 9. usb test",9))
		tlist.append(("10. ethernet & mac test",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",11))
		tlist.append(("12. shutdown",12))
		self["testlist"] = MenuList(tlist)
		self.rlist = []
#		for x in range(15):
		for x in range(12):
			self.rlist.append((".."))
		self["resultlist"] = TestResultList(self.rlist)
		self.NetworkState = 0
		self.first = 0

		self.avswitch = AVSwitch()
		self.memTest = eMemtest()
		self.scTest= eSctest()
		
		self.feid=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)

	def updateStatus(self):
		index = self["testlist"].getCurrent()[1]
		if index ==2 or index==3:
			tunno = 1
			result = eSctest.getInstance().getFrontendstatus(0)
		else:
			tunno = 2
			result = eSctest.getInstance().getFrontendstatus(1)		
		if index == 2 or index==4:
			hv = "Hor"
		else:
			hv = "Ver"
			
		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)	
			self.rlist[self["testlist"].getCurrent()[1]]="fail"
		else :
			self.tunerlock = 1

	def getversion(self):
		try:
			fd = open("/proc/stb/info/version","r")
			version = fd.read()
			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"
			self.macConsole = Console()	
			self.macConsole.ePopen(cmd, self.readmac)	
#			self["stattext"].setText((macaddr))
		except:
			return
		
	def TestAction(self):
		print "line - ",self["testlist"].getCurrent()[1]
		index = self["testlist"].getCurrent()[1]
		result = 0
		if index==0:
			self.Test0()
		elif index==1:
			self.Test1()
		elif index>2 and index<7:
			self.TestTune(index)
		elif index==7:
			self.Test6()
		elif index==8:
			self.Test7()
		elif index==9:
			self.Test8()
		elif index==10:
			self.Test9()
		elif index == 2:
			self.Test10()
#		elif index == 11:
#			self.Test11()
#		elif index ==12:
#			self.Test12()
#		elif index==13:
#			self.Test13()
		elif index==10:
			self.Test14()
		elif index==11:
			self.Test15()


	def Test0(self):
		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:
			self.session.open( MessageBox, _("Sata & extend hdd test error"), MessageBox.TYPE_ERROR)
			self.rlist[self["testlist"].getCurrent()[1]]="fail"
			return
		elif checktab < 11:
			self.session.open( MessageBox, _("one hdd test error"), MessageBox.TYPE_ERROR)
			self.rlist[self["testlist"].getCurrent()[1]]="fail"
			return

		try:
			if fileExists("/media/sdb1"):
				dummy=open("/media/sdb1/dummy03","w")
				dummy.write("complete")
				dummy.close()
				dummy=open("/media/sdb1/dummy03","r")
				if dummy.readline()=="complete":
					print "complete"
				else:
					result = 1
				dummy.close()
				system("rm /media/sdb1/dummy03")
			else:
				result = 1
		except:
			result = 1
		try:
			if fileExists("/media/hdd"):
				dummy=open("/media/hdd/dummy03","w")
				dummy.write("complete")
				dummy.close()
				dummy=open("/media/hdd/dummy03","r")
				if dummy.readline()=="complete":
					print "complete"
				else:
					result += 1
				dummy.close()
				system("rm /media/hdd/dummy03")
			else:
				result += 1
		except:
			result += 1
			
		if result ==0:
			self.session.open( MessageBox, _("Sata & extend hdd test pass"), MessageBox.TYPE_INFO)
			self.rlist[self["testlist"].getCurrent()[1]]="pass"
		elif result == 1:
			self.session.open( MessageBox, _("one hdd test error"), MessageBox.TYPE_ERROR)
			self.rlist[self["testlist"].getCurrent()[1]]="fail"
		else:
			self.session.open( MessageBox, _("Sata & extend hdd test error"), MessageBox.TYPE_ERROR)
			self.rlist[self["testlist"].getCurrent()[1]]="fail"

	def Test1(self):
		self.session.openWithCallback(self.displayresult ,FrontTest)

	def displayresult(self):
		global fronttest
		if fronttest == 1:
			self.rlist[self["testlist"].getCurrent()[1]]="pass"
		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 TestTune(self,index):	
		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
		if index==3:
			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==4:
			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==5:
#			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==6:
			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)
			self.session.nav.playService(ref)
			self.avswitch.setColorFormat(0)			
			self.avswitch.setAspectRatio(6)
		self.tuningtimer.start(2000,True)
		self.tunemsgtimer.start(3000, True)

	def cam_state(self):
		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, _("NO_CAM1_NOT_INSERTED"), MessageBox.TYPE_ERROR)
				self.rlist[self["testlist"].getCurrent()[1]]="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)
			print 'appname',appname
			if appname is None:
				self.session.nav.stopService()
				self.session.open( MessageBox, _("NO_GET_APPNAME"), MessageBox.TYPE_ERROR)
				self.rlist[self["testlist"].getCurrent()[1]]="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, _("NO_CAM2_NOT_INSERTED"), MessageBox.TYPE_ERROR)
				self.rlist[self["testlist"].getCurrent()[1]]="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)
			print 'appname',appname
			if appname is None:
				self.session.nav.stopService()
				self.session.open( MessageBox, _("NO_GET_APPNAME"), MessageBox.TYPE_ERROR)
				self.rlist[self["testlist"].getCurrent()[1]]="fail"
				self.tunemsgtimer.stop()				
			else:
				self.setSource()
				self.camstep = 5
				self.session.open( MessageBox, _("CAM OK!"), MessageBox.TYPE_INFO,2)

	def setSource(self):
		filename = ("/proc/stb/tsmux/ci0_input")
		fd = open(filename,'w')
		fd.write('B')
		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.write("CI0")
		fd.close()
		print "CI loop test!!!!!!!!!!!!!!"
			
	def resetSource(self):
		fd=open("/proc/stb/tsmux/input1","w")
		fd.write("B")
		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] == 5 and self.camstep < 5:
				self.rlist[self["testlist"].getCurrent()[1]]="fail"
		else:
			self.rlist[self["testlist"].getCurrent()[1]]="fail"
		self.resetSource()
		self["resultlist"].updateList(self.rlist)
				
	def Test6(self):
		self.avswitch.setInput("SCART")
		sleep(2)
		self.session.openWithCallback(self.check6, MessageBox, _("Scart loop ok?"), MessageBox.TYPE_YESNO)

	def check6(self,yesno):
		if yesno:
			self.rlist[self["testlist"].getCurrent()[1]]="pass"
		else:
			self.rlist[self["testlist"].getCurrent()[1]]="fail"
		self.avswitch.setInput("ENCODER")

	def check7(self):
		global rstest
		if rstest == 1:
			self.rlist[self["testlist"].getCurrent()[1]]="pass"
		else:
			self.rlist[self["testlist"].getCurrent()[1]]="fail"

	def Test7(self):
		self.session.openWithCallback(self.check7,RS232Test)

	def Agingmode(self):
		self.session.openWithCallback(self.checkaging,AgingTest)

	def checkaging(self):
		global Agingresult
		if(Agingresult ==1):
			self["testlist"].moveToIndex(11)
			self.Test14()
			self["testlist"].moveToIndex(12)
#			self["testlist"].instance.moveSelection(self["testlist"].instance.moveDown)
			
		

	def Test8(self):
		try:
			result = 0
			mtab = open('/etc/mtab','r')
			while(1):
				disk = mtab.readline().split(' ')
				if len(disk) < 2:
					break
				if disk[1].startswith('/media/hdd'):
					continue
				elif disk[1].startswith('/media/sdb1'):
					continue
				elif disk[1].startswith('/media/sd'):
					result=result +1

			if result < 0 :
				result = 0
			if result == 3:
				self.session.open( MessageBox, _("USB test pass %d devices"%result), MessageBox.TYPE_INFO)			
				self.rlist[self["testlist"].getCurrent()[1]]="pass"
			else:
				self.session.open( MessageBox, _("USB test error : Success-%d"%result+" Fail-%d"%(3-result)), MessageBox.TYPE_ERROR)
				self.rlist[self["testlist"].getCurrent()[1]]="fail"
		except:
			if result < 0 :
				result = 0
			if result == 3:
				self.session.open( MessageBox, _("USB test pass %d devices"%result), MessageBox.TYPE_INFO)			
				self.rlist[self["testlist"].getCurrent()[1]]="pass"
			else:
				self.session.open( MessageBox, _("USB test error : Success-%d"%result+" Fail-%d"%(3-result)), MessageBox.TYPE_ERROR)
				self.rlist[self["testlist"].getCurrent()[1]]="fail"

	def Test9(self):
		self.session.openWithCallback(self.macresult ,MacConfig)	

	def macresult(self):
		global ethtest
		if ethtest == 1:
			self.rlist[self["testlist"].getCurrent()[1]]="pass"
		else:
			self.rlist[self["testlist"].getCurrent()[1]]="fail"
		self.getmacaddr()
	
	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
		
		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
		if smartcardtest == 1:
			self.rlist[self["testlist"].getCurrent()[1]]="pass"
		else:
			self.rlist[self["testlist"].getCurrent()[1]]="fail"

	def Test10(self):
		self.session.openWithCallback(self.scciresult ,SmartCartTest)	

	def Test11(self):
		self.MemTest(1)
		
	def Test12(self):
		self.MemTest(2)

	def Test13(self):
		self.MemTest(3)	


	def Test14(self):
		try:
			system("rm -R /etc/enigma2")
			system("cp -R /usr/share/enigma2/defaults /etc/enigma2")
			self.rlist[self["testlist"].getCurrent()[1]]="pass"
			self["resultlist"].updateList(self.rlist)
		except:
			self.rlist[self["testlist"].getCurrent()[1]]="fail"
			self["resultlist"].updateList(self.rlist)
			self.session.open( MessageBox, _("Factory reset fail"), MessageBox.TYPE_ERROR)

	def Test15(self):
		self.session.openWithCallback(self.shutdown ,MessageBox, _("Do you want to shut down?"), MessageBox.TYPE_YESNO)

	def shutdown(self, yesno):
		if yesno :
			from os import _exit
			system("/usr/bin/showiframe /boot/backdrop.mvi")
			_exit(1)
		else:
			return
		
	def keyCancel(self):
		print "exit"
		self.close()