tools: hrs2csv: Add a simple parser for hrs.data files
Signed-off-by: Daniel Thompson <daniel@redfelineninja.org.uk>
This commit is contained in:
parent
15434a3841
commit
a28a2cd7f4
1 changed files with 38 additions and 0 deletions
38
tools/hrs2csv.py
Executable file
38
tools/hrs2csv.py
Executable file
|
@ -0,0 +1,38 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
# SPDX-License-Identifier: LGPL-3.0-or-later
|
||||
# Copyright (C) 2021 Daniel Thompson
|
||||
|
||||
import sys
|
||||
|
||||
def parse_record(view):
|
||||
'''Consume a single set of samples and format as a line for a CSV file.'''
|
||||
# Verify synchronization
|
||||
assert(view[0] == 0xffff)
|
||||
|
||||
# Extract the timestamp and format it in ISO 8601 format
|
||||
(YY, MM, DD, hh, mm, ss) = view[1:7]
|
||||
print(f'"{YY:04}{MM:02}{DD:02}T{hh:02}{mm:02}{ss:02}"', end='')
|
||||
|
||||
# Consume data until we reach the synchronization token
|
||||
offset = 8
|
||||
while offset < len(view) and view[offset] != 0xffff:
|
||||
print(f',{view[offset]}', end='')
|
||||
offset += 1
|
||||
|
||||
# Close the current record and return
|
||||
print('')
|
||||
return offset
|
||||
|
||||
# Open and read the file named in our first argument
|
||||
with open(sys.argv[1], 'rb') as f:
|
||||
rawdata = f.read()
|
||||
|
||||
# Re-interpret the raw data as an array of 16-bit values
|
||||
view = memoryview(rawdata)
|
||||
data = view.cast('H')
|
||||
|
||||
# Process the data one record at a time
|
||||
offset = 0
|
||||
while offset < len(data):
|
||||
offset += parse_record(data[offset:])
|
Loading…
Reference in a new issue