Glonass ephemeris support (#27088)
	
		
	
				
					
				
			* add glonass kaitai parsing * add kaita generated files * remove glonass from build * add string non immediate type * fix kaitai bug * add patch file * fix scons order * Update selfdrive/locationd/SConscript Co-authored-by: Adeeb Shihadeh <adeebshihadeh@gmail.com> Co-authored-by: Kurt Nistelberger <kurt.nistelberger@gmail.com> Co-authored-by: Adeeb Shihadeh <adeebshihadeh@gmail.com>mqb-fw-rhadeur^2
							parent
							
								
									9201267fb7
								
							
						
					
					
						commit
						6f0d35a09f
					
				
				 9 changed files with 566 additions and 12 deletions
			
			
		@ -0,0 +1,201 @@ | 
				
			|||||||
 | 
					// This is a generated file! Please edit source .ksy file and use kaitai-struct-compiler to rebuild
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "glonass.h" | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					glonass_t::glonass_t(kaitai::kstream* p__io, kaitai::kstruct* p__parent, glonass_t* p__root) : kaitai::kstruct(p__io) { | 
				
			||||||
 | 
					    m__parent = p__parent; | 
				
			||||||
 | 
					    m__root = this; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    try { | 
				
			||||||
 | 
					        _read(); | 
				
			||||||
 | 
					    } catch(...) { | 
				
			||||||
 | 
					        _clean_up(); | 
				
			||||||
 | 
					        throw; | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void glonass_t::_read() { | 
				
			||||||
 | 
					    m_idle_chip = m__io->read_bits_int_be(1); | 
				
			||||||
 | 
					    m_string_number = m__io->read_bits_int_be(4); | 
				
			||||||
 | 
					    //m__io->align_to_byte();
 | 
				
			||||||
 | 
					    switch (string_number()) { | 
				
			||||||
 | 
					    case 4: { | 
				
			||||||
 | 
					        m_data = new string_4_t(m__io, this, m__root); | 
				
			||||||
 | 
					        break; | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					    case 1: { | 
				
			||||||
 | 
					        m_data = new string_1_t(m__io, this, m__root); | 
				
			||||||
 | 
					        break; | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					    case 3: { | 
				
			||||||
 | 
					        m_data = new string_3_t(m__io, this, m__root); | 
				
			||||||
 | 
					        break; | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					    case 2: { | 
				
			||||||
 | 
					        m_data = new string_2_t(m__io, this, m__root); | 
				
			||||||
 | 
					        break; | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					    default: { | 
				
			||||||
 | 
					        m_data = new string_non_immediate_t(m__io, this, m__root); | 
				
			||||||
 | 
					        break; | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					    m_hamming_code = m__io->read_bits_int_be(8); | 
				
			||||||
 | 
					    m_pad_1 = m__io->read_bits_int_be(11); | 
				
			||||||
 | 
					    m_superframe_number = m__io->read_bits_int_be(16); | 
				
			||||||
 | 
					    m_pad_2 = m__io->read_bits_int_be(8); | 
				
			||||||
 | 
					    m_frame_number = m__io->read_bits_int_be(8); | 
				
			||||||
 | 
					} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					glonass_t::~glonass_t() { | 
				
			||||||
 | 
					    _clean_up(); | 
				
			||||||
 | 
					} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void glonass_t::_clean_up() { | 
				
			||||||
 | 
					    if (m_data) { | 
				
			||||||
 | 
					        delete m_data; m_data = 0; | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					glonass_t::string_4_t::string_4_t(kaitai::kstream* p__io, glonass_t* p__parent, glonass_t* p__root) : kaitai::kstruct(p__io) { | 
				
			||||||
 | 
					    m__parent = p__parent; | 
				
			||||||
 | 
					    m__root = p__root; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    try { | 
				
			||||||
 | 
					        _read(); | 
				
			||||||
 | 
					    } catch(...) { | 
				
			||||||
 | 
					        _clean_up(); | 
				
			||||||
 | 
					        throw; | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void glonass_t::string_4_t::_read() { | 
				
			||||||
 | 
					    m_tau_n = m__io->read_bits_int_be(22); | 
				
			||||||
 | 
					    m_delta_tau_n = m__io->read_bits_int_be(5); | 
				
			||||||
 | 
					    m_e_n = m__io->read_bits_int_be(5); | 
				
			||||||
 | 
					    m_not_used_1 = m__io->read_bits_int_be(14); | 
				
			||||||
 | 
					    m_p4 = m__io->read_bits_int_be(1); | 
				
			||||||
 | 
					    m_f_t = m__io->read_bits_int_be(4); | 
				
			||||||
 | 
					    m_not_used_2 = m__io->read_bits_int_be(3); | 
				
			||||||
 | 
					    m_n_t = m__io->read_bits_int_be(11); | 
				
			||||||
 | 
					    m_n = m__io->read_bits_int_be(5); | 
				
			||||||
 | 
					    m_m = m__io->read_bits_int_be(2); | 
				
			||||||
 | 
					} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					glonass_t::string_4_t::~string_4_t() { | 
				
			||||||
 | 
					    _clean_up(); | 
				
			||||||
 | 
					} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void glonass_t::string_4_t::_clean_up() { | 
				
			||||||
 | 
					} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					glonass_t::string_non_immediate_t::string_non_immediate_t(kaitai::kstream* p__io, glonass_t* p__parent, glonass_t* p__root) : kaitai::kstruct(p__io) { | 
				
			||||||
 | 
					    m__parent = p__parent; | 
				
			||||||
 | 
					    m__root = p__root; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    try { | 
				
			||||||
 | 
					        _read(); | 
				
			||||||
 | 
					    } catch(...) { | 
				
			||||||
 | 
					        _clean_up(); | 
				
			||||||
 | 
					        throw; | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void glonass_t::string_non_immediate_t::_read() { | 
				
			||||||
 | 
					    m_data_1 = m__io->read_bits_int_be(64); | 
				
			||||||
 | 
					    m_data_2 = m__io->read_bits_int_be(8); | 
				
			||||||
 | 
					} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					glonass_t::string_non_immediate_t::~string_non_immediate_t() { | 
				
			||||||
 | 
					    _clean_up(); | 
				
			||||||
 | 
					} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void glonass_t::string_non_immediate_t::_clean_up() { | 
				
			||||||
 | 
					} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					glonass_t::string_1_t::string_1_t(kaitai::kstream* p__io, glonass_t* p__parent, glonass_t* p__root) : kaitai::kstruct(p__io) { | 
				
			||||||
 | 
					    m__parent = p__parent; | 
				
			||||||
 | 
					    m__root = p__root; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    try { | 
				
			||||||
 | 
					        _read(); | 
				
			||||||
 | 
					    } catch(...) { | 
				
			||||||
 | 
					        _clean_up(); | 
				
			||||||
 | 
					        throw; | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void glonass_t::string_1_t::_read() { | 
				
			||||||
 | 
					    m_not_used = m__io->read_bits_int_be(2); | 
				
			||||||
 | 
					    m_p1 = m__io->read_bits_int_be(2); | 
				
			||||||
 | 
					    m_t_k = m__io->read_bits_int_be(12); | 
				
			||||||
 | 
					    m_x_vel = m__io->read_bits_int_be(24); | 
				
			||||||
 | 
					    m_x_speedup = m__io->read_bits_int_be(5); | 
				
			||||||
 | 
					    m_x = m__io->read_bits_int_be(27); | 
				
			||||||
 | 
					} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					glonass_t::string_1_t::~string_1_t() { | 
				
			||||||
 | 
					    _clean_up(); | 
				
			||||||
 | 
					} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void glonass_t::string_1_t::_clean_up() { | 
				
			||||||
 | 
					} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					glonass_t::string_2_t::string_2_t(kaitai::kstream* p__io, glonass_t* p__parent, glonass_t* p__root) : kaitai::kstruct(p__io) { | 
				
			||||||
 | 
					    m__parent = p__parent; | 
				
			||||||
 | 
					    m__root = p__root; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    try { | 
				
			||||||
 | 
					        _read(); | 
				
			||||||
 | 
					    } catch(...) { | 
				
			||||||
 | 
					        _clean_up(); | 
				
			||||||
 | 
					        throw; | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void glonass_t::string_2_t::_read() { | 
				
			||||||
 | 
					    m_b_n = m__io->read_bits_int_be(3); | 
				
			||||||
 | 
					    m_p2 = m__io->read_bits_int_be(1); | 
				
			||||||
 | 
					    m_t_b = m__io->read_bits_int_be(7); | 
				
			||||||
 | 
					    m_not_used = m__io->read_bits_int_be(5); | 
				
			||||||
 | 
					    m_y_vel = m__io->read_bits_int_be(24); | 
				
			||||||
 | 
					    m_y_speedup = m__io->read_bits_int_be(5); | 
				
			||||||
 | 
					    m_y = m__io->read_bits_int_be(27); | 
				
			||||||
 | 
					} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					glonass_t::string_2_t::~string_2_t() { | 
				
			||||||
 | 
					    _clean_up(); | 
				
			||||||
 | 
					} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void glonass_t::string_2_t::_clean_up() { | 
				
			||||||
 | 
					} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					glonass_t::string_3_t::string_3_t(kaitai::kstream* p__io, glonass_t* p__parent, glonass_t* p__root) : kaitai::kstruct(p__io) { | 
				
			||||||
 | 
					    m__parent = p__parent; | 
				
			||||||
 | 
					    m__root = p__root; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    try { | 
				
			||||||
 | 
					        _read(); | 
				
			||||||
 | 
					    } catch(...) { | 
				
			||||||
 | 
					        _clean_up(); | 
				
			||||||
 | 
					        throw; | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void glonass_t::string_3_t::_read() { | 
				
			||||||
 | 
					    m_p3 = m__io->read_bits_int_be(1); | 
				
			||||||
 | 
					    m_gamma_n = m__io->read_bits_int_be(11); | 
				
			||||||
 | 
					    m_not_used = m__io->read_bits_int_be(1); | 
				
			||||||
 | 
					    m_p = m__io->read_bits_int_be(2); | 
				
			||||||
 | 
					    m_l_n = m__io->read_bits_int_be(1); | 
				
			||||||
 | 
					    m_z_vel = m__io->read_bits_int_be(24); | 
				
			||||||
 | 
					    m_z_speedup = m__io->read_bits_int_be(5); | 
				
			||||||
 | 
					    m_z = m__io->read_bits_int_be(27); | 
				
			||||||
 | 
					} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					glonass_t::string_3_t::~string_3_t() { | 
				
			||||||
 | 
					    _clean_up(); | 
				
			||||||
 | 
					} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void glonass_t::string_3_t::_clean_up() { | 
				
			||||||
 | 
					} | 
				
			||||||
@ -0,0 +1,232 @@ | 
				
			|||||||
 | 
					#ifndef GLONASS_H_ | 
				
			||||||
 | 
					#define GLONASS_H_ | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// This is a generated file! Please edit source .ksy file and use kaitai-struct-compiler to rebuild
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "kaitai/kaitaistruct.h" | 
				
			||||||
 | 
					#include <stdint.h> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if KAITAI_STRUCT_VERSION < 9000L | 
				
			||||||
 | 
					#error "Incompatible Kaitai Struct C++/STL API: version 0.9 or later is required" | 
				
			||||||
 | 
					#endif | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class glonass_t : public kaitai::kstruct { | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public: | 
				
			||||||
 | 
					    class string_4_t; | 
				
			||||||
 | 
					    class string_non_immediate_t; | 
				
			||||||
 | 
					    class string_1_t; | 
				
			||||||
 | 
					    class string_2_t; | 
				
			||||||
 | 
					    class string_3_t; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    glonass_t(kaitai::kstream* p__io, kaitai::kstruct* p__parent = 0, glonass_t* p__root = 0); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					private: | 
				
			||||||
 | 
					    void _read(); | 
				
			||||||
 | 
					    void _clean_up(); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public: | 
				
			||||||
 | 
					    ~glonass_t(); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    class string_4_t : public kaitai::kstruct { | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public: | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        string_4_t(kaitai::kstream* p__io, glonass_t* p__parent = 0, glonass_t* p__root = 0); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private: | 
				
			||||||
 | 
					        void _read(); | 
				
			||||||
 | 
					        void _clean_up(); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public: | 
				
			||||||
 | 
					        ~string_4_t(); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private: | 
				
			||||||
 | 
					        uint64_t m_tau_n; | 
				
			||||||
 | 
					        uint64_t m_delta_tau_n; | 
				
			||||||
 | 
					        uint64_t m_e_n; | 
				
			||||||
 | 
					        uint64_t m_not_used_1; | 
				
			||||||
 | 
					        bool m_p4; | 
				
			||||||
 | 
					        uint64_t m_f_t; | 
				
			||||||
 | 
					        uint64_t m_not_used_2; | 
				
			||||||
 | 
					        uint64_t m_n_t; | 
				
			||||||
 | 
					        uint64_t m_n; | 
				
			||||||
 | 
					        uint64_t m_m; | 
				
			||||||
 | 
					        glonass_t* m__root; | 
				
			||||||
 | 
					        glonass_t* m__parent; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public: | 
				
			||||||
 | 
					        uint64_t tau_n() const { return m_tau_n; } | 
				
			||||||
 | 
					        uint64_t delta_tau_n() const { return m_delta_tau_n; } | 
				
			||||||
 | 
					        uint64_t e_n() const { return m_e_n; } | 
				
			||||||
 | 
					        uint64_t not_used_1() const { return m_not_used_1; } | 
				
			||||||
 | 
					        bool p4() const { return m_p4; } | 
				
			||||||
 | 
					        uint64_t f_t() const { return m_f_t; } | 
				
			||||||
 | 
					        uint64_t not_used_2() const { return m_not_used_2; } | 
				
			||||||
 | 
					        uint64_t n_t() const { return m_n_t; } | 
				
			||||||
 | 
					        uint64_t n() const { return m_n; } | 
				
			||||||
 | 
					        uint64_t m() const { return m_m; } | 
				
			||||||
 | 
					        glonass_t* _root() const { return m__root; } | 
				
			||||||
 | 
					        glonass_t* _parent() const { return m__parent; } | 
				
			||||||
 | 
					    }; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    class string_non_immediate_t : public kaitai::kstruct { | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public: | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        string_non_immediate_t(kaitai::kstream* p__io, glonass_t* p__parent = 0, glonass_t* p__root = 0); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private: | 
				
			||||||
 | 
					        void _read(); | 
				
			||||||
 | 
					        void _clean_up(); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public: | 
				
			||||||
 | 
					        ~string_non_immediate_t(); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private: | 
				
			||||||
 | 
					        uint64_t m_data_1; | 
				
			||||||
 | 
					        uint64_t m_data_2; | 
				
			||||||
 | 
					        glonass_t* m__root; | 
				
			||||||
 | 
					        glonass_t* m__parent; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public: | 
				
			||||||
 | 
					        uint64_t data_1() const { return m_data_1; } | 
				
			||||||
 | 
					        uint64_t data_2() const { return m_data_2; } | 
				
			||||||
 | 
					        glonass_t* _root() const { return m__root; } | 
				
			||||||
 | 
					        glonass_t* _parent() const { return m__parent; } | 
				
			||||||
 | 
					    }; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    class string_1_t : public kaitai::kstruct { | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public: | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        string_1_t(kaitai::kstream* p__io, glonass_t* p__parent = 0, glonass_t* p__root = 0); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private: | 
				
			||||||
 | 
					        void _read(); | 
				
			||||||
 | 
					        void _clean_up(); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public: | 
				
			||||||
 | 
					        ~string_1_t(); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private: | 
				
			||||||
 | 
					        uint64_t m_not_used; | 
				
			||||||
 | 
					        uint64_t m_p1; | 
				
			||||||
 | 
					        uint64_t m_t_k; | 
				
			||||||
 | 
					        uint64_t m_x_vel; | 
				
			||||||
 | 
					        uint64_t m_x_speedup; | 
				
			||||||
 | 
					        uint64_t m_x; | 
				
			||||||
 | 
					        glonass_t* m__root; | 
				
			||||||
 | 
					        glonass_t* m__parent; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public: | 
				
			||||||
 | 
					        uint64_t not_used() const { return m_not_used; } | 
				
			||||||
 | 
					        uint64_t p1() const { return m_p1; } | 
				
			||||||
 | 
					        uint64_t t_k() const { return m_t_k; } | 
				
			||||||
 | 
					        uint64_t x_vel() const { return m_x_vel; } | 
				
			||||||
 | 
					        uint64_t x_speedup() const { return m_x_speedup; } | 
				
			||||||
 | 
					        uint64_t x() const { return m_x; } | 
				
			||||||
 | 
					        glonass_t* _root() const { return m__root; } | 
				
			||||||
 | 
					        glonass_t* _parent() const { return m__parent; } | 
				
			||||||
 | 
					    }; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    class string_2_t : public kaitai::kstruct { | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public: | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        string_2_t(kaitai::kstream* p__io, glonass_t* p__parent = 0, glonass_t* p__root = 0); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private: | 
				
			||||||
 | 
					        void _read(); | 
				
			||||||
 | 
					        void _clean_up(); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public: | 
				
			||||||
 | 
					        ~string_2_t(); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private: | 
				
			||||||
 | 
					        uint64_t m_b_n; | 
				
			||||||
 | 
					        bool m_p2; | 
				
			||||||
 | 
					        uint64_t m_t_b; | 
				
			||||||
 | 
					        uint64_t m_not_used; | 
				
			||||||
 | 
					        uint64_t m_y_vel; | 
				
			||||||
 | 
					        uint64_t m_y_speedup; | 
				
			||||||
 | 
					        uint64_t m_y; | 
				
			||||||
 | 
					        glonass_t* m__root; | 
				
			||||||
 | 
					        glonass_t* m__parent; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public: | 
				
			||||||
 | 
					        uint64_t b_n() const { return m_b_n; } | 
				
			||||||
 | 
					        bool p2() const { return m_p2; } | 
				
			||||||
 | 
					        uint64_t t_b() const { return m_t_b; } | 
				
			||||||
 | 
					        uint64_t not_used() const { return m_not_used; } | 
				
			||||||
 | 
					        uint64_t y_vel() const { return m_y_vel; } | 
				
			||||||
 | 
					        uint64_t y_speedup() const { return m_y_speedup; } | 
				
			||||||
 | 
					        uint64_t y() const { return m_y; } | 
				
			||||||
 | 
					        glonass_t* _root() const { return m__root; } | 
				
			||||||
 | 
					        glonass_t* _parent() const { return m__parent; } | 
				
			||||||
 | 
					    }; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    class string_3_t : public kaitai::kstruct { | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public: | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        string_3_t(kaitai::kstream* p__io, glonass_t* p__parent = 0, glonass_t* p__root = 0); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private: | 
				
			||||||
 | 
					        void _read(); | 
				
			||||||
 | 
					        void _clean_up(); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public: | 
				
			||||||
 | 
					        ~string_3_t(); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private: | 
				
			||||||
 | 
					        bool m_p3; | 
				
			||||||
 | 
					        uint64_t m_gamma_n; | 
				
			||||||
 | 
					        bool m_not_used; | 
				
			||||||
 | 
					        uint64_t m_p; | 
				
			||||||
 | 
					        bool m_l_n; | 
				
			||||||
 | 
					        uint64_t m_z_vel; | 
				
			||||||
 | 
					        uint64_t m_z_speedup; | 
				
			||||||
 | 
					        uint64_t m_z; | 
				
			||||||
 | 
					        glonass_t* m__root; | 
				
			||||||
 | 
					        glonass_t* m__parent; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public: | 
				
			||||||
 | 
					        bool p3() const { return m_p3; } | 
				
			||||||
 | 
					        uint64_t gamma_n() const { return m_gamma_n; } | 
				
			||||||
 | 
					        bool not_used() const { return m_not_used; } | 
				
			||||||
 | 
					        uint64_t p() const { return m_p; } | 
				
			||||||
 | 
					        bool l_n() const { return m_l_n; } | 
				
			||||||
 | 
					        uint64_t z_vel() const { return m_z_vel; } | 
				
			||||||
 | 
					        uint64_t z_speedup() const { return m_z_speedup; } | 
				
			||||||
 | 
					        uint64_t z() const { return m_z; } | 
				
			||||||
 | 
					        glonass_t* _root() const { return m__root; } | 
				
			||||||
 | 
					        glonass_t* _parent() const { return m__parent; } | 
				
			||||||
 | 
					    }; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					private: | 
				
			||||||
 | 
					    bool m_idle_chip; | 
				
			||||||
 | 
					    uint64_t m_string_number; | 
				
			||||||
 | 
					    kaitai::kstruct* m_data; | 
				
			||||||
 | 
					    uint64_t m_hamming_code; | 
				
			||||||
 | 
					    uint64_t m_pad_1; | 
				
			||||||
 | 
					    uint64_t m_superframe_number; | 
				
			||||||
 | 
					    uint64_t m_pad_2; | 
				
			||||||
 | 
					    uint64_t m_frame_number; | 
				
			||||||
 | 
					    glonass_t* m__root; | 
				
			||||||
 | 
					    kaitai::kstruct* m__parent; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public: | 
				
			||||||
 | 
					    bool idle_chip() const { return m_idle_chip; } | 
				
			||||||
 | 
					    uint64_t string_number() const { return m_string_number; } | 
				
			||||||
 | 
					    kaitai::kstruct* data() const { return m_data; } | 
				
			||||||
 | 
					    uint64_t hamming_code() const { return m_hamming_code; } | 
				
			||||||
 | 
					    uint64_t pad_1() const { return m_pad_1; } | 
				
			||||||
 | 
					    uint64_t superframe_number() const { return m_superframe_number; } | 
				
			||||||
 | 
					    uint64_t pad_2() const { return m_pad_2; } | 
				
			||||||
 | 
					    uint64_t frame_number() const { return m_frame_number; } | 
				
			||||||
 | 
					    glonass_t* _root() const { return m__root; } | 
				
			||||||
 | 
					    kaitai::kstruct* _parent() const { return m__parent; } | 
				
			||||||
 | 
					}; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif  // GLONASS_H_
 | 
				
			||||||
@ -0,0 +1,107 @@ | 
				
			|||||||
 | 
					# http://gauss.gge.unb.ca/GLONASS.ICD.pdf | 
				
			||||||
 | 
					meta: | 
				
			||||||
 | 
					  id: glonass | 
				
			||||||
 | 
					  endian: be | 
				
			||||||
 | 
					  bit-endian: be | 
				
			||||||
 | 
					seq: | 
				
			||||||
 | 
					  - id: idle_chip | 
				
			||||||
 | 
					    type: b1 | 
				
			||||||
 | 
					  - id: string_number | 
				
			||||||
 | 
					    type: b4 | 
				
			||||||
 | 
					  - id: data | 
				
			||||||
 | 
					    type: | 
				
			||||||
 | 
					      switch-on: string_number | 
				
			||||||
 | 
					      cases: | 
				
			||||||
 | 
					        1: string_1 | 
				
			||||||
 | 
					        2: string_2 | 
				
			||||||
 | 
					        3: string_3 | 
				
			||||||
 | 
					        4: string_4 | 
				
			||||||
 | 
					        _: string_non_immediate | 
				
			||||||
 | 
					  - id: hamming_code | 
				
			||||||
 | 
					    type: b8 | 
				
			||||||
 | 
					  - id: pad_1 | 
				
			||||||
 | 
					    type: b11 | 
				
			||||||
 | 
					  - id: superframe_number | 
				
			||||||
 | 
					    type: b16 | 
				
			||||||
 | 
					  - id: pad_2 | 
				
			||||||
 | 
					    type: b8 | 
				
			||||||
 | 
					  - id: frame_number | 
				
			||||||
 | 
					    type: b8 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					types: | 
				
			||||||
 | 
					  string_1: | 
				
			||||||
 | 
					    seq: | 
				
			||||||
 | 
					      - id: not_used | 
				
			||||||
 | 
					        type: b2 | 
				
			||||||
 | 
					      - id: p1 | 
				
			||||||
 | 
					        type: b2 | 
				
			||||||
 | 
					      - id: t_k | 
				
			||||||
 | 
					        type: b12 | 
				
			||||||
 | 
					      - id: x_vel | 
				
			||||||
 | 
					        type: b24 | 
				
			||||||
 | 
					      - id: x_speedup | 
				
			||||||
 | 
					        type: b5 | 
				
			||||||
 | 
					      - id: x | 
				
			||||||
 | 
					        type: b27 | 
				
			||||||
 | 
					  string_2: | 
				
			||||||
 | 
					    seq: | 
				
			||||||
 | 
					      - id: b_n | 
				
			||||||
 | 
					        type: b3 | 
				
			||||||
 | 
					      - id: p2 | 
				
			||||||
 | 
					        type: b1 | 
				
			||||||
 | 
					      - id: t_b | 
				
			||||||
 | 
					        type: b7 | 
				
			||||||
 | 
					      - id: not_used | 
				
			||||||
 | 
					        type: b5 | 
				
			||||||
 | 
					      - id: y_vel | 
				
			||||||
 | 
					        type: b24 | 
				
			||||||
 | 
					      - id: y_speedup | 
				
			||||||
 | 
					        type: b5 | 
				
			||||||
 | 
					      - id: y | 
				
			||||||
 | 
					        type: b27 | 
				
			||||||
 | 
					  string_3: | 
				
			||||||
 | 
					    seq: | 
				
			||||||
 | 
					      - id: p3 | 
				
			||||||
 | 
					        type: b1 | 
				
			||||||
 | 
					      - id: gamma_n | 
				
			||||||
 | 
					        type: b11 | 
				
			||||||
 | 
					      - id: not_used | 
				
			||||||
 | 
					        type: b1 | 
				
			||||||
 | 
					      - id: p | 
				
			||||||
 | 
					        type: b2 | 
				
			||||||
 | 
					      - id: l_n | 
				
			||||||
 | 
					        type: b1 | 
				
			||||||
 | 
					      - id: z_vel | 
				
			||||||
 | 
					        type: b24 | 
				
			||||||
 | 
					      - id: z_speedup | 
				
			||||||
 | 
					        type: b5 | 
				
			||||||
 | 
					      - id: z | 
				
			||||||
 | 
					        type: b27 | 
				
			||||||
 | 
					  string_4: | 
				
			||||||
 | 
					    seq: | 
				
			||||||
 | 
					      - id: tau_n | 
				
			||||||
 | 
					        type: b22 | 
				
			||||||
 | 
					      - id: delta_tau_n | 
				
			||||||
 | 
					        type: b5 | 
				
			||||||
 | 
					      - id: e_n | 
				
			||||||
 | 
					        type: b5 | 
				
			||||||
 | 
					      - id: not_used_1 | 
				
			||||||
 | 
					        type: b14 | 
				
			||||||
 | 
					      - id: p4 | 
				
			||||||
 | 
					        type: b1 | 
				
			||||||
 | 
					      - id: f_t | 
				
			||||||
 | 
					        type: b4 | 
				
			||||||
 | 
					      - id: not_used_2 | 
				
			||||||
 | 
					        type: b3 | 
				
			||||||
 | 
					      - id: n_t | 
				
			||||||
 | 
					        type: b11 | 
				
			||||||
 | 
					      - id: n | 
				
			||||||
 | 
					        type: b5 | 
				
			||||||
 | 
					      - id: m | 
				
			||||||
 | 
					        type: b2 | 
				
			||||||
 | 
					  string_non_immediate: | 
				
			||||||
 | 
					    seq: | 
				
			||||||
 | 
					      - id: data_1 | 
				
			||||||
 | 
					        type: b64 | 
				
			||||||
 | 
					      - id: data_2 | 
				
			||||||
 | 
					        type: b8 | 
				
			||||||
@ -0,0 +1,13 @@ | 
				
			|||||||
 | 
					diff --git a/selfdrive/locationd/generated/glonass.cpp b/selfdrive/locationd/generated/glonass.cpp
 | 
				
			||||||
 | 
					index 6a48fe62c..149134fbb 100644
 | 
				
			||||||
 | 
					--- a/selfdrive/locationd/generated/glonass.cpp
 | 
				
			||||||
 | 
					+++ b/selfdrive/locationd/generated/glonass.cpp
 | 
				
			||||||
 | 
					@@ -17,7 +17,7 @@ glonass_t::glonass_t(kaitai::kstream* p__io, kaitai::kstruct* p__parent, glonass
 | 
				
			||||||
 | 
					 void glonass_t::_read() {
 | 
				
			||||||
 | 
					     m_idle_chip = m__io->read_bits_int_be(1);
 | 
				
			||||||
 | 
					     m_string_number = m__io->read_bits_int_be(4);
 | 
				
			||||||
 | 
					-    m__io->align_to_byte();
 | 
				
			||||||
 | 
					+    //m__io->align_to_byte();
 | 
				
			||||||
 | 
					     switch (string_number()) {
 | 
				
			||||||
 | 
					     case 4: {
 | 
				
			||||||
 | 
					         m_data = new string_4_t(m__io, this, m__root);
 | 
				
			||||||
					Loading…
					
					
				
		Reference in new issue