GNSS-SDR 0.0.21
An Open Source GNSS Software Defined Receiver
Loading...
Searching...
No Matches
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
29class OSNMA_DSM_Reader
30{
31public:
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
65private:
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