Skip to content

Commit d696744

Browse files
committed
mdf 4.30 changes in the LDBLOCK
1 parent fcade43 commit d696744

File tree

3 files changed

+31
-15
lines changed

3 files changed

+31
-15
lines changed

src/asammdf/blocks/mdf_v4.py

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2155,7 +2155,7 @@ def _get_data_blocks_info(
21552155
uses_ld = True
21562156
while address:
21572157
ld = ListData(address=address, stream=stream, mapped=mapped, file_limit=self.file_limit)
2158-
has_invalidation = ld.flags & v4c.FLAG_LD_INVALIDATION_PRESENT
2158+
has_invalidation = ld.flags_ext & v4c.FLAG_LD_EXT_INVALIDATION_PRESENT
21592159
for i in range(ld.data_block_nr):
21602160
original_address = addr = getattr(ld, f"data_block_addr_{i}")
21612161

@@ -2457,7 +2457,7 @@ def _get_data_blocks_info(
24572457
uses_ld = True
24582458
while address:
24592459
ld = ListData(address=address, stream=stream, file_limit=self.file_limit)
2460-
has_invalidation = ld.flags & v4c.FLAG_LD_INVALIDATION_PRESENT
2460+
has_invalidation = ld.flags_ext & v4c.FLAG_LD_EXT_INVALIDATION_PRESENT
24612461
for i in range(ld.data_block_nr):
24622462
original_address = addr = getattr(ld, f"data_block_addr{i}")
24632463

@@ -11060,7 +11060,7 @@ def save(
1106011060
if compression:
1106111061
if gp.channel_group.samples_byte_nr > 1:
1106211062
current_zip_type = zip_type
11063-
if compression == 1:
11063+
if compression in (v4c.CompressionAlgorithm.DEFLATE, v4c.CompressionAlgorithm.LZ4,v4c.CompressionAlgorithm.ZSTD):
1106411064
param = 0
1106511065
else:
1106611066
param = gp.channel_group.samples_byte_nr
@@ -11088,7 +11088,7 @@ def save(
1108811088
if inval_ is not None:
1108911089
inval_address = address = tell()
1109011090
if compression:
11091-
if compression == 1:
11091+
if compression in (v4c.CompressionAlgorithm.DEFLATE, v4c.CompressionAlgorithm.LZ4,v4c.CompressionAlgorithm.ZSTD):
1109211092
param = 0
1109311093
else:
1109411094
param = gp.channel_group.invalidation_bytes_nr
@@ -11114,10 +11114,12 @@ def save(
1111411114
"data_block_nr": 1,
1111511115
"data_block_len": gp.channel_group.cycles_nr,
1111611116
"data_block_addr_0": data_address,
11117+
"flags_ext": 0
1111711118
}
1111811119
if inval_:
11119-
ld_kwargs["flags"] |= v4c.FLAG_LD_INVALIDATION_PRESENT
11120+
ld_kwargs["flags_ext"] |= v4c.FLAG_LD_EXT_INVALIDATION_PRESENT
1112011121
ld_kwargs["invalidation_bits_addr_0"] = inval_address # type: ignore[typeddict-unknown-key]
11122+
1112111123
ld_block = ListData(**ld_kwargs)
1112211124
write(bytes(ld_block))
1112311125

@@ -11212,15 +11214,21 @@ def save(
1121211214
"flags": v4c.FLAG_LD_EQUAL_LENGHT,
1121311215
"data_block_nr": len(dv_addr),
1121411216
"data_block_len": block_size // gp.channel_group.samples_byte_nr,
11217+
"flags_ext": 0
1121511218
}
1121611219
for i, addr in enumerate(dv_addr):
1121711220
ld_kwargs[f"data_block_addr_{i}"] = addr # type: ignore[literal-required]
1121811221

1121911222
if di_addr:
11220-
ld_kwargs["flags"] |= v4c.FLAG_LD_INVALIDATION_PRESENT
11223+
ld_kwargs["flags_ext"] |= v4c.FLAG_LD_EXT_INVALIDATION_PRESENT
1122111224
for i, addr in enumerate(di_addr):
1122211225
ld_kwargs[f"invalidation_bits_addr_{i}"] = addr # type: ignore[literal-required]
1122311226

11227+
if self.version >= "4.30":
11228+
ld_kwargs['zip_info'] = zip_type
11229+
ld_kwargs['zip_info_inval'] = zip_type
11230+
ld_kwargs['flags'] |= v4c.FLAG_LD_ZIP_INFO_VALID
11231+
1122411232
ld_block = ListData(**ld_kwargs)
1122511233
write(bytes(ld_block))
1122611234

src/asammdf/blocks/v4_blocks.py

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6725,10 +6725,13 @@ class _ListDataBase:
67256725
"data_block_len",
67266726
"data_block_nr",
67276727
"flags",
6728+
"flags_ext",
67286729
"id",
67296730
"links_nr",
67306731
"next_ld_addr",
67316732
"reserved0",
6733+
"zip_info",
6734+
"zip_info_inval",
67326735
)
67336736

67346737

@@ -6824,7 +6827,7 @@ def __init__(self, **kwargs: Unpack[ListDataKwargs]) -> None:
68246827

68256828
address += self.links_nr * 8
68266829

6827-
self.flags, self.data_block_nr = unpack_from("<2I", stream, address)
6830+
self.flags, self.zip_info, self.zip_info_inval, self.flags_ext, self.self.data_block_nr = unpack_from("<4BI", stream, address)
68286831
address += 8
68296832
if self.flags & v4c.FLAG_LD_EQUAL_LENGHT:
68306833
(self.data_block_len,) = UINT64_uf(stream, address)
@@ -6858,7 +6861,7 @@ def __init__(self, **kwargs: Unpack[ListDataKwargs]) -> None:
68586861
for i in range(self.data_block_nr):
68596862
self[f"data_block_addr_{i}"] = links[i + 1]
68606863

6861-
if self.flags & v4c.FLAG_LD_INVALIDATION_PRESENT:
6864+
if self.flags_ext & v4c.FLAG_LD_EXT_INVALIDATION_PRESENT:
68626865
for i in range(self.data_block_nr):
68636866
self[f"invalidation_bits_addr_{i}"] = links[self.data_block_nr + 1 + i]
68646867
else:
@@ -6886,7 +6889,7 @@ def __init__(self, **kwargs: Unpack[ListDataKwargs]) -> None:
68866889

68876890
links = unpack(f"<{self.links_nr}Q", stream.read(self.links_nr * 8))
68886891

6889-
self.flags, self.data_block_nr = typing.cast(tuple[int, int], unpack("<2I", stream.read(8)))
6892+
self.flags, self.zip_info, self.zip_info_inval, self.flags_ext, self.self.data_block_nr = typing.cast(tuple[int, int], unpack("<4BI", stream.read(8)))
68906893

68916894
if self.flags & v4c.FLAG_LD_EQUAL_LENGHT:
68926895
(self.data_block_len,) = UINT64_u(stream.read(8))
@@ -6924,7 +6927,7 @@ def __init__(self, **kwargs: Unpack[ListDataKwargs]) -> None:
69246927
for i in range(self.data_block_nr, 1):
69256928
self[f"data_block_addr_{i}"] = links[i]
69266929

6927-
if self.flags & v4c.FLAG_LD_INVALIDATION_PRESENT:
6930+
if self.flags_ext & v4c.FLAG_LD_EXT_INVALIDATION_PRESENT:
69286931
for i in range(self.data_block_nr, self.data_block_nr + 1):
69296932
self[f"invalidation_bits_addr_{i}"] = links[i]
69306933

@@ -6936,12 +6939,16 @@ def __init__(self, **kwargs: Unpack[ListDataKwargs]) -> None:
69366939

69376940
self.data_block_nr = kwargs["data_block_nr"]
69386941
self.flags = kwargs["flags"]
6942+
self.flags_ext = kwargs.get("flags_ext", 0)
6943+
self.zip_info = kwargs.get("zip_info", 0)
6944+
self.zip_info_inval = kwargs.get("zip_info_inval", 0)
6945+
self.flags_ext = kwargs["flags_ext"]
69396946
self.data_block_len = kwargs["data_block_len"]
69406947
self.next_ld_addr = 0
69416948

69426949
for i in range(self.data_block_nr):
69436950
self[f"data_block_addr_{i}"] = kwargs[f"data_block_addr_{i}"] # type: ignore[literal-required]
6944-
if self.flags & v4c.FLAG_LD_INVALIDATION_PRESENT:
6951+
if self.flags_ext & v4c.FLAG_LD_EXT_INVALIDATION_PRESENT:
69456952
self.links_nr = 2 * self.data_block_nr + 1
69466953

69476954
for i in range(self.data_block_nr):
@@ -6970,12 +6977,12 @@ def __bytes__(self) -> bytes:
69706977
fmt += f"{self.data_block_nr}Q"
69716978
keys += tuple(f"data_block_addr_{i}" for i in range(self.data_block_nr))
69726979

6973-
if self.flags & v4c.FLAG_LD_INVALIDATION_PRESENT:
6980+
if self.flags & v4c.FLAG_LD_EXT_INVALIDATION_PRESENT:
69746981
fmt += f"{self.data_block_nr}Q"
69756982
keys += tuple(f"invalidation_bits_addr_{i}" for i in range(self.data_block_nr))
69766983

6977-
fmt += "2I"
6978-
keys += ("flags", "data_block_nr")
6984+
fmt += "4BI"
6985+
keys += ("flags", "zip_info", "zip_info_inval", "flags_ext", "data_block_nr")
69796986

69806987
if self.flags & v4c.FLAG_LD_EQUAL_LENGHT:
69816988
fmt += "Q"

src/asammdf/blocks/v4_constants.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -362,7 +362,8 @@
362362
FLAG_LD_TIME_VALUES = 1 << 1
363363
FLAG_LD_ANGLE_VALUES = 1 << 2
364364
FLAG_LD_DISTANCE_VALUES = 1 << 3
365-
FLAG_LD_INVALIDATION_PRESENT = 1 << 31
365+
FLAG_LD_ZIP_INFO_VALID = 1 << 7
366+
FLAG_LD_EXT_INVALIDATION_PRESENT = 1 << 7
366367

367368
FLAG_EV_POST_PROCESSING = 1
368369
FLAG_EV_GROUP_NAME = 1 << 1

0 commit comments

Comments
 (0)