diff -r 2cb34a4ac65a -r 6b5a4c21e061 doc/doxygen/html/nodelist_8py-source.html --- a/doc/doxygen/html/nodelist_8py-source.html Tue Jun 05 17:34:33 2007 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,302 +0,0 @@ - - -CanFestival: /home/epimerde/documents/tc11/CanFestival-3/objdictgen/nodelist.py Source File - - - - -
-
-
-
-

/home/epimerde/documents/tc11/CanFestival-3/objdictgen/nodelist.py

Go to the documentation of this file.
00001 #!/usr/bin/env python
-00002 # -*- coding: utf-8 -*-
-00003 
-00004 #This file is part of CanFestival, a library implementing CanOpen Stack. 
-00005 #
-00006 #Copyright (C): Edouard TISSERANT, Francis DUPIN and Laurent BESSARD
-00007 #
-00008 #See COPYING file for copyrights details.
-00009 #
-00010 #This library is free software; you can redistribute it and/or
-00011 #modify it under the terms of the GNU Lesser General Public
-00012 #License as published by the Free Software Foundation; either
-00013 #version 2.1 of the License, or (at your option) any later version.
-00014 #
-00015 #This library is distributed in the hope that it will be useful,
-00016 #but WITHOUT ANY WARRANTY; without even the implied warranty of
-00017 #MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-00018 #Lesser General Public License for more details.
-00019 #
-00020 #You should have received a copy of the GNU Lesser General Public
-00021 #License along with this library; if not, write to the Free Software
-00022 #Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-00023 
-00024 from gnosis.xml.pickle import *
-00025 from gnosis.xml.pickle.util import setParanoia
-00026 setParanoia(0)
-00027 
-00028 from node import *
-00029 import eds_utils
-00030 import os, shutil
-00031 
-00032 #-------------------------------------------------------------------------------
-00033 #                          Definition of NodeList Object
-00034 #-------------------------------------------------------------------------------
-00035 
-00036 """
-00037 Class recording a node list for a CANOpen network.
-00038 """
-00039 
-00040 class NodeList:
-00041     
-00042     def __init__(self, manager):
-00043         self.RootRoot = ""
-00044         self.ManagerManager = manager
-00045         self.NetworkNameNetworkName = ""
-00046         self.SlaveNodesSlaveNodes = {}
-00047         self.EDSNodesEDSNodes = {}
-00048         self.CurrentSelectedCurrentSelected = None
-00049     
-00050     def GetNetworkName(self):
-00051         return self.NetworkNameNetworkName
-00052     
-00053     def SetNetworkName(self, name):
-00054         self.NetworkNameNetworkName = name
-00055     
-00056     def GetManager(self):
-00057         return self.ManagerManager
-00058     
-00059     def GetRoot(self):
-00060         return self.RootRoot
-00061     
-00062     def GetSlaveNumber(self):
-00063         return len(self.SlaveNodesSlaveNodes)
-00064     
-00065     def GetSlaveNames(self):
-00066         nodes = self.SlaveNodesSlaveNodes.keys()
-00067         nodes.sort()
-00068         return ["0x%2.2X %s"%(idx, self.SlaveNodesSlaveNodes[idx]["Name"]) for idx in nodes]
-00069     
-00070     def GetSlaveIDs(self):
-00071         nodes = self.SlaveNodesSlaveNodes.keys()
-00072         nodes.sort()
-00073         return nodes
-00074         
-00075     def SetCurrentSelected(self, selected):
-00076         self.CurrentSelectedCurrentSelected = selected
-00077         
-00078     def GetCurrentSelected(self):
-00079         return self.CurrentSelectedCurrentSelected
-00080             
-00081     def LoadProject(self, root):
-00082         self.SlaveNodesSlaveNodes = {}
-00083         self.EDSNodesEDSNodes = {}
-00084         
-00085         self.RootRoot = root
-00086         if not os.path.exists(self.RootRoot):
-00087             return "\"%s\" folder doesn't exist"%self.RootRoot
-00088         
-00089         self.EDSFolderEDSFolder = os.path.join(self.RootRoot, "eds")
-00090         if not os.path.exists(self.EDSFolderEDSFolder):
-00091             return "\"%s\" folder doesn't contain a \"eds\" folder"%self.RootRoot
-00092         
-00093         files = os.listdir(self.EDSFolderEDSFolder)
-00094         for file in files:
-00095             result = self.LoadEDSLoadEDS(file)
-00096             if result != None:
-00097                 return result
-00098                 
-00099         result = self.LoadMasterNodeLoadMasterNode()
-00100         if result != None:
-00101             return result
-00102             
-00103         result = self.LoadSlaveNodesLoadSlaveNodes()
-00104         if result != None:
-00105             return result
-00106     
-00107     def SaveProject(self):
-00108         result = self.SaveMasterNodeSaveMasterNode()
-00109         if result != None:
-00110             return result
-00111             
-00112         result = self.SaveNodeListSaveNodeList()
-00113         if result != None:
-00114             return result
-00115     
-00116     def ImportEDSFile(self, edspath):
-00117         dir, file = os.path.split(edspath)
-00118         eds = os.path.join(self.EDSFolderEDSFolder, file)
-00119         if os.path.isfile(eds):
-00120             return "EDS file already imported"
-00121         else:
-00122             shutil.copy(edspath, self.EDSFolderEDSFolder)
-00123             return self.LoadEDSLoadEDS(file)
-00124     
-00125     def LoadEDS(self, eds):
-00126         edspath = os.path.join(self.EDSFolderEDSFolder, eds)
-00127         node = eds_utils.GenerateNode(edspath, self.ManagerManager.ScriptDirectory)
-00128         if isinstance(node, Node):
-00129             self.EDSNodesEDSNodes[eds] = node
-00130             return None
-00131         else:
-00132             return node
-00133     
-00134     def AddSlaveNode(self, nodeName, nodeID, eds):
-00135         if eds in self.EDSNodesEDSNodes.keys():
-00136             slave = {"Name" : nodeName, "EDS" : eds, "Node" : self.EDSNodesEDSNodes[eds]}
-00137             self.SlaveNodesSlaveNodes[nodeID] = slave
-00138             return None
-00139         else:
-00140             return "\"%s\" EDS file is not available"%eds
-00141     
-00142     def RemoveSlaveNode(self, index):
-00143         if index in self.SlaveNodesSlaveNodes.keys():
-00144             self.SlaveNodesSlaveNodes.pop(index)
-00145             return None
-00146         else:
-00147             return "Node with \"0x%2.2X\" ID doesn't exist"
-00148     
-00149     def LoadMasterNode(self):
-00150         masterpath = os.path.join(self.RootRoot, "master.od")
-00151         if os.path.isfile(masterpath):
-00152             self.ManagerManager.OpenFileInCurrent(masterpath)
-00153         else:
-00154             self.ManagerManager.CreateNewNode("MasterNode", 0x00, "master", "", "None", "", "heartbeat", ["DS302"])
-00155         return None
-00156     
-00157     def SaveMasterNode(self):
-00158         masterpath = os.path.join(self.RootRoot, "master.od")
-00159         if self.ManagerManager.SaveCurrentInFile(masterpath):
-00160             return None
-00161         else:
-00162             return "Fail to save Master Node"
-00163     
-00164     def LoadSlaveNodes(self):
-00165         cpjpath = os.path.join(self.RootRoot, "nodelist.cpj")
-00166         if os.path.isfile(cpjpath):
-00167             try:
-00168                 networks = eds_utils.ParseCPJFile(cpjpath)
-00169                 if len(networks) > 0:
-00170                     self.NetworkNameNetworkName = networks[0]["Name"]
-00171                     for nodeid, node in networks[0]["Nodes"].items():
-00172                         if node["Present"] == 1:
-00173                             result = self.AddSlaveNodeAddSlaveNode(node["Name"], nodeid, node["DCFName"])
-00174                             if result != None:
-00175                                 return result
-00176             except SyntaxError, message:
-00177                 return "Unable to load CPJ file\n%s"%message
-00178         return None
-00179     
-00180     def SaveNodeList(self):
-00181         cpjpath = os.path.join(self.RootRoot, "nodelist.cpj")
-00182         content = eds_utils.GenerateCPJContent(self)
-00183         file = open(cpjpath, "w")
-00184         file.write(content)
-00185         file.close()
-00186     
-00187     def GetSlaveNodeEntry(self, nodeid, index, subindex = None):
-00188         if nodeid in self.SlaveNodesSlaveNodes.keys():
-00189             self.SlaveNodesSlaveNodes[nodeid]["Node"].SetNodeID(nodeid)
-00190             return self.SlaveNodesSlaveNodes[nodeid]["Node"].GetEntry(index, subindex)
-00191         else:
-00192             return "Node 0x%2.2X doesn't exist"%nodeid
-00193 
-00194     def GetMasterNodeEntry(self, index, subindex = None):
-00195         return self.ManagerManager.GetCurrentEntry(index, subindex)
-00196         
-00197     def SetMasterNodeEntry(self, index, subindex = None, value = None):
-00198         self.ManagerManager.SetCurrentEntry(index, subindex, value)
-00199     
-00200     def GetOrderNumber(self, nodeid):
-00201         nodeindexes = self.SlaveNodesSlaveNodes.keys()
-00202         nodeindexes.sort()
-00203         return nodeindexes.index(nodeid) + 1
-00204     
-00205     def GetNodeByOrder(self, order):
-00206         if order > 0:
-00207             nodeindexes = self.SlaveNodesSlaveNodes.keys()
-00208             nodeindexes.sort()
-00209             print nodeindexes
-00210             if order <= len(nodeindexes):
-00211                 return self.SlaveNodesSlaveNodes[nodeindexes[order - 1]]["Node"]
-00212         return None
-00213     
-00214     def IsCurrentEntry(self, index):
-00215         if self.CurrentSelectedCurrentSelected != None:
-00216             if self.CurrentSelectedCurrentSelected == 0:
-00217                 return self.ManagerManager.IsCurrentEntry(index)
-00218             else:
-00219                 node = self.SlaveNodesSlaveNodes[self.CurrentSelectedCurrentSelected]["Node"]
-00220                 if node:
-00221                     return node.IsEntry(index)
-00222         return False
-00223     
-00224     def GetEntryInfos(self, index):
-00225         if self.CurrentSelectedCurrentSelected != None:
-00226             if self.CurrentSelectedCurrentSelected == 0:
-00227                 return self.ManagerManager.GetEntryInfos(index)
-00228             else:
-00229                 node = self.SlaveNodesSlaveNodes[self.CurrentSelectedCurrentSelected]["Node"]
-00230                 if node:
-00231                     return node.GetEntryInfos(index)
-00232         return None
-00233 
-00234     def GetCurrentValidIndexes(self, min, max):
-00235         if self.CurrentSelectedCurrentSelected != None:
-00236             if self.CurrentSelectedCurrentSelected == 0:
-00237                 return self.ManagerManager.GetCurrentValidIndexes(min, max)
-00238             else:
-00239                 node = self.SlaveNodesSlaveNodes[self.CurrentSelectedCurrentSelected]["Node"]
-00240                 if node:
-00241                     validindexes = []
-00242                     for index in node.GetIndexes():
-00243                         if min <= index <= max:
-00244                             validindexes.append((node.GetEntryName(index), index))
-00245                     return validindexes
-00246                 else:
-00247                     print "Can't find node"
-00248         return []
-00249     
-00250     def GetCurrentEntryValues(self, index):
-00251         if self.CurrentSelectedCurrentSelected != None:
-00252             node = self.SlaveNodesSlaveNodes[self.CurrentSelectedCurrentSelected]["Node"]
-00253             if node:
-00254                 return self.ManagerManager.GetNodeEntryValues(node, index)
-00255             else:
-00256                 print "Can't find node"
-00257         return [], []
-00258     
-00259 if __name__ == "__main__":
-00260     from nodemanager import *
-00261     import os, sys, shutil
-00262     
-00263     manager = NodeManager(sys.path[0])
-00264     
-00265     nodelist = NodeList(manager)
-00266     
-00267     result = nodelist.LoadProject("/home/laurent/test_nodelist")
-00268     if result != None:
-00269         print result
-00270     else:
-00271         print "MasterNode :"
-00272         manager.CurrentNode.Print()
-00273         print 
-00274         for nodeid, node in nodelist.SlaveNodes.items():
-00275             print "SlaveNode name=%s id=0x%2.2X :"%(node["Name"], nodeid)
-00276             node["Node"].Print()
-00277             print
-00278 
-

Generated on Mon Jun 4 16:29:06 2007 for CanFestival by  - -doxygen 1.5.1
- -