plugins/canfestival/canfestival.py
author etisserant
Mon, 23 Jun 2008 17:52:21 +0200
changeset 163 482ca562d414
parent 159 1c5710e8c941
child 166 121b18748de0
permissions -rw-r--r--
Support for extern pointer for located variables + Preliminary slave code (broken)
163
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
     1
import os, sys
20
d3cb5020997b Beremiz plugins definitions.
etisserant
parents: 18
diff changeset
     2
base_folder = os.path.split(sys.path[0])[0]
49
45dc6a944ab6 On the long wat towards generated code comilation...
etisserant
parents: 47
diff changeset
     3
CanFestivalPath = os.path.join(base_folder, "CanFestival-3")
45dc6a944ab6 On the long wat towards generated code comilation...
etisserant
parents: 47
diff changeset
     4
sys.path.append(os.path.join(CanFestivalPath, "objdictgen"))
20
d3cb5020997b Beremiz plugins definitions.
etisserant
parents: 18
diff changeset
     5
11
75ae893d5eed Adding plugin support in Beremiz
lbessard
parents:
diff changeset
     6
from nodelist import NodeList
75ae893d5eed Adding plugin support in Beremiz
lbessard
parents:
diff changeset
     7
from nodemanager import NodeManager
75ae893d5eed Adding plugin support in Beremiz
lbessard
parents:
diff changeset
     8
import config_utils, gen_cfile
12
a1f9e514f708 plugin framework organization being defined
etisserant
parents: 11
diff changeset
     9
from networkedit import networkedit
77
7de69369373e Adding file with generated master in build folder and a button for editing it with objdictedit
lbessard
parents: 65
diff changeset
    10
from objdictedit import objdictedit
49
45dc6a944ab6 On the long wat towards generated code comilation...
etisserant
parents: 47
diff changeset
    11
import canfestival_config
95
646a44a12e2a add GetParamsAttributes to canfestival.py to allow dll list in beremiz
greg
parents: 86
diff changeset
    12
from plugger import PlugTemplate
11
75ae893d5eed Adding plugin support in Beremiz
lbessard
parents:
diff changeset
    13
77
7de69369373e Adding file with generated master in build folder and a button for editing it with objdictedit
lbessard
parents: 65
diff changeset
    14
from gnosis.xml.pickle import *
7de69369373e Adding file with generated master in build folder and a button for editing it with objdictedit
lbessard
parents: 65
diff changeset
    15
from gnosis.xml.pickle.util import setParanoia
7de69369373e Adding file with generated master in build folder and a button for editing it with objdictedit
lbessard
parents: 65
diff changeset
    16
setParanoia(0)
7de69369373e Adding file with generated master in build folder and a button for editing it with objdictedit
lbessard
parents: 65
diff changeset
    17
163
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
    18
#--------------------------------------------------
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
    19
#                    SLAVE
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
    20
#--------------------------------------------------
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
    21
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
    22
class _NodeEdit(objdictedit):
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
    23
    " Overload some of CanFestival Node Editor methods "
12
a1f9e514f708 plugin framework organization being defined
etisserant
parents: 11
diff changeset
    24
    def OnCloseFrame(self, event):
13
f1f0edbeb313 More precise design for plugins.... to be continued...
etisserant
parents: 12
diff changeset
    25
        " Do reset _NodeListPlug.View when closed"
f1f0edbeb313 More precise design for plugins.... to be continued...
etisserant
parents: 12
diff changeset
    26
        self._onclose()
12
a1f9e514f708 plugin framework organization being defined
etisserant
parents: 11
diff changeset
    27
        event.Skip()
a1f9e514f708 plugin framework organization being defined
etisserant
parents: 11
diff changeset
    28
163
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
    29
class _SlavePlug(NodeManager):
12
a1f9e514f708 plugin framework organization being defined
etisserant
parents: 11
diff changeset
    30
    XSD = """<?xml version="1.0" encoding="ISO-8859-1" ?>
a1f9e514f708 plugin framework organization being defined
etisserant
parents: 11
diff changeset
    31
    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
a1f9e514f708 plugin framework organization being defined
etisserant
parents: 11
diff changeset
    32
      <xsd:element name="CanFestivalNode">
a1f9e514f708 plugin framework organization being defined
etisserant
parents: 11
diff changeset
    33
        <xsd:complexType>
86
f0a9d74e3b26 Adding support for the new version of xmlclass
lbessard
parents: 82
diff changeset
    34
          <xsd:attribute name="CAN_Device" type="xsd:string" use="required"/>
f0a9d74e3b26 Adding support for the new version of xmlclass
lbessard
parents: 82
diff changeset
    35
          <xsd:attribute name="CAN_Baudrate" type="xsd:string" use="required"/>
f0a9d74e3b26 Adding support for the new version of xmlclass
lbessard
parents: 82
diff changeset
    36
          <xsd:attribute name="NodeId" type="xsd:string" use="required"/>
12
a1f9e514f708 plugin framework organization being defined
etisserant
parents: 11
diff changeset
    37
        </xsd:complexType>
a1f9e514f708 plugin framework organization being defined
etisserant
parents: 11
diff changeset
    38
      </xsd:element>
a1f9e514f708 plugin framework organization being defined
etisserant
parents: 11
diff changeset
    39
    </xsd:schema>
a1f9e514f708 plugin framework organization being defined
etisserant
parents: 11
diff changeset
    40
    """
