Skip to content

Commit af3c577

Browse files
authored
Merge branch 'development' into development
2 parents 1ab783b + 6ec9d53 commit af3c577

2 files changed

Lines changed: 43 additions & 0 deletions

File tree

src/canmatrix/formats/fibex.py

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,37 @@ def create_signal_ref(parent, signal_ref_id):
107107
signal_ref.set("ID-REF", "SIG_" + signal_ref_id)
108108
return signal_ref
109109

110+
def create_signal_group_element(parent, frame, sig_group):
111+
# type: (_Element, Frame, typing.Any) -> _Element
112+
signal_group_element = create_sub_element_fx(parent, "SIGNAL-GROUP")
113+
sig_group_id = f"SIGGRP_{frame.name}_{sig_group.name}"
114+
signal_group_element.set("ID", sig_group_id)
115+
create_short_name_desc(signal_group_element, sig_group.name, "")
116+
117+
sig_group_dbc_id = getattr(sig_group, "id", None)
118+
if sig_group_dbc_id is not None:
119+
identifier = create_sub_element_fx(signal_group_element, "IDENTIFIER")
120+
create_sub_element_fx(identifier, "IDENTIFIER-VALUE", str(sig_group_dbc_id))
121+
122+
member_signals = getattr(sig_group, "signals", None) or []
123+
if member_signals:
124+
ordered_signals = create_sub_element_fx(signal_group_element, "ORDERED-SIGNALS")
125+
for seq_num, signal in enumerate(member_signals, start=1):
126+
if isinstance(signal, str):
127+
signal_obj = frame.signal_by_name(signal)
128+
if signal_obj is None:
129+
print(f"Warning: Signal '{signal}' in group '{sig_group.name}' "
130+
f"not found in frame '{frame.name}' - skipping")
131+
continue
132+
else:
133+
signal_obj = signal
134+
135+
ordered_signal = create_sub_element_fx(ordered_signals, "ORDERED-SIGNAL")
136+
create_sub_element_fx(ordered_signal, "SEQUENCE-NUMBER", str(seq_num))
137+
create_signal_ref(ordered_signal, create_signal_id(frame, signal_obj))
138+
139+
return signal_group_element
140+
110141

111142
def bits_to_byte_str(bits, name):
112143
b = int(bits)
@@ -1015,5 +1046,14 @@ def dump(db, f, **options):
10151046
# REQUIREMENTS
10161047
#
10171048
# requirements = createSubElementFx(elements, "REQUIREMENTS")
1049+
has_signal_groups = any(
1050+
getattr(frame, "signalGroups", None) for frame in db.frames
1051+
)
1052+
if has_signal_groups:
1053+
requirements = create_sub_element_fx(root, "REQUIREMENTS")
1054+
signal_groups_element = create_sub_element_fx(requirements, "SIGNAL-GROUPS")
1055+
for frame in db.frames:
1056+
for sig_group in getattr(frame, "signalGroups", []) or []:
1057+
create_signal_group_element(signal_groups_element, frame, sig_group)
10181058

10191059
f.write(lxml.etree.tostring(root, pretty_print=True))

src/canmatrix/formats/json.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -249,6 +249,9 @@ def load(f, **_options):
249249
if "transmitters" in frame:
250250
new_frame.transmitters = frame["transmitters"]
251251

252+
if "comment" in frame:
253+
new_frame.comment = frame["comment"]
254+
252255
for signal in frame["signals"]:
253256
is_little_endian = not signal.get("is_big_endian", False)
254257
is_float = signal.get("is_float", False)

0 commit comments

Comments
 (0)