Fixed CanFestival extension, adding CANOpen entries in BrowseLocationsDialog
authorLaurent Bessard
Tue, 26 Mar 2013 23:24:30 +0100
changeset 1003 de812e258213
parent 1002 15c05ba95df4
child 1004 bf3b6998f7b6
Fixed CanFestival extension, adding CANOpen entries in BrowseLocationsDialog
canfestival/NetworkEditor.py
canfestival/canfestival.py
--- a/canfestival/NetworkEditor.py	Tue Mar 26 12:44:44 2013 +0900
+++ b/canfestival/NetworkEditor.py	Tue Mar 26 23:24:30 2013 +0100
@@ -2,7 +2,7 @@
 import wx
 
 from subindextable import EditingPanel
-from networkedit import NetworkEditorTemplate
+from networkeditortemplate import NetworkEditorTemplate
 from editors.ConfTreeNodeEditor import ConfTreeNodeEditor
 
 [ID_NETWORKEDITOR, 
--- a/canfestival/canfestival.py	Tue Mar 26 12:44:44 2013 +0900
+++ b/canfestival/canfestival.py	Tue Mar 26 23:24:30 2013 +0100
@@ -9,12 +9,12 @@
 from nodelist import NodeList
 from nodemanager import NodeManager
 import config_utils, gen_cfile, eds_utils
-from networkedit import networkedit
-from objdictedit import objdictedit
 import canfestival_config as local_canfestival_config
 from ConfigTreeNode import ConfigTreeNode
 from commondialogs import CreateNodeDialog
-
+from subindextable import IECTypeConversion, SizeConversion
+
+from PLCControler import LOCATION_CONFNODE, LOCATION_MODULE, LOCATION_GROUP, LOCATION_VAR_INPUT, LOCATION_VAR_OUTPUT, LOCATION_VAR_MEMORY
 from SlaveEditor import SlaveEditor, MasterViewer
 from NetworkEditor import NetworkEditor
 
@@ -26,6 +26,32 @@
 AddCatalog(os.path.join(CanFestivalPath, "objdictgen", "locale"))
 
 #--------------------------------------------------
+#              Location Tree Helper
+#--------------------------------------------------
+
+def GetSlaveLocationTree(slave_node, current_location, name):
+    entries = []
+    for index, subindex, size, entry_name in slave_node.GetMapVariableList():
+        subentry_infos = slave_node.GetSubentryInfos(index, subindex)
+        typeinfos = slave_node.GetEntryInfos(subentry_infos["type"])
+        if typeinfos:
+            entries.append({
+                "name": "0x%4.4x-0x%2.2x: %s" % (index, subindex, entry_name),
+                "type": LOCATION_VAR_MEMORY,
+                "size": size,
+                "IEC_type": IECTypeConversion.get(typeinfos["name"]),
+                "var_name": "%s_%4.4x_%2.2x" % ("_".join(name.split()), index, subindex),
+                "location": "%s%s"%(SizeConversion[size], ".".join(map(str, current_location + 
+                                                                                (index, subindex)))),
+                "description": "",
+                "children": []})
+    return  {"name": name,
+             "type": LOCATION_CONFNODE,
+             "location": ".".join([str(i) for i in current_location]) + ".x",
+             "children": entries
+    }
+
+#--------------------------------------------------
 #                    SLAVE
 #--------------------------------------------------
 
@@ -139,7 +165,13 @@
             self._View.SetBusId(self.GetCurrentLocation())
         
         return result
-        
+    
+    def GetVariableLocationTree(self):
+        current_location = self.GetCurrentLocation()
+        return GetSlaveLocationTree(self.CurrentNode, 
+                                    self.GetCurrentLocation(), 
+                                    self.BaseParams.getName())
+    
     def CTNGenerate_C(self, buildpath, locations):
         """
         Generate C code
@@ -277,7 +309,23 @@
         if refresh_network and self._View is not None:
             wx.CallAfter(self._View.RefreshBufferState)
         return value, refresh
-        
+    
+    def GetVariableLocationTree(self):
+        current_location = self.GetCurrentLocation()
+        nodeindexes = self.SlaveNodes.keys()
+        nodeindexes.sort()
+        return {"name": self.BaseParams.getName(),
+                 "type": LOCATION_CONFNODE,
+                 "location": self.GetFullIEC_Channel(),
+                 "children": [GetSlaveLocationTree(self.Manager.GetCurrentNodeCopy(),
+                                                   current_location,
+                                                   _("Local entries"))] + 
+                             [GetSlaveLocationTree(self.SlaveNodes[nodeid]["Node"], 
+                                                   current_location + (nodeid,), 
+                                                   self.SlaveNodes[nodeid]["Name"])
+                              for nodeid in nodeindexes]
+        }
+    
     _GeneratedMasterView = None
     def _ShowGeneratedMaster(self):
         self._OpenView("Generated master")