GNSS-SDR  0.0.21
An Open Source GNSS Software Defined Receiver
ion_gsms.h
Go to the documentation of this file.
1 /*!
2  * \file ion_gsms.h
3  * \brief GNU Radio block that reads a Block from a file following ION's GNSS-SDR metadata standard
4  * \author Víctor Castillo Agüero, 2024. victorcastilloaguero(at)gmail.com
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-2024 (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_ION_GSMS_H
18 #define GNSS_SDR_ION_GSMS_H
19 
20 #include "gnss_block_interface.h"
21 #include "gnss_sdr_filesystem.h"
22 #include "ion_gsms_chunk_data.h"
23 #include <gnuradio/block.h>
24 #include <gnuradio/sync_block.h>
25 #include <cstddef>
26 #include <fstream>
27 #include <memory>
28 #include <string>
29 #include <vector>
30 
31 /** \addtogroup Signal_Source
32  * \{ */
33 /** \addtogroup Signal_Source_gnuradio_blocks
34  * \{ */
35 
36 class IONGSMSFileSource : public gr::sync_block
37 {
38 public:
39  using sptr = gnss_shared_ptr<IONGSMSFileSource>;
40 
42  const fs::path& metadata_filepath,
43  const GnssMetadata::File& file,
44  const GnssMetadata::Block& block,
45  const std::vector<std::string>& stream_ids);
46 
47  int work(
48  int noutput_items,
49  gr_vector_const_void_star& input_items,
50  gr_vector_void_star& output_items) override;
51 
52  std::size_t output_stream_count() const;
53  std::size_t output_stream_item_size(std::size_t stream_index) const;
54  std::size_t output_stream_total_sample_count(std::size_t stream_index) const;
55 
56 private:
57  static gr::io_signature::sptr make_output_signature(const GnssMetadata::Block& block, const std::vector<std::string>& stream_ids);
58 
59  std::ifstream file_stream_;
60  std::vector<char> io_buffer_;
61  std::size_t io_buffer_offset_;
62  std::vector<int> items_produced_;
63  std::size_t output_stream_count_;
64  std::vector<std::size_t> output_stream_item_sizes_;
65  std::vector<std::size_t> output_stream_item_rates_;
66  std::vector<std::size_t> output_stream_total_sample_counts_;
67  std::size_t maximum_item_rate_;
68  std::vector<std::shared_ptr<IONGSMSChunkData>> chunk_data_;
69  std::size_t chunk_cycle_length_;
70 };
71 
72 /** \} */
73 /** \} */
74 #endif // GNSS_SDR_ION_GSMS_H
This interface represents a GNSS block.
Helper file for fylesystem library interface.
Holds logic for reading and decoding samples from a chunk.