38
38
import canmatrix .utils
39
39
40
40
logger = logging .getLogger (__name__ )
41
- enum_dict = {} # type: typing.Dict[str, str]
42
- enums = "{ENUMS}\n "
43
41
44
42
45
43
def default_float_factory (value ): # type: (typing.Any) -> decimal.Decimal
@@ -101,8 +99,6 @@ def format_float(f): # type: (typing.Any) -> str
101
99
102
100
103
101
def create_signal (db , signal ): # type: (canmatrix.CanMatrix, canmatrix.Signal) -> str
104
- global enums
105
- global enum_dict
106
102
output = ""
107
103
if sys .version_info > (3 , 0 ):
108
104
quote_name = not signal .name .isidentifier ()
@@ -159,12 +155,7 @@ def create_signal(db, signal): # type: (canmatrix.CanMatrix, canmatrix.Signal)
159
155
val_tab_name = signal .name
160
156
161
157
output += "/e:%s " % val_tab_name
162
- if val_tab_name not in enum_dict :
163
- enum_dict [val_tab_name ] = "enum " + val_tab_name + "(" + ', ' .join (
164
- '%s="%s"' %
165
- (key , val ) for (
166
- key , val ) in sorted (
167
- signal .values .items ())) + ")"
158
+
168
159
169
160
default = signal .initial_value # type: ignore
170
161
min_ok = signal .min is None or default >= signal .min
@@ -182,17 +173,31 @@ def create_signal(db, signal): # type: (canmatrix.CanMatrix, canmatrix.Signal)
182
173
output += "\n "
183
174
return output
184
175
176
+ def create_enum_from_signal_values (signal ):
177
+ enum_dict = {}
178
+ if len (signal .values ) > 0 :
179
+ val_tab_name = signal .enumeration
180
+ if val_tab_name is None :
181
+ val_tab_name = signal .name
182
+
183
+ if val_tab_name not in enum_dict :
184
+ enum_dict [val_tab_name ] = "enum " + val_tab_name + "(" + ', ' .join (
185
+ '%s="%s"' %
186
+ (key , val ) for (
187
+ key , val ) in sorted (
188
+ signal .values .items ())) + ")"
189
+ return enum_dict
185
190
186
191
def dump (db , f , ** options ): # type: (canmatrix.CanMatrix, typing.IO, **typing.Any) -> None
187
192
"""
188
193
export canmatrix-object as .sym file (compatible to PEAK-Systems)
189
194
"""
190
- global enum_dict
191
- global enums
192
195
sym_encoding = options .get ('symExportEncoding' , 'iso-8859-1' )
193
196
ignore_encoding_errors = options .get ("ignoreExportEncodingErrors" , "" )
194
197
195
198
enum_dict = {}
199
+ for enum_name , enum_values in db .value_tables .items ():
200
+ enum_dict [enum_name ] = "enum {}({})" .format (enum_name , ', ' .join ('{}="{}"' .format (* items ) for items in sorted (enum_values .items ())))
196
201
enums = "{ENUMS}\n "
197
202
198
203
header = """\
@@ -308,6 +313,7 @@ def send_receive(for_frame):
308
313
output += "CycleTime=" + str (frame .effective_cycle_time ) + "\n "
309
314
for signal in frame .signals :
310
315
output += create_signal (db , signal )
316
+ enum_dict .update (create_enum_from_signal_values (signal ))
311
317
output += "\n "
312
318
enums += '\n ' .join (sorted (enum_dict .values ()))
313
319
# write output file
0 commit comments