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