a1f9e514f708 plugin framework organization being defined
etisserant
parents: 11
diff changeset
    41
163
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
    42
    def GetSlaveODPath(self):
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
    43
        os.path.join(self.PlugPath(), 'slave.od')
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
    44
17
ee8cb104dbe0 First commit of Beremiz new version with plugin support
lbessard
parents: 15
diff changeset
    45
    def __init__(self):
23
e007d9d466d7 minor fixes
etisserant
parents: 22
diff changeset
    46
        # TODO change netname when name change
163
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
    47
        NodeManager.__init__(self)
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
    48
        odfilepath = self.GetSlaveODPath()
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
    49
        if(os.path.isfile(odfilepath)):
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
    50
            self.OpenFileInCurrent(odfilepath)
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
    51
        else:
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
    52
            self.CreateNewNode("SlaveNode",  # Name - will be changed at build time
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
    53
                               0x00,         # NodeID - will be changed at build time
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
    54
                               "slave",      # Type
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
    55
                               "",           # description 
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
    56
                               "None",       # profile
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
    57
                               "",           # prfile filepath
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
    58
                               "heartbeat",  # NMT
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
    59
                               [])           # options
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
    60
            
13
f1f0edbeb313 More precise design for plugins.... to be continued...
etisserant
parents: 12
diff changeset
    61
    _View = None
18
0fac6d621a24 Base build mechanism layout.
etisserant
parents: 17
diff changeset
    62
    def _OpenView(self, logger):
13
f1f0edbeb313 More precise design for plugins.... to be continued...
etisserant
parents: 12
diff changeset
    63
        if not self._View:
f1f0edbeb313 More precise design for plugins.... to be continued...
etisserant
parents: 12
diff changeset
    64
            def _onclose():
30
ea685658b388 Fixed onclose bug
etisserant
parents: 26
diff changeset
    65
                self._View = None
25
fa7503684c28 Adding support for using Networkedit et PLCOpenEditor in Beremiz
lbessard
parents: 24
diff changeset
    66
            def _onsave():
fa7503684c28 Adding support for using Networkedit et PLCOpenEditor in Beremiz
lbessard
parents: 24
diff changeset
    67
                self.GetPlugRoot().SaveProject()
163
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
    68
            self._View = _NodeEdit(self.GetPlugRoot().AppFrame, self)
23
e007d9d466d7 minor fixes
etisserant
parents: 22
diff changeset
    69
            # TODO redefine BusId when IEC channel change
e007d9d466d7 minor fixes
etisserant
parents: 22
diff changeset
    70
            self._View.SetBusId(self.GetCurrentLocation())
13
f1f0edbeb313 More precise design for plugins.... to be continued...
etisserant
parents: 12
diff changeset
    71
            self._View._onclose = _onclose
25
fa7503684c28 Adding support for using Networkedit et PLCOpenEditor in Beremiz
lbessard
parents: 24
diff changeset
    72
            self._View._onsave = _onsave
23
e007d9d466d7 minor fixes
etisserant
parents: 22
diff changeset
    73
            self._View.Show()
e007d9d466d7 minor fixes
etisserant
parents: 22
diff changeset
    74
77
7de69369373e Adding file with generated master in build folder and a button for editing it with objdictedit
lbessard
parents: 65
diff changeset
    75
    def _ShowMasterGenerated(self, logger):
7de69369373e Adding file with generated master in build folder and a button for editing it with objdictedit
lbessard
parents: 65
diff changeset
    76
        buildpath = self._getBuildPath()
7de69369373e Adding file with generated master in build folder and a button for editing it with objdictedit
lbessard
parents: 65
diff changeset
    77
        # Eventually create build dir
7de69369373e Adding file with generated master in build folder and a button for editing it with objdictedit
lbessard
parents: 65
diff changeset
    78
        if not os.path.exists(buildpath):
7de69369373e Adding file with generated master in build folder and a button for editing it with objdictedit
lbessard
parents: 65
diff changeset
    79
            logger.write_error("Error: No PLC built\n")
7de69369373e Adding file with generated master in build folder and a button for editing it with objdictedit
lbessard
parents: 65
diff changeset
    80
            return
