#! /usr/env/python #-------------------------------------------------------------------------------- """ Application: Dialog_Cfg for DAQ_96_Gui Fpga Configuration 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 Print_Utils import printLine from Misc_Utils import RegAddrString from Misc_Constants import SlotNumMax from Site_Dependent import BitStreamDir from Xml_Utils import CreateXmlCommand from Xml_Utils import AppendCommentField from Xml_Utils import RetrieveXmlAttr from Misc_Constants import eOk, eError #-------------------------------------------------------------------------------- #-------------------------------------------------------------------------------- class Dialog_Cfg : def __init__ ( self, MShell, FrameNum ) : self.MShell = MShell self.CfgFrame = FrameNum # printLine ( "Dialog", 'Frame #%d is "%s"' % ( FrameNum, MShell.frameName[FrameNum] ) ) #-------------------------------------------------------------------------------- def createInterface(self): MShell = self.MShell MShell.addFieldLabel ( nFrame = self.CfgFrame, labelName = 'Access: Configure FPGA', column = 1, columnspan = 3, height = 3, width = 35, row = MShell.nextFieldRow() ) # MShell.addFieldLabel ( nFrame = self.CfgFrame, # labelName = "VI Mst/Slv", # column = 1, # row = MShell.nextFieldRow() ) # CfgCrateMasterFrame = \ # MShell.addFieldFrame ( nFrame = self.CfgFrame, # labelName = "VI Frame for Cfg", # column = 2, # columnspan = 5, # row = MShell.currentFieldRow() ) self.CfgMasterNum_var = IntVar() self.CfgMasterNum_var.set(0) # MShell.addFieldRadioB ( frame = CfgCrateMasterFrame, # labelName ="M#0", # value = 0, # variable = self.CfgMasterNum_var ) # MShell.addFieldRadioB ( frame = CfgCrateMasterFrame, # labelName ="#1", # value = 1, # variable = self.CfgMasterNum_var ) self.CfgSlaveNum_var = IntVar() self.CfgSlaveNum_var.set(0) # MShell.addFieldRadioB ( frame = CfgCrateMasterFrame, # labelName ="S#0", # value = 0, # variable = self.CfgSlaveNum_var ) # MShell.addFieldRadioB ( frame = CfgCrateMasterFrame, # labelName ="#1", # value = 1, # variable = self.CfgSlaveNum_var ) # MShell.addFieldRadioB ( frame = CfgCrateMasterFrame, # labelName ="#2", # value = 2, # variable = self.CfgSlaveNum_var ) # MShell.addFieldRadioB ( frame = CfgCrateMasterFrame, # labelName ="#3", # value = 3, # variable = self.CfgSlaveNum_var ) self.CfgSlotNum_box = \ MShell.addFieldCombo ( nFrame = self.CfgFrame, labelName ="Slot Num", helpMessage ="Slot Num", statusMessage="Slot Num", initValue ="0", width = 10 ) MShell.addFieldLabel ( nFrame = self.CfgFrame, labelName = "FPGA Num", column = 1, row = MShell.nextFieldRow() ) CfgFpgaMaskFrame = \ MShell.addFieldFrame ( nFrame = self.CfgFrame, labelName = "FPGA Msk Cfg", column = 2, columnspan = 3, row = MShell.currentFieldRow() ) self.CfgFpgaMask_var = IntVar() self.CfgFpgaMask_var.set(3) MShell.addFieldRadioB ( frame = CfgFpgaMaskFrame, labelName ="Fpga#0", value = 1, variable = self.CfgFpgaMask_var ) MShell.addFieldRadioB ( frame = CfgFpgaMaskFrame, labelName ="Fpga#1", value = 2, variable = self.CfgFpgaMask_var ) MShell.addFieldRadioB ( frame = CfgFpgaMaskFrame, labelName ="both", value = 3, variable = self.CfgFpgaMask_var ) self.CfgBitStream = \ MShell.addFieldCombo ( nFrame = self.CfgFrame, labelName ="BitStream", helpMessage ="BitStream File", statusMessage="BitStream File", columnspan = 3, initValue = BitStreamDir, width = 35 ) MShell.addFieldButton ( nFrame = self.CfgFrame, labelName = 'Send Request', helpMessage = 'Send Request', statusMessage= 'Send Request', column = 2, row = MShell.nextFieldRow(), command = self.Cfg_Config_FPGA ) MShell.addFieldButton ( nFrame = self.CfgFrame, labelName ="Locate...", helpMessage ="Find BitStream File", statusMessage="Find BitStream File", column = 3, row = MShell.currentFieldRow(), command = lambda: MShell.Find_File( ComboBox=self.CfgBitStream) ) self.CfgReply_box = \ MShell.addFieldEntry ( nFrame = self.CfgFrame, labelName ="Reply", helpMessage ="Reply", statusMessage="Reply", initValue ="-", bg = 'gray80', columnspan = 3, font = ('Verdana',7), width = 43 ) MShell.addFieldLabel ( nFrame = self.CfgFrame, labelName = '---------------------------------------------', column = 2, columnspan = 5, gridSticky = W, row = MShell.nextFieldRow() ) MShell.addFieldLabel ( nFrame = self.CfgFrame, labelName = 'Full Config', column = 1, row = MShell.nextFieldRow() ) MShell.addFieldButton ( nFrame = self.CfgFrame, labelName = 'Execute: Configure_FPGAs_Adf.dcf', helpMessage = 'Execute File Configure_FPGAs_Adf.dcf', statusMessage= 'Execute File Configure_FPGAs_Adf.dcf', column = 2, columnspan = 5, gridSticky = W, row = MShell.currentFieldRow(), command = lambda : MShell.Dialog_Com.Com_Exec_CfgFile ( "%CONFIG%Configure_FPGAs_Adf.dcf" ) ) #-------------------------------------------------------------------------------- def Cfg_Config_FPGA ( self, MasterNum = None, SlaveNum = None, SlotNum = None, FpgaMask = None, BitStream = None, Comment = None ) : MasterNum_int = updateIntVar ( self.CfgMasterNum_var, MasterNum ) SlaveNum_int = updateIntVar ( self.CfgSlaveNum_var, SlaveNum ) SlotNum_int = updateComboBox ( self.CfgSlotNum_box, SlotNum ) FpgaMask_int = updateIntVar ( self.CfgFpgaMask_var, FpgaMask ) updateComboBox ( self.CfgBitStream, BitStream ) BitStream_str = self.CfgBitStream.get() printLine ( "Cfg_Fpga", "Config %s FpgaMask %#02x " % ( RegAddrString ( MasterNum_int, SlaveNum_int, SlotNum_int ), FpgaMask_int ) ) printLine ( "Cfg_Fpga", "using bitstream %s" % BitStream_str ) guiCmdName = "Cfg_ConfigFPGA" xmlCmdDoc = CreateXmlCommand ( guiCmdName, { "ADF" : { "MASTER" : str(MasterNum_int), "SLAVE" : str(SlaveNum_int), "SLOT" : str(SlotNum_int) }, "FPGA" : { "MASK" : str(FpgaMask_int) }, "FILE" : { "NAME" : BitStream_str } } ) AppendCommentField ( xmlCmdDoc, Comment ) guiCmdReply = self.MShell.sendGuiComand ( xmlCmdDoc ) Reply_Status = RetrieveXmlAttr ( CmdReply = guiCmdReply, CmdName = guiCmdName, ReplyBox = self.CfgReply_box ) if ( Reply_Status != eOk ) : printLine ( "Cfg_Fpga", "*** Error Detected ***" ) return Reply_Status #-------------------------------------------------------------------------------- def Cfg_ConfigCrate ( self, MasterNum = None, SlaveNum = None, FpgaMask = None, BitStream = None, Comment = None ) : Reply_Status = eOk MasterNum_int = updateIntVar ( self.CfgMasterNum_var, MasterNum ) SlaveNum_int = updateIntVar ( self.CfgSlaveNum_var, SlaveNum ) # SlotNum will be sensed FpgaMask_int = updateIntVar ( self.CfgFpgaMask_var, FpgaMask ) updateComboBox ( self.CfgBitStream, BitStream ) BitStream_str = self.CfgBitStream.get() for SlotNum in range(2,SlotNumMax+1) : # i.e. slots 2,...21 if ( self.MShell.Dialog_Rio.Rio_ProbeSlot( MasterNum = MasterNum_int, SlaveNum = SlaveNum_int, SlotNum = SlotNum ) == "Yes" ) : Partial_Status = \ self.Cfg_Config_FPGA ( MasterNum = MasterNum_int, SlaveNum = SlaveNum_int, SlotNum = SlotNum, FpgaMask = FpgaMask_int, BitStream = BitStream_str ) if ( Partial_Status != eOk ) : Reply_Status = eError return Reply_Status