Skip to content

Commit f0bf62e

Browse files
authored
Merge pull request #10 from harp-tech/gl-dev
Add support for non-timestamped payloads
2 parents 2d13796 + 82d86fb commit f0bf62e

3 files changed

Lines changed: 26 additions & 9 deletions

File tree

harp/io.py

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -48,10 +48,27 @@ def read(
4848
if address is not None and address != data[2]:
4949
raise ValueError(f"expected address {address} but got {data[2]}")
5050

51+
index = None
5152
stride = data[1] + 2
5253
nrows = len(data) // stride
53-
payloadsize = stride - 12
54-
payloadtype = payloadtypes[data[4] & ~0x10]
54+
payloadtype = data[4]
55+
payloadoffset = 5
56+
if payloadtype & 0x10 != 0:
57+
seconds = np.ndarray(
58+
nrows, dtype=np.uint32, buffer=data, offset=payloadoffset, strides=stride
59+
)
60+
payloadoffset += 4
61+
micros = np.ndarray(
62+
nrows, dtype=np.uint16, buffer=data, offset=payloadoffset, strides=stride
63+
)
64+
payloadoffset += 2
65+
seconds = micros * _SECONDS_PER_TICK + seconds
66+
payloadtype = payloadtype & ~0x10
67+
index = pd.Series(seconds)
68+
index.name = "time"
69+
70+
payloadsize = stride - payloadoffset - 1
71+
payloadtype = payloadtypes[payloadtype]
5572
if dtype is not None and dtype != payloadtype:
5673
raise ValueError(f"expected payload type {dtype} but got {payloadtype}")
5774

@@ -60,16 +77,12 @@ def read(
6077
if length is not None and length != payloadshape[1]:
6178
raise ValueError(f"expected payload length {length} but got {payloadshape[1]}")
6279

63-
seconds = np.ndarray(nrows, dtype=np.uint32, buffer=data, offset=5, strides=stride)
64-
micros = np.ndarray(nrows, dtype=np.uint16, buffer=data, offset=9, strides=stride)
65-
seconds = micros * _SECONDS_PER_TICK + seconds
6680
payload = np.ndarray(
6781
payloadshape,
6882
dtype=payloadtype,
6983
buffer=data,
70-
offset=11,
84+
offset=payloadoffset,
7185
strides=(stride, elementsize),
7286
)
73-
time = pd.Series(seconds)
74-
time.name = "time"
75-
return pd.DataFrame(payload, index=time, columns=columns)
87+
88+
return pd.DataFrame(payload, index=index, columns=columns)

tests/data/write_0.bin

32 Bytes
Binary file not shown.

tests/test_io.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,10 @@ def __post_init__(self):
4343
expected_length=2, # actual length is 1
4444
expected_error=ValueError,
4545
),
46+
DataFileParam(
47+
path="data/write_0.bin",
48+
expected_address=0,
49+
expected_rows=4)
4650
]
4751

4852

0 commit comments

Comments
 (0)