7de69369373e Adding file with generated master in build folder and a button for editing it with objdictedit
lbessard
parents: 65
diff changeset
    81
        
7de69369373e Adding file with generated master in build folder and a button for editing it with objdictedit
lbessard
parents: 65
diff changeset
    82
        masterpath = os.path.join(buildpath, "MasterGenerated.od")
7de69369373e Adding file with generated master in build folder and a button for editing it with objdictedit
lbessard
parents: 65
diff changeset
    83
        if not os.path.exists(masterpath):
7de69369373e Adding file with generated master in build folder and a button for editing it with objdictedit
lbessard
parents: 65
diff changeset
    84
            logger.write_error("Error: No Master generated\n")
7de69369373e Adding file with generated master in build folder and a button for editing it with objdictedit
lbessard
parents: 65
diff changeset
    85
            return
7de69369373e Adding file with generated master in build folder and a button for editing it with objdictedit
lbessard
parents: 65
diff changeset
    86
        
7de69369373e Adding file with generated master in build folder and a button for editing it with objdictedit
lbessard
parents: 65
diff changeset
    87
        new_dialog = objdictedit(None, [masterpath])
7de69369373e Adding file with generated master in build folder and a button for editing it with objdictedit
lbessard
parents: 65
diff changeset
    88
        new_dialog.Show()
7de69369373e Adding file with generated master in build folder and a button for editing it with objdictedit
lbessard
parents: 65
diff changeset
    89
65
e55d6faee9d1 Adding icons in Beremiz GUI
lbessard
parents: 59
diff changeset
    90
    PluginMethods = [
82
d7b4dd1f543f Beremiz layout improved for wx2.8 by inserting all control in TreeCtrl
lbessard
parents: 77
diff changeset
    91
        {"bitmap" : os.path.join("images", "NetworkEdit"),
65
e55d6faee9d1 Adding icons in Beremiz GUI
lbessard
parents: 59
diff changeset
    92
         "name" : "Edit network", 
e55d6faee9d1 Adding icons in Beremiz GUI
lbessard
parents: 59
diff changeset
    93
         "tooltip" : "Edit CanOpen Network with NetworkEdit",
105
434aed8dc58d Added ability to override plugin methods with arbitrary python code (methods.py) when loading plugins
etisserant
parents: 95
diff changeset
    94
         "method" : "_OpenView"},
77
7de69369373e Adding file with generated master in build folder and a button for editing it with objdictedit
lbessard
parents: 65
diff changeset
    95
        {"name" : "Show Master", 
7de69369373e Adding file with generated master in build folder and a button for editing it with objdictedit
lbessard
parents: 65
diff changeset
    96
         "tooltip" : "Show Master generated by config_utils",
105
434aed8dc58d Added ability to override plugin methods with arbitrary python code (methods.py) when loading plugins
etisserant
parents: 95
diff changeset
    97
         "method" : "_ShowMasterGenerated"}
65
e55d6faee9d1 Adding icons in Beremiz GUI
lbessard
parents: 59
diff changeset
    98
    ]
13
f1f0edbeb313 More precise design for plugins.... to be continued...
etisserant
parents: 12
diff changeset
    99
f1f0edbeb313 More precise design for plugins.... to be continued...
etisserant
parents: 12
diff changeset
   100
    def OnPlugClose(self):
f1f0edbeb313 More precise design for plugins.... to be continued...
etisserant
parents: 12
diff changeset
   101
        if self._View:
f1f0edbeb313 More precise design for plugins.... to be continued...
etisserant
parents: 12
diff changeset
   102
            self._View.Close()
f1f0edbeb313 More precise design for plugins.... to be continued...
etisserant
parents: 12
diff changeset
   103
f1f0edbeb313 More precise design for plugins.... to be continued...
etisserant
parents: 12
diff changeset
   104
    def PlugTestModified(self):
118
185d0d371ea4 Refuse close if PLC running.
etisserant
parents: 106
diff changeset
   105
        return self.ChangesToSave or self.HasChanged()
12
a1f9e514f708 plugin framework organization being defined
etisserant
parents: 11
diff changeset
   106
        
17
ee8cb104dbe0 First commit of Beremiz new version with plugin support
lbessard
parents: 15
diff changeset
   107
    def OnPlugSave(self):
32
4bdc888e634b Fixed CanOpen network renaming
etisserant
parents: 30
diff changeset
   108
        self.SetRoot(self.PlugPath())
11
75ae893d5eed Adding plugin support in Beremiz
lbessard
parents:
diff changeset
   109
        self.SaveProject()
12
a1f9e514f708 plugin framework organization being defined
etisserant
parents: 11
diff changeset
   110
        return True
a1f9e514f708 plugin framework organization being defined
etisserant
parents: 11
diff changeset
   111
