17 #ifndef GNSS_SDR_ION_GSMS_CHUNK_DATA_H 18 #define GNSS_SDR_ION_GSMS_CHUNK_DATA_H 22 #include <gnuradio/block.h> 23 #include <GnssMetadata.h> 31 inline std::size_t bits_to_item_size(std::size_t bit_count)
51 std::cerr <<
"Item size too large (" << std::to_string(bit_count) <<
"), returning nonsense.\n";
62 Allocator(
size_t countwords,
void*& buffer)
63 : countwords_(countwords), buffer_(buffer) {}
65 template <
typename WordType>
66 void operator()()
const 68 buffer_ =
new WordType[countwords_];
81 template <
typename WordType>
82 void operator()()
const 84 delete[]
static_cast<WordType*
>(buffer_);
89 template <
typename Callback>
90 void with_word_type(uint8_t word_size, Callback callback)
95 callback.template operator()<int8_t>();
98 callback.template operator()<int16_t>();
101 callback.template operator()<int32_t>();
104 callback.template operator()<int64_t>();
107 std::cerr <<
"Unknown word size (" << std::to_string(word_size) <<
"), returning nonsense.\n";
115 IONGSMSChunkData(
const GnssMetadata::Chunk& chunk,
const std::vector<std::string>& stream_ids, std::size_t output_stream_offset);
125 std::size_t read_from_buffer(uint8_t* buffer, std::size_t offset);
127 void write_to_output(gr_vector_void_star& outputs, std::vector<int>& output_items);
129 std::size_t output_stream_count()
const;
130 std::size_t output_stream_item_size(std::size_t stream_index)
const;
131 std::size_t output_stream_item_rate(std::size_t stream_index)
const;
134 template <
typename WT>
135 void unpack_words(gr_vector_void_star& outputs, std::vector<int>& output_items);
137 template <
typename WT>
138 std::size_t write_stream_samples(
140 const GnssMetadata::Lump& lump,
141 const GnssMetadata::IonStream& stream,
142 GnssMetadata::StreamEncoding stream_encoding,
145 template <
typename WT,
typename OT>
146 void write_n_samples(
148 GnssMetadata::Lump::LumpShift lump_shift,
149 uint8_t sample_bitsize,
150 std::size_t sample_count,
151 GnssMetadata::StreamEncoding stream_encoding,
154 template <
typename Sample>
155 static void decode_sample(uint8_t sample_bitsize, Sample* sample, GnssMetadata::StreamEncoding encoding);
157 const GnssMetadata::Chunk& chunk_;
160 uint8_t padding_bitsize_;
161 std::size_t output_stream_count_;
162 std::vector<std::size_t> output_stream_item_size_;
163 std::vector<std::size_t> output_stream_item_rate_;
165 struct stream_metadata_t
167 const GnssMetadata::Lump& lump;
168 const GnssMetadata::IonStream& stream;
169 GnssMetadata::StreamEncoding stream_encoding;
170 int output_index = -1;
173 const GnssMetadata::Lump& lump_,
174 const GnssMetadata::IonStream& stream_,
175 GnssMetadata::StreamEncoding stream_encoding_,
176 int output_index_ = -1) : lump(lump_),
178 stream_encoding(stream_encoding_),
179 output_index(output_index_)
183 std::vector<stream_metadata_t> streams_;
188 #endif // GNSS_SDR_ION_GSMS_CHUNK_DATA_H
Implements look up tables for all encodings in the standard.
Holds state and provides utilities for unpacking samples from a chunk.