// This is a generated file! Please edit source .ksy file and use kaitai-struct-compiler to rebuild #include "gps.h" #include "kaitai/exceptions.h" gps_t::gps_t(kaitai::kstream* p__io, kaitai::kstruct* p__parent, gps_t* p__root) : kaitai::kstruct(p__io) { m__parent = p__parent; m__root = this; m_tlm = 0; m_how = 0; try { _read(); } catch(...) { _clean_up(); throw; } } void gps_t::_read() { m_tlm = new tlm_t(m__io, this, m__root); m_how = new how_t(m__io, this, m__root); n_body = true; switch (how()->subframe_id()) { case 1: { n_body = false; m_body = new subframe_1_t(m__io, this, m__root); break; } case 2: { n_body = false; m_body = new subframe_2_t(m__io, this, m__root); break; } case 3: { n_body = false; m_body = new subframe_3_t(m__io, this, m__root); break; } case 4: { n_body = false; m_body = new subframe_4_t(m__io, this, m__root); break; } } } gps_t::~gps_t() { _clean_up(); } void gps_t::_clean_up() { if (m_tlm) { delete m_tlm; m_tlm = 0; } if (m_how) { delete m_how; m_how = 0; } if (!n_body) { if (m_body) { delete m_body; m_body = 0; } } } gps_t::subframe_1_t::subframe_1_t(kaitai::kstream* p__io, gps_t* p__parent, gps_t* p__root) : kaitai::kstruct(p__io) { m__parent = p__parent; m__root = p__root; f_af_0 = false; try { _read(); } catch(...) { _clean_up(); throw; } } void gps_t::subframe_1_t::_read() { m_week_no = m__io->read_bits_int_be(10); m_code = m__io->read_bits_int_be(2); m_sv_accuracy = m__io->read_bits_int_be(4); m_sv_health = m__io->read_bits_int_be(6); m_iodc_msb = m__io->read_bits_int_be(2); m_l2_p_data_flag = m__io->read_bits_int_be(1); m_reserved1 = m__io->read_bits_int_be(23); m_reserved2 = m__io->read_bits_int_be(24); m_reserved3 = m__io->read_bits_int_be(24); m_reserved4 = m__io->read_bits_int_be(16); m__io->align_to_byte(); m_t_gd = m__io->read_s1(); m_iodc_lsb = m__io->read_u1(); m_t_oc = m__io->read_u2be(); m_af_2 = m__io->read_s1(); m_af_1 = m__io->read_s2be(); m_af_0_sign = m__io->read_bits_int_be(1); m_af_0_value = m__io->read_bits_int_be(21); m_reserved5 = m__io->read_bits_int_be(2); } gps_t::subframe_1_t::~subframe_1_t() { _clean_up(); } void gps_t::subframe_1_t::_clean_up() { } int32_t gps_t::subframe_1_t::af_0() { if (f_af_0) return m_af_0; m_af_0 = ((af_0_sign()) ? ((af_0_value() - (1 << 21))) : (af_0_value())); f_af_0 = true; return m_af_0; } gps_t::subframe_3_t::subframe_3_t(kaitai::kstream* p__io, gps_t* p__parent, gps_t* p__root) : kaitai::kstruct(p__io) { m__parent = p__parent; m__root = p__root; f_omega_dot = false; f_idot = false; try { _read(); } catch(...) { _clean_up(); throw; } } void gps_t::subframe_3_t::_read() { m_c_ic = m__io->read_s2be(); m_omega_0 = m__io->read_s4be(); m_c_is = m__io->read_s2be(); m_i_0 = m__io->read_s4be(); m_c_rc = m__io->read_s2be(); m_omega = m__io->read_s4be(); m_omega_dot_sign = m__io->read_bits_int_be(1); m_omega_dot_value = m__io->read_bits_int_be(23); m__io->align_to_byte(); m_iode = m__io->read_u1(); m_idot_sign = m__io->read_bits_int_be(1); m_idot_value = m__io->read_bits_int_be(13); m_reserved = m__io->read_bits_int_be(2); } gps_t::subframe_3_t::~subframe_3_t() { _clean_up(); } void gps_t::subframe_3_t::_clean_up() { } int32_t gps_t::subframe_3_t::omega_dot() { if (f_omega_dot) return m_omega_dot; m_omega_dot = ((omega_dot_sign()) ? ((omega_dot_value() - (1 << 23))) : (omega_dot_value())); f_omega_dot = true; return m_omega_dot; } int32_t gps_t::subframe_3_t::idot() { if (f_idot) return m_idot; m_idot = ((idot_sign()) ? ((idot_value() - (1 << 13))) : (idot_value())); f_idot = true; return m_idot; } gps_t::subframe_4_t::subframe_4_t(kaitai::kstream* p__io, gps_t* p__parent, gps_t* p__root) : kaitai::kstruct(p__io) { m__parent = p__parent; m__root = p__root; try { _read(); } catch(...) { _clean_up(); throw; } } void gps_t::subframe_4_t::_read() { m_data_id = m__io->read_bits_int_be(2); m_page_id = m__io->read_bits_int_be(6); m__io->align_to_byte(); n_body = true; switch (page_id()) { case 56: { n_body = false; m_body = new ionosphere_data_t(m__io, this, m__root); break; } } } gps_t::subframe_4_t::~subframe_4_t() { _clean_up(); } void gps_t::subframe_4_t::_clean_up() { if (!n_body) { if (m_body) { delete m_body; m_body = 0; } } } gps_t::subframe_4_t::ionosphere_data_t::ionosphere_data_t(kaitai::kstream* p__io, gps_t::subframe_4_t* p__parent, gps_t* p__root) : kaitai::kstruct(p__io) { m__parent = p__parent; m__root = p__root; try { _read(); } catch(...) { _clean_up(); throw; } } void gps_t::subframe_4_t::ionosphere_data_t::_read() { m_a0 = m__io->read_s1(); m_a1 = m__io->read_s1(); m_a2 = m__io->read_s1(); m_a3 = m__io->read_s1(); m_b0 = m__io->read_s1(); m_b1 = m__io->read_s1(); m_b2 = m__io->read_s1(); m_b3 = m__io->read_s1(); } gps_t::subframe_4_t::ionosphere_data_t::~ionosphere_data_t() { _clean_up(); } void gps_t::subframe_4_t::ionosphere_data_t::_clean_up() { } gps_t::how_t::how_t(kaitai::kstream* p__io, gps_t* p__parent, gps_t* p__root) : kaitai::kstruct(p__io) { m__parent = p__parent; m__root = p__root; try { _read(); } catch(...) { _clean_up(); throw; } } void gps_t::how_t::_read() { m_tow_count = m__io->read_bits_int_be(17); m_alert = m__io->read_bits_int_be(1); m_anti_spoof = m__io->read_bits_int_be(1); m_subframe_id = m__io->read_bits_int_be(3); m_reserved = m__io->read_bits_int_be(2); } gps_t::how_t::~how_t() { _clean_up(); } void gps_t::how_t::_clean_up() { } gps_t::tlm_t::tlm_t(kaitai::kstream* p__io, gps_t* p__parent, gps_t* p__root) : kaitai::kstruct(p__io) { m__parent = p__parent; m__root = p__root; try { _read(); } catch(...) { _clean_up(); throw; } } void gps_t::tlm_t::_read() { m_preamble = m__io->read_bytes(1); if (!(preamble() == std::string("\x8B", 1))) { throw kaitai::validation_not_equal_error(std::string("\x8B", 1), preamble(), _io(), std::string("/types/tlm/seq/0")); } m_tlm = m__io->read_bits_int_be(14); m_integrity_status = m__io->read_bits_int_be(1); m_reserved = m__io->read_bits_int_be(1); } gps_t::tlm_t::~tlm_t() { _clean_up(); } void gps_t::tlm_t::_clean_up() { } gps_t::subframe_2_t::subframe_2_t(kaitai::kstream* p__io, gps_t* p__parent, gps_t* p__root) : kaitai::kstruct(p__io) { m__parent = p__parent; m__root = p__root; try { _read(); } catch(...) { _clean_up(); throw; } } void gps_t::subframe_2_t::_read() { m_iode = m__io->read_u1(); m_c_rs = m__io->read_s2be(); m_delta_n = m__io->read_s2be(); m_m_0 = m__io->read_s4be(); m_c_uc = m__io->read_s2be(); m_e = m__io->read_s4be(); m_c_us = m__io->read_s2be(); m_sqrt_a = m__io->read_u4be(); m_t_oe = m__io->read_u2be(); m_fit_interval_flag = m__io->read_bits_int_be(1); m_aoda = m__io->read_bits_int_be(5); m_reserved = m__io->read_bits_int_be(2); } gps_t::subframe_2_t::~subframe_2_t() { _clean_up(); } void gps_t::subframe_2_t::_clean_up() { }