GNSS-SDR  0.0.21
An Open Source GNSS Software Defined Receiver
osnma_dsm_reader.h
Go to the documentation of this file.
1 /*!
2  * \file osnma_dsm_reader.h
3  * \brief Class for reading OSNMA DSM messages
4  * \author Carles Fernandez-Prades, 2023 cfernandez(at)cttc.es
5  *
6  * -----------------------------------------------------------------------------
7  *
8  * GNSS-SDR is a Global Navigation Satellite System software-defined receiver.
9  * This file is part of GNSS-SDR.
10  *
11  * Copyright (C) 2010-2023 (see AUTHORS file for a list of contributors)
12  * SPDX-License-Identifier: GPL-3.0-or-later
13  *
14  * -----------------------------------------------------------------------------
15  */
16 
17 #ifndef GNSS_SDR_OSNMA_DSM_READER_H
18 #define GNSS_SDR_OSNMA_DSM_READER_H
19 
20 #include <cstdint>
21 #include <string>
22 #include <vector>
23 
24 /** \addtogroup Core
25  * \{ */
26 /** \addtogroup System_Parameters
27  * \{ */
28 
30 {
31 public:
32  OSNMA_DSM_Reader() = default;
33  uint8_t get_nmas(uint8_t nma_header) const;
34  uint8_t get_cid(uint8_t nma_header) const;
35  uint8_t get_cpks(uint8_t nma_header) const;
36  bool get_nma_header_reserved(uint8_t nma_header) const;
37 
38  uint8_t get_dsm_id(uint8_t dsm_header) const;
39  uint8_t get_dsm_block_id(uint8_t dsm_header) const;
40 
41  uint8_t get_number_blocks_index(uint8_t dsm_msg_0) const;
42  uint8_t get_pkid(const std::vector<uint8_t>& dsm_msg) const;
43  uint8_t get_cidkr(const std::vector<uint8_t>& dsm_msg) const;
44  uint8_t get_dsm_reserved1(const std::vector<uint8_t>& dsm_msg) const;
45  uint8_t get_hf(const std::vector<uint8_t>& dsm_msg) const;
46  uint8_t get_mf(const std::vector<uint8_t>& dsm_msg) const;
47  uint8_t get_ks(const std::vector<uint8_t>& dsm_msg) const;
48  uint8_t get_ts(const std::vector<uint8_t>& dsm_msg) const;
49  uint8_t get_maclt(const std::vector<uint8_t>& dsm_msg) const;
50  uint8_t get_dsm_reserved(const std::vector<uint8_t>& dsm_msg) const;
51  uint16_t get_wn_k(const std::vector<uint8_t>& dsm_msg) const;
52  uint8_t get_towh_k(const std::vector<uint8_t>& dsm_msg) const;
53  uint64_t get_alpha(const std::vector<uint8_t>& dsm_msg) const;
54  uint16_t get_l_dk_bits(uint8_t nb_dk) const;
55  uint16_t get_lk_bits(uint8_t ks) const;
56  std::vector<uint8_t> get_kroot(const std::vector<uint8_t>& dsm_msg, uint16_t bytes_lk) const;
57  std::string get_hash_function(uint8_t hf) const;
58  std::string get_nmas_status(uint8_t nmas) const;
59  std::string get_cpks_status(uint8_t cpks) const;
60 
61  uint8_t get_mid(const std::vector<uint8_t>& dsm_msg) const;
62  uint8_t get_npkt(const std::vector<uint8_t>& dsm_msg) const;
63  uint8_t get_npktid(const std::vector<uint8_t>& dsm_msg) const;
64 
65 private:
66  static constexpr std::uint8_t mask_nmas{0xC0};
67  static constexpr std::uint8_t mask_cid{0x30};
68  static constexpr std::uint8_t mask_cpks{0x0E};
69  static constexpr std::uint8_t mask_nma_header_reserved{0x01};
70  static constexpr std::uint8_t mask_dsm_id{0xF0};
71  static constexpr std::uint8_t mask_dsm_block_id{0x0F};
72  static constexpr std::uint8_t mask_dsm_number_blocks{0xF0};
73  static constexpr std::uint8_t mask_dsm_pkid{0x0F};
74  static constexpr std::uint8_t mask_dsm_cidkr{0xC0};
75  static constexpr std::uint8_t mask_dsm_reserved1{0x30};
76  static constexpr std::uint8_t mask_dsm_hf{0x0C};
77  static constexpr std::uint8_t mask_dsm_mf{0x03};
78  static constexpr std::uint8_t mask_dsm_ks{0xF0};
79  static constexpr std::uint8_t mask_dsm_ts{0x0F};
80  static constexpr std::uint8_t mask_dsm_reserved{0xF0};
81  static constexpr std::uint8_t mask_dsm_wk_k_msbyte{0x0F};
82  static constexpr std::uint8_t mask_dsm_mid{0x0F};
83  static constexpr std::uint8_t mask_dsm_npkt{0xF0};
84  static constexpr std::uint8_t mask_dsm_npktid{0x0F};
85 };
86 
87 /** \} */
88 /** \} */
89 #endif // GNSS_SDR_OSNMA_DSM_READER_H