GNSS-SDR 0.0.21
An Open Source GNSS Software Defined Receiver
Loading...
Searching...
No Matches
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
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
36class IONGSMSFileSource : public gr::sync_block
37{
38public:
39 using sptr = gnss_shared_ptr<IONGSMSFileSource>;
40
41 IONGSMSFileSource(
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
56private:
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.