24
585d5b387b6a Working CanOpen OD generation
etisserant
parents: 23
diff changeset
   112
    def PlugGenerate_C(self, buildpath, locations, logger):
12
a1f9e514f708 plugin framework organization being defined
etisserant
parents: 11
diff changeset
   113
        """
15
7a473efc4530 More precise design for plugins.... to be continued...
etisserant
parents: 13
diff changeset
   114
        Generate C code
7a473efc4530 More precise design for plugins.... to be continued...
etisserant
parents: 13
diff changeset
   115
        @param current_location: Tupple containing plugin IEC location : %I0.0.4.5 => (0,0,4,5)
7a473efc4530 More precise design for plugins.... to be continued...
etisserant
parents: 13
diff changeset
   116
        @param locations: List of complete variables locations \
22
9a0c535c3272 Pleliminary build process -- C code generation
etisserant
parents: 20
diff changeset
   117
            [{"IEC_TYPE" : the IEC type (i.e. "INT", "STRING", ...)
9a0c535c3272 Pleliminary build process -- C code generation
etisserant
parents: 20
diff changeset
   118
            "NAME" : name of the variable (generally "__IW0_1_2" style)
9a0c535c3272 Pleliminary build process -- C code generation
etisserant
parents: 20
diff changeset
   119
            "DIR" : direction "Q","I" or "M"
9a0c535c3272 Pleliminary build process -- C code generation
etisserant
parents: 20
diff changeset
   120
            "SIZE" : size "X", "B", "W", "D", "L"
9a0c535c3272 Pleliminary build process -- C code generation
etisserant
parents: 20
diff changeset
   121
            "LOC" : tuple of interger for IEC location (0,1,2,...)
9a0c535c3272 Pleliminary build process -- C code generation
etisserant
parents: 20
diff changeset
   122
            }, ...]
9a0c535c3272 Pleliminary build process -- C code generation
etisserant
parents: 20
diff changeset
   123
        @return: [(C_file_name, CFLAGS),...] , LDFLAGS_TO_APPEND
12
a1f9e514f708 plugin framework organization being defined
etisserant
parents: 11
diff changeset
   124
        """
24
585d5b387b6a Working CanOpen OD generation
etisserant
parents: 23
diff changeset
   125
        current_location = self.GetCurrentLocation()
22
9a0c535c3272 Pleliminary build process -- C code generation
etisserant
parents: 20
diff changeset
   126
        # define a unique name for the generated C file
15
7a473efc4530 More precise design for plugins.... to be continued...
etisserant
parents: 13
diff changeset
   127
        prefix = "_".join(map(lambda x:str(x), current_location))
49
45dc6a944ab6 On the long wat towards generated code comilation...
etisserant
parents: 47
diff changeset
   128
        Gen_OD_path = os.path.join(buildpath, "OD_%s.c"%prefix )
22
9a0c535c3272 Pleliminary build process -- C code generation
etisserant
parents: 20
diff changeset
   129
        # Create a new copy of the model with DCF loaded with PDO mappings for desired location
57
3b53f9a509d9 Basic CANOpen master node test compiles and run.
etisserant
parents: 52
diff changeset
   130
        master = config_utils.GenerateConciseDCF(locations, current_location, self, self.CanFestivalNode.getSync_TPDOs(),"OD_%s"%prefix)
15
7a473efc4530 More precise design for plugins.... to be continued...
etisserant
parents: 13
diff changeset
   131
        res = gen_cfile.GenerateFile(Gen_OD_path, master)
7a473efc4530 More precise design for plugins.... to be continued...
etisserant
parents: 13
diff changeset
   132
        if res :
7a473efc4530 More precise design for plugins.... to be continued...
etisserant
parents: 13
diff changeset
   133
            raise Exception, res
7a473efc4530 More precise design for plugins.... to be continued...
etisserant
parents: 13
diff changeset
   134
        
77
7de69369373e Adding file with generated master in build folder and a button for editing it with objdictedit
lbessard
parents: 65
diff changeset
   135
        file = open(os.path.join(buildpath, "MasterGenerated.od"), "w")
7de69369373e Adding file with generated master in build folder and a button for editing it with objdictedit
lbessard
parents: 65
diff changeset
   136
        dump(master, file)
7de69369373e Adding file with generated master in build folder and a button for editing it with objdictedit
lbessard
parents: 65
diff changeset
   137
        file.close()
7de69369373e Adding file with generated master in build folder and a button for editing it with objdictedit
lbessard
parents: 65
diff changeset
   138
        
52
eaffcd0a2f03 Added CanFestival "main" runtime part, initialize, all nodes, and start CF timer loop
etisserant
parents: 49
diff changeset
   139
        return [(Gen_OD_path,canfestival_config.getCFLAGS(CanFestivalPath))],"",False
