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.
		
		
		
		
			
				
					194 lines
				
				7.2 KiB
			
		
		
			
		
	
	
					194 lines
				
				7.2 KiB
			| 
											2 months ago
										 | # 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
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 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 Gps(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.tlm = Gps.Tlm(self._io, self, self._root)
 | ||
|  |         self.how = Gps.How(self._io, self, self._root)
 | ||
|  |         _on = self.how.subframe_id
 | ||
|  |         if _on == 1:
 | ||
|  |             self.body = Gps.Subframe1(self._io, self, self._root)
 | ||
|  |         elif _on == 2:
 | ||
|  |             self.body = Gps.Subframe2(self._io, self, self._root)
 | ||
|  |         elif _on == 3:
 | ||
|  |             self.body = Gps.Subframe3(self._io, self, self._root)
 | ||
|  |         elif _on == 4:
 | ||
|  |             self.body = Gps.Subframe4(self._io, self, self._root)
 | ||
|  | 
 | ||
|  |     class Subframe1(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.week_no = self._io.read_bits_int_be(10)
 | ||
|  |             self.code = self._io.read_bits_int_be(2)
 | ||
|  |             self.sv_accuracy = self._io.read_bits_int_be(4)
 | ||
|  |             self.sv_health = self._io.read_bits_int_be(6)
 | ||
|  |             self.iodc_msb = self._io.read_bits_int_be(2)
 | ||
|  |             self.l2_p_data_flag = self._io.read_bits_int_be(1) != 0
 | ||
|  |             self.reserved1 = self._io.read_bits_int_be(23)
 | ||
|  |             self.reserved2 = self._io.read_bits_int_be(24)
 | ||
|  |             self.reserved3 = self._io.read_bits_int_be(24)
 | ||
|  |             self.reserved4 = self._io.read_bits_int_be(16)
 | ||
|  |             self._io.align_to_byte()
 | ||
|  |             self.t_gd = self._io.read_s1()
 | ||
|  |             self.iodc_lsb = self._io.read_u1()
 | ||
|  |             self.t_oc = self._io.read_u2be()
 | ||
|  |             self.af_2 = self._io.read_s1()
 | ||
|  |             self.af_1 = self._io.read_s2be()
 | ||
|  |             self.af_0_sign = self._io.read_bits_int_be(1) != 0
 | ||
|  |             self.af_0_value = self._io.read_bits_int_be(21)
 | ||
|  |             self.reserved5 = self._io.read_bits_int_be(2)
 | ||
|  | 
 | ||
|  |         @property
 | ||
|  |         def af_0(self):
 | ||
|  |             if hasattr(self, '_m_af_0'):
 | ||
|  |                 return self._m_af_0
 | ||
|  | 
 | ||
|  |             self._m_af_0 = ((self.af_0_value - (1 << 21)) if self.af_0_sign else self.af_0_value)
 | ||
|  |             return getattr(self, '_m_af_0', None)
 | ||
|  | 
 | ||
|  | 
 | ||
|  |     class Subframe3(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.c_ic = self._io.read_s2be()
 | ||
|  |             self.omega_0 = self._io.read_s4be()
 | ||
|  |             self.c_is = self._io.read_s2be()
 | ||
|  |             self.i_0 = self._io.read_s4be()
 | ||
|  |             self.c_rc = self._io.read_s2be()
 | ||
|  |             self.omega = self._io.read_s4be()
 | ||
|  |             self.omega_dot_sign = self._io.read_bits_int_be(1) != 0
 | ||
|  |             self.omega_dot_value = self._io.read_bits_int_be(23)
 | ||
|  |             self._io.align_to_byte()
 | ||
|  |             self.iode = self._io.read_u1()
 | ||
|  |             self.idot_sign = self._io.read_bits_int_be(1) != 0
 | ||
|  |             self.idot_value = self._io.read_bits_int_be(13)
 | ||
|  |             self.reserved = self._io.read_bits_int_be(2)
 | ||
|  | 
 | ||
|  |         @property
 | ||
|  |         def omega_dot(self):
 | ||
|  |             if hasattr(self, '_m_omega_dot'):
 | ||
|  |                 return self._m_omega_dot
 | ||
|  | 
 | ||
|  |             self._m_omega_dot = ((self.omega_dot_value - (1 << 23)) if self.omega_dot_sign else self.omega_dot_value)
 | ||
|  |             return getattr(self, '_m_omega_dot', None)
 | ||
|  | 
 | ||
|  |         @property
 | ||
|  |         def idot(self):
 | ||
|  |             if hasattr(self, '_m_idot'):
 | ||
|  |                 return self._m_idot
 | ||
|  | 
 | ||
|  |             self._m_idot = ((self.idot_value - (1 << 13)) if self.idot_sign else self.idot_value)
 | ||
|  |             return getattr(self, '_m_idot', None)
 | ||
|  | 
 | ||
|  | 
 | ||
|  |     class Subframe4(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.data_id = self._io.read_bits_int_be(2)
 | ||
|  |             self.page_id = self._io.read_bits_int_be(6)
 | ||
|  |             self._io.align_to_byte()
 | ||
|  |             _on = self.page_id
 | ||
|  |             if _on == 56:
 | ||
|  |                 self.body = Gps.Subframe4.IonosphereData(self._io, self, self._root)
 | ||
|  | 
 | ||
|  |         class IonosphereData(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.a0 = self._io.read_s1()
 | ||
|  |                 self.a1 = self._io.read_s1()
 | ||
|  |                 self.a2 = self._io.read_s1()
 | ||
|  |                 self.a3 = self._io.read_s1()
 | ||
|  |                 self.b0 = self._io.read_s1()
 | ||
|  |                 self.b1 = self._io.read_s1()
 | ||
|  |                 self.b2 = self._io.read_s1()
 | ||
|  |                 self.b3 = self._io.read_s1()
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  |     class How(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.tow_count = self._io.read_bits_int_be(17)
 | ||
|  |             self.alert = self._io.read_bits_int_be(1) != 0
 | ||
|  |             self.anti_spoof = self._io.read_bits_int_be(1) != 0
 | ||
|  |             self.subframe_id = self._io.read_bits_int_be(3)
 | ||
|  |             self.reserved = self._io.read_bits_int_be(2)
 | ||
|  | 
 | ||
|  | 
 | ||
|  |     class Tlm(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.preamble = self._io.read_bytes(1)
 | ||
|  |             if not self.preamble == b"\x8B":
 | ||
|  |                 raise kaitaistruct.ValidationNotEqualError(b"\x8B", self.preamble, self._io, u"/types/tlm/seq/0")
 | ||
|  |             self.tlm = self._io.read_bits_int_be(14)
 | ||
|  |             self.integrity_status = self._io.read_bits_int_be(1) != 0
 | ||
|  |             self.reserved = self._io.read_bits_int_be(1) != 0
 | ||
|  | 
 | ||
|  | 
 | ||
|  |     class Subframe2(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.iode = self._io.read_u1()
 | ||
|  |             self.c_rs = self._io.read_s2be()
 | ||
|  |             self.delta_n = self._io.read_s2be()
 | ||
|  |             self.m_0 = self._io.read_s4be()
 | ||
|  |             self.c_uc = self._io.read_s2be()
 | ||
|  |             self.e = self._io.read_s4be()
 | ||
|  |             self.c_us = self._io.read_s2be()
 | ||
|  |             self.sqrt_a = self._io.read_u4be()
 | ||
|  |             self.t_oe = self._io.read_u2be()
 | ||
|  |             self.fit_interval_flag = self._io.read_bits_int_be(1) != 0
 | ||
|  |             self.aoda = self._io.read_bits_int_be(5)
 | ||
|  |             self.reserved = self._io.read_bits_int_be(2)
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 |