diff -r 4ecc2f3690f4 -r 4864f7f01e1d objdictgen/nodelist.py --- a/objdictgen/nodelist.py Tue Jul 17 18:20:50 2007 +0200 +++ b/objdictgen/nodelist.py Sat Jul 21 10:39:25 2007 +0200 @@ -29,25 +29,30 @@ import eds_utils import os, shutil - #------------------------------------------------------------------------------- # Definition of NodeList Object #------------------------------------------------------------------------------- - """ Class recording a node list for a CANOpen network. """ class NodeList: - def __init__(self, manager): + def __init__(self, manager, netname = ""): self.Root = "" self.Manager = manager - self.NetworkName = "" + self.NetworkName = netname self.SlaveNodes = {} self.EDSNodes = {} self.CurrentSelected = None + self.Changed = False + + def HasChanged(self): + return self.Changed or not self.Manager.CurrentIsSaved() + + def ForceChanged(self, changed): + self.Changed = changed def GetNetworkName(self): return self.NetworkName @@ -80,7 +85,7 @@ def GetCurrentSelected(self): return self.CurrentSelected - def LoadProject(self, root): + def LoadProject(self, root, netname = None): self.SlaveNodes = {} self.EDSNodes = {} @@ -98,20 +103,22 @@ if result != None: return result - result = self.LoadMasterNode() + result = self.LoadMasterNode(netname) if result != None: return result - result = self.LoadSlaveNodes() + result = self.LoadSlaveNodes(netname) if result != None: return result - - def SaveProject(self): - result = self.SaveMasterNode() + + self.NetworkName = netname + + def SaveProject(self, netname = None): + result = self.SaveMasterNode(netname) if result != None: return result - result = self.SaveNodeList() + result = self.SaveNodeList(netname) if result != None: return result @@ -137,6 +144,7 @@ if eds in self.EDSNodes.keys(): slave = {"Name" : nodeName, "EDS" : eds, "Node" : self.EDSNodes[eds]} self.SlaveNodes[nodeID] = slave + self.Changed = True return None else: return "\"%s\" EDS file is not available"%eds @@ -144,47 +152,71 @@ def RemoveSlaveNode(self, index): if index in self.SlaveNodes.keys(): self.SlaveNodes.pop(index) + OnCloseProjectMenu return None else: return "Node with \"0x%2.2X\" ID doesn't exist" - def LoadMasterNode(self): - masterpath = os.path.join(self.Root, "master.od") + def LoadMasterNode(self, netname = None): + if netname: + masterpath = os.path.join(self.Root, "%s_master.od"%netname) + else: + masterpath = os.path.join(self.Root, "master.od") if os.path.isfile(masterpath): self.Manager.OpenFileInCurrent(masterpath) else: self.Manager.CreateNewNode("MasterNode", 0x00, "master", "", "None", "", "heartbeat", ["DS302"]) return None - def SaveMasterNode(self): - masterpath = os.path.join(self.Root, "master.od") + def SaveMasterNode(self, netname = None): + if netname: + masterpath = os.path.join(self.Root, "%s_master.od"%netname) + else: + masterpath = os.path.join(self.Root, "master.od") if self.Manager.SaveCurrentInFile(masterpath): return None else: return "Fail to save Master Node" - def LoadSlaveNodes(self): + def LoadSlaveNodes(self, netname = None): cpjpath = os.path.join(self.Root, "nodelist.cpj") if os.path.isfile(cpjpath): try: networks = eds_utils.ParseCPJFile(cpjpath) - if len(networks) > 0: - self.NetworkName = networks[0]["Name"] - for nodeid, node in networks[0]["Nodes"].items(): + network = None + if netname: + for net in networks: + if net["Name"] == netname: + network = net + self.NetworkName = netname + elif len(networks) > 0: + network = networks[0] + self.NetworkName = network["Name"] + if network: + for nodeid, node in network["Nodes"].items(): if node["Present"] == 1: result = self.AddSlaveNode(node["Name"], nodeid, node["DCFName"]) if result != None: - return result + return result + self.Changed = False except SyntaxError, message: return "Unable to load CPJ file\n%s"%message return None - def SaveNodeList(self): - cpjpath = os.path.join(self.Root, "nodelist.cpj") - content = eds_utils.GenerateCPJContent(self) - file = open(cpjpath, "w") - file.write(content) - file.close() + def SaveNodeList(self, netname = None): + try: + cpjpath = os.path.join(self.Root, "nodelist.cpj") + content = eds_utils.GenerateCPJContent(self) + if netname: + file = open(cpjpath, "a") + else: + file = open(cpjpath, "w") + file.write(content) + file.close() + self.Changed = False + return None + except: + return "Fail to save node list" def GetSlaveNodeEntry(self, nodeid, index, subindex = None): if nodeid in self.SlaveNodes.keys(): @@ -233,6 +265,16 @@ return node.GetEntryInfos(index) return None + def GetSubentryInfos(self, index, subindex): + if self.CurrentSelected != None: + if self.CurrentSelected == 0: + return self.Manager.GetSubentryInfos(index, subindex) + else: + node = self.SlaveNodes[self.CurrentSelected]["Node"] + if node: + return node.GetSubentryInfos(index, subindex) + return None + def GetCurrentValidIndexes(self, min, max): if self.CurrentSelected != None: if self.CurrentSelected == 0: @@ -252,27 +294,29 @@ def GetCurrentEntryValues(self, index): if self.CurrentSelected != None: node = self.SlaveNodes[self.CurrentSelected]["Node"] - node.SetNodeID(self.CurrentSelected) if node: return self.Manager.GetNodeEntryValues(node, index) else: print "Can't find node" return [], [] - + if __name__ == "__main__": from nodemanager import * import os, sys, shutil manager = NodeManager(sys.path[0]) + nodelist = NodeList(manager) - #result = nodelist.LoadProject("/home/deobox/beremiz/test_nodelist") - result = nodelist.LoadProject("/home/deobox/Desktop/TestMapping") + + result = nodelist.LoadProject("/home/laurent/test_nodelist") if result != None: print result else: print "MasterNode :" manager.CurrentNode.Print() + print for nodeid, node in nodelist.SlaveNodes.items(): print "SlaveNode name=%s id=0x%2.2X :"%(node["Name"], nodeid) node["Node"].Print() - + print +