163
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   140
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   141
#--------------------------------------------------
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   142
#                    MASTER
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   143
#--------------------------------------------------
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   144
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   145
class _NetworkEdit(networkedit):
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   146
    " Overload some of CanFestival Network Editor methods "
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   147
    def OnCloseFrame(self, event):
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   148
        " Do reset _NodeListPlug.View when closed"
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   149
        self._onclose()
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   150
        event.Skip()
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   151
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   152
class _NodeListPlug(NodeList):
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   153
    XSD = """<?xml version="1.0" encoding="ISO-8859-1" ?>
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   154
    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   155
      <xsd:element name="CanFestivalNode">
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   156
        <xsd:complexType>
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   157
          <xsd:attribute name="CAN_Device" type="xsd:string" use="required"/>
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   158
          <xsd:attribute name="CAN_Baudrate" type="xsd:string" use="required"/>
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   159
          <xsd:attribute name="NodeId" type="xsd:string" use="required"/>
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   160
          <xsd:attribute name="Sync_TPDOs" type="xsd:boolean" use="optional" default="true"/>
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   161
        </xsd:complexType>
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   162
      </xsd:element>
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   163
    </xsd:schema>
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   164
    """
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   165
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   166
    def __init__(self):
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   167
        manager = NodeManager()
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   168
        # TODO change netname when name change
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   169
        NodeList.__init__(self, manager, self.BaseParams.getName())
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   170
        self.LoadProject(self.PlugPath())
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   171
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   172
    _View = None
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   173
    def _OpenView(self, logger):
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   174
        if not self._View:
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   175
            def _onclose():
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   176
                self._View = None
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   177
            def _onsave():
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   178
                self.GetPlugRoot().SaveProject()
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   179
            self._View = _NetworkEdit(self.GetPlugRoot().AppFrame, self)
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   180
            # TODO redefine BusId when IEC channel change
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   181
            self._View.SetBusId(self.GetCurrentLocation())
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   182
            self._View._onclose = _onclose
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   183
            self._View._onsave = _onsave
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   184
            self._View.Show()
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   185
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   186
    def _ShowMasterGenerated(self, logger):
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   187
        buildpath = self._getBuildPath()
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   188
        # Eventually create build dir
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   189
        if not os.path.exists(buildpath):
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   190
            logger.write_error("Error: No PLC built\n")
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   191
            return
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   192
        
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   193
        masterpath = os.path.join(buildpath, "MasterGenerated.od")
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   194
        if not os.path.exists(masterpath):
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   195
            logger.write_error("Error: No Master generated\n")
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   196
            return
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   197
        
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   198
        new_dialog = objdictedit(None, [masterpath])
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   199
        new_dialog.Show()
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   200
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   201
    PluginMethods = [
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   202
        {"bitmap" : os.path.join("images", "NetworkEdit"),
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   203
         "name" : "Edit network", 
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   204
         "tooltip" : "Edit CanOpen Network with NetworkEdit",
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   205
         "method" : "_OpenView"},
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   206
        {"name" : "Show Master", 
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   207
         "tooltip" : "Show Master generated by config_utils",
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   208
         "method" : "_ShowMasterGenerated"}
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   209
    ]
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   210
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   211
    def OnPlugClose(self):
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   212
        if self._View:
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   213
            self._View.Close()
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   214
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   215
    def PlugTestModified(self):
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   216
        return self.ChangesToSave or self.HasChanged()
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   217
        
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   218
    def OnPlugSave(self):
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   219
        self.SetRoot(self.PlugPath())
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   220
        self.SaveProject()
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   221
        return True
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   222
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   223
    def PlugGenerate_C(self, buildpath, locations, logger):
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   224
        """
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   225
        Generate C code
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   226
        @param current_location: Tupple containing plugin IEC location : %I0.0.4.5 => (0,0,4,5)
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   227
        @param locations: List of complete variables locations \
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   228
            [{"IEC_TYPE" : the IEC type (i.e. "INT", "STRING", ...)
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   229
            "NAME" : name of the variable (generally "__IW0_1_2" style)
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   230
            "DIR" : direction "Q","I" or "M"
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   231
            "SIZE" : size "X", "B", "W", "D", "L"
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   232
            "LOC" : tuple of interger for IEC location (0,1,2,...)
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   233
            }, ...]
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   234
        @return: [(C_file_name, CFLAGS),...] , LDFLAGS_TO_APPEND
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   235
        """
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   236
        current_location = self.GetCurrentLocation()
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   237
        # define a unique name for the generated C file
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   238
        prefix = "_".join(map(lambda x:str(x), current_location))
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   239
        Gen_OD_path = os.path.join(buildpath, "OD_%s.c"%prefix )
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   240
        # Create a new copy of the model with DCF loaded with PDO mappings for desired location
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   241
        master, pointers = config_utils.GenerateConciseDCF(locations, current_location, self, self.CanFestivalNode.getSync_TPDOs(),"OD_%s"%prefix)
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   242
        res = gen_cfile.GenerateFile(Gen_OD_path, master, pointers)
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   243
        if res :
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   244
            raise Exception, res
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   245
        
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   246
        file = open(os.path.join(buildpath, "MasterGenerated.od"), "w")
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   247
        dump(master, file)
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   248
        file.close()
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   249
        
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   250
        return [(Gen_OD_path,canfestival_config.getCFLAGS(CanFestivalPath))],"",False
