#! /usr/env/python #-------------------------------------------------------------------------------- """ Application: Dialog_Vio for DAQ_96_Gui VME IO Dialog for the Graphical User Interface to the DAQ_96 Control Program """ #-------------------------------------------------------------------------------- #-------------------------------------------------------------------------------- import string from Tkinter import * import Pmw from MultiShell import updateComboBox from MultiShell import updateIntVar from MultiShell import updateIntVarStr from Print_Utils import printLine from Misc_Utils import RegAddrString from Xml_Utils import CreateXmlCommand from Xml_Utils import AppendCommentField from Xml_Utils import RetrieveXmlAttr from Misc_Constants import eOk, eError #-------------------------------------------------------------------------------- #-------------------------------------------------------------------------------- class Dialog_Vio : def __init__ ( self, MShell, FrameNum ) : self.MShell = MShell self.VioFrame = FrameNum # printLine ( "Dialog", 'Frame #%d is "%s"' % ( FrameNum, MShell.frameName[FrameNum] ) ) #-------------------------------------------------------------------------------- def createInterface(self): MShell = self.MShell MShell.addFieldLabel ( nFrame = self.VioFrame, labelName = 'Access: VME IO', column = 1, columnspan = 5, width = 35, row = MShell.nextFieldRow() ) self.VioVmeAddr_box = \ MShell.addFieldCombo ( nFrame = self.VioFrame, labelName ="VME Addr", helpMessage ="VME Address", statusMessage="VME Address", initValue ="0x 0000 0000", width = 12 ) MShell.addFieldLabel ( nFrame = self.VioFrame, labelName = "Address Space", column = 1, row = MShell.nextFieldRow() ) VioAddrSpaceFrame = \ MShell.addFieldFrame ( nFrame = self.VioFrame, labelName = "AS Frame for Vio", column = 2, columnspan = 5, row = MShell.currentFieldRow() ) self.VioAddrSpace_var = IntVar() self.VioAddrSpace_var.set(0) MShell.addFieldRadioB ( frame = VioAddrSpaceFrame, labelName ="A32", row = 0, column = 0, value = 0, variable = self.VioAddrSpace_var ) MShell.addFieldRadioB ( frame = VioAddrSpaceFrame, labelName ="A24", row = 0, column = 1, value = 1, variable = self.VioAddrSpace_var ) MShell.addFieldRadioB ( frame = VioAddrSpaceFrame, labelName ="A16", row = 0, column = 2, value = 2, variable = self.VioAddrSpace_var ) self.VioDataSize_var = IntVar() self.VioDataSize_var.set(1) MShell.addFieldRadioB ( frame = VioAddrSpaceFrame, labelName ="D32", row = 1, column = 0, value = 0, variable = self.VioDataSize_var ) MShell.addFieldRadioB ( frame = VioAddrSpaceFrame, labelName ="D16", row = 1, column = 1, value = 1, variable = self.VioDataSize_var ) MShell.addFieldRadioB ( frame = VioAddrSpaceFrame, labelName ="D8", row = 1, column = 2, value = 2, variable = self.VioDataSize_var ) MShell.addFieldLabel ( nFrame = self.VioFrame, labelName = "Address Modifier", column = 1, row = MShell.nextFieldRow() ) VioAddrModFrame = \ MShell.addFieldFrame ( nFrame = self.VioFrame, labelName = "AM Frame for Vio", column = 2, columnspan = 5, row = MShell.currentFieldRow() ) self.VioAccessPriv_var = IntVar() self.VioAccessPriv_var.set(0) MShell.addFieldRadioB ( frame = VioAddrModFrame, labelName ="Super", row = 0, column = 0, value = 0, variable = self.VioAccessPriv_var ) MShell.addFieldRadioB ( frame = VioAddrModFrame, labelName ="NonPriv", row = 0, column = 1, value = 1, variable = self.VioAccessPriv_var ) self.VioAccessType_var = IntVar() self.VioAccessType_var.set(1) MShell.addFieldRadioB ( frame = VioAddrModFrame, labelName ="Program", row = 1, column = 0, value = 0, variable = self.VioAccessType_var ) MShell.addFieldRadioB ( frame = VioAddrModFrame, labelName ="Data", row = 1, column = 1, value = 1, variable = self.VioAccessType_var ) MShell.addFieldLabel ( nFrame = self.VioFrame, labelName = "IO Method", column = 1, row = MShell.nextFieldRow() ) VioIoMethodFrame = \ MShell.addFieldFrame ( nFrame = self.VioFrame, labelName = "IM Frame for Vio", column = 2, columnspan = 5, row = MShell.currentFieldRow() ) self.VioIoMethod_var = IntVar() self.VioIoMethod_var.set(0) MShell.addFieldRadioB ( frame = VioIoMethodFrame, labelName ="Bit3 API", value = 0, variable = self.VioIoMethod_var ) MShell.addFieldRadioB ( frame = VioIoMethodFrame, labelName ="Memory Mapped", value = 1, variable = self.VioIoMethod_var ) self.VioDataOut_box = \ MShell.addFieldCombo ( nFrame = self.VioFrame, labelName ="Data Out", helpMessage ="Data Out", statusMessage="Data Out", initValue ="0", column = 1, width = 12 ) self.VioDataIn_box = \ MShell.addFieldEntry ( nFrame = self.VioFrame, labelName ="Data In", helpMessage ="Data In", statusMessage="Data In", initValue ="-", bg = 'gray80', column = 3, row = MShell.currentFieldRow(), width = 10 ) MShell.addFieldButton ( nFrame = self.VioFrame, labelName = 'Write Word', helpMessage = 'VME Write', statusMessage= 'VME Write', column = 2, gridSticky = N, row = MShell.nextFieldRow(), command = self.Vio_Vme_Write ) MShell.addFieldButton ( nFrame = self.VioFrame, labelName = 'Read Word', helpMessage = 'VME Read', statusMessage= 'VME Read', column = 3, columnspan = 2, gridSticky = N, row = MShell.currentFieldRow(), command = self.Vio_Vme_Read ) self.VioRepeatCnt_box = \ MShell.addFieldCombo ( nFrame = self.VioFrame, labelName ="Repeat Count", helpMessage ="IO Repeat Count", statusMessage="IO Repeat Count", initValue ="1", column = 1, width = 12 ) self.VioReply_box = \ MShell.addFieldEntry ( nFrame = self.VioFrame, labelName ="Reply", helpMessage ="Reply", statusMessage="Reply", initValue ="-", bg = 'gray80', columnspan = 3, font = ('Verdana',7), width = 43 ) #-------------------------------------------------------------------------------- def Vio_Vme_Read ( self, VmeAddress = None, AddrSpace = None, DataSize = None, AccessPriv = None, AccessType = None, IoMethod = None, RepeatCnt = None, Comment = None ) : VmeAddr_int = updateComboBox ( self.VioVmeAddr_box, VmeAddress ) AddrSpace_str = updateIntVarStr( self.VioAddrSpace_var, AddrSpace, [ "A32", "A24", "A16" ] ) DataSize_str = updateIntVarStr( self.VioDataSize_var, DataSize, [ "D32", "D16", "D8" ] ) AccessPriv_str = updateIntVarStr( self.VioAccessPriv_var, AccessPriv, [ "Super", "NonPriv" ] ) AccessType_str = updateIntVarStr( self.VioAccessType_var, AccessType, [ "Program", "Data" ] ) IoMethod_str = updateIntVarStr( self.VioIoMethod_var, IoMethod, [ "API", "MMAP" ] ) RepeatCnt_int = updateComboBox ( self.VioRepeatCnt_box, RepeatCnt ) guiCmdName = "Vio_ReadReg" xmlCmdDoc = CreateXmlCommand ( guiCmdName, { "REG" : { "ADDR" : str(VmeAddr_int), "ADDR_SPACE" : AddrSpace_str, "DATA_SIZE" : DataSize_str, "ACCESS_PRIV" : AccessPriv_str, "ACCESS_TYPE" : AccessType_str, "IO_METHOD" : IoMethod_str }, "DATA" : { "REPEAT_COUNT" : str(RepeatCnt_int) } } ) AppendCommentField ( xmlCmdDoc, Comment ) guiCmdReply = self.MShell.sendGuiComand ( xmlCmdDoc ) DataIn_str, \ Reply_Status = RetrieveXmlAttr ( CmdReply = guiCmdReply, CmdName = guiCmdName, EltAttrList = [ [ "DATA", "IN", self.VioDataIn_box ] ], ReplyBox = self.VioReply_box ) try : DataIn_int = eval ( DataIn_str ) except : DataIn_int = 0 if ( Reply_Status == eOk ) : printLine ( "Vio_Read", "Read %#06x = %5d @ %#010x" % ( DataIn_int, DataIn_int, VmeAddr_int ) ) else : printLine ( "Vio_Read", "*** Error Detected ***" ) return DataIn_int, Reply_Status #-------------------------------------------------------------------------------- def Vio_Vme_Write( self, DataOut = None, VmeAddress = None, AddrSpace = None, DataSize = None, AccessPriv = None, AccessType = None, IoMethod = None, RepeatCnt = None, Comment = None ) : VmeAddr_int = updateComboBox ( self.VioVmeAddr_box, VmeAddress ) DataOut_int = updateComboBox ( self.VioDataOut_box, DataOut ) AddrSpace_str = updateIntVarStr( self.VioAddrSpace_var, AddrSpace, [ "A32", "A24", "A16" ] ) DataSize_str = updateIntVarStr( self.VioDataSize_var, DataSize, [ "D32", "D16", "D8" ] ) AccessPriv_str = updateIntVarStr( self.VioAccessPriv_var, AccessPriv, [ "Super", "NonPriv" ] ) AccessType_str = updateIntVarStr( self.VioAccessType_var, AccessType, [ "Program", "Data" ] ) IoMethod_str = updateIntVarStr( self.VioIoMethod_var, IoMethod, [ "API", "MMAP" ] ) RepeatCnt_int = updateComboBox ( self.VioRepeatCnt_box, RepeatCnt ) printLine ( "Vio_Write", "Write %#06x = %5d @ %#010x" % ( DataOut_int, DataOut_int, VmeAddr_int ) ) guiCmdName = "Vio_WriteReg" xmlCmdDoc = CreateXmlCommand ( guiCmdName, { "REG" : { "ADDR" : str(VmeAddr_int), "ADDR_SPACE" : AddrSpace_str, "DATA_SIZE" : DataSize_str, "ACCESS_PRIV" : AccessPriv_str, "ACCESS_TYPE" : AccessType_str, "IO_METHOD" : IoMethod_str }, "DATA" : { "OUT" : str(DataOut_int), "REPEAT_COUNT" : str(RepeatCnt_int) } } ) AppendCommentField ( xmlCmdDoc, Comment ) guiCmdReply = self.MShell.sendGuiComand ( xmlCmdDoc ) DataIn_str, \ Reply_Status = RetrieveXmlAttr ( CmdReply = guiCmdReply, CmdName = guiCmdName, EltAttrList = [ [ "DATA", "IN", self.VioDataIn_box ] ], ReplyBox = self.VioReply_box ) try : DataIn_int = eval ( DataIn_str ) except : DataIn_int = 0 if ( Reply_Status == eOk ) : printLine ( "Vio_Write", "Read %#06x = %5d @ %#010x" % ( DataIn_int, DataIn_int, VmeAddr_int ) ) else : printLine ( "Vio_Write", "*** Error Detected ***" ) return DataIn_int, Reply_Status #--------------------------------------------------------------------------------