author | Edouard Tisserant |
Wed, 29 Jan 2014 00:38:23 +0100 | |
changeset 1392 | 7d295f013061 |
parent 1315 | ff14a66bbd12 |
child 1473 | 23045c351012 |
permissions | -rw-r--r-- |
1124
b1705000eba1
Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents:
1119
diff
changeset
|
1 |
|
145
94855f7b08a9
Improving c_ext plugin by adding an XML file format for saving C files and an graphical interface for editing this file
lbessard
parents:
137
diff
changeset
|
2 |
import os |
401
8106a853a7c7
Adding support for displaying plugins available variable into Beremiz plugin tree
laurent
parents:
361
diff
changeset
|
3 |
|
145
94855f7b08a9
Improving c_ext plugin by adding an XML file format for saving C files and an graphical interface for editing this file
lbessard
parents:
137
diff
changeset
|
4 |
from CFileEditor import CFileEditor |
1096
c9ace6a881c9
Fixed CFileEditor replacing folding panels by variable panel and STC
Laurent Bessard
parents:
1061
diff
changeset
|
5 |
from CodeFileTreeNode import CodeFile |
630
91b2ae63ea3d
Including external tools for editing plugin informations into Beremiz window
laurent
parents:
610
diff
changeset
|
6 |
|
1096
c9ace6a881c9
Fixed CFileEditor replacing folding panels by variable panel and STC
Laurent Bessard
parents:
1061
diff
changeset
|
7 |
class CFile(CodeFile): |
31 | 8 |
XSD = """<?xml version="1.0" encoding="ISO-8859-1" ?> |
9 |
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> |
|
145
94855f7b08a9
Improving c_ext plugin by adding an XML file format for saving C files and an graphical interface for editing this file
lbessard
parents:
137
diff
changeset
|
10 |
<xsd:element name="CExtension"> |
31 | 11 |
<xsd:complexType> |
45 | 12 |
<xsd:attribute name="CFLAGS" type="xsd:string" use="required"/> |
13 |
<xsd:attribute name="LDFLAGS" type="xsd:string" use="required"/> |
|
31 | 14 |
</xsd:complexType> |
15 |
</xsd:element> |
|
16 |
</xsd:schema> |
|
17 |
""" |
|
1124
b1705000eba1
Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents:
1119
diff
changeset
|
18 |
CODEFILE_NAME = "CFile" |
b1705000eba1
Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents:
1119
diff
changeset
|
19 |
SECTIONS_NAMES = [ |
b1705000eba1
Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents:
1119
diff
changeset
|
20 |
"includes", |
b1705000eba1
Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents:
1119
diff
changeset
|
21 |
"globals", |
b1705000eba1
Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents:
1119
diff
changeset
|
22 |
"initFunction", |
b1705000eba1
Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents:
1119
diff
changeset
|
23 |
"cleanUpFunction", |
b1705000eba1
Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents:
1119
diff
changeset
|
24 |
"retrieveFunction", |
b1705000eba1
Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents:
1119
diff
changeset
|
25 |
"publishFunction"] |
656
c1792dfc8c7e
Fixing bug integrated plugin editors not closed when removing corresponding plugin
laurent
parents:
651
diff
changeset
|
26 |
EditorType = CFileEditor |
c1792dfc8c7e
Fixing bug integrated plugin editors not closed when removing corresponding plugin
laurent
parents:
651
diff
changeset
|
27 |
|
781
cdc6393705ce
Adding support using plcopeneditor bitmap library for icon request
laurent
parents:
742
diff
changeset
|
28 |
def GetIconName(self): |
cdc6393705ce
Adding support using plcopeneditor bitmap library for icon request
laurent
parents:
742
diff
changeset
|
29 |
return "Cfile" |
738 | 30 |
|
1096
c9ace6a881c9
Fixed CFileEditor replacing folding panels by variable panel and STC
Laurent Bessard
parents:
1061
diff
changeset
|
31 |
def CodeFileName(self): |
718 | 32 |
return os.path.join(self.CTNPath(), "cfile.xml") |
145
94855f7b08a9
Improving c_ext plugin by adding an XML file format for saving C files and an graphical interface for editing this file
lbessard
parents:
137
diff
changeset
|
33 |
|
718 | 34 |
def CTNGenerate_C(self, buildpath, locations): |
31 | 35 |
""" |
36 |
Generate C code |
|
717 | 37 |
@param current_location: Tupple containing confnode IEC location : %I0.0.4.5 => (0,0,4,5) |
31 | 38 |
@param locations: List of complete variables locations \ |
39 |
[{"IEC_TYPE" : the IEC type (i.e. "INT", "STRING", ...) |
|
40 |
"NAME" : name of the variable (generally "__IW0_1_2" style) |
|
41 |
"DIR" : direction "Q","I" or "M" |
|
42 |
"SIZE" : size "X", "B", "W", "D", "L" |
|
43 |
"LOC" : tuple of interger for IEC location (0,1,2,...) |
|
44 |
}, ...] |
|
45 |
@return: [(C_file_name, CFLAGS),...] , LDFLAGS_TO_APPEND |
|
46 |
""" |
|
47 |
current_location = self.GetCurrentLocation() |
|
48 |
# define a unique name for the generated C file |
|
401
8106a853a7c7
Adding support for displaying plugins available variable into Beremiz plugin tree
laurent
parents:
361
diff
changeset
|
49 |
location_str = "_".join(map(str, current_location)) |
145
94855f7b08a9
Improving c_ext plugin by adding an XML file format for saving C files and an graphical interface for editing this file
lbessard
parents:
137
diff
changeset
|
50 |
|
717 | 51 |
text = "/* Code generated by Beremiz c_ext confnode */\n\n" |
1114 | 52 |
text += "#include <stdio.h>\n\n" |
145
94855f7b08a9
Improving c_ext plugin by adding an XML file format for saving C files and an graphical interface for editing this file
lbessard
parents:
137
diff
changeset
|
53 |
|
94855f7b08a9
Improving c_ext plugin by adding an XML file format for saving C files and an graphical interface for editing this file
lbessard
parents:
137
diff
changeset
|
54 |
# Adding includes |
94855f7b08a9
Improving c_ext plugin by adding an XML file format for saving C files and an graphical interface for editing this file
lbessard
parents:
137
diff
changeset
|
55 |
text += "/* User includes */\n" |
1315
ff14a66bbd12
Fixed Beremiz for working with new xmlclass support using lxml
Laurent Bessard
parents:
1124
diff
changeset
|
56 |
text += self.CodeFile.includes.getanyText().strip() |
145
94855f7b08a9
Improving c_ext plugin by adding an XML file format for saving C files and an graphical interface for editing this file
lbessard
parents:
137
diff
changeset
|
57 |
text += "\n" |
94855f7b08a9
Improving c_ext plugin by adding an XML file format for saving C files and an graphical interface for editing this file
lbessard
parents:
137
diff
changeset
|
58 |
|
1114 | 59 |
text += '#include "iec_types_all.h"\n\n' |
60 |
||
145
94855f7b08a9
Improving c_ext plugin by adding an XML file format for saving C files and an graphical interface for editing this file
lbessard
parents:
137
diff
changeset
|
61 |
# Adding variables |
1096
c9ace6a881c9
Fixed CFileEditor replacing folding panels by variable panel and STC
Laurent Bessard
parents:
1061
diff
changeset
|
62 |
config = self.GetCTRoot().GetProjectConfigNames()[0] |
145
94855f7b08a9
Improving c_ext plugin by adding an XML file format for saving C files and an graphical interface for editing this file
lbessard
parents:
137
diff
changeset
|
63 |
text += "/* User variables reference */\n" |
1096
c9ace6a881c9
Fixed CFileEditor replacing folding panels by variable panel and STC
Laurent Bessard
parents:
1061
diff
changeset
|
64 |
for variable in self.CodeFile.variables.variable: |
c9ace6a881c9
Fixed CFileEditor replacing folding panels by variable panel and STC
Laurent Bessard
parents:
1061
diff
changeset
|
65 |
var_infos = { |
c9ace6a881c9
Fixed CFileEditor replacing folding panels by variable panel and STC
Laurent Bessard
parents:
1061
diff
changeset
|
66 |
"name": variable.getname(), |
c9ace6a881c9
Fixed CFileEditor replacing folding panels by variable panel and STC
Laurent Bessard
parents:
1061
diff
changeset
|
67 |
"global": "%s__%s" % (config.upper(), |
c9ace6a881c9
Fixed CFileEditor replacing folding panels by variable panel and STC
Laurent Bessard
parents:
1061
diff
changeset
|
68 |
variable.getname().upper()), |
c9ace6a881c9
Fixed CFileEditor replacing folding panels by variable panel and STC
Laurent Bessard
parents:
1061
diff
changeset
|
69 |
"type": "__IEC_%s_t" % variable.gettype()} |
c9ace6a881c9
Fixed CFileEditor replacing folding panels by variable panel and STC
Laurent Bessard
parents:
1061
diff
changeset
|
70 |
text += "extern %(type)s %(global)s;\n" % var_infos |
c9ace6a881c9
Fixed CFileEditor replacing folding panels by variable panel and STC
Laurent Bessard
parents:
1061
diff
changeset
|
71 |
text += "#define %(name)s %(global)s.value\n" % var_infos |
145
94855f7b08a9
Improving c_ext plugin by adding an XML file format for saving C files and an graphical interface for editing this file
lbessard
parents:
137
diff
changeset
|
72 |
text += "\n" |
94855f7b08a9
Improving c_ext plugin by adding an XML file format for saving C files and an graphical interface for editing this file
lbessard
parents:
137
diff
changeset
|
73 |
|
94855f7b08a9
Improving c_ext plugin by adding an XML file format for saving C files and an graphical interface for editing this file
lbessard
parents:
137
diff
changeset
|
74 |
# Adding user global variables and routines |
94855f7b08a9
Improving c_ext plugin by adding an XML file format for saving C files and an graphical interface for editing this file
lbessard
parents:
137
diff
changeset
|
75 |
text += "/* User internal user variables and routines */\n" |
1315
ff14a66bbd12
Fixed Beremiz for working with new xmlclass support using lxml
Laurent Bessard
parents:
1124
diff
changeset
|
76 |
text += self.CodeFile.globals.getanyText().strip() |
1114 | 77 |
text += "\n" |
145
94855f7b08a9
Improving c_ext plugin by adding an XML file format for saving C files and an graphical interface for editing this file
lbessard
parents:
137
diff
changeset
|
78 |
|
717 | 79 |
# Adding Beremiz confnode functions |
80 |
text += "/* Beremiz confnode functions */\n" |
|
145
94855f7b08a9
Improving c_ext plugin by adding an XML file format for saving C files and an graphical interface for editing this file
lbessard
parents:
137
diff
changeset
|
81 |
text += "int __init_%s(int argc,char **argv)\n{\n"%location_str |
1315
ff14a66bbd12
Fixed Beremiz for working with new xmlclass support using lxml
Laurent Bessard
parents:
1124
diff
changeset
|
82 |
text += self.CodeFile.initFunction.getanyText().strip() |
1119 | 83 |
text += " return 0;\n}\n\n" |
145
94855f7b08a9
Improving c_ext plugin by adding an XML file format for saving C files and an graphical interface for editing this file
lbessard
parents:
137
diff
changeset
|
84 |
|
419 | 85 |
text += "void __cleanup_%s(void)\n{\n"%location_str |
1315
ff14a66bbd12
Fixed Beremiz for working with new xmlclass support using lxml
Laurent Bessard
parents:
1124
diff
changeset
|
86 |
text += self.CodeFile.cleanUpFunction.getanyText().strip() |
145
94855f7b08a9
Improving c_ext plugin by adding an XML file format for saving C files and an graphical interface for editing this file
lbessard
parents:
137
diff
changeset
|
87 |
text += "\n}\n\n" |
94855f7b08a9
Improving c_ext plugin by adding an XML file format for saving C files and an graphical interface for editing this file
lbessard
parents:
137
diff
changeset
|
88 |
|
419 | 89 |
text += "void __retrieve_%s(void)\n{\n"%location_str |
1315
ff14a66bbd12
Fixed Beremiz for working with new xmlclass support using lxml
Laurent Bessard
parents:
1124
diff
changeset
|
90 |
text += self.CodeFile.retrieveFunction.getanyText().strip() |
145
94855f7b08a9
Improving c_ext plugin by adding an XML file format for saving C files and an graphical interface for editing this file
lbessard
parents:
137
diff
changeset
|
91 |
text += "\n}\n\n" |
94855f7b08a9
Improving c_ext plugin by adding an XML file format for saving C files and an graphical interface for editing this file
lbessard
parents:
137
diff
changeset
|
92 |
|
419 | 93 |
text += "void __publish_%s(void)\n{\n"%location_str |
1315
ff14a66bbd12
Fixed Beremiz for working with new xmlclass support using lxml
Laurent Bessard
parents:
1124
diff
changeset
|
94 |
text += self.CodeFile.publishFunction.getanyText().strip() |
145
94855f7b08a9
Improving c_ext plugin by adding an XML file format for saving C files and an graphical interface for editing this file
lbessard
parents:
137
diff
changeset
|
95 |
text += "\n}\n\n" |
94855f7b08a9
Improving c_ext plugin by adding an XML file format for saving C files and an graphical interface for editing this file
lbessard
parents:
137
diff
changeset
|
96 |
|
94855f7b08a9
Improving c_ext plugin by adding an XML file format for saving C files and an graphical interface for editing this file
lbessard
parents:
137
diff
changeset
|
97 |
Gen_Cfile_path = os.path.join(buildpath, "CFile_%s.c"%location_str) |
94855f7b08a9
Improving c_ext plugin by adding an XML file format for saving C files and an graphical interface for editing this file
lbessard
parents:
137
diff
changeset
|
98 |
cfile = open(Gen_Cfile_path,'w') |
94855f7b08a9
Improving c_ext plugin by adding an XML file format for saving C files and an graphical interface for editing this file
lbessard
parents:
137
diff
changeset
|
99 |
cfile.write(text) |
94855f7b08a9
Improving c_ext plugin by adding an XML file format for saving C files and an graphical interface for editing this file
lbessard
parents:
137
diff
changeset
|
100 |
cfile.close() |
94855f7b08a9
Improving c_ext plugin by adding an XML file format for saving C files and an graphical interface for editing this file
lbessard
parents:
137
diff
changeset
|
101 |
|
718 | 102 |
matiec_flags = '"-I%s"'%os.path.abspath(self.GetCTRoot().GetIECLibPath()) |
145
94855f7b08a9
Improving c_ext plugin by adding an XML file format for saving C files and an graphical interface for editing this file
lbessard
parents:
137
diff
changeset
|
103 |
|
94855f7b08a9
Improving c_ext plugin by adding an XML file format for saving C files and an graphical interface for editing this file
lbessard
parents:
137
diff
changeset
|
104 |
return [(Gen_Cfile_path, str(self.CExtension.getCFLAGS() + matiec_flags))],str(self.CExtension.getLDFLAGS()),True |
656
c1792dfc8c7e
Fixing bug integrated plugin editors not closed when removing corresponding plugin
laurent
parents:
651
diff
changeset
|
105 |