You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
273 lines
10 KiB
273 lines
10 KiB
# This is a generated file! Please edit source .ksy file and use kaitai-struct-compiler to rebuild
|
|
|
|
import kaitaistruct
|
|
from kaitaistruct import KaitaiStruct, KaitaiStream, BytesIO
|
|
from enum import Enum
|
|
|
|
|
|
if getattr(kaitaistruct, 'API_VERSION', (0, 9)) < (0, 9):
|
|
raise Exception("Incompatible Kaitai Struct Python API: 0.9 or later is required, but you have %s" % (kaitaistruct.__version__))
|
|
|
|
class Ubx(KaitaiStruct):
|
|
|
|
class GnssType(Enum):
|
|
gps = 0
|
|
sbas = 1
|
|
galileo = 2
|
|
beidou = 3
|
|
imes = 4
|
|
qzss = 5
|
|
glonass = 6
|
|
def __init__(self, _io, _parent=None, _root=None):
|
|
self._io = _io
|
|
self._parent = _parent
|
|
self._root = _root if _root else self
|
|
self._read()
|
|
|
|
def _read(self):
|
|
self.magic = self._io.read_bytes(2)
|
|
if not self.magic == b"\xB5\x62":
|
|
raise kaitaistruct.ValidationNotEqualError(b"\xB5\x62", self.magic, self._io, u"/seq/0")
|
|
self.msg_type = self._io.read_u2be()
|
|
self.length = self._io.read_u2le()
|
|
_on = self.msg_type
|
|
if _on == 2569:
|
|
self.body = Ubx.MonHw(self._io, self, self._root)
|
|
elif _on == 533:
|
|
self.body = Ubx.RxmRawx(self._io, self, self._root)
|
|
elif _on == 531:
|
|
self.body = Ubx.RxmSfrbx(self._io, self, self._root)
|
|
elif _on == 309:
|
|
self.body = Ubx.NavSat(self._io, self, self._root)
|
|
elif _on == 2571:
|
|
self.body = Ubx.MonHw2(self._io, self, self._root)
|
|
elif _on == 263:
|
|
self.body = Ubx.NavPvt(self._io, self, self._root)
|
|
|
|
class RxmRawx(KaitaiStruct):
|
|
def __init__(self, _io, _parent=None, _root=None):
|
|
self._io = _io
|
|
self._parent = _parent
|
|
self._root = _root if _root else self
|
|
self._read()
|
|
|
|
def _read(self):
|
|
self.rcv_tow = self._io.read_f8le()
|
|
self.week = self._io.read_u2le()
|
|
self.leap_s = self._io.read_s1()
|
|
self.num_meas = self._io.read_u1()
|
|
self.rec_stat = self._io.read_u1()
|
|
self.reserved1 = self._io.read_bytes(3)
|
|
self._raw_meas = []
|
|
self.meas = []
|
|
for i in range(self.num_meas):
|
|
self._raw_meas.append(self._io.read_bytes(32))
|
|
_io__raw_meas = KaitaiStream(BytesIO(self._raw_meas[i]))
|
|
self.meas.append(Ubx.RxmRawx.Measurement(_io__raw_meas, self, self._root))
|
|
|
|
|
|
class Measurement(KaitaiStruct):
|
|
def __init__(self, _io, _parent=None, _root=None):
|
|
self._io = _io
|
|
self._parent = _parent
|
|
self._root = _root if _root else self
|
|
self._read()
|
|
|
|
def _read(self):
|
|
self.pr_mes = self._io.read_f8le()
|
|
self.cp_mes = self._io.read_f8le()
|
|
self.do_mes = self._io.read_f4le()
|
|
self.gnss_id = KaitaiStream.resolve_enum(Ubx.GnssType, self._io.read_u1())
|
|
self.sv_id = self._io.read_u1()
|
|
self.reserved2 = self._io.read_bytes(1)
|
|
self.freq_id = self._io.read_u1()
|
|
self.lock_time = self._io.read_u2le()
|
|
self.cno = self._io.read_u1()
|
|
self.pr_stdev = self._io.read_u1()
|
|
self.cp_stdev = self._io.read_u1()
|
|
self.do_stdev = self._io.read_u1()
|
|
self.trk_stat = self._io.read_u1()
|
|
self.reserved3 = self._io.read_bytes(1)
|
|
|
|
|
|
|
|
class RxmSfrbx(KaitaiStruct):
|
|
def __init__(self, _io, _parent=None, _root=None):
|
|
self._io = _io
|
|
self._parent = _parent
|
|
self._root = _root if _root else self
|
|
self._read()
|
|
|
|
def _read(self):
|
|
self.gnss_id = KaitaiStream.resolve_enum(Ubx.GnssType, self._io.read_u1())
|
|
self.sv_id = self._io.read_u1()
|
|
self.reserved1 = self._io.read_bytes(1)
|
|
self.freq_id = self._io.read_u1()
|
|
self.num_words = self._io.read_u1()
|
|
self.reserved2 = self._io.read_bytes(1)
|
|
self.version = self._io.read_u1()
|
|
self.reserved3 = self._io.read_bytes(1)
|
|
self.body = []
|
|
for i in range(self.num_words):
|
|
self.body.append(self._io.read_u4le())
|
|
|
|
|
|
|
|
class NavSat(KaitaiStruct):
|
|
def __init__(self, _io, _parent=None, _root=None):
|
|
self._io = _io
|
|
self._parent = _parent
|
|
self._root = _root if _root else self
|
|
self._read()
|
|
|
|
def _read(self):
|
|
self.itow = self._io.read_u4le()
|
|
self.version = self._io.read_u1()
|
|
self.num_svs = self._io.read_u1()
|
|
self.reserved = self._io.read_bytes(2)
|
|
self._raw_svs = []
|
|
self.svs = []
|
|
for i in range(self.num_svs):
|
|
self._raw_svs.append(self._io.read_bytes(12))
|
|
_io__raw_svs = KaitaiStream(BytesIO(self._raw_svs[i]))
|
|
self.svs.append(Ubx.NavSat.Nav(_io__raw_svs, self, self._root))
|
|
|
|
|
|
class Nav(KaitaiStruct):
|
|
def __init__(self, _io, _parent=None, _root=None):
|
|
self._io = _io
|
|
self._parent = _parent
|
|
self._root = _root if _root else self
|
|
self._read()
|
|
|
|
def _read(self):
|
|
self.gnss_id = KaitaiStream.resolve_enum(Ubx.GnssType, self._io.read_u1())
|
|
self.sv_id = self._io.read_u1()
|
|
self.cno = self._io.read_u1()
|
|
self.elev = self._io.read_s1()
|
|
self.azim = self._io.read_s2le()
|
|
self.pr_res = self._io.read_s2le()
|
|
self.flags = self._io.read_u4le()
|
|
|
|
|
|
|
|
class NavPvt(KaitaiStruct):
|
|
def __init__(self, _io, _parent=None, _root=None):
|
|
self._io = _io
|
|
self._parent = _parent
|
|
self._root = _root if _root else self
|
|
self._read()
|
|
|
|
def _read(self):
|
|
self.i_tow = self._io.read_u4le()
|
|
self.year = self._io.read_u2le()
|
|
self.month = self._io.read_u1()
|
|
self.day = self._io.read_u1()
|
|
self.hour = self._io.read_u1()
|
|
self.min = self._io.read_u1()
|
|
self.sec = self._io.read_u1()
|
|
self.valid = self._io.read_u1()
|
|
self.t_acc = self._io.read_u4le()
|
|
self.nano = self._io.read_s4le()
|
|
self.fix_type = self._io.read_u1()
|
|
self.flags = self._io.read_u1()
|
|
self.flags2 = self._io.read_u1()
|
|
self.num_sv = self._io.read_u1()
|
|
self.lon = self._io.read_s4le()
|
|
self.lat = self._io.read_s4le()
|
|
self.height = self._io.read_s4le()
|
|
self.h_msl = self._io.read_s4le()
|
|
self.h_acc = self._io.read_u4le()
|
|
self.v_acc = self._io.read_u4le()
|
|
self.vel_n = self._io.read_s4le()
|
|
self.vel_e = self._io.read_s4le()
|
|
self.vel_d = self._io.read_s4le()
|
|
self.g_speed = self._io.read_s4le()
|
|
self.head_mot = self._io.read_s4le()
|
|
self.s_acc = self._io.read_s4le()
|
|
self.head_acc = self._io.read_u4le()
|
|
self.p_dop = self._io.read_u2le()
|
|
self.flags3 = self._io.read_u1()
|
|
self.reserved1 = self._io.read_bytes(5)
|
|
self.head_veh = self._io.read_s4le()
|
|
self.mag_dec = self._io.read_s2le()
|
|
self.mag_acc = self._io.read_u2le()
|
|
|
|
|
|
class MonHw2(KaitaiStruct):
|
|
|
|
class ConfigSource(Enum):
|
|
flash = 102
|
|
otp = 111
|
|
config_pins = 112
|
|
rom = 113
|
|
def __init__(self, _io, _parent=None, _root=None):
|
|
self._io = _io
|
|
self._parent = _parent
|
|
self._root = _root if _root else self
|
|
self._read()
|
|
|
|
def _read(self):
|
|
self.ofs_i = self._io.read_s1()
|
|
self.mag_i = self._io.read_u1()
|
|
self.ofs_q = self._io.read_s1()
|
|
self.mag_q = self._io.read_u1()
|
|
self.cfg_source = KaitaiStream.resolve_enum(Ubx.MonHw2.ConfigSource, self._io.read_u1())
|
|
self.reserved1 = self._io.read_bytes(3)
|
|
self.low_lev_cfg = self._io.read_u4le()
|
|
self.reserved2 = self._io.read_bytes(8)
|
|
self.post_status = self._io.read_u4le()
|
|
self.reserved3 = self._io.read_bytes(4)
|
|
|
|
|
|
class MonHw(KaitaiStruct):
|
|
|
|
class AntennaStatus(Enum):
|
|
init = 0
|
|
dontknow = 1
|
|
ok = 2
|
|
short = 3
|
|
open = 4
|
|
|
|
class AntennaPower(Enum):
|
|
false = 0
|
|
true = 1
|
|
dontknow = 2
|
|
def __init__(self, _io, _parent=None, _root=None):
|
|
self._io = _io
|
|
self._parent = _parent
|
|
self._root = _root if _root else self
|
|
self._read()
|
|
|
|
def _read(self):
|
|
self.pin_sel = self._io.read_u4le()
|
|
self.pin_bank = self._io.read_u4le()
|
|
self.pin_dir = self._io.read_u4le()
|
|
self.pin_val = self._io.read_u4le()
|
|
self.noise_per_ms = self._io.read_u2le()
|
|
self.agc_cnt = self._io.read_u2le()
|
|
self.a_status = KaitaiStream.resolve_enum(Ubx.MonHw.AntennaStatus, self._io.read_u1())
|
|
self.a_power = KaitaiStream.resolve_enum(Ubx.MonHw.AntennaPower, self._io.read_u1())
|
|
self.flags = self._io.read_u1()
|
|
self.reserved1 = self._io.read_bytes(1)
|
|
self.used_mask = self._io.read_u4le()
|
|
self.vp = self._io.read_bytes(17)
|
|
self.jam_ind = self._io.read_u1()
|
|
self.reserved2 = self._io.read_bytes(2)
|
|
self.pin_irq = self._io.read_u4le()
|
|
self.pull_h = self._io.read_u4le()
|
|
self.pull_l = self._io.read_u4le()
|
|
|
|
|
|
@property
|
|
def checksum(self):
|
|
if hasattr(self, '_m_checksum'):
|
|
return self._m_checksum
|
|
|
|
_pos = self._io.pos()
|
|
self._io.seek((self.length + 6))
|
|
self._m_checksum = self._io.read_u2le()
|
|
self._io.seek(_pos)
|
|
return getattr(self, '_m_checksum', None)
|
|
|
|
|
|
|