GNU Radio's LIMESDR Package

sink_impl.h
Go to the documentation of this file.
1/* -*- c++ -*- */
2/*
3 * Copyright 2019 Lime Microsystems.
4 *
5 * This is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 3, or (at your option)
8 * any later version.
9 *
10 * This software is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this software; see the file COPYING. If not, write to
17 * the Free Software Foundation, Inc., 51 Franklin Street,
18 * Boston, MA 02110-1301, USA.
19 */
20
21#ifndef INCLUDED_LIMESDR_SINK_IMPL_H
22#define INCLUDED_LIMESDR_SINK_IMPL_H
23
24#include "device_handler.h"
25#include <limesdr/sink.h>
26
27
28 static const pmt::pmt_t TIME_TAG = pmt::string_to_symbol("tx_time");
29
30 namespace gr {
31 namespace limesdr {
32 class sink_impl : public sink
33{
34 private:
35 lms_stream_t streamId[2];
36
37 bool stream_analyzer = false;
38
39 int sink_block = 2;
40
41 pmt::pmt_t LENGTH_TAG;
42 lms_stream_meta_t tx_meta;
43 long burst_length = 0;
44 int nitems_send = 0;
45 int ret[2] = { 0 };
46 int pa_path[2] = { 0 }; // TX PA path NONE
47
48 struct constant_data {
49 std::string serial;
50 int device_number;
51 int channel_mode;
52 double samp_rate = 10e6;
53 uint32_t FIFO_size = 0;
54 } stored;
55
56 std::chrono::high_resolution_clock::time_point t1, t2;
57
58 void work_tags(int noutput_items);
59
60 void print_stream_stats(int channel);
61
62 public:
63 sink_impl(std::string serial,
64 int channel_mode,
65 const std::string& filename,
66 const std::string& length_tag_name);
67 ~sink_impl();
68
69 int work(int noutput_items,
70 gr_vector_const_void_star& input_items,
71 gr_vector_void_star& output_items);
72
73 bool start(void);
74
75 bool stop(void);
76
77 inline gr::io_signature::sptr args_to_io_signature(int channel_number);
78
79 void init_stream(int device_number, int channel);
80 void release_stream(int device_number, lms_stream_t* stream);
81
82 double set_center_freq(double freq, size_t chan = 0);
83
84 void set_antenna(int antenna, int channel = 0);
85 void toggle_pa_path(int device_number, bool enable);
86
87 void set_nco(float nco_freq, int channel = 0);
88
89 double set_bandwidth(double analog_bandw, int channel = 0);
90
91 void set_digital_filter(double digital_bandw, int channel = 0);
92
93 unsigned set_gain(unsigned gain_dB, int channel = 0);
94
95 double set_sample_rate(double rate);
96
97 void set_oversampling(int oversample);
98
99 void set_buffer_size(uint32_t size);
100
101 void calibrate(double bandw, int channel = 0);
102
103 void set_tcxo_dac(uint16_t dacVal = 125);
104};
105} // namespace limesdr
106} // namespace gr
107
108#endif
gr::limesdr::sink_impl
Definition: sink_impl.h:33
gr::limesdr::sink_impl::set_antenna
void set_antenna(int antenna, int channel=0)
gr::limesdr::sink_impl::init_stream
void init_stream(int device_number, int channel)
gr::limesdr::sink_impl::stop
bool stop(void)
gr::limesdr::sink_impl::set_gain
unsigned set_gain(unsigned gain_dB, int channel=0)
gr::limesdr::sink_impl::set_digital_filter
void set_digital_filter(double digital_bandw, int channel=0)
gr::limesdr::sink_impl::start
bool start(void)
gr::limesdr::sink_impl::~sink_impl
~sink_impl()
gr::limesdr::sink_impl::calibrate
void calibrate(double bandw, int channel=0)
gr::limesdr::sink_impl::set_sample_rate
double set_sample_rate(double rate)
gr::limesdr::sink_impl::set_oversampling
void set_oversampling(int oversample)
gr::limesdr::sink_impl::toggle_pa_path
void toggle_pa_path(int device_number, bool enable)
gr::limesdr::sink_impl::args_to_io_signature
gr::io_signature::sptr args_to_io_signature(int channel_number)
gr::limesdr::sink_impl::set_bandwidth
double set_bandwidth(double analog_bandw, int channel=0)
gr::limesdr::sink_impl::set_center_freq
double set_center_freq(double freq, size_t chan=0)
gr::limesdr::sink_impl::set_tcxo_dac
void set_tcxo_dac(uint16_t dacVal=125)
gr::limesdr::sink_impl::sink_impl
sink_impl(std::string serial, int channel_mode, const std::string &filename, const std::string &length_tag_name)
gr::limesdr::sink_impl::work
int work(int noutput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items)
gr::limesdr::sink_impl::set_buffer_size
void set_buffer_size(uint32_t size)
gr::limesdr::sink_impl::release_stream
void release_stream(int device_number, lms_stream_t *stream)
gr::limesdr::sink_impl::set_nco
void set_nco(float nco_freq, int channel=0)
gr::limesdr::sink
Definition: sink.h:30
device_handler.h
gr
Definition: sink.h:27
sink.h
TIME_TAG
static const pmt::pmt_t TIME_TAG
Definition: sink_impl.h:28