# -*- coding: cp1252 -*- ''' Created on 11.10.2011 @author: sth2mt ''' import time import os import threading import thread import shutil from ctypes import pythonapi, py_object import subprocess import FertigungsTest.Hardware.WLAN as Wlan import FertigungsTest.GUI.Display as Display import FertigungsTest.Hardware.StartSchalter as StartSchalter import FertigungsTest.Hardware.Typschild as Typschild import FertigungsTest.Hardware.LtInterface as LtInterface import FertigungsTest.Support.JasonCfg as JasonCfg # WrFlash # exit Param = {"None":0,"production":1,"browser":2} def kill(thread,iStopTimeout,tid): if thread: thread.printf ("kill iStopTimeout=%d"%iStopTimeout) time.sleep(iStopTimeout) #nach 30s hart beenden if thread.isAlive(): res = pythonapi.PyThreadState_SetAsyncExc(tid,py_object(SystemExit)) if res == 0: raise ValueError("nonexistent thread id (%s)" % thread._Thread_name) elif res > 1: pythonapi.PyThreadState_SetAsyncExc(tid,0) raise SystemError("PyThreadState_SetAsyncExc failed") else : thread.printf ("kill Thread %s" % thread._Thread_name) thread.errorcode=200 thread.isTimeout=True thread.__del__() else: thread.printf ( "kill %s not allive" % thread._Thread_name) else: print "kill: no handle" class Prueffunktionen(threading.Thread): ''' classdocs ''' def __init__(self, O_Parser,O_Serializer,param=None): ''' Constructor ''' self._Thread_name = "WrFlash" self.stout = False self.bInstallMlo = False self.bInstallUboot = True self.Uboot_Partitionen = [1] self.bInstallKernel = True self.Kernel_Partitionen = [3,4] self.bInstallRootFs = True self.RootFs_Partitionen = [5,6] self.bInstallDataDrv = True self.Data_Partitionen = [7] self.bInstallLtFw = True self.bInstallTypschildClean = True self.bSetupConfiguration = True self.AppMode = param self.printf("self.AppMode %i"%self.AppMode) self.printf("self.AppMode Param[""production""]=%i"%Param["production"]) self.printf("self.AppMode Param[""browser""]=%i"%Param["browser"]) if self.AppMode == Param["production"]: self.printf("Contructor %s Param=production=%i" % (self._Thread_name,param)) if self.AppMode == Param["browser"]: self.printf("Contructor %s Param=browser=%i" % (self._Thread_name,param)) self.bInstallMlo = False self.InFertigungstring = False self.bInstallTypschild = False self.bDeleteKonfigDir = False else: self.bInstallMlo = False self.InFertigungstring = True self.bInstallTypschild = True self.bDeleteKonfigDir = True threading.Thread.__init__(self) super(Prueffunktionen,self).__init__() self._EventStop = threading.Event() self.iStopTimeout = 3 # Stop Timeout bis zum Kill self.iTimeout = 420 # Timeout bis Abbruch self.errorcode = 200 self.isTimeout = False self.LoginUser = "dcc" self.LoginPassword = "dccpat22" self.O_XmlParser = O_Parser self.O_XML_Cmd = O_Serializer self.O_WLAN = Wlan.Treiber() self.s_mac=("%s"%self.O_WLAN.f_GetMACString()) self.hostIP = ("%s"%self.O_WLAN.f_GetNFSAdress()) self.O_Display = Display.Treiber() self.O_Startschalter = StartSchalter.Treiber() self.O_Typschild = Typschild.Treiber() self.O_Display.setHeadlines("diagnosis tools","software update") self.O_Display.paintDisplay() self.O_LT = LtInterface.Treiber() self.O_JasonCfg = JasonCfg.Treiber() pass def __del__(self): ''' Destructor ''' if self.errorcode==0: sAbruchGrund="OK" else: sAbruchGrund="NOK" self.printf("Destruktor %s" % self._Thread_name) self.printf( "Timeout %i, self._EventStop.isSet() %i"%(self.isTimeout,self._EventStop.isSet())) # Display bedienen if (self.isTimeout | self._EventStop.isSet()): #Abbruch der Funktion -> Fehler anzeigen if self._EventStop.isSet(): sAbruchGrund="Abort" self.O_Display.setAction(sAbruchGrund,"","") else: #Timeout der Funktion -> Fehler anzeigen sAbruchGrund="Timeout" self.O_Display.setAction(sAbruchGrund,"","") self.O_Display.SaveLastActionOnError() self.O_Display.setOKNOK(0) self.O_Display.clrSelect() print "%s"%self.O_XML_Cmd.BuildRueckgabewert(self._Thread_name,"%s %s"%(self._Thread_name,sAbruchGrund),None,self.errorcode,None) self.O_Display.paintDisplay() # Belegung der Prueffunktion im Parseer objekt loeschen -> Freigabe self.O_XmlParser.AktivePrueffunktion=None del (self.O_JasonCfg) del (self.O_LT) del (self.O_WLAN) del(self.O_Startschalter) del(self.O_Typschild) if self.errorcode==0: if self.AppMode == Param["browser"]: time.sleep(5) if subprocess.call(["sh","/etc/reboot/poweroff.sh"],shell=False)!=0: self.printf ("sh /etc/reboot/poweroff.sh NOK\n") else: self.printf ("sh /etc/reboot/poweroff.sh OK\n") pass def stop(self): # Thread normal beenden self.printf("stop") if self.isAlive(): self._EventStop.set() # Kill-thread falls dieser thread sich nicht nach 30s beendet for tid, tobj in threading._active.items(): if tobj is self: thread.start_new_thread(kill,(self,self.iStopTimeout,tid)) #print "stop Ende" pass def run(self): # Ablauf starten self.printf("Ablauf starten") print "%s"%self.O_XML_Cmd.BuildTimeout(self.iTimeout,self._Thread_name) print "%s"%self.O_XML_Cmd.BuildPrintMainText("Software/Typschild programmieren") # Watchdogtimer anstarten -> beendet Thread nach timeout for tid, tobj in threading._active.items(): if tobj is self: thread.start_new_thread(kill,(self,self.iTimeout-self.iStopTimeout-1,tid)) self.Ablauf() self.printf("Nach Ablauf") self.__del__() pass def stopped(self): return self._EventStop.isSet() def Ablauf(self): self.printf("SoftwarePruefung") print "%s"%self.O_XML_Cmd.BuildProgressbar(1) self.O_Display.ResetLastError() self.O_Display.setFortschritt(1) self.O_Display.paintDisplay() if self.bInstallMlo: if self.InstallationMlo()!=0: self.O_Display.SaveLastActionOnError() self.errorcode=200 print "%s"%self.O_XML_Cmd.BuildProgressbar(100) self.O_Display.setOKNOK(not self.errorcode) return self.errorcode if self.bInstallUboot: if self.InstallationUboot()!=0: self.O_Display.SaveLastActionOnError() self.errorcode=210 print "%s"%self.O_XML_Cmd.BuildProgressbar(100) self.O_Display.setOKNOK(not self.errorcode) return self.errorcode if self.bInstallKernel: if self.InstallationKernel()!=0: self.O_Display.SaveLastActionOnError() if self.bInstallTypschildClean: self.InstallationTypschildClean() self.errorcode=220 print "%s"%self.O_XML_Cmd.BuildProgressbar(100) self.O_Display.setOKNOK(not self.errorcode) return self.errorcode if self.bInstallLtFw: if self.InstallationLtFw()!=0: self.O_Display.SaveLastActionOnError() if self.bInstallTypschildClean: self.InstallationTypschildClean() self.errorcode=230 print "%s"%self.O_XML_Cmd.BuildProgressbar(100) self.O_Display.setOKNOK(not self.errorcode) return self.errorcode if self.bInstallRootFs: if self.InstallationRootFs()!=0: self.O_Display.SaveLastActionOnError() if self.bInstallTypschildClean: self.InstallationTypschildClean() self.errorcode=240 print "%s"%self.O_XML_Cmd.BuildProgressbar(100) self.O_Display.setOKNOK(not self.errorcode) return self.errorcode if self.bInstallDataDrv: if self.InstallationDataPartion()!=0: self.O_Display.SaveLastActionOnError() if self.bInstallTypschildClean: self.InstallationTypschildClean() self.errorcode=260 print "%s"%self.O_XML_Cmd.BuildProgressbar(100) self.O_Display.setOKNOK(not self.errorcode) return self.errorcode if self.bInstallTypschild: if self.InstallationTypschild()!=0: self.O_Display.SaveLastActionOnError() if self.bInstallTypschildClean: self.InstallationTypschildClean() self.errorcode=270 print "%s"%self.O_XML_Cmd.BuildProgressbar(100) self.O_Display.setOKNOK(not self.errorcode) return self.errorcode if self.bSetupConfiguration: if self.SetupConfiguration()!=0: self.O_Display.SaveLastActionOnError() if self.bInstallTypschildClean: self.InstallationTypschildClean() self.errorcode=280 print "%s"%self.O_XML_Cmd.BuildProgressbar(100) self.O_Display.setOKNOK(not self.errorcode) return self.errorcode if self.bInstallTypschildClean: self.InstallationTypschildClean() self.O_Display.setActionRaw("","","") self.O_Display.setOKNOK(1) self.errorcode=0 self.printf("SoftwarePr\xc3\xbcfung -> Ende") return self.errorcode pass def printf(self,string): if self.stout: print string pass def InstallationMlo(self): #Ausgabe in logDatei umbiegen # Geht nur aus u-boot heraus !!!!! output = open ("MLO.log","w") print >> output,"MLO flashen fuer %s\n"%self.O_WLAN.f_GetMACString() Partition = 0 self.O_Display.setActionRaw("delete","Partition %i"%Partition,"of MLO") print "%s"%self.O_XML_Cmd.BuildProgressbar(5) self.O_Display.setFortschritt(5) self.O_Display.paintDisplay() # MLO loeschen print >> output,"flash_eraseall /dev/mtd%i 0 0 (MLO)"%(Partition) output.flush() if subprocess.call(["flash_eraseall","/dev/mtd%i"%(Partition)],"0","0",stderr=output,stdout=output,shell=False)!=0: output.close() return 201 time.sleep(1) # MLO flashen print "%s"%self.O_XML_Cmd.BuildProgressbar(8) self.O_Display.setFortschritt(8) self.O_Display.setActionRaw("write","Partition %i"%Partition,"of MLO") self.O_Display.paintDisplay() print >> output,"\n\nnandwrite -p /dev/mtd%i /boot/MLO.nand\n"%(Partition) output.flush() if subprocess.call(["nandwrite","-p","/dev/mtd%i"%(Partition),"/boot/MLO.nand"],stderr=output,stdout=output,shell=False)!=0: output.close() return 202 print >> output,"\nFlashen des MLO in Partition %i OK\n"%(Partition) output.flush() time.sleep(1) output.close() time.sleep(1) print "%s"%self.O_XML_Cmd.BuildProgressbar(13) self.O_Display.setFortschritt(13) self.O_Display.paintDisplay() return 0 def InstallationUboot(self): #Ausgabe in logDatei umbiegen output = open ("U-boot.log","w") print >> output,"U-boot flashen fuer %s\n"%self.O_WLAN.f_GetMACString() Durchlauf = 1 for Partition in self.Uboot_Partitionen: self.O_Display.setActionRaw("delete", "Partition %i"%Partition,"of %i.u-boot"%(Durchlauf)) print "%s"%self.O_XML_Cmd.BuildProgressbar(1+4*Durchlauf) self.O_Display.setFortschritt(1+4*Durchlauf) self.O_Display.paintDisplay() # U-Boot loeschen print >> output,"flash_eraseall /dev/mtd%i (u-boot %i)"%(Partition,Durchlauf) output.flush() if subprocess.call(["flash_eraseall","/dev/mtd%i"%(Partition)],stderr=output,stdout=output,shell=False)!=0: output.close() return 211 time.sleep(1) # U-Boot flashen print "%s"%self.O_XML_Cmd.BuildProgressbar(3+4*Durchlauf) self.O_Display.setFortschritt(3+4*Durchlauf) self.O_Display.setActionRaw("write","Partition %i"%Partition,"of %i.u-boot"%(Durchlauf)) self.O_Display.paintDisplay() print >> output,"\n\nnandwrite -p /dev/mtd%i /boot/u-boot.bin (u-boot %i)\n"%(Partition,Durchlauf) output.flush() if subprocess.call(["nandwrite","-p","/dev/mtd%i"%(Partition),"/boot/u-boot.bin"],stderr=output,stdout=output,shell=False)!=0: output.close() return 212 print >> output,"\nFlashen des %i.u-boot in Partition %i OK\n"%(Durchlauf,Partition) output.flush() time.sleep(1) Durchlauf+=1 output.close() time.sleep(1) print "%s"%self.O_XML_Cmd.BuildProgressbar(13) self.O_Display.setFortschritt(13) self.O_Display.paintDisplay() return 0 def InstallationKernel(self): #Ausgabe in logDatei umbiegen output = open ("KernelFlash.log","w") print >> output,"2 x Linux Kernel flashen fuer %s\n"%self.O_WLAN.f_GetMACString() Durchlauf = 1 for Partition in self.Kernel_Partitionen: self.O_Display.setActionRaw("delete","Partition %i"%Partition,"of %i.Kernel"%(Durchlauf)) print "%s"%self.O_XML_Cmd.BuildProgressbar(7+4*Durchlauf) self.O_Display.setFortschritt(7+4*Durchlauf) self.O_Display.paintDisplay() # Kernel loeschen print >> output,"flash_eraseall /dev/mtd%i (Kernel %i)"%(Partition,Durchlauf) output.flush() if subprocess.call(["flash_eraseall","/dev/mtd%i"%(Partition)],stderr=output,stdout=output,shell=False)!=0: output.close() return 221 time.sleep(1) # Kernel flashen print "%s"%self.O_XML_Cmd.BuildProgressbar(10+4*Durchlauf) self.O_Display.setFortschritt(10+4*Durchlauf) self.O_Display.setActionRaw("write","Partition %i"%Partition,"of %i.Kernel"%(Durchlauf)) self.O_Display.paintDisplay() print >> output,"\n\nnandwrite -p /dev/mtd%i /boot/uImage (Kernel %i)\n"%(Partition,Durchlauf) output.flush() if subprocess.call(["nandwrite","-p","/dev/mtd%i"%(Partition),"/boot/uImage"],stderr=output,stdout=output,shell=False)!=0: output.close() return 222 print >> output,"\nFlashen des %i.Kernels in Partition %i OK\n"%(Durchlauf,Partition) output.flush() time.sleep(1) Durchlauf+=1 output.close() print "%s"%self.O_XML_Cmd.BuildProgressbar(19) self.O_Display.setFortschritt(19) self.O_Display.paintDisplay() return 0 def InstallationLtFw(self): self.O_Display.setActionRaw("LtFw","Update","") self.O_Display.paintDisplay() print "%s"%self.O_XML_Cmd.BuildProgressbar(20) self.O_Display.setFortschritt(20) #Ausgabe in logDatei umbiegen output = open ("LtFw.log","w") # Im Browser Mode Systemserver abschiesen !! # sonst lässt sich bei fehlender LT-FW kein Update durchführen, da Systemserver Spannung zu Beginn des Updates abschaltet. if self.AppMode == Param["browser"]: if subprocess.call(["killall","SystemSrv.elf"],shell=False)!=0: self.printf ("killall SystemSrv.elf NOK\n") else: self.printf ("killall SystemSrv.elf OK\n") if not self.O_LT.UpdateLTFirmware(): print >> output,"LtFw Update Error" output.flush() output.close() return 231 time.sleep(1) print >> output,"LtFw Update OK" output.flush() print "%s"%self.O_XML_Cmd.BuildProgressbar(28) self.O_Display.setFortschritt(28) self.O_Display.paintDisplay() output.close() return 0 pass def InstallationRootFs(self): #Ausgabe in logDatei umbiegen output = open ("rootfsFlash.log","w") Durchlauf = 1 for Partition in self.RootFs_Partitionen: if self.AppMode == Param["production"]: # RootFs loeschen self.O_Display.setActionRaw("delete","Partition %i"%(Partition),"of %i.rootfs"%(Durchlauf)) self.O_Display.paintDisplay() print >> output,"\nPartition %i f\xc3\xbcr %i.rootfs l\xc3\xb6schen Nexo:%s"%(Partition,Durchlauf,self.O_WLAN.f_GetMACString()) print >> output,"flash_eraseall /dev/mtd%i (rootfs %i )"%(Partition,Durchlauf) output.flush() if subprocess.call(["flash_eraseall","/dev/mtd%i"%(Partition)],stderr=output,stdout=output,shell=False)!=0: output.close() return 241 time.sleep(1) print "%s"%self.O_XML_Cmd.BuildProgressbar(20+10*Durchlauf) self.O_Display.setFortschritt(20+10*Durchlauf) self.O_Display.paintDisplay() # RootFs flashen self.O_Display.setActionRaw("write","Partition %i"%(Partition),"of %i.rootfs"%(Durchlauf)) self.O_Display.paintDisplay() #print >> output,"ubiformat /dev/mtd%i -f /Images/rootfs.ubi(rootFs %i )"%(Partition,Partition) print >> output,"\n\nnandwrite -p /dev/mtd%i /Images/rootfs.ubi (%i.rootfs )"%(Partition,Durchlauf) output.flush() if subprocess.call(["nandwrite","-p","/dev/mtd%i"%(Partition),"/Images/rootfs.ubi"],stderr=output,stdout=output,shell=False)!=0: output.close() return 242 print >> output,"\nFlashen in Partition %i von %i.rootfs OK\n"%(Partition,Durchlauf) if self.AppMode == Param["browser"]: # RootFs formatieren self.O_Display.setActionRaw("ubiformat","partition %i"%(Partition),"of %i.rootfs"%(Durchlauf)) self.O_Display.paintDisplay() print >> output,"\nubiformat partition %i of %i.rootfs Nexo:%s"%(Partition,Durchlauf,self.O_WLAN.f_GetMACString()) print >> output,"ubiformat /dev/mtd%i (%i.rootfs)"%(Partition,Durchlauf) output.flush() if subprocess.call(["ubiformat","/dev/mtd%i"%(Partition),"-f","/Images/rootfs.ubi","-y"],stderr=output,stdout=output,shell=False)!=0: output.close() return 243 print "%s"%self.O_XML_Cmd.BuildProgressbar(22+10*Durchlauf) self.O_Display.setFortschritt(22+10*Durchlauf) self.O_Display.paintDisplay() # attach /dev/mtx self.O_Display.setActionRaw("attach","partition %i"%(Partition),"of %i.rootfs"%(Durchlauf)) self.O_Display.paintDisplay() print >> output,"attach partiton %i of %i.rootfs"%(Partition,Durchlauf) output.flush() #Attach /dev/mtdx print >> output,"ubiattach /dev/ubi_ctrl -m %i -d %i"%(Partition,Durchlauf-1) output.flush() if subprocess.call(["ubiattach","/dev/ubi_ctrl","-m","%i"%(Partition),"-d","%i"%(Durchlauf-1)],stderr=output,stdout=output,shell=False)!=0: output.close() return 244 print "%s"%self.O_XML_Cmd.BuildProgressbar(23+Durchlauf*10) self.O_Display.setFortschritt(23+Durchlauf*10) self.O_Display.paintDisplay() # Verzeichnis zum mounten anlegen self.O_Display.setActionRaw("mkDir","/media/rootfs%i"%(Durchlauf),"") self.O_Display.paintDisplay() try: os.makedirs("/media/rootfs%i" % (Durchlauf)) print >> output, ("os.makedirs /media/rootfs%i" % (Durchlauf)) output.flush() except OSError,e: print >> output, ("Error os.makedirs /media/rootfs%i %s" % (Durchlauf,e)) output.flush() return 245 print "%s"%self.O_XML_Cmd.BuildProgressbar(24+Durchlauf*10) self.O_Display.setFortschritt(24+Durchlauf*10) self.O_Display.paintDisplay() time.sleep(1) # Mount ubi2_0 0_0 log, 1_0 data self.O_Display.setActionRaw("mount","/media/rootfs%i"%(Durchlauf),"auf ubi%i"%(Durchlauf-1)) self.O_Display.paintDisplay() print >> output,"mount -t ubifs ubi%i:rootfs /media/rootfs%i" % (Durchlauf-1,Durchlauf) output.flush() if subprocess.call(["mount","-t","ubifs","ubi%i:rootfs"% (Durchlauf-1), "/media/rootfs%i" % (Durchlauf)],stderr=output,stdout=output,shell=False)!=0: output.close() return 246 print "%s"%self.O_XML_Cmd.BuildProgressbar(25+Durchlauf*10) self.O_Display.setFortschritt(25+Durchlauf*10) self.O_Display.paintDisplay() time.sleep(1) # sync drive self.O_Display.setActionRaw("sync","/media/rootfs%i"%(Durchlauf),"on ubi%i"%(Durchlauf-1)) self.O_Display.paintDisplay() print >> output,"sync ubi%i:rootfs /media/rootfs%i" % (Durchlauf-1,Durchlauf) output.flush() if subprocess.call(["sync"],stderr=output,stdout=output,shell=False)!=0: output.close() return 247 time.sleep(1) if subprocess.call(["sync"],stderr=output,stdout=output,shell=False)!=0: output.close() return 248 time.sleep(1) if subprocess.call(["sync"],stderr=output,stdout=output,shell=False)!=0: output.close() return 249 print "%s"%self.O_XML_Cmd.BuildProgressbar(26+Durchlauf*10) self.O_Display.setFortschritt(26+Durchlauf*10) self.O_Display.paintDisplay() time.sleep(1) # UnMount ubix_0 0_0 log, 1_0 data self.O_Display.setActionRaw("umount","/media/rootfs%i"%(Durchlauf),"on ubi%i"%(Durchlauf-1)) self.O_Display.paintDisplay() print >> output,"umount /media/rootfs%i" % (Durchlauf) output.flush() if subprocess.call(["umount","/media/rootfs%i" % (Durchlauf)],stderr=output,stdout=output,shell=False)!=0: output.close() return 250 output.flush() time.sleep(1) print "%s"%self.O_XML_Cmd.BuildProgressbar(27+Durchlauf*10) self.O_Display.setFortschritt(27+Durchlauf*10) self.O_Display.paintDisplay() # Verzeichnis rootfsx loeschen self.O_Display.setActionRaw("rm","/media/rootfs%i"%(Durchlauf),"") self.O_Display.paintDisplay() try: os.removedirs("/media/rootfs%i" % (Durchlauf)) print >> output, ("os.removedirs /media/rootfs%i" % (Durchlauf)) output.flush() except OSError,e: print >> output, ("Error os.removedirs /media/rootfs%i %s" % (Durchlauf,e)) output.flush() return 251 print "%s"%self.O_XML_Cmd.BuildProgressbar(28+Durchlauf*10) self.O_Display.setFortschritt(28+Durchlauf*10) self.O_Display.paintDisplay() time.sleep(1) # detach /dev/mtx self.O_Display.setActionRaw("detach","partition %i"%(Partition),"of %i.rootfs"%(Durchlauf)) self.O_Display.paintDisplay() print >> output,"detach partiton %i of %i.rootfs"%(Partition,Durchlauf) output.flush() #detach /dev/mtdx print >> output,"ubidetach /dev/ubi_ctrl -m %i"%(Partition) output.flush() if subprocess.call(["ubidetach","/dev/ubi_ctrl","-m","%i"%(Partition)],stderr=output,stdout=output,shell=False)!=0: output.close() return 252 print "%s"%self.O_XML_Cmd.BuildProgressbar(29+Durchlauf*10) self.O_Display.setFortschritt(29+Durchlauf*10) self.O_Display.paintDisplay() print >> output,"\nflashing partition %i of %i.rootfs OK\n"%(Partition,Durchlauf) output.flush() print "%s"%self.O_XML_Cmd.BuildProgressbar(30+10*Durchlauf) self.O_Display.setFortschritt(30+10*Durchlauf) self.O_Display.paintDisplay() time.sleep(1) Durchlauf+=1 output.close() return 0 def InstallationDataPartion(self): self.O_Display.setActionRaw("delete","DataDrive","") self.O_Display.paintDisplay() #Ausgabe in logDatei umbiegen output = open ("DataDrive.log","w") # Achtung in rcs file darf data nicht eingebunden sein !!!!!!!!!!!!!! Partition = self.Data_Partitionen[0] # Data unmount print >> output,"DataDrive umount f\xc3\xbcr %s"%self.O_WLAN.f_GetMACString() print >> output,"umount /mnt/data" output.flush() if subprocess.call(["umount","/mnt/data"],stderr=output,stdout=output,shell=False)!=0: print >> output,"DataDrive umount NOK\n" else: print >> output,"DataDrive umount OK\n" time.sleep(1) print "%s"%self.O_XML_Cmd.BuildProgressbar(51) self.O_Display.setFortschritt(51) self.O_Display.paintDisplay() #Data detach print >> output,"DataDrive detach f\xc3\xbcr %s"%self.O_WLAN.f_GetMACString() print >> output,"ubidetach /dev/ubi_ctrl -m %i"%(Partition) output.flush() if subprocess.call(["ubidetach","/dev/ubi_ctrl","-m","%i"%(Partition)],stderr=output,stdout=output,shell=False)!=0: print >> output,"DataDrive ubidetach NOK\n" else: print >> output,"DataDrive ubidetach OK\n" time.sleep(1) print "%s"%self.O_XML_Cmd.BuildProgressbar(52) self.O_Display.setFortschritt(52) self.O_Display.paintDisplay() # Data loeschen print >> output,"DataDrive l\xc3\xb6schen f\xc3\xbcr %s"%self.O_WLAN.f_GetMACString() print >> output,"flash_eraseall /dev/mtd%i"%(Partition) output.flush() if subprocess.call(["flash_eraseall","/dev/mtd%i"%(Partition)],stderr=output,stdout=output,shell=False)!=0: output.close() return 261 time.sleep(1) print >> output,"DataDrive l\xc3\xb6schen OK\n" print "%s"%self.O_XML_Cmd.BuildProgressbar(54) self.O_Display.setFortschritt(54) self.O_Display.paintDisplay() # Data formatieren mit ubifs print >> output,"DataDrive ubiformat f\xc3\xbcr %s"%self.O_WLAN.f_GetMACString() print >> output,"ubiformat /dev/mtd%i"%(Partition) output.flush() if subprocess.call(["ubiformat","/dev/mtd%i"%(Partition)],stderr=output,stdout=output,shell=False)!=0: output.close() return 262 time.sleep(1) print >> output,"DataDrive ubiformat OK\n" print "%s"%self.O_XML_Cmd.BuildProgressbar(56) self.O_Display.setFortschritt(56) self.O_Display.paintDisplay() # Data attach mit ubiattach print >> output,"DataDrive ubiattach f\xc3\xbcr %s"%self.O_WLAN.f_GetMACString() print >> output,"ubiattach /dev/ubi_ctrl -m %i -d 2"%(Partition) output.flush() if subprocess.call(["ubiattach","/dev/ubi_ctrl","-m","%i"%(Partition),"-d","2"],stderr=output,stdout=output,shell=False)!=0: output.close() return 263 time.sleep(1) print >> output,"DataDrive ubiattach OK\n" print "%s"%self.O_XML_Cmd.BuildProgressbar(57) self.O_Display.setFortschritt(57) self.O_Display.paintDisplay() # Data mkvolume mit ubimkvol print >> output,"DataDrive ubimkvol f\xc3\xbcr %s"%self.O_WLAN.f_GetMACString() print >> output,"ubimkvol /dev/ubi2 -N data -m" output.flush() if subprocess.call(["ubimkvol","/dev/ubi2","-N","data","-m"],stderr=output,stdout=output,shell=False)!=0: output.close() return 264 time.sleep(1) print >> output,"DataDrive ubimkvol OK\n" print "%s"%self.O_XML_Cmd.BuildProgressbar(59) self.O_Display.setFortschritt(59) self.O_Display.paintDisplay() # Data mount print >> output,"DataDrive mount f\xc3\xbcr %s"%self.O_WLAN.f_GetMACString() print >> output,"mount -t ubifs ubi2:data /mnt/data" output.flush() if subprocess.call(["mount","-t","ubifs","ubi2:data","/mnt/data"],stderr=output,stdout=output,shell=False)!=0: output.close() return 265 time.sleep(1) print >> output,"DataDrive mount OK\n" # sync drive self.O_Display.setActionRaw("sync","/mnt/data","") self.O_Display.paintDisplay() print >> output,"sync /mnt/data" output.flush() if subprocess.call(["sync"],stderr=output,stdout=output,shell=False)!=0: output.close() return 266 time.sleep(1) if subprocess.call(["sync"],stderr=output,stdout=output,shell=False)!=0: output.close() return 267 time.sleep(1) if subprocess.call(["sync"],stderr=output,stdout=output,shell=False)!=0: output.close() return 268 time.sleep(1) # Data unmount print >> output,"DataDrive umount f\xc3\xbcr %s"%self.O_WLAN.f_GetMACString() print >> output,"umount /mnt/data" output.flush() if subprocess.call(["umount","/mnt/data"],stderr=output,stdout=output,shell=False)!=0: print >> output,"DataDrive umount NOK\n" else: print >> output,"DataDrive umount OK\n" time.sleep(1) print "%s"%self.O_XML_Cmd.BuildProgressbar(60) self.O_Display.setFortschritt(60) self.O_Display.paintDisplay() output.close() return 0 pass def InstallationTypschild(self): # Displaytexte anzeigen #Ausgabe in logDatei umbiegen output = open ("Typschild.log","w") # Zwischenablagen fuer Daten generien # Verzeichnis anlegen (Name=Mac-Adresse) print "%s"%self.O_XML_Cmd.BuildProgressbar(61) self.O_Display.setActionRaw("create","tmp folder",self.s_mac[3:]) self.O_Display.setFortschritt(61) self.O_Display.paintDisplay() print >> output, "Ordner /tmp/%s anlegen\n"%self.s_mac #output.flush() try: os.mkdir(("/tmp/%s"%self.s_mac)) print >> output, ("os.mkdir /tmp/%s\n"%self.s_mac) except OSError,e: print >> output, ("Error os.mkdir /tmp/%s %s\n"%(self.s_mac,e)) output.close() return 271 time.sleep(1) # Dateien von Windows-Pruefrechner auf Linux VM kopieren print "%s"%self.O_XML_Cmd.BuildProgressbar(62) self.O_Display.setActionRaw("receive","typedata","over Telnet") self.O_Display.setFortschritt(62) self.O_Display.paintDisplay() # Hierzu TelnetVerbindung zur VM Linux aufbauen p=subprocess.Popen(["telnet",self.hostIP],stderr=output,stdout=output,stdin=subprocess.PIPE,shell=False) if p._child_created==False: #sys.stdout = stdout print >> output,"Telnet-Verbindung nach %s nicht m\xc3\xb6glich !"%self.hostIP output.close() return 272 time.sleep(10) print >> p.stdin, self.LoginUser time.sleep(1) print >> p.stdin, self.LoginPassword time.sleep(4) # Kopieren der Konfigdateien auf das /tmp VM-Laufwerk des NFS rootFS if self.InFertigungstring == True: string = "sudo cp -R /mnt/hgfs/Flash_Image/%s /usr/local/src/nfsboot/%s/tmp/" % (self.s_mac,self.O_WLAN.f_GetIPAdress()) else: string = "sudo cp -R /mnt/hgfs/Flash_Image/%s /usr/local/src/omap/rootfs/tmp/" % self.s_mac print >> p.stdin, string time.sleep(1) print >> p.stdin, self.LoginPassword # Warten bis alles kopiert time.sleep(5) print >> output,"\n"+string+"\n" output.flush() # Telnet Verbindung zu Linux VM des Pruef-Rechner schliesen print >> p.stdin, "exit" time.sleep(2) #Elektrische Typschilder im Schrauber schreiben print "%s"%self.O_XML_Cmd.BuildProgressbar(65) self.O_Display.setActionRaw("write", "Main typeplate","") self.O_Display.setFortschritt(65) self.O_Display.paintDisplay() #Gesamttypschild aus Datei in Eeprom schreiben print >> output,"\nGesamttypschild aus Datei in Eeprom schreiben" output.flush() # Typschild schreiben if self.O_Typschild.CpyBrcTypFileToEeprom()!=True: print >> output,"Error Gesamttypschild schreiben !\n" output.close() return 273 time.sleep(1) print >> output,"Elektrische Typschilder schreiben OK\n" output.flush() #Ausgabe in logDatei beenden output.close() return 0 pass def SetupConfiguration(self): # Displaytexte anzeigen #Ausgabe in logDatei umbiegen output = open ("SetupConfig.log","w") # MAC-ID des Schraubers pruefen print "%s"%self.O_XML_Cmd.BuildProgressbar(67) self.O_Display.setActionRaw("check","CRC of","EN typeplate") self.O_Display.setFortschritt(67) self.O_Display.paintDisplay() sInhalt = self.O_Typschild.ReadEnStatParFromEeprom() if self.O_Typschild.checkCRC(sInhalt) == False: print >> output,"CRC Typschild EN %s ung\xc3\xbcltig !"%self.O_Typschild.SplitCRC(sInhalt) self.printf("CRC Typschild EN %s ung\xc3\xbcltig !"%self.O_Typschild.SplitCRC(sInhalt)) output.close() return 281 else: self.printf( "CRC Typschild EN g\xc3\xbcltig %s !"%self.O_Typschild.SplitCRC(sInhalt)) print >> output,"CRC Typschild EN g\xc3\xbcltig %s !"%self.O_Typschild.SplitCRC(sInhalt) s_Typschild_MAC=self.O_Typschild.getStatValue(sInhalt, "MAC") print >> output,"s_Typschild_MAC=%s"%s_Typschild_MAC self.printf( "s_Typschild_MAC=%s"%s_Typschild_MAC) L_MAC=self.O_WLAN.f_GetMACLong() s_nvsmap_MAC = "%012X"%(L_MAC) print >> output,"s_nvsmap_MAC=%s"%s_nvsmap_MAC self.printf( "s_nvsmap_MAC=%s"%s_nvsmap_MAC) output.flush() # Ist MAC_ID in Datei nvs_map.bin ungleich 0 ? if L_MAC == 0: print >> output,"MAC_ID nvsmap.bin(%s) ung\xc3\xbcltig !"%(s_nvsmap_MAC) self.printf( "MAC_ID nvsmap.bin(%s) ung\xc3\xbcltig !"%(s_nvsmap_MAC)) output.close() return 282 else: self.printf( "MAC_ID (%s) in nvs_map.bin plausibel !"%s_nvsmap_MAC) print >> output,"MAC_ID (%s) in nvs_map.bin plausibel !"%(s_nvsmap_MAC) # Ist MAC_ID in EN-Typschild und MAC_ID in Datei nvs_map.bin identisch ? if s_nvsmap_MAC != s_Typschild_MAC: print >> output,"MAC_ID unterschiedlich in EN Typschild(%s) und nvsmap.bin(%s) !"%(s_Typschild_MAC,s_nvsmap_MAC) self.printf( "MAC_ID unterschiedlich in EN Typschild(%s) und nvsmap.bin(%s) !"%(s_Typschild_MAC,s_nvsmap_MAC)) output.close() return 283 else: self.printf( "MAC_ID (%s) EN g\xc3\xbcltig !"%s_nvsmap_MAC) print >> output,"MAC_ID (%s) EN g\xc3\xbcltig !"%(s_nvsmap_MAC) Durchlauf = 1 for Partition in self.RootFs_Partitionen: #Daten auf das zukuenftige UBI Rootfs des Schraubers kopieren print "%s"%self.O_XML_Cmd.BuildProgressbar(60+Durchlauf*10) self.O_Display.setActionRaw("attach","Partition %i"%(Partition),"of %i.rootfs"%(Durchlauf)) self.O_Display.setFortschritt(60+Durchlauf*10) self.O_Display.paintDisplay() # Hierzu Laufwerk temporaer mounten output.flush() print >> output,"\nZuk\xc3\xbcnftiges %i.rootfs zum ablegen der Konfigdaten auf Partition %i mounten\n"%(Durchlauf,Partition) output.flush() #Attach /dev/mtd4 print >> output,"ubiattach /dev/ubi_ctrl -m %i -d %i"%(Partition,Durchlauf+4) output.flush() if subprocess.call(["ubiattach","/dev/ubi_ctrl", "-m", "%i"%(Partition), "-d", "%i"%(Durchlauf+4)],stderr=output,stdout=output,shell=False)!=0: output.close() return 284 output.flush() time.sleep(1) # Verzeichnis zum mounten anlegen print "%s"%self.O_XML_Cmd.BuildProgressbar(62+Durchlauf*10) self.O_Display.setActionRaw("mkDir","/media/rootfs%i"%(Durchlauf),"") self.O_Display.setFortschritt(62+Durchlauf*10) self.O_Display.paintDisplay() try: shutil.rmtree("/media/rootfs%i"%(Durchlauf), ignore_errors=True, onerror=None) os.makedirs("/media/rootfs%i" % (Durchlauf)) print >> output, ("os.makedirs /media/rootfs%i" % (Durchlauf)) output.flush() except OSError,e: print >> output, ("Error os.makedirs /media/rootfs%i %s" % (Durchlauf,e)) output.flush() output.close() return 285 time.sleep(1) # Mount ubi2_0 0_0 log, 1_0 data print "%s"%self.O_XML_Cmd.BuildProgressbar(64+Durchlauf*10) self.O_Display.setActionRaw("mount","/media/rootfs%i"%(Durchlauf),"on ubi%i"%(Durchlauf+4)) self.O_Display.setFortschritt(64+Durchlauf*10) self.O_Display.paintDisplay() print >> output,"mount -t ubifs ubi%i:rootfs /media/rootfs%i" % (Durchlauf+4,Durchlauf) output.flush() if subprocess.call(["mount","-t","ubifs","ubi%i:rootfs"% (Durchlauf+4), "/media/rootfs%i" % (Durchlauf)],stderr=output,stdout=output,shell=False)!=0: output.close() return 286 time.sleep(1) output.flush() #WLAN NVSMap Datei vom Flash ins RootFs kopieren print "%s"%self.O_XML_Cmd.BuildProgressbar(66+Durchlauf*10) self.O_Display.setActionRaw("copy","nvs_map.bin","to %i.rootfs"%(Durchlauf)) self.O_Display.setFortschritt(66+Durchlauf*10) print >> output,("f_CopyNvsMap('/media/rootfs%i/opt/ti-wireless/WL6.1.6.0.3/'" % (Durchlauf)) output.flush() if (self.O_WLAN.f_CopyNvsMap("/media/rootfs%i/opt/ti-wireless/WL6.1.6.0.3/"%(Durchlauf))==False): output.close() return 287 if self.AppMode == Param["production"]: # Daten kopieren print "%s"%self.O_XML_Cmd.BuildProgressbar(68+Durchlauf*10) self.O_Display.setActionRaw("copy","/config","to %i.rootfs"%(Durchlauf)) self.O_Display.setFortschritt(68+Durchlauf*10) self.O_Display.paintDisplay() print >> output,"cp -f -p -R /tmp/%s/config /media/rootfs%i/home/tool" % (self.s_mac,Durchlauf) output.flush() if subprocess.call(["cp","-f","-p","-R","/tmp/%s/config" % self.s_mac,"/media/rootfs%i/home/tool" % (Durchlauf)],stderr=output,stdout=output,shell=False)!=0: output.close() return 288 print "%s"%self.O_XML_Cmd.BuildProgressbar(70+Durchlauf*10) self.O_Display.setFortschritt(70+Durchlauf*10) print >> output,"Konfiguration (nvs_map u. SrbPrg) in %i.rootfs schreiben OK\n"%(Durchlauf) output.flush() time.sleep(1) if self.AppMode == Param["browser"]: # MFU-SrbPrg in Flash rootfs kopieren print "%s"%self.O_XML_Cmd.BuildProgressbar(68+Durchlauf*10) self.O_Display.setActionRaw("copy","/srbprg","to %i.rootfs"%(Durchlauf)) self.O_Display.setFortschritt(68+Durchlauf*10) self.O_Display.paintDisplay() print >> output,"cp -f -p -R /home/tool/config/srbprg /media/rootfs%i/home/tool/config" % (Durchlauf) output.flush() if subprocess.call(["cp","-f","-p","-R","/home/tool/config/srbprg","/media/rootfs%i/home/tool/config" % (Durchlauf)],stderr=output,stdout=output,shell=False)!=0: output.close() return 288 print "%s"%self.O_XML_Cmd.BuildProgressbar(70+Durchlauf*10) self.O_Display.setFortschritt(70+Durchlauf*10) print >> output,"MFU-Schraubprogamme in %i.rootfs schreiben OK\n"%(Durchlauf) output.flush() time.sleep(1) # Laserwarning in guiconfig aktivieren wenn Laser verbaut sInhalt = self.O_Typschild.ReadBrcStatParFromEeprom() h_Typschild_Typ=self.O_Typschild.getStatValue(sInhalt, "Komponententyp") if (h_Typschild_Typ&0x02) == 0x02: # Laserwarning in guiconfig aktivieren wenn Laser verbaut # guiconfig.json in pystruc konvertieren pyjsonCfg=self.O_JasonCfg.Decode(self.O_JasonCfg.ReadFile("guiconfig","/media/rootfs%i/home/tool/config" % (Durchlauf))) # key : value auf true setzen self.O_JasonCfg.SetValue(pyjsonCfg, True, 'global','laserwarning') self.O_JasonCfg.SetValue(pyjsonCfg, True, 'view','warning','forceread') # pystruc in jason string zurueck konvertieren und in guiconfig.json speichern self.O_JasonCfg.WriteFile(self.O_JasonCfg.Encode(pyjsonCfg),"guiconfig","/media/rootfs%i/home/tool/config" % (Durchlauf)) else: # Laserwarning in guiconfig deaktivieren, kein Laser verbaut # guiconfig.json in pystruc konvertieren pyjsonCfg=self.O_JasonCfg.Decode(self.O_JasonCfg.ReadFile("guiconfig","/media/rootfs%i/home/tool/config" % (Durchlauf))) # key : value auf true setzen self.O_JasonCfg.SetValue(pyjsonCfg, False, 'global','laserwarning') self.O_JasonCfg.SetValue(pyjsonCfg, False, 'view','warning','forceread') # pystruc in jason string zurueck konvertieren und in guiconfig.json speichern self.O_JasonCfg.WriteFile(self.O_JasonCfg.Encode(pyjsonCfg),"guiconfig","/media/rootfs%i/home/tool/config" % (Durchlauf)) time.sleep(1) Durchlauf+=1 #Ende gut alles Gut #Ausgabe in logDatei beenden output.close() return 0 pass def InstallationTypschildClean(self): # Displaytexte anzeigen #Ausgabe in logDatei umbiegen output = open ("TypschildClean.log","w") Durchlauf = 1 for Partition in self.RootFs_Partitionen: #Umount des UBI Rootfs print "%s"%self.O_XML_Cmd.BuildProgressbar(86+Durchlauf*4) self.O_Display.setActionRaw("umount","/media/rootfs%i"%(Durchlauf),"") self.O_Display.setFortschritt(86+Durchlauf*4) self.O_Display.paintDisplay() print >> output,"umount /media/rootfs%i" % (Durchlauf) output.flush() if subprocess.call(["umount","/media/rootfs%i" % (Durchlauf)],stderr=output,stdout=output,shell=False)!=0: #output.close() #return 204 pass time.sleep(1) output.flush() #Detach des UBI Fs print "%s"%self.O_XML_Cmd.BuildProgressbar(88+Durchlauf*4) self.O_Display.setActionRaw("ubidetach","/media/rootfs%i"%(Durchlauf),"ubi_ctrl -m %i"%(Durchlauf+4)) self.O_Display.setFortschritt(88+Durchlauf*4) self.O_Display.paintDisplay() print >> output,"ubidetach /dev/ubi_ctrl -m %i"%(Durchlauf+4) output.flush() if subprocess.call(["ubidetach","/dev/ubi_ctrl","-m", "%i"%(Durchlauf+4)],stderr=output,stdout=output,shell=False)!=0: #output.close() #return 204 pass time.sleep(1) output.flush() #Mountverzeichnis Laufwerk loeschen print "%s"%self.O_XML_Cmd.BuildProgressbar(89+Durchlauf*4) self.O_Display.setActionRaw("rmDir","/media/rootfs%i"%(Durchlauf),"") self.O_Display.setFortschritt(89+Durchlauf*4) self.O_Display.paintDisplay() try: shutil.rmtree("/media/rootfs%i"%(Durchlauf), ignore_errors=False, onerror=None) print >> output, ("shutil.rmtree /media/rootfs%i" % (Durchlauf)) output.flush() except OSError,e: print >> output, ("error shutil.rmtree /media/rootfs%i %s" % (Durchlauf,e)) output.flush() #output.close() #return 204 time.sleep(1) output.flush() Durchlauf+=1 # temp/xx-xx-xx-xx Laufwerk loeschen print "%s"%self.O_XML_Cmd.BuildProgressbar(98) self.O_Display.setActionRaw("rmDir","/temp/...","") self.O_Display.setFortschritt(98) self.O_Display.paintDisplay() try: shutil.rmtree("/tmp/%s" % self.s_mac, ignore_errors=False, onerror=None) print >> output, ("shutil.rmtree /tmp/%s" % self.s_mac) output.flush() except OSError,e: print >> output, ("error shutil.rmtree /tmp/%s %s" % (self.s_mac,e)) output.flush() #output.close() #return 204 time.sleep(1) output.flush() if self.bDeleteKonfigDir: #Konfig Verzeichnis des Pruefstands auf /mnt/Flash_Daten/xx-xx-xx-xx loeschen print "%s"%self.O_XML_Cmd.BuildProgressbar(99) self.O_Display.setActionRaw("rmDir",self.s_mac[3:],"") self.O_Display.setFortschritt(99) self.O_Display.paintDisplay() # Hierzu TelnetVerbindung zum Host aufbauen p=subprocess.Popen(["telnet",self.hostIP],stderr=output,stdout=output,stdin=subprocess.PIPE,shell=False) if p._child_created==False: #sys.stdout = stdout output.close() return 295 time.sleep(10) print >> p.stdin, self.LoginUser time.sleep(1) print >> p.stdin, self.LoginPassword time.sleep(3) #Konfig Verzeichnis des Pruefstands auf /mnt/Flash_Daten/xx-xx-xx-xx wechseln string = "cd /mnt/hgfs/Flash_Image" #print >> output,string #output.flush() print >> p.stdin, string time.sleep(1) #print >> p.stdin, self.LoginPassword #output.flush() #time.sleep(1) #Konfig Verzeichnis des Pruefstands auf /mnt/Flash_Daten/xx-xx-xx-xx loeschen string = "sudo rm -r %s/*"%(self.s_mac) #print >> output,string #output.flush() print >> p.stdin, string # Warten bis alles geloescht #output.flush() time.sleep(1) print >> p.stdin, self.LoginPassword time.sleep(1) string = "rmdir %s"%(self.s_mac) #print >> output,string #output.flush() print >> p.stdin, string # Warten bis alles geloescht #output.flush() time.sleep(2) print >> p.stdin, "exit" #print >> output,string #output.flush() #sys.stdout = stdout print "%s"%self.O_XML_Cmd.BuildProgressbar(100) self.O_Display.setActionRaw("","","") self.O_Display.setFortschritt(100) self.O_Display.paintDisplay() output.flush() #Ende gut alles Gut #Ausgabe in logDatei beenden output.close() return 0 pass def TestMenueSchreiben(self,O_Paint): if O_Paint: Input = ' ' while Input!= "s": Input=O_Paint.TestfunktionsEingabe() if Input[0] == "z": # zuruck return Input O_Paint.SetTestText(["Schreibvorgang bestaetigen mit (J)"]) O_Paint.Update() Input = ' ' while Input!= "z": Input=O_Paint.TestfunktionsEingabe() if Input[0] == "J": # Schreibvorgang starten O_Paint.AddTestTextZeile("Schreibe.....") O_Paint.Update() time.sleep(3) # Platzhalter fuer Schreibfunktion O_Paint.SetTestText(["Typschild schreiben OK"]) O_Paint.Update() return "z" O_Paint.Update() O_Paint.ClearTestText() return Input pass def TestMenueLesen(self,O_Paint): if O_Paint: O_Paint.SetTestText("Startschalter betaetigen") O_Paint.Update() Input = ' ' while Input!= "z": Input=O_Paint.TestfunktionsEingabe() O_Paint.Update() O_Paint.Update() O_Paint.ClearTestText() return Input pass pass