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)
 | 
						|
 | 
						|
 | 
						|
 |