Skip to content

Commit b568134

Browse files
committed
let dbc replace not known attibute-defines by STRING #284
1 parent c488545 commit b568134

File tree

1 file changed

+12
-0
lines changed

1 file changed

+12
-0
lines changed

src/canmatrix/dbc.py

+12
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,13 @@ def format_float(f):
6363
return s.upper()
6464

6565

66+
def check_define(define):
67+
# check if define is compatible with dbc. else repace by STRING
68+
if define.type not in ["ENUM", "STRING", "INT", "HEX", "FLOAT"]:
69+
logger.warn("dbc export of attribute type {} not supported; replaced by STRING".format(define.type))
70+
define.definition = "STRING"
71+
72+
6673
def dump(mydb, f, **options):
6774
# create copy because export changes database
6875
db = deepcopy(mydb)
@@ -289,7 +296,9 @@ def dump(mydb, f, **options):
289296
f.write("\n".encode(dbcExportEncoding))
290297

291298
defaults = {}
299+
292300
for (dataType, define) in sorted(list(db.frameDefines.items())):
301+
check_define(define)
293302
f.write(
294303
('BA_DEF_ BO_ "' + dataType + '" ').encode(dbcExportEncoding) + define.definition.encode(dbcExportEncoding, 'replace') + ';\n'.encode(dbcExportEncoding))
295304
if dataType not in defaults and define.defaultValue is not None:
@@ -299,6 +308,7 @@ def dump(mydb, f, **options):
299308
defaults[dataType] = define.defaultValue
300309

301310
for (dataType, define) in sorted(list(db.signalDefines.items())):
311+
check_define(define)
302312
f.write(
303313
('BA_DEF_ SG_ "' + dataType + '" ').encode(dbcExportEncoding) +
304314
define.definition.encode(dbcExportEncoding, 'replace') + ';\n'.encode(dbcExportEncoding))
@@ -308,6 +318,7 @@ def dump(mydb, f, **options):
308318
else:
309319
defaults[dataType] = define.defaultValue
310320
for (dataType, define) in sorted(list(db.buDefines.items())):
321+
check_define(define)
311322
f.write(
312323
('BA_DEF_ BU_ "' + dataType + '" ').encode(dbcExportEncoding) +
313324
define.definition.encode(dbcExportEncoding, 'replace') + ';\n'.encode(dbcExportEncoding))
@@ -317,6 +328,7 @@ def dump(mydb, f, **options):
317328
else:
318329
defaults[dataType] = define.defaultValue
319330
for (dataType, define) in sorted(list(db.globalDefines.items())):
331+
check_define(define)
320332
f.write(('BA_DEF_ "' + dataType + '" ').encode(dbcExportEncoding) + define.definition.encode(dbcExportEncoding, 'replace') + ';\n'.encode(dbcExportEncoding))
321333
if dataType not in defaults and define.defaultValue is not None:
322334
if define.type == "ENUM" or define.type == "STRING":

0 commit comments

Comments
 (0)