GNU Radio's LIMESDR Package
source_impl.h
Go to the documentation of this file.
1/* -*- c++ -*- */
2/*
3 * Copyright 2019 Lime Microsystems <info@limemicro.com>
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_SOURCE_IMPL_H
22#define INCLUDED_LIMESDR_SOURCE_IMPL_H
23
24#include <limesdr/source.h>
25
26#include "device_handler.h"
27
28static const pmt::pmt_t TIME_TAG = pmt::string_to_symbol("rx_time");
29
30namespace gr {
31namespace limesdr {
32
33class source_impl : public source
34{
35private:
36 lms_stream_t streamId[2];
37
38 bool stream_analyzer = false;
39
40 int source_block = 1;
41
42 bool add_tag = false;
43 uint32_t pktLoss = 0;
44
45 struct constant_data {
46 std::string serial;
47 int device_number;
48 int channel_mode;
49 double samp_rate = 10e6;
50 uint32_t FIFO_size = 0;
51 int align;
52 } stored;
53
54 std::chrono::high_resolution_clock::time_point t1, t2;
55
56 void print_stream_stats(lms_stream_status_t status);
57
58 void add_time_tag(int channel, lms_stream_meta_t meta);
59
60public:
61 source_impl(std::string serial,
62 int channel_mode,
63 const std::string& filename,
64 bool align_ch_phase);
66
67 bool start(void);
68
69 bool stop(void);
70
71 // Where all the action really happens
72 int work(int noutput_items,
73 gr_vector_const_void_star& input_items,
74 gr_vector_void_star& output_items);
75
76 inline gr::io_signature::sptr args_to_io_signature(int channel_mode);
77
78 void init_stream(int device_number, int channel);
79 void release_stream(int device_number, lms_stream_t* stream);
80
81 double set_center_freq(double freq, size_t chan = 0);
82
83 void set_antenna(int antenna, int channel = 0);
84
85 void set_nco(float nco_freq, int channel = 0);
86
87 double set_bandwidth(double analog_bandw, int channel = 0);
88
89 void set_digital_filter(double digital_bandw, int channel = 0);
90
91 unsigned set_gain(unsigned gain_dB, int channel = 0);
92
93 double set_sample_rate(double rate);
94
95 void set_oversampling(int oversample);
96
97 void set_buffer_size(uint32_t size);
98
99 void calibrate(double bandw, int channel = 0);
100
101 void set_tcxo_dac(uint16_t dacVal = 125);
102
103 void write_lms_reg(uint32_t address, uint16_t val);
104
105 // Set GPIO pin directions, one bit per pin
106 void set_gpio_dir(uint8_t dir);
107
108 // Write GPIO outputs, one bit per pin
109 void write_gpio(uint8_t out);
110
111 // Read GPIO inputs, one bit per pin
112 uint8_t read_gpio();
113};
114
115} // namespace limesdr
116} // namespace gr
117
118#endif /* INCLUDED_LIMESDR_SOURCE_IMPL_H */
Definition source_impl.h:34
void release_stream(int device_number, lms_stream_t *stream)
gr::io_signature::sptr args_to_io_signature(int channel_mode)
double set_sample_rate(double rate)
double set_center_freq(double freq, size_t chan=0)
void write_lms_reg(uint32_t address, uint16_t val)
void set_nco(float nco_freq, int channel=0)
void set_digital_filter(double digital_bandw, int channel=0)
void set_antenna(int antenna, int channel=0)
double set_bandwidth(double analog_bandw, int channel=0)
void calibrate(double bandw, int channel=0)
source_impl(std::string serial, int channel_mode, const std::string &filename, bool align_ch_phase)
void init_stream(int device_number, int channel)
void set_oversampling(int oversample)
void set_buffer_size(uint32_t size)
unsigned set_gain(unsigned gain_dB, int channel=0)
void set_tcxo_dac(uint16_t dacVal=125)
void write_gpio(uint8_t out)
void set_gpio_dir(uint8_t dir)
int work(int noutput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items)
<+description of block+>
Definition source.h:36
Definition rfe.h:29
static const pmt::pmt_t TIME_TAG
Definition source_impl.h:28