42 lines
1.2 KiB
Python
42 lines
1.2 KiB
Python
import struct
|
|
|
|
class RTLFWriter:
|
|
HEADER_FIXED_FORMAT = "<4sIII"
|
|
RECORD_FORMAT = "<dddddddddd"
|
|
|
|
MAGIC_NUMBER = b"RTLF"
|
|
VERSION = 1
|
|
|
|
def __init__(self, filename, car_id, track_name):
|
|
self.filename = filename
|
|
self.car_id = car_id
|
|
self.track_name = track_name.encode('utf-8')
|
|
self.file = open(filename, "wb")
|
|
self._write_header()
|
|
|
|
def _write_header(self):
|
|
track_len = len(self.track_name)
|
|
header_bytes = struct.pack(
|
|
self.HEADER_FIXED_FORMAT,
|
|
self.MAGIC_NUMBER,
|
|
self.VERSION,
|
|
self.car_id,
|
|
track_len
|
|
)
|
|
self.file.write(header_bytes)
|
|
self.file.write(self.track_name)
|
|
|
|
def write_record(self, timestamp, long, lat, fx, fy, fz, ax, ay, az, speed):
|
|
record_bytes = struct.pack(
|
|
self.RECORD_FORMAT,
|
|
timestamp, long, lat, fx, fy, fz, ax, ay, az, speed
|
|
)
|
|
self.file.write(record_bytes)
|
|
|
|
def close(self):
|
|
if self.file:
|
|
self.file.close()
|
|
self.file = None
|
|
|
|
def __enter__(self): return self
|
|
def __exit__(self, exc_type, exc_val, exc_tb): self.close() |