Skip to content

Commit

Permalink
check if the messages are extended when extracting bus logging
Browse files Browse the repository at this point in the history
  • Loading branch information
danielhrisca committed Oct 24, 2023
1 parent d3828a9 commit 50ed2e9
Show file tree
Hide file tree
Showing 3 changed files with 51 additions and 32 deletions.
4 changes: 3 additions & 1 deletion src/asammdf/blocks/bus_logging_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -284,6 +284,7 @@ def extract_mux(
include_message_name: bool = False,
ignore_value2text_conversion: bool = True,
is_j1939: bool = False,
is_extended: bool = False,
) -> dict[tuple[Any, ...], dict[str, ExtractedSignal]]:
"""extract multiplexed CAN signals from the raw payload
Expand Down Expand Up @@ -347,7 +348,7 @@ def extract_mux(
pair_signals.append(signal)

for pair, pair_signals in pairs.items():
entry = bus, message_id, original_message_id, muxer, *pair
entry = bus, message_id, is_extended, original_message_id, muxer, *pair

extracted_signals[entry] = signals = {}

Expand Down Expand Up @@ -408,6 +409,7 @@ def extract_mux(
ignore_value2text_conversion=ignore_value2text_conversion,
raw=raw,
is_j1939=is_j1939,
is_extended=is_extended,
)
)

Expand Down
11 changes: 6 additions & 5 deletions src/asammdf/gui/widgets/file.py
Original file line number Diff line number Diff line change
Expand Up @@ -1847,12 +1847,13 @@ def extract_bus_logging_thread(self, file_name, suffix, database_files, version,
f"The following {bus} IDs were in the MDF log file and matched in the DBC:",
]
for dbc_name, found_ids in call_info["found_ids"].items():
for msg_id, msg_name in sorted(found_ids):
try:
message.append(f"- 0x{msg_id:X} --> {msg_name} in <{dbc_name}>")
except:
pgn, sa = msg_id
for msg_id_info, msg_name in sorted(found_ids):
if msg_id_info[2]:
pgn, sa = msg_id_info[:2]
message.append(f"- PGN=0x{pgn:X} SA=0x{sa:X} --> {msg_name} in <{dbc_name}>")
else:
msg_id, extended = msg_id_info[:2]
message.append(f"- 0x{msg_id:X} {extended=} --> {msg_name} in <{dbc_name}>")

message += [
"",
Expand Down
68 changes: 42 additions & 26 deletions src/asammdf/mdf.py
Original file line number Diff line number Diff line change
Expand Up @@ -4760,7 +4760,7 @@ def _extract_can_logging(
unknown_ids = defaultdict(list)

for dbc, dbc_name, bus_channel in valid_dbc_files:
messages = {message.arbitration_id.id: message for message in dbc}
messages = {(message.arbitration_id.id, message.arbitration_id.extended): message for message in dbc}

global_is_j1939 = dbc.attributes.get("ProtocolType", "").lower() == "j1939"

Expand All @@ -4775,7 +4775,7 @@ def _extract_can_logging(

current_not_found = {
(
message.arbitration_id.id
(message.arbitration_id.id, message.arbitration_id.extended)
if not message.is_j1939 and not global_is_j1939
else message.arbitration_id.pgn,
message.name,
Expand Down Expand Up @@ -4810,6 +4810,12 @@ def _extract_can_logging(
].astype("<u1")

msg_ids = self.get("CAN_DataFrame.ID", group=i, data=fragment).astype("<u4") & 0x1FFFFFFF
try:
msg_ide = self.get("CAN_DataFrame.IDE", group=i, data=fragment).samples.astype("<u1")
except:
msg_ide = (msg_ids & 0x80000000) >> 31

msg_ids &= 0x1FFFFFFF

data_bytes = self.get(
"CAN_DataFrame.DataBytes",
Expand All @@ -4827,6 +4833,7 @@ def _extract_can_logging(
idx = np.argwhere(bus_ids == bus).ravel()
bus_t = msg_ids.timestamps[idx]
bus_msg_ids = msg_ids.samples[idx]
bus_msg_ide = msg_ide[idx]
bus_data_bytes = data_bytes[idx]

tmp_pgn = bus_msg_ids >> 8
Expand All @@ -4836,12 +4843,12 @@ def _extract_can_logging(
j1939_msg_pgns = np.where(pf >= 240, _pgn + ps, _pgn)
j9193_msg_sa = bus_msg_ids & 0xFF

unique_ids = np.unique(bus_msg_ids).tolist()
unique_ids = set(zip(bus_msg_ids.tolist(), bus_msg_ide.tolist()))

total_unique_ids = total_unique_ids | set(unique_ids)

for msg_id in unique_ids:
message = messages.get(msg_id, None)
for msg_id, is_extended in unique_ids:
message = messages.get((msg_id, is_extended), None)

if message is None:
tmp_pgn = msg_id >> 8
Expand All @@ -4862,7 +4869,7 @@ def _extract_can_logging(
if is_j1939:
source_address = msg_id & 0xFF
pgn_number = message.arbitration_id.pgn
key = (pgn_number, source_address)
key = (pgn_number, source_address, True)
found_ids[dbc_name].add((key, message.name))

try:
Expand All @@ -4871,36 +4878,41 @@ def _extract_can_logging(
pass

else:
key = msg_id
key = msg_id, bool(is_extended), False

found_ids[dbc_name].add((key, message.name))
try:
current_not_found.remove((msg_id, message.name))
current_not_found.remove(((msg_id, is_extended), message.name))
except KeyError:
pass

unknown_ids[msg_id].append(False)
unknown_ids[(msg_id, is_extended)].append(False)

if is_j1939:
idx = np.argwhere(
(j1939_msg_pgns == pgn_number) & (j9193_msg_sa == source_address)
).ravel()
else:
idx = np.argwhere(bus_msg_ids == msg_id).ravel()
idx = np.argwhere((bus_msg_ids == msg_id) & (bus_msg_ide == is_extended)).ravel()

payload = bus_data_bytes[idx]
t = bus_t[idx]

extracted_signals = bus_logging_utils.extract_mux(
payload,
message,
msg_id,
bus,
t,
original_message_id=source_address if is_j1939 else None,
ignore_value2text_conversion=ignore_value2text_conversion,
is_j1939=is_j1939,
)
try:
extracted_signals = bus_logging_utils.extract_mux(
payload,
message,
msg_id,
bus,
t,
original_message_id=source_address if is_j1939 else None,
ignore_value2text_conversion=ignore_value2text_conversion,
is_j1939=is_j1939,
is_extended=is_extended,
)
except:
print(format_exc())
raise

for entry, signals in extracted_signals.items():
if len(next(iter(signals.values()))["samples"]) == 0:
Expand Down Expand Up @@ -4937,18 +4949,22 @@ def _extract_can_logging(
acq_name = f"SourceAddress = 0x{source_address}"
else:
if prefix:
acq_name = f"{prefix}: CAN{bus} message ID=0x{msg_id:X}"
comment = f'{prefix}: CAN{bus} - message "{message}" 0x{msg_id:X}'
acq_name = (
f"{prefix}: CAN{bus} message ID=0x{msg_id:X} EXT={bool(is_extended)}"
)
comment = f'{prefix}: CAN{bus} - message "{message}" 0x{msg_id:X} EXT={bool(is_extended)}'
else:
acq_name = f"CAN{bus} message ID=0x{msg_id:X}"
comment = f"CAN{bus} - message {message} 0x{msg_id:X}"
acq_name = f"CAN{bus} message ID=0x{msg_id:X} EXT={bool(is_extended)}"
comment = (
f"CAN{bus} - message {message} 0x{msg_id:X} EXT={bool(is_extended)}"
)

acq_source = Source(
name=acq_name,
path=f"CAN{int(bus)}.CAN_DataFrame.ID=0x{message.arbitration_id.id:X}",
path=f"CAN{int(bus)}.CAN_DataFrame.ID=0x{message.arbitration_id.id:X} EXT={bool(is_extended)}",
comment=f"""\
<SIcomment>
<TX>CAN{bus} data frame 0x{message.arbitration_id.id:X} - {message.name}</TX>
<TX>CAN{bus} data frame 0x{message.arbitration_id.id:X} EXT={bool(is_extended)} - {message.name}</TX>
<bus name="CAN{int(bus)}"/>
<common_properties>
<e name="ChannelNo" type="integer">{int(bus)}</e>
Expand Down

0 comments on commit 50ed2e9

Please sign in to comment.