12
a1f9e514f708 plugin framework organization being defined
etisserant
parents: 11
diff changeset
   251
    
13
f1f0edbeb313 More precise design for plugins.... to be continued...
etisserant
parents: 12
diff changeset
   252
class RootClass:
12
a1f9e514f708 plugin framework organization being defined
etisserant
parents: 11
diff changeset
   253
    XSD = """<?xml version="1.0" encoding="ISO-8859-1" ?>
a1f9e514f708 plugin framework organization being defined
etisserant
parents: 11
diff changeset
   254
    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
a1f9e514f708 plugin framework organization being defined
etisserant
parents: 11
diff changeset
   255
      <xsd:element name="CanFestivalInstance">
a1f9e514f708 plugin framework organization being defined
etisserant
parents: 11
diff changeset
   256
        <xsd:complexType>
86
f0a9d74e3b26 Adding support for the new version of xmlclass
lbessard
parents: 82
diff changeset
   257
          <xsd:attribute name="CAN_Driver" type="xsd:string" use="required"/>
157
2e6d52c17cab add debug mode for CanFestival dll under windows
greg
parents: 118
diff changeset
   258
          <xsd:attribute name="Debug_mode" type="xsd:boolean" use="optional" default="false"/>
12
a1f9e514f708 plugin framework organization being defined
etisserant
parents: 11
diff changeset
   259
        </xsd:complexType>
a1f9e514f708 plugin framework organization being defined
etisserant
parents: 11
diff changeset
   260
      </xsd:element>
a1f9e514f708 plugin framework organization being defined
etisserant
parents: 11
diff changeset
   261
    </xsd:schema>
a1f9e514f708 plugin framework organization being defined
etisserant
parents: 11
diff changeset
   262
    """
163
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   263
    PlugChildsTypes = [("CanOpenNode",_NodeListPlug, "CanOpen Master"),("CanOpenSlave",_SlavePlug, "CanOpen Slave")]
95
646a44a12e2a add GetParamsAttributes to canfestival.py to allow dll list in beremiz
greg
parents: 86
diff changeset
   264
    def GetParamsAttributes(self, path = None):
646a44a12e2a add GetParamsAttributes to canfestival.py to allow dll list in beremiz
greg
parents: 86
diff changeset
   265
        infos = PlugTemplate.GetParamsAttributes(self, path = None)
646a44a12e2a add GetParamsAttributes to canfestival.py to allow dll list in beremiz
greg
parents: 86
diff changeset
   266
        for element in infos:
163
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   267
            if element["name"] == "CanFestivalInstance":
95
646a44a12e2a add GetParamsAttributes to canfestival.py to allow dll list in beremiz
greg
parents: 86
diff changeset
   268
                for child in element["children"]:
646a44a12e2a add GetParamsAttributes to canfestival.py to allow dll list in beremiz
greg
parents: 86
diff changeset
   269
                    if child["name"] == "CAN_Driver":
646a44a12e2a add GetParamsAttributes to canfestival.py to allow dll list in beremiz
greg
parents: 86
diff changeset
   270
                        DLL_LIST= getattr(canfestival_config,"DLL_LIST",None)
646a44a12e2a add GetParamsAttributes to canfestival.py to allow dll list in beremiz
greg
parents: 86
diff changeset
   271
                        if DLL_LIST is not None:
646a44a12e2a add GetParamsAttributes to canfestival.py to allow dll list in beremiz
greg
parents: 86
diff changeset
   272
                            child["type"] = DLL_LIST
646a44a12e2a add GetParamsAttributes to canfestival.py to allow dll list in beremiz
greg
parents: 86
diff changeset
   273
                        return infos    
646a44a12e2a add GetParamsAttributes to canfestival.py to allow dll list in beremiz
greg
parents: 86
diff changeset
   274
        return infos
11
75ae893d5eed Adding plugin support in Beremiz
lbessard
parents:
diff changeset
   275
24
585d5b387b6a Working CanOpen OD generation
etisserant
parents: 23
diff changeset
   276
    def PlugGenerate_C(self, buildpath, locations, logger):
