# -*- coding: cp1252 -*- ''' Created on 06.02.2012 @author: sth2mt ''' import ctypes import time import dbus import FertigungsTest.Support.sysLang as sysLang class Treiber(object): ''' classdocs ''' # Achtung dies ist Pseudo Singleton -> variablen werden statisch verwendet. Aufgeraumt wird erst wenn alle instanzen weg sindwird nur einmal instaniiert !!!! ObjCount = 0 _Thread_name = "Display" stout = False ScreenWidth = 20 ScreenHigh = 10 line = 0 sArray = [] sHeadline = ["diagnosis tools"," "] sOKNOK = " " sAction = [" "," "," "] sActionOnError = [" "," "," "] Error = 0 sTextSelectA = "" sTextSelectB = "" sTextSelectC = "" sColorBlack = "#000000" sColorGreen = "#00ff00" sColorLightGreen = "#80ff40" sColorRed = "#ff0000" sColorWhite = "#ffffff" sColorLightGrey = "#EEEEEE" sColorGrey = "#B0B0B0" sColorLightBlue = '#4395d1' sColorDarkBlue = '#0064a0' KEY_A = 30 KEY_LEFT = 105 KEY_RIGHT = 106 O_dBusSystem = None Display = None O_DisplayDB = None fObjectFB = None O_sysLang = None def __init__(self): ''' Constructor ''' #return self.CloseFrameBuffer() Treiber.ObjCount += 1 if Treiber.O_dBusSystem == None: Treiber.O_dBusSystem = dbus.SystemBus() Treiber.O_DisplayDB = Treiber.O_dBusSystem.get_object('com.rexroth.akku.GUIService', '/GUI') if Treiber.O_sysLang == None: Treiber.O_sysLang = sysLang.sysLang() self.printf("%i.Construktor %s Anzahl" % (Treiber.ObjCount,Treiber._Thread_name)) Treiber.sHeadline = [Treiber.O_sysLang.GetGuiText(Treiber.sHeadline[0]), Treiber.O_sysLang.GetGuiText(Treiber.sHeadline[1])] self.clrSelect() self.BuildDefaultScreen() if Treiber.ObjCount < 2: Treiber.O_DisplayDB.ftestMode(True) # Display veriegeln und in Testmode schalten pass def __del__(self): ''' Destructor ''' self.printf("%i Destruktor %s" % (Treiber.ObjCount,Treiber._Thread_name)) if Treiber.ObjCount == 1: self.printf("Reste aufraumen") self.clr() Treiber.O_DisplayDB.ftestMode(False) # Display freigeben und Testmode abschalten del(Treiber.O_sysLang) del(Treiber.O_dBusSystem) if Treiber.ObjCount > 0: Treiber.ObjCount -= 1 pass def clr(self): Treiber.O_DisplayDB.ftestModeText(0,Treiber.sColorWhite,Treiber.sColorDarkBlue,26,'') Treiber.O_DisplayDB.ftestModeText(1,Treiber.sColorWhite,Treiber.sColorBlack,26,'') Treiber.O_DisplayDB.ftestModeText(2,Treiber.sColorWhite,Treiber.sColorBlack,20,'') Treiber.O_DisplayDB.ftestModeText(3,Treiber.sColorWhite,Treiber.sColorBlack,20,'') Treiber.O_DisplayDB.ftestModeText(4,Treiber.sColorWhite,Treiber.sColorBlack,20,'') time.sleep(0.02) pass def BuildDefaultScreen(self): self.clr() Treiber.O_DisplayDB.ftestModeText(0,Treiber.sColorWhite,Treiber.sColorDarkBlue,26,Treiber.sHeadline[0]) Treiber.sActionOnError = Treiber.sAction self.clrSelect() pass def setHeadlines(self,sLine1,sLine2): sLine1 = Treiber.O_sysLang.GetGuiText(sLine1) self.printf("%s %i, %s %i" %(sLine1,len(sLine1),sLine2,len(sLine2))) if len(sLine1)>Treiber.ScreenWidth: length=Treiber.ScreenWidth else: length = len(sLine1) Treiber.sHeadline=[sLine1[0:length]] Treiber.O_DisplayDB.ftestModeText(0,Treiber.sColorWhite,Treiber.sColorDarkBlue,26,Treiber.sHeadline[0]) sLine2 = Treiber.O_sysLang.GetGuiText(sLine2) if len(sLine2)>Treiber.ScreenWidth: length=Treiber.ScreenWidth else: length = len(sLine2) sLine2 = sLine2.replace(" ","\n",2) Treiber.sHeadline.append(sLine2[0:length]) Treiber.O_DisplayDB.ftestModeText(1,Treiber.sColorWhite,Treiber.sColorBlack,26,"%s\n\n%s"%(Treiber.sHeadline[1],Treiber.sAction)) # Forschritt am Anfang immer auf 0 setzen self.setFortschritt(0) pass def SaveLastActionOnError(self): Treiber.sActionOnError = Treiber.sAction Treiber.Error = 1 # scharf machen self.printf("SaveLastActionOnError() %s"%Treiber.sActionOnError) pass def ResetLastError(self): Treiber.sOKNOK = "" Treiber.sActionOnError = [" "," "," "] Treiber.Error = 0 self.printf("ResetLastError") pass def setOKNOK(self,bOk): self.printf("setOKNOK(%i)"%bOk) if bOk: Treiber.sOKNOK = Treiber.O_sysLang.GetGuiText("O K") sBackgroundColor = Treiber.sColorLightGreen sForeGroundColor = Treiber.sColorBlack else: Treiber.sOKNOK = Treiber.O_sysLang.GetGuiText("!!! N O K !!!") sBackgroundColor = Treiber.sColorRed sForeGroundColor = Treiber.sColorWhite if Treiber.Error == 1: Treiber.Error = 2 Treiber.O_DisplayDB.ftestModeText(1,sForeGroundColor,sBackgroundColor,32,"%s\n\n%s"%(Treiber.sHeadline[1],Treiber.sOKNOK)) pass def setFortschritt(self,iProzent): if iProzent < 0 : iProzent = 0 if iProzent > 100 : iProzent = 100 Treiber.sOKNOK = ("%i %%" % iProzent) Treiber.O_DisplayDB.ftestModeProgressBar(iProzent) pass def setActionLP(self,sText,sForeGround=None,sBackGround=None,Formatvalue=None): sText=Treiber.O_sysLang.GetGuiText(sText) if Formatvalue !=None: sText = sText%Formatvalue sListe = sText.split("\n",2) if len(sListe) < 2: sListe = sText.split(" ",2) if len(sListe) == 3: self.setAction(sListe[0], sListe[1], sListe[2], sForeGround, sBackGround) if len(sListe) == 2: self.setAction(sListe[0], sListe[1], " ", sForeGround, sBackGround) if len(sListe) == 1: self.setAction(sListe[0], " ", " ", sForeGround, sBackGround) pass def setAction(self,sLine1,sLine2,sLine3,sForeGround=None,sBackGround=None): if sForeGround == None: sForeGround=Treiber.sColorWhite if sBackGround == None: sBackGround=Treiber.sColorBlack # Übersetzen sLine1 = Treiber.O_sysLang.GetGuiText(sLine1) sLine2 = Treiber.O_sysLang.GetGuiText(sLine2) sLine3 = Treiber.O_sysLang.GetGuiText(sLine3) Treiber.sAction=[sLine1[0:Treiber.ScreenWidth],sLine2[0:Treiber.ScreenWidth],sLine3[0:Treiber.ScreenWidth]] string="%s\n%s\n%s"%(sLine1,sLine2,sLine3) Treiber.O_DisplayDB.ftestModeText(1,sForeGround,sBackGround,26,"%s\n\n%s"%(Treiber.sHeadline[1],string)) pass def setActionRaw(self,sLine1,sLine2,sLine3,sForeGround=None,sBackGround=None): if sForeGround == None: sForeGround=Treiber.sColorWhite if sBackGround == None: sBackGround=Treiber.sColorBlack sLine1 = sLine1.decode("utf8") sLine2 = sLine2.decode("utf8") sLine3 = sLine3.decode("utf8") Treiber.sAction=[sLine1[0:Treiber.ScreenWidth],sLine2[0:Treiber.ScreenWidth],sLine3[0:Treiber.ScreenWidth]] string="%s\n%s\n%s"%(sLine1,sLine2,sLine3) Treiber.O_DisplayDB.ftestModeText(1,sForeGround,sBackGround,26,"%s\n\n%s"%(Treiber.sHeadline[1],string)) pass def setSelectLeft(self,sText,sForeGround=None,sBackGround=None): # Übersetzen sText = Treiber.O_sysLang.GetGuiText(sText) Treiber.sTextSelectA=sText[0:16] if sForeGround == None: sForeGround=Treiber.sColorWhite if sBackGround == None: sBackGround=Treiber.sColorRed Treiber.O_DisplayDB.ftestModeText(2,sForeGround,sBackGround,20,Treiber.sTextSelectA) pass def setSelectRight(self,sText,sForeGround=None,sBackGround=None): # Übersetzen sText = Treiber.O_sysLang.GetGuiText(sText) Treiber.sTextSelectC=sText[0:16] if sForeGround == None: sForeGround=Treiber.sColorWhite if sBackGround == None: sBackGround=Treiber.sColorRed Treiber.O_DisplayDB.ftestModeText(4,sForeGround,sBackGround,20,Treiber.sTextSelectC) pass def setSelectMiddle(self,sText,sForeGround=None,sBackGround=None): # Übersetzen sText = Treiber.O_sysLang.GetGuiText(sText) Treiber.sTextSelectB=sText[0:16] if sForeGround == None: sForeGround=Treiber.sColorWhite if sBackGround == None: sBackGround=Treiber.sColorRed Treiber.O_DisplayDB.ftestModeText(3,sForeGround,sBackGround,20,Treiber.sTextSelectB) pass def setSelectLP(self,sText,sForeGround=None,sBackGround=None): sListe = Treiber.O_sysLang.GetGuiText(sText).split("\n",2) if len(sListe) < 3: sListe = Treiber.O_sysLang.GetGuiText(sText).split(" ",2) if len(sListe) > 0: self.setSelectLeft(sListe[0],sForeGround,sBackGround) if len(sListe) > 1: self.setSelectMiddle(sListe[1],sForeGround,sBackGround) if len(sListe) > 2: self.setSelectRight(sListe[2],sForeGround,sBackGround) pass def setSelectKey(self,Key,sText,ForeGround=None,sBackGround=None): if Key == Treiber.KEY_A: self.setSelectMiddle(sText,ForeGround,sBackGround) elif Key == Treiber.KEY_LEFT: self.setSelectLeft(sText,ForeGround,sBackGround) elif Key == Treiber.KEY_RIGHT: self.setSelectRight(sText,ForeGround,sBackGround) else: pass def clrSelect(self): self.setSelectLeft("",None,Treiber.sColorBlack) self.setSelectRight("",None,Treiber.sColorBlack) self.setSelectMiddle("",None,Treiber.sColorBlack) pass def buildScreen(self): self.printf("buildScreen") pass def paintDisplay(self): self.printf("paintDisplay") self.buildScreen() pass def WriteFrameBuffer(self,cByte1,cByte2,iOffset,iLength): try: if self.fObjectFB == None: self.fObjectFB = open("/dev/fb0","wb") i_array = (ctypes.c_int16*iLength)() int16_value=ctypes.c_int16((cByte2<<8) + cByte1) for i in range (0,iLength): i_array[i]=int16_value self.fObjectFB.seek(iOffset) self.fObjectFB.write(i_array) self.fObjectFB.flush() return if self.fObjectFB == None: self.fObjectFB = open("/dev/fb0","wb") sfb = "%c%c"%(chr(cByte1),chr(cByte2)) if iLength > 1: for i in range (0,iLength-1): sfb = sfb + ("%c%c"%(chr(cByte1),chr(cByte2))) self.fObjectFB.seek(iOffset) self.fObjectFB.write(sfb) self.fObjectFB.flush() except EnvironmentError,e: print "Display.WriteFrameBuffer()", e return False pass def CloseFrameBuffer(self): try: if (self.fObjectFB != None ): self.fObjectFB.close() self.fObjectFB=None return True except EnvironmentError,e: print "Display.WriteFrameBuffer()", e return False pass def OpenFrameBuffer(self,iNrfb): try: if self.fObjectFB.closed: self.fObjectFB = open("/dev/fb%1i"%(iNrfb),"wb") return True except EnvironmentError,e: print "Display.WriteFrameBuffer()", e return False pass def printf(self,string): if Treiber.stout: print string pass