52
eaffcd0a2f03 Added CanFestival "main" runtime part, initialize, all nodes, and start CF timer loop
etisserant
parents: 49
diff changeset
   277
        
eaffcd0a2f03 Added CanFestival "main" runtime part, initialize, all nodes, and start CF timer loop
etisserant
parents: 49
diff changeset
   278
        format_dict = {"locstr" : "_".join(map(str,self.GetCurrentLocation())),
eaffcd0a2f03 Added CanFestival "main" runtime part, initialize, all nodes, and start CF timer loop
etisserant
parents: 49
diff changeset
   279
                       "candriver" : self.CanFestivalInstance.getCAN_Driver(),
eaffcd0a2f03 Added CanFestival "main" runtime part, initialize, all nodes, and start CF timer loop
etisserant
parents: 49
diff changeset
   280
                       "nodes_includes" : "",
eaffcd0a2f03 Added CanFestival "main" runtime part, initialize, all nodes, and start CF timer loop
etisserant
parents: 49
diff changeset
   281
                       "board_decls" : "",
59
b6ff896ff58b Enhancements in CanFestival plugin. Now PLC with CanFestival plugin compiles and run, exchanging CanOpen PDOs
etisserant
parents: 57
diff changeset
   282
                       "nodes_declare" : "",
52
eaffcd0a2f03 Added CanFestival "main" runtime part, initialize, all nodes, and start CF timer loop
etisserant
parents: 49
diff changeset
   283
                       "nodes_init" : "",
eaffcd0a2f03 Added CanFestival "main" runtime part, initialize, all nodes, and start CF timer loop
etisserant
parents: 49
diff changeset
   284
                       "nodes_open" : "",
57
3b53f9a509d9 Basic CANOpen master node test compiles and run.
etisserant
parents: 52
diff changeset
   285
                       "nodes_close" : "",
3b53f9a509d9 Basic CANOpen master node test compiles and run.
etisserant
parents: 52
diff changeset
   286
                       "nodes_send_sync" : "",
3b53f9a509d9 Basic CANOpen master node test compiles and run.
etisserant
parents: 52
diff changeset
   287
                       "nodes_proceed_sync" : ""}
52
eaffcd0a2f03 Added CanFestival "main" runtime part, initialize, all nodes, and start CF timer loop
etisserant
parents: 49
diff changeset
   288
        for child in self.IECSortedChilds():
eaffcd0a2f03 Added CanFestival "main" runtime part, initialize, all nodes, and start CF timer loop
etisserant
parents: 49
diff changeset
   289
            childlocstr = "_".join(map(str,child.GetCurrentLocation()))
eaffcd0a2f03 Added CanFestival "main" runtime part, initialize, all nodes, and start CF timer loop
etisserant
parents: 49
diff changeset
   290
            nodename = "OD_%s" % childlocstr
eaffcd0a2f03 Added CanFestival "main" runtime part, initialize, all nodes, and start CF timer loop
etisserant
parents: 49
diff changeset
   291
eaffcd0a2f03 Added CanFestival "main" runtime part, initialize, all nodes, and start CF timer loop
etisserant
parents: 49
diff changeset
   292
            format_dict["nodes_includes"] += '#include "%s.h"\n'%(nodename)
eaffcd0a2f03 Added CanFestival "main" runtime part, initialize, all nodes, and start CF timer loop
etisserant
parents: 49
diff changeset
   293
            format_dict["board_decls"] += 'BOARD_DECL(%s, "%s", "%s")\n'%(
eaffcd0a2f03 Added CanFestival "main" runtime part, initialize, all nodes, and start CF timer loop
etisserant
parents: 49
diff changeset
   294
                   nodename,
eaffcd0a2f03 Added CanFestival "main" runtime part, initialize, all nodes, and start CF timer loop
etisserant
parents: 49
diff changeset
   295
                   child.CanFestivalNode.getCAN_Device(),
eaffcd0a2f03 Added CanFestival "main" runtime part, initialize, all nodes, and start CF timer loop
etisserant
parents: 49
diff changeset
   296
                   child.CanFestivalNode.getCAN_Baudrate())
59
b6ff896ff58b Enhancements in CanFestival plugin. Now PLC with CanFestival plugin compiles and run, exchanging CanOpen PDOs
etisserant
parents: 57
diff changeset
   297
            format_dict["nodes_declare"] += 'NODE_DECLARE(%s, %s)\n    '%(
b6ff896ff58b Enhancements in CanFestival plugin. Now PLC with CanFestival plugin compiles and run, exchanging CanOpen PDOs
etisserant
parents: 57
diff changeset
   298
                   nodename,
b6ff896ff58b Enhancements in CanFestival plugin. Now PLC with CanFestival plugin compiles and run, exchanging CanOpen PDOs
etisserant
parents: 57
diff changeset
   299
                   child.CanFestivalNode.getNodeId())
57
3b53f9a509d9 Basic CANOpen master node test compiles and run.
etisserant
parents: 52
diff changeset
   300
            format_dict["nodes_init"] += 'NODE_INIT(%s, %s)\n    '%(
52
eaffcd0a2f03 Added CanFestival "main" runtime part, initialize, all nodes, and start CF timer loop
etisserant
parents: 49
diff changeset
   301
                   nodename,
eaffcd0a2f03 Added CanFestival "main" runtime part, initialize, all nodes, and start CF timer loop
etisserant
parents: 49
diff changeset
   302
                   child.CanFestivalNode.getNodeId())
57
3b53f9a509d9 Basic CANOpen master node test compiles and run.
etisserant
parents: 52
diff changeset
   303
            format_dict["nodes_open"] += 'NODE_OPEN(%s)\n    '%(nodename)
3b53f9a509d9 Basic CANOpen master node test compiles and run.
etisserant
parents: 52
diff changeset
   304
            format_dict["nodes_close"] += 'NODE_CLOSE(%s)\n    '%(nodename)
3b53f9a509d9 Basic CANOpen master node test compiles and run.
etisserant
parents: 52
diff changeset
   305
            format_dict["nodes_send_sync"] += 'NODE_SEND_SYNC(%s)\n    '%(nodename)
3b53f9a509d9 Basic CANOpen master node test compiles and run.
etisserant
parents: 52
diff changeset
   306
            format_dict["nodes_proceed_sync"] += 'NODE_PROCEED_SYNC(%s)\n    '%(nodename)
157
2e6d52c17cab add debug mode for CanFestival dll under windows
greg
parents: 118
diff changeset
   307
        
163
482ca562d414 Support for extern pointer for located variables + Preliminary slave code (broken)
etisserant
parents: 159
diff changeset
   308
        if sys.platform == 'win32':
157
2e6d52c17cab add debug mode for CanFestival dll under windows
greg
parents: 118
diff changeset
   309
            if self.CanFestivalInstance.getDebug_mode() and os.path.isfile(os.path.join("%s"%(format_dict["candriver"] + '_DEBUG.dll'))):
2e6d52c17cab add debug mode for CanFestival dll under windows
greg
parents: 118
diff changeset
   310
                    format_dict["candriver"] += '_DEBUG.dll'
2e6d52c17cab add debug mode for CanFestival dll under windows
greg
parents: 118
diff changeset
   311
            else:
2e6d52c17cab add debug mode for CanFestival dll under windows
greg
parents: 118
diff changeset
   312
                format_dict["candriver"] += '.dll'
2e6d52c17cab add debug mode for CanFestival dll under windows
greg
parents: 118
diff changeset
   313
        
52
eaffcd0a2f03 Added CanFestival "main" runtime part, initialize, all nodes, and start CF timer loop
etisserant
parents: 49
diff changeset
   314
        filename = os.path.join(os.path.split(__file__)[0],"cf_runtime.c")
eaffcd0a2f03 Added CanFestival "main" runtime part, initialize, all nodes, and start CF timer loop
etisserant
parents: 49
diff changeset
   315
        cf_main = open(filename).read() % format_dict
eaffcd0a2f03 Added CanFestival "main" runtime part, initialize, all nodes, and start CF timer loop
etisserant
parents: 49
diff changeset
   316
        cf_main_path = os.path.join(buildpath, "CF_%(locstr)s.c"%format_dict)
eaffcd0a2f03 Added CanFestival "main" runtime part, initialize, all nodes, and start CF timer loop
etisserant
parents: 49
diff changeset
   317
        f = open(cf_main_path,'w')
eaffcd0a2f03 Added CanFestival "main" runtime part, initialize, all nodes, and start CF timer loop
etisserant
parents: 49
diff changeset
   318
        f.write(cf_main)
eaffcd0a2f03 Added CanFestival "main" runtime part, initialize, all nodes, and start CF timer loop
etisserant
parents: 49
diff changeset
   319
        f.close()
eaffcd0a2f03 Added CanFestival "main" runtime part, initialize, all nodes, and start CF timer loop
etisserant
parents: 49
diff changeset
   320
        
eaffcd0a2f03 Added CanFestival "main" runtime part, initialize, all nodes, and start CF timer loop
etisserant
parents: 49
diff changeset
   321
        return [(cf_main_path, canfestival_config.getCFLAGS(CanFestivalPath))],canfestival_config.getLDFLAGS(CanFestivalPath), True
11
75ae893d5eed Adding plugin support in Beremiz
lbessard
parents:
diff changeset
   322
15
7a473efc4530 More precise design for plugins.... to be continued...
etisserant
parents: 13
diff